romaboula20 Posted March 26, 2021 Share Posted March 26, 2021 Bonjour le Forum, J'ai besoin d'un petit coup de main pour terminer une requête qui permet d'afficher la quantité de produits contenus dans une commande sans oublier compter le nombre de produits contenus dans les packs. Cette quantité s'affiche dans une colonne dans le listing des commandes AdminOrdersController. Jusque là j'ai avancé correctement et mon code permet déjà d'afficher la bonne quantité de produits. En revanche, je n'arrive pas à mettre en place le tri (croissant/décroissant) des commandes par ordre de quantité de produits... Dans le fichier AdminOrdersController : La requête SQL : $this->_select = ' a.id_currency, a.id_order AS id_pdf, a.id_order AS nbre_pot, a.reference AS reference, CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) AS `customer`, osl.`name` AS `osname`, os.`color`, IF((SELECT so.id_order FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer AND so.id_order < a.id_order LIMIT 1) > 0, 0, 1) as new, country_lang.name as cname, IF(a.valid, 1, 0) badge_success'; $this->_join = ' LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`) LEFT JOIN `'._DB_PREFIX_.'address` address ON address.id_address = a.id_address_delivery LEFT JOIN `'._DB_PREFIX_.'country` country ON address.id_country = country.id_country LEFT JOIN `'._DB_PREFIX_.'country_lang` country_lang ON (country.`id_country` = country_lang.`id_country` AND country_lang.`id_lang` = '.(int)$this->context->language->id.') LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = a.`current_state`) LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$this->context->language->id.')'; $this->_orderBy = 'id_order'; $this->_orderWay = 'DESC'; $this->_use_found_rows = true; Pour afficher la colonne : $this->fields_list = array_merge($this->fields_list, array( 'total_paid_tax_incl' => array( 'title' => $this->l('Total'), 'align' => 'text-left', 'type' => 'price', 'currency' => true, 'callback' => 'setOrderCurrency', 'badge_success' => true ),// Ajout de la colonne 'nbre_pot' => array( 'title' => $this->l('Nbre pots'), 'align' => 'text-center', 'callback' => 'calculnombrepot', 'orderby' => false ) )); La fonction calculnombrepot : public function calculnombrepot($id_order, $tr){ // Requete pour compter le nombre de pots sans distinction du nombre de pots contenu dans un pack $nombre_pot = Db::getInstance()->executeS(' SELECT SUM(product_quantity) AS qt FROM `'._DB_PREFIX_.'order_detail` od WHERE od.`id_order` = '.(int)$id_order); // Si une commande ne comptabilise pas de pack, on obtient le nombre de pots simplement $quantite = $nombre_pot[0]['qt']; // On recommence sans SUM pour analyser les produits de la commande $nombre_pots = Db::getInstance()->executeS(' SELECT product_id, id_order, product_quantity FROM '._DB_PREFIX_.'order_detail WHERE id_order = '.(int)$id_order); foreach($nombre_pots as $nbp){ $is_pack = Db::getInstance()->getRow(' SELECT cache_is_pack, id_product FROM '._DB_PREFIX_.'product WHERE id_product = '.$nbp['product_id']); //Si le produit est un pack if($is_pack['cache_is_pack'] == 1){ // On compte le nombre de produit dans le pack $pdt_in_pack = Db::getInstance()->executeS(' SELECT SUM(quantity) AS qtp FROM `'._DB_PREFIX_.'pack` as pck WHERE pck.`id_product_pack` = '.(int)$is_pack['id_product']); // On ajoute à $quantite le nombre de produit dans le pack // multiplié par la quantité de pack // on soustrait du final la quantité de pack $quantite += (($pdt_in_pack[0]['qtp']*$nbp['product_quantity'])-$nbp['product_quantity']); } } return $quantite; } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now