Mag Posted August 8, 2018 Share Posted August 8, 2018 (edited) Bonjour à tous, je souhaite faire un tri par ordre croissant des champs emplacements dans le pdf de bon de livraison. J'ai donc créer une customisation du fichier pdf Bon de Livraison (=DeliverySlip), ajouter le champ emplacement et afficher le résultat dans la génération du pdf, seul hic je souhaite trier les lignes des emplacements par ordre croissant mais je m'embrouille un peu. J'ai tenté un override du fichier override/classes/order/OrderSlip.php comme ceci : class OrderSlip extends OrderSlipCore { public function getOrdersSlipDetail() { return Db::getInstance()->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'order_details` od WHERE od.`product` ORDER BY od.`warehouse_location` DESC'); } } J'ai tenté plusieurs combinaisons sur les textes en gras ci-dessus, en tentant d'atteindre cette fameuse table warehouse_location et d'y ajouter l'ORDER BY... Je pense me tromper sur le pointage des tables, ou mal faire l'override, je tourne en rond depuis un ptit moment maintenant, je m'en remet à ce forum pour peut-être m'éclairer. Merci par avance pour votre aide et tuyaux Si besoin d'infos complémentaires, n'hésitez pas à demander. Edited August 10, 2018 by Mag (see edit history) Link to comment Share on other sites More sharing options...
Knowband Plugins Posted August 10, 2018 Share Posted August 10, 2018 (edited) Salut, Votre méthode de substitution est fausse. Par défaut, la fonction getOrdersSlipDetail () de OrderSlipCore possède deux paramètres. Par conséquent, pour remplacer la méthode getOrdersSlipDetail (), vous devez passer deux paramètres. Le nom de la classe dans le fichier de substitution doit être identique au nom de la classe par défaut pour remplacer la classe. Fonction par défaut public static function getOrdersSlipDetail($id_order_slip = false, $id_order_detail = false) { } Votre fonction public function getOrdersSlipDetail () { return Db :: getInstance () -> ExecuteS (' SELECT * FROM `' ._DB_PREFIX_. ' order_details` od WHERE od.` product ` ORDER BY od.` warehouse_location` DESC' ); } Vous avez également utilisé le mauvais nom de table. Il devrait être order_detail au lieu de order_details. Pour obtenir la valeur de l'emplacement de l'entrepôt, vous pouvez utiliser la table "warehouse_product_location" et utiliser la valeur de l'emplacement trouvée dans cette table dans votre PDF de bordereau de commande. Edited August 10, 2018 by Knowband Plugins (see edit history) Link to comment Share on other sites More sharing options...
Mag Posted August 10, 2018 Author Share Posted August 10, 2018 (edited) Salut, merci pour ces explications. J'ai donc changé l'override de la classe, passer les deux paramètres à la fonction "getOrdersSlipDetail" et changer les appels de table comme ceci : class OrderSlipCore extends OrderSlip { public static function getOrdersSlipDetail($id_order_slip = false, $id_order_detail = false) { return Db::getInstance()->ExecuteS(' SELECT * FROM `' ._DB_PREFIX_. 'order_detail` WHERE `warehouse_product_location` ORDER BY `location` DESC' ); } } Cela ne fonctionne toujours pas. Soit j'ai encore fait une erreur sur la façon d'appeler ma table ou mon override, soit je me trompe de "fonction". Dans mon fichier pdf/delivery-slip.tpl customisé, pour appeler le champ "emplacement" je déclare de cette façon : {if empty($product.warehouse_location)} --- {else} {$product.warehouse_location} {/if} Peut-être que l'appel de table dans mon override ne correspond pas et donc n'ordonne pas les lignes dans le pdf. J'ai tentée aussi ceci qui ne fonctionne pas : public static function getOrdersSlipDetail($id_order_slip = false, $id_order_detail = false) { return Db::getInstance()->ExecuteS(' SELECT * FROM `' ._DB_PREFIX_. 'product` WHERE `warehouse_location` ORDER BY `location` DESC' ); } Je continue mes recherches.. si une idée vous viens je suis preneuse ! Merci ! Edited August 10, 2018 by Mag (see edit history) Link to comment Share on other sites More sharing options...
Mag Posted August 10, 2018 Author Share Posted August 10, 2018 Re, voilà je viens de comprendre mon erreur. En effet l'override de base n'est pas bon, comme expliqué dans mon commentaire précédent j'utilise une fonction customisée pour afficher ce fameux "$product.wharehouse_location" (= champ emplacement dans le bon de livraison) Comme vous n'aviez pas visibilité sur mon code et mes customisations, du coup je vous ai induit en erreur ! My bad ! Voici l'astuce que j'avais suivi pour customiser le bon de livraison et ajouter le champ des emplacements :https://www.prestashop.com/forums/topic/203840-warehouse-location-into-delivery-slip/=> voir la solution proposée par PhpMadman Mon override du fichier override/classes/order/OrderSlip.php était inutile car la variable $product.wharehouse_location est créer dans le fichier HTMLTemplateDeliverySlip.php, j'aurai pu tourner encore et encore... Ce qu'il fallait faire était un simple "asort()" en php dans le fichier classes/pdf/HTMLTemplateDeliverySlip.php dans la fonction $order_details // on instancie $order_details $order_details = $this->order_invoice->getProducts(); foreach ($order_details as $key => $order_detail) { $order_details[$key]['warehouse_name'] = "--"; $order_details[$key]['warehouse_location'] = "--"; asort($order_details); if ($order_detail['id_warehouse'] != 0) { $warehouse = new Warehouse((int)$order_detail['id_warehouse']); $warehouse_location = $warehouse->getProductLocation($order_detail["product_id"],$order_detail["product_attribute_id"],$warehouse->id); $order_details[$key]['warehouse_name'] = $warehouse->name; $order_details[$key]['warehouse_location'] = $warehouse_location; } } Voilà ! Merci encore pour votre aide Link to comment Share on other sites More sharing options...
Knowband Plugins Posted August 11, 2018 Share Posted August 11, 2018 Great Link to comment Share on other sites More sharing options...
petitbruno Posted December 12, 2019 Share Posted December 12, 2019 Bonjour, Je cherche à faire apparaitre dans un Bon de livraison l'emplacement stock d'un produit. En modifiant le fichier pdf/delivery-slip.product-tab.tpl j'ai réussi à afficher cette info pour un produit simple, mais cela ne fonctionne pas pour un produit ayant des déclinaisons (bien que l'emplacement stock ai bien été renseigné pour chaque déclinaison du produit concerné). Auriez-vous une piste ? J'ai essayé le code proposé dans le fichier classes/pdf/HTMLTemplateDeliverySlip.php dans la fonction $order_details , mais j'obtiens comme résultat l'affichage suivant "--" et non la valeur de l'emplacement stock de la déclinaison. Je suis sur PS 1.7.6.1 Merci par avance pour votre aide ! Link to comment Share on other sites More sharing options...
lemoyne Posted April 15, 2020 Share Posted April 15, 2020 On 12/12/2019 at 1:30 PM, petitbruno said: Bonjour, Je cherche à faire apparaitre dans un Bon de livraison l'emplacement stock d'un produit. En modifiant le fichier pdf/delivery-slip.product-tab.tpl j'ai réussi à afficher cette info pour un produit simple, mais cela ne fonctionne pas pour un produit ayant des déclinaisons (bien que l'emplacement stock ai bien été renseigné pour chaque déclinaison du produit concerné). Auriez-vous une piste ? J'ai essayé le code proposé dans le fichier classes/pdf/HTMLTemplateDeliverySlip.php dans la fonction $order_details , mais j'obtiens comme résultat l'affichage suivant "--" et non la valeur de l'emplacement stock de la déclinaison. Je suis sur PS 1.7.6.1 Merci par avance pour votre aide ! Bonjour, j'ai exactement le même souci aujourd'hui. Auriez-vous trouvé une solution? Merci de votre retour. Link to comment Share on other sites More sharing options...
petitbruno Posted April 16, 2020 Share Posted April 16, 2020 Bonjour. Je n'ai au final pas trouvé la solution pour un produit avec déclinaisons ! Désolé ! Link to comment Share on other sites More sharing options...
lemoyne Posted April 16, 2020 Share Posted April 16, 2020 23 minutes ago, petitbruno said: Bonjour. Je n'ai au final pas trouvé la solution pour un produit avec déclinaisons ! Désolé ! Bonjour, C'est bon j'ai réussi, merci quand même. Bonne journée Link to comment Share on other sites More sharing options...
petitbruno Posted April 16, 2020 Share Posted April 16, 2020 4 hours ago, lemoyne said: Bonjour, C'est bon j'ai réussi, merci quand même. Bonne journée Je suis preneur de votre solution ! Merci par avance. Link to comment Share on other sites More sharing options...
lemoyne Posted April 16, 2020 Share Posted April 16, 2020 9 minutes ago, petitbruno said: Je suis preneur de votre solution ! Merci par avance. Re, 1 - Alors j'ai téléchargé un module gratuit (amproductfields). Je l'ai modifié à ma sauce (gardé qu'un seul champ, et renommé dans le code en "emplacement"). => Ca créé un champs "emplacement" à la fin de la table "ps_product". Après modification du fichier "product.phpé, je l'ai rajouté dans "www/override/classes/" (comme indiqué dans les explications du module) ----------------------------------- 2 - Dupliqué, pui modifié le fichier : www/override/classes/order/orderInvoice.php Modifié : la fonction "getProductsDetail", pour prendre en compte la table "stock_available". La requête en commentaire est l'originale. public function getProductsDetail() { /* SELECT * FROM `' . _DB_PREFIX_ . 'order_detail` od LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.id_product = od.product_id LEFT JOIN `' . _DB_PREFIX_ . 'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop) WHERE od.`id_order` = ' . (int) $this->id_order . ' ' . ($this->id && $this->number ? ' AND od.`id_order_invoice` = ' . (int) $this->id : '') . ' ORDER BY od.`product_name`'); */ return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT *,psa.location as stock_location FROM `' . _DB_PREFIX_ . 'order_detail` od LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON p.id_product = od.product_id LEFT JOIN `' . _DB_PREFIX_ . 'product_shop` ps ON (ps.id_product = p.id_product AND ps.id_shop = od.id_shop) LEFT JOIN `' . _DB_PREFIX_ . 'stock_available` psa ON (psa.id_product_attribute = od.product_attribute_id AND psa.id_shop = od.id_shop) WHERE od.`id_order` = ' . (int) $this->id_order . ' ' . ($this->id && $this->number ? ' AND od.`id_order_invoice` = ' . (int) $this->id : '') . ' ORDER BY od.`product_name`'); } ------- Après j'ai rajouté cette ligne dans la fonction "getProducts": $row['champ_stock_location'] = $row['stock_location']; ----------------------------------- 3 - J'ai dupliqué "delivery-slip.product-tab.tpl" dans www/themes/xxxx/pdf/delivery-slip.product-tab.tpl Rajouté une colonne en entête : <th class="product header small" width="10%">{l s='Emplacement.' d='Shop.Pdf' pdf='true'}</th> Puis rajouté : <td> {if $order_detail.champ_stock_location!=""} {$order_detail.champ_stock_location} {else} {$order_detail.emplacement} {/if} </td> Voilà .... Bonne continuation à tous ! Et restez chez vous ! COURAGE ! Link to comment Share on other sites More sharing options...
petitbruno Posted April 17, 2020 Share Posted April 17, 2020 Un grand grand merci pour cette solution détaillée, qui j'espère servira au plus grand nombre !!! Je vais donc reprendre étape par étape. Bonne continuation à vous ! 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