Jump to content

Une idée simple pour les fiches "Commandes" du back office : reprendre le poids total des articles commandés.


Snowball

Recommended Posts

Salut à tous,

Je viens d'avoir une idée qui me semble assez simple et efficace pour compléter les pages "Commandes" de clients dans le back office.

Je pense qu'il serait bien d'y reprendre le poids total de la commande pour pouvoir directement le saisir dans un logiciel d'envoi/affranchissement (en l'ocurence "Expinet" de Colissimo). Ou tout simplement pour simplifier, en "rappelant le poids" l'étape de préparation/affranchissement.

En effet, ces fiches permettent d'imprimer rapidement la facture, de contacter simplement le client, de renseigner l'avancer de sa commande, de spécifier un n° de colis ... cool !!!

Mais je trouve que le poids est quand même un élément "capital" du traitement global d'une commande ! Pourquoi ne pas l'indiquer à cette endroit ?

Jusqu'à présent, je reprends 1 à 1 les articles et fait le total à la calculette. Une perte de temps qui pourrait peut-être être évitée je trouve :)


J'essaie d'imaginer quelles seraient les limites de ce complément d'info, mais j'ai du mal, j'aurais pas dû sortir hier soir :/

Qu'en pensez-vous ?

Link to comment
Share on other sites

  • 3 months later...

Je suis désolé de soulever à nouveau le problème (l'idée), mais je constate que le poids total n'apparait pas sur les facture PDF générées (ni en haut à droite, ni nul part).

je cherche depuis quelques temps à faire apparaitre cette information, mais je n'y arrive pas (d'ailleurs je ne trouve pas dans le forum comment récupérer les variables de poids ou autre, et ce n'est pas faute de demander).

BREF, cette information est TRES IMPORTANTE pour la préparation des commandes.
Etant donné que tous les poids sont déjà saisis pour tous les produits, il est vraiment dommage de ne pouvoir afficher le poids total sur la facture (qui nous sert, en l'occurence, pour la préparation des commandes).

Si vous avez une idée, ou une indication...

(Version 1.1.0.5 )

Link to comment
Share on other sites

j'apporte des précisions :

le problème vient de la classe Order.php dans laquelle on trouve cette fonction getTotalWeight() :

   public function getTotalWeight()
   {
       $result = Db::getInstance()->getRow('
       SELECT SUM(product_weight*product_quantity) as weight
       FROM '._DB_PREFIX_.'order_detail
       WHERE id_order = '.intval($this->id));
       return $result['weight'];
   }



On voit ici que c'est le poids des PRODUITS qui est utilisé et non celui des déclinaisons (attributs/groupes...). Donc, le résultat calculé est toujours faux (pour nous en tout cas), d'autant plus que nous avons mis 0Kg comme poids à tous nos produits et que le poids n'est indiqué, finalement, que par les déclinaisons.

J'ai trouvé comment afficher le poids dans la facture (voir ci-dessous), mais j'aimerais savoir comment modifier la fonction pour que getTotalWeight() nous donne le bon poids.

dans classes/PDF.php j'ai ajouté le poids après le nom du transporteur :
ligne 373

        $pdf->Cell(50, 6, Tools::iconv('utf-8', self::encoding(), $carrier->name).' ('.self::$order->getTotalWeight().' Kg)', 'LRB');

Link to comment
Share on other sites

ceci explique cela :)
j'avais parcouru tous les fichiers de la 1.1 en vain... par contre cela m'inquiète fortement pour la future MAJ 1.2 si l'on doit voir apparaitre des changements aussi importants (comme l'affichage/calcul des caractéristiques des produits via de nouvelles fonctions...)

Link to comment
Share on other sites

Bon ok..
Avec un peu de persévérance, j'ai finalement trouvé la solution (sans regarder dans le SVN).

------ Peut-être serait-il utile pour d'autres que cette solution soit postée de manière + visible ? (à vous de voir) ------

DONC, pour afficher le poids total d'une commande dans la facture (pdf) à côté du transporteur, en se basant sur le poids des attributs/déclinaisons des produits, faites comme ceci :

1) Modifier le fichier classes/PDF.php à la ligne 373 (à côté de carrier->name)

        $pdf->Cell(50, 6, Tools::iconv('utf-8', self::encoding(), $carrier->name).' ('.number_format(self::$order->getTotalWeight(), 2, ',', ' ').' Kg)', 'LRB');



