nanou07 Posted September 29, 2014 Share Posted September 29, 2014 Bonjour, Quelqu'un peut-il me préciser comment intégrer le poids du carton dans le poids total de la commande? Link to comment Share on other sites More sharing options...
Doline Posted October 3, 2014 Share Posted October 3, 2014 Bonjour, As-tu trouvé une solution? je me pose la même question... Bonne journée. Link to comment Share on other sites More sharing options...
moilamain Posted December 29, 2014 Share Posted December 29, 2014 (edited) même question, comment ajouter le poids de l'emballage final des produits pour le calcul des frais de port ? quelqu'un a-t-il une idée de l'endroit où se trouve le code-source qui régit ce truc ? Edited December 29, 2014 by moilamain (see edit history) Link to comment Share on other sites More sharing options...
samyha Posted December 29, 2014 Share Posted December 29, 2014 Bonjour L'emballage est une propriété prise en compte lors du calcul des frais de port dans la section "transporteurs > destinations d’expédition et coûts". Vous pourrez alors configurer le prix total proposé en fonction des plages de poids des différents colis. Bonne soirée ! Link to comment Share on other sites More sharing options...
Eolia Posted December 29, 2014 Share Posted December 29, 2014 même question, comment ajouter le poids de l'emballage final des produits pour le calcul des frais de port ? quelqu'un a-t-il une idée de l'endroit où se trouve le code-source qui régit ce truc ? Dans la classe cart.php, recherchez la fonction public function getTotalWeight($products = null) { if (!is_null($products)) { $total_weight = 0; ... Et remplacez le 0 de $total_weight (poids de départ avant d'ajouter celui de chaque produit du panier) par le poids de votre emballage (en kilos). Mais tout ceci est relatif, car suivant le nombre de produits ou leurs dimensions, l'emballage ne sera pas forcément le même. 2 Link to comment Share on other sites More sharing options...
moilamain Posted December 29, 2014 Share Posted December 29, 2014 excellent, merci ! Link to comment Share on other sites More sharing options...
clement242 Posted December 9, 2019 Share Posted December 9, 2019 On 12/29/2014 at 7:36 PM, Eolia said: Dans la classe cart.php, recherchez la fonction public function getTotalWeight($products = null) { if (!is_null($products)) { $total_weight = 0; ... Et remplacez le 0 de $total_weight (poids de départ avant d'ajouter celui de chaque produit du panier) par le poids de votre emballage (en kilos). Mais tout ceci est relatif, car suivant le nombre de produits ou leurs dimensions, l'emballage ne sera pas forcément le même. Merci Eolia pour cette solution est elle valable pour 1.6.1.24 ? Juste une question pour 270 gr, je dois remplacer par $total_weight = 0,270; ou alors $total_weight = 0.270; Link to comment Share on other sites More sharing options...
Eolia Posted December 9, 2019 Share Posted December 9, 2019 jamais de virgule en code Link to comment Share on other sites More sharing options...
clement242 Posted December 9, 2019 Share Posted December 9, 2019 Merci, t'assures ! Link to comment Share on other sites More sharing options...
Empreinte Posted January 3, 2022 Share Posted January 3, 2022 Bonjour à tous, merci pour le partage, pour moi en 1.6.1.24 cette modif ne fonctionne pas, ni en "override" ni directement dans le fichier "cart.php" dossier "classes" ? 🤔 Link to comment Share on other sites More sharing options...
passicool Posted January 3, 2022 Share Posted January 3, 2022 Pas de raison que ça ne marche pas, en override bien activer la fonction dans le back office. Dans les 2 cas effacer le cache et recharger la page pour tester. Link to comment Share on other sites More sharing options...
Eolia Posted January 3, 2022 Share Posted January 3, 2022 En prenant le temps de créer une table pour les dimensions de cartons et leur poids associés on peut arriver à quelque chose de plus précis^^ public function getTotalWeight($products = null) { $cache = is_null($products) ? 1 : 0; if(!isset(self::$_totalWeight[$this->id])) { if ($cache) $products = $this->getProducts(); $total_weight = $volume = 0; $data = array(); foreach ($products as $product) { if (!isset($product['weight_attribute']) || is_null($product['weight_attribute'])) $total_weight += $product['weight'] * $product['cart_quantity']; else $total_weight += $product['weight_attribute'] * $product['cart_quantity']; $volume += $product['height'] * $product['width'] * $product['depth'] * $product['cart_quantity']; } if(!$volume) return $total_weight; $data['Volume'] = $volume; $data['Initial weight'] = $total_weight; $packages = Db::getInstance()->executeS(' SELECT * FROM `'._DB_PREFIX_.'package` ORDER BY volume ASC'); // First step, one package matches totally foreach($packages as $package) { if($volume <= $package['volume']) { $total_weight += $package['weight']; $data['Packages'][] = array( 'Name' => $package['name'], 'Weight' => round((float)$total_weight, 3), 'Volume' => $package['volume'], 'Quantity' => 1 ); break; } } // Second step, find bigger package if first step fails if(!isset($data['Packages'])) { $new_packages = array_reverse($packages); foreach($new_packages as $new_package) { if($volume) { $nb_of_package = (int)($volume / $new_package['volume']); if($nb_of_package) { $sold = $volume % $new_package['volume']; $weight_ratio = ($volume - $sold) / $volume; $package_weight = $total_weight * $weight_ratio + $new_package['weight'] * $nb_of_package; $data['Packages'][] = array( 'Name' => $new_package['name'], 'Weight' => round((float)$package_weight, 3), 'Volume' => $new_package['volume'] * $nb_of_package, 'Quantity' => $nb_of_package ); $total_weight += $new_package['weight'] * $nb_of_package; // Third step, find smallest package to set sold if($sold) { foreach($packages as $package) { if($sold <= $package['volume']) { $data['Packages'][] = array( 'Name' => $package['name'], 'Weight' => round((float)$total_weight - (float)$package_weight + (float)$package['weight'], 3), 'Volume' => $package['volume'], 'Quantity' => 1 ); $total_weight += $package['weight']; $sold = 0; break 2; } else $volume = $sold; } } else break; } } } } $data['Nb of packages'] = count($data['Packages']); $data['Total weight'] = $total_weight; if(!$cache) return $total_weight; Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'cart` SET `packages` = \''.json_encode($data).'\' WHERE `id_cart` = '.(int)$this->id); self::$_totalWeight[$this->id] = $total_weight; } return self::$_totalWeight[$this->id]; Link to comment Share on other sites More sharing options...
Empreinte Posted January 3, 2022 Share Posted January 3, 2022 1 hour ago, passicool said: Pas de raison que ça ne marche pas, en override bien activer la fonction dans le back office. Dans les 2 cas effacer le cache et recharger la page pour tester et pourtant le cache est vidé (même s'il est désactivé) , j'ai jeté le fichier "class_index.php" du dossier "cache", mais rien n'y fait ; j'ai passé $total_weight à 0.710, avec un produit de 850g -> je devrais donc dépasser ma tranche 0 à 1kg à 4.50€… mais non je reste à 4.50€ dans le panier ? public function getTotalWeight($products = null) { if (!is_null($products)) { $total_weight = 0.710; foreach ($products as $product) { if (!isset($product['weight_attribute']) || is_null($product['weight_attribute'])) { $total_weight += $product['weight'] * $product['cart_quantity']; } else { $total_weight += $product['weight_attribute'] * $product['cart_quantity']; } } return $total_weight; } Link to comment Share on other sites More sharing options...
Eolia Posted January 3, 2022 Share Posted January 3, 2022 Ajoutez {$cart->getTotalWeight()} en haut de votre shopping-cart.tpl (de votre thème) et regardez quel poids est affiché en haut de votre panier. Link to comment Share on other sites More sharing options...
Empreinte Posted January 3, 2022 Share Posted January 3, 2022 Bonsoir Eolia, ça indique "500 gr" alors que le poids du colis dans la page produit est réglé à "kg 0.820000" ? ça ne prend en compte ni le "$total_weight = 0.710;" ni le poids indiqué dans le fiche produit ?? Link to comment Share on other sites More sharing options...
Eolia Posted January 3, 2022 Share Posted January 3, 2022 shopping-cart.tpl c'est la page de résumé du panier, pas le module blockcart. Lui, je ne sais pas où il prend le poids... Link to comment Share on other sites More sharing options...
Empreinte Posted January 3, 2022 Share Posted January 3, 2022 à priori il retourne le poids renseigné dans le tableau "Attributs & Valeurs" Link to comment Share on other sites More sharing options...
Empreinte Posted January 3, 2022 Share Posted January 3, 2022 ok, placé plus bas dans le code (juste au dessus du tableau récap) ça retourne bien la valeur renseignée dans la fiche produit, mais donc sans ""$total_weight = 0.710;" Link to comment Share on other sites More sharing options...
Eolia Posted January 3, 2022 Share Posted January 3, 2022 Ok, parce que vous n'êtes pas dans la première partie de la fonction ($products n'est pas défini) Un peu plus bas, remplacez self::$_totalWeight[$this->id] = round((float)$weight_product_with_attribute + (float)$weight_product_without_attribute, 6); Par self::$_totalWeight[$this->id] = round(0.71 + (float)$weight_product_with_attribute + (float)$weight_product_without_attribute, 6); Et laissez bien $total_weight = 0.710; dans la 1ère partie, comme ça vous ajouterez bien le poids de l'emballage dans les 2 cas Link to comment Share on other sites More sharing options...
Empreinte Posted January 4, 2022 Share Posted January 4, 2022 Bonjour Eolia, effectivement ça fonctionne, les 2 poids s'additionnent bien 👍 un grand merci pour votre aide Link to comment Share on other sites More sharing options...
PriscilleD Posted April 15, 2022 Share Posted April 15, 2022 (edited) On 1/3/2022 at 10:05 PM, Eolia said: Ok, parce que vous n'êtes pas dans la première partie de la fonction ($products n'est pas défini) Un peu plus bas, remplacez self::$_totalWeight[$this->id] = round((float)$weight_product_with_attribute + (float)$weight_product_without_attribute, 6); Par self::$_totalWeight[$this->id] = round(0.71 + (float)$weight_product_with_attribute + (float)$weight_product_without_attribute, 6); Et laissez bien $total_weight = 0.710; dans la 1ère partie, comme ça vous ajouterez bien le poids de l'emballage dans les 2 cas Bonjour, Je me greffe à la discussion car j'ai fais tout ceci, sans le faire afficher dans le panier, et le calcul est bien pris en compte. (chez moi $total_weight = 0.055) J'ai juste un problème : le poids de l'emballage n'est pas inclus dans le poids du colis en back-office qui va servir ensuite à générer les étiquettes du transporteur. Exemple : Pour une commande de 5 produits de 0.045 kg => 0.225 kg + 0.055 kg de poids d'emballage = 0.280 kg pour le colis final. Pour le transporteur Colissimo sans signature, les tranches sont : [0;0.250[ = 5.96€ et [0.250:0.5[ = 6.71€. Dans le panier, les frais Colissimo sans signature sont de 6.71 et correspondent à la bonne tranche, signe que le 0.055 ( $total_weight ) est bien ajouté. Dans la page de commande en back-office, le poids indiqué est de 0.225 au lieu de 0.280 , soit seulement le poids du produit*5 sans le 0.055. Je peux heureusement modifier ce poids au moment de générer l'étiquette via le module Colissimo, mais je serai plus rassurée d'avoir directement le bon Total dans la commande. Sauriez-vous où se réfère le poids de la commande dans le back-office ? Merci d'avance pour votre aide! Edited April 15, 2022 by PriscilleD (see edit history) 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