2) Ensuite, modifier le fichier classes/PaymentModule.php à la ligne 200 :
Remplacer

                        '.floatval($product['weight']).',


par

                        '.floatval($product['weight_attribute']).',



Ceci aura pour effet, lors de la validation d'une commande, de mettre le poids d'un attribut dans la table order_detail pour le champs product_weight, qui est ensuite utilisé dans la fonction getTotalWeight() pour afficher sur la facture. Au final, c'est une grosse bidouille, mais qui m'est très utile :)

Link to comment
Share on other sites

  • 2 weeks later...

merci EnveloppeBulle pour le partage !

tu saurais comment on peux mentionner le poids total à côté de chaque article dans le récap du panier ?
l'idée est de mentionner le poids dans le panier, de façon à avoir également cette information et dans le panier, et sur le détail de chaque produit listés dans la facture. merci !

Link to comment
Share on other sites

J'ai essayé lontemps d'afficher le poids de l'article dans sa fiche produit, mais sans succès. Je n'ai même aps cherché à l'afficher dans le Block panier en haut à droite (tellement c'est déjà instable), mais par contre, je pense avoir réussi à l'afficher dans le Panier (normal).
Dans ton theme, dans shopping-cart.tpl, ligne 82, entre la ligne "total price" et la ligne "free shipping" j'ai ajouté la ligne :

            
{l s='Total Weight :'}
{$total_weight} Kg



Je réutilise la classe "cart_total_delivery", donc ne pas faire attention à cette dénomination. Pour la variable $total_weight, je ne me rappelle pas si elle est déjà dispo, ou si je l'avais réglée pour qu'elle soit donnée.

Peux-tu faire l'essai ?

Link to comment
Share on other sites

Non, comme indiqué dans le post précédent, je ne me rappelle pas si (et où) j'ai fait d'autres modifs.

A noter, que dans mon cas, cela ne fonctionne QUE parceque tous les poids des produits sont en fait définis dans les déclinaisons, et par contre, tous les "produits" ont un poids de 0.

Je vais essayer de voir où j'ai pu faire des modifs mais 1) je n'ai malheureusement pas trop commenté mon code 2) je n'ai pas trop le temps en ce moment

Link to comment
Share on other sites

Bon alors c'est simple, il suffisait de regarder le moteur (la classe) qui alimentait (balançait les données) le template :)

ça se passe dans classes/Cart.php

ligne 834 (par là) tu as la fonction getSummaryDetails suivante :

   function getSummaryDetails()
   {
       global $cookie;
       return array(
           'delivery' => new Address(intval($this->id_address_delivery)),
           'invoice' => new Address(intval($this->id_address_invoice)),
           'carrier' => new Carrier(intval($this->id_carrier), $cookie->id_lang),
           'products' => $this->getProducts(false),
           'discounts' => $this->getDiscounts(),
           'total_discounts' => number_format($this->getOrderTotal(true, 2), 2, '.', ''),
           'total_wrapping' => number_format($this->getOrderTotal(true, 6), 2, '.', ''),
           'total_shipping' => number_format($this->getOrderShippingCost(), 2, '.', ''),
           'total_products_wt' => number_format($this->getOrderTotal(true, 1), 2, '.', ''),
           'total_price' => number_format($this->getOrderTotal(), 2, '.', ''));
   }



dans cette fonction il faut ajouter la variable de poids

'total_weight' => number_format($this->_totalWeight,2,'.',''),



ce qui va nous donner :

    function getSummaryDetails()
   {
       global $cookie;
       return array(
           'delivery' => new Address(intval($this->id_address_delivery)),
           'invoice' => new Address(intval($this->id_address_invoice)),
           'carrier' => new Carrier(intval($this->id_carrier), $cookie->id_lang),
           'products' => $this->getProducts(false),
           'discounts' => $this->getDiscounts(),
           'total_discounts' => number_format($this->getOrderTotal(true, 2), 2, '.', ''),
           'total_wrapping' => number_format($this->getOrderTotal(true, 6), 2, '.', ''),
           'total_shipping' => number_format($this->getOrderShippingCost(), 2, '.', ''),
           'total_products_wt' => number_format($this->getOrderTotal(true, 1), 2, '.', ''),
           'total_weight' => number_format($this->_totalWeight,2,'.',''),
           'total_price' => number_format($this->getOrderTotal(), 2, '.', ''));
   }




Peux-tu me dire si c'est ok avec ça ?

Link to comment
Share on other sites

  • 3 weeks later...
J'ai essayé lontemps d'afficher le poids de l'article dans sa fiche produit, mais sans succès. Je n'ai même aps cherché à l'afficher dans le Block panier en haut à droite (tellement c'est déjà instable), mais par contre, je pense avoir réussi à l'afficher dans le Panier (normal).
Dans ton theme, dans shopping-cart.tpl, ligne 82, entre la ligne "total price" et la ligne "free shipping" j'ai ajouté la ligne :
            
{l s='Total Weight :'}
{$total_weight} Kg



Je réutilise la classe "cart_total_delivery", donc ne pas faire attention à cette dénomination. Pour la variable $total_weight, je ne me rappelle pas si elle est déjà dispo, ou si je l'avais réglée pour qu'elle soit donnée.

Peux-tu faire l'essai ?



hello !
je tente en vain de faire fonctionner le bazar : voici le problème.
Tout fonctionne normallement SAUF lorsque l'un des produits mis dans le panier comporte une déclinaison dont le dont est différent.
Donc, pour résumer :
le poids est renseigné dans la fiche - pas de déclinaison : OK - l'ajout de l'article dans le panier + calcul du poids total
le poids est renseigné dans la fiche - + déclinaison avec un surpoids : MARCHE PAS - l'ajout de l'article dans le panier + calcul du poids total = 0.00

Quelqu'un saurait pourquoi le calcul merdouille sous cette condition ?

merci !
Link to comment
Share on other sites

  • 2 months later...

pour finir et compléter la chose (on affiche le poids dans le panier et dans la facture pdf), dans le cas de poids de produits avec ou sans déclinaisons, avec influences ou non sur le poids, voici ce qu'il faut finalement modifier :

dans classes/PaymentModules.php à la ligne 200 :
Remplacer:

'.floatval($product['weight']).',

ou

                        '.floatval($product['weight_attribute']).',


par :

'.floatval($product['weight_attribute']+$product['weight']).',



puis dans classes/Cart.php à la ligne 207 :
Remplacer :

IF (IFNULL(pa.`weight`, \'\') = \'\', p.`weight`, pa.`weight`) AS weight_attribute,


par :

IF (IFNULL(pa.`weight`, \'\') = \'\', 0, pa.`weight`) AS weight_attribute,



Ca veut dire que s'il n'y a pas d'attribut pour un produit, au lieu d'utiliser le poids du produit pour la variable weight_attribute, on lui met 0. Et donc, pour les calculs de poids, on ajoute le poids du produit au poids de l'attribut, ce qui donne un résultat juste !

Link to comment
Share on other sites

  • 1 year later...

Pour les version 1.3.5, pour afficher le poids sur la facture, celà se situe vers la ligne 444: après $pdf->Cell(40, 6, self::l('Payment method:'), 'LR'); ajouter -->

/* Poids */
$pdf->Cell(0, 6, self::l('Weight:'), 'LR');



Après $pdf->Cell(40, 6, Tools::iconv('utf-8', self::encoding(), $order->payment), 'LRB'); ligne 450 : ajouter -->

/* Poids */
$pdf->Cell(0, 6, number_format(self::$order->getTotalWeight(),3).' Kg', 'LRB');

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...