Calcul plugin envoimoinscher

  • Posts: 158
  • Thank you received: 4
8 years 3 weeks ago #254543

-- HikaShop version -- : 2.6.4
-- Joomla version -- : 3.6.4
-- PHP version -- : 5.6

Bonjour
Je me pose une question auquel je n'arrive à trouver de réponse
Peut-on savoir quel calcul est utilisé pour le plugin envoimoinscher pour chronopost et mondialrelay ?
Effectivement celui-ci bloc le mode de livraison très tôt
Quel paramètre faut il modifier pour se rapprocher le plus prêt de celle de envoimoinscher svp
Je dois dire que j'ai installé cette solution au moi d'avril, le site a trainé en longueur et je m'en mort les doigts avec la livraison envoimoinscher. Et en plus pas moyen de choisir chronopost directement ni mondialrelay
Merci pour vos explications

Please Log in or Create an account to join the conversation.

  • Posts: 26159
  • Thank you received: 4028
  • MODERATOR
8 years 3 weeks ago #254545

Bonjour,

Je ne comprends malheureusement pas la question.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 158
  • Thank you received: 4
8 years 3 weeks ago #254624

Et bien envoimoinscher me donne ses maximum :
Pour les dimensions maximum :
- Mondial Relay : L*l*h <= 150 et l <= 130
- Chronopost : l <= 140 et l + 2*L + 2*h <= 300

Pour ma part j'ai des produit très légé 0.095kg et de taille 17cm / 9cm / 6 cm
Et au delà de 21 produits je n'ai plus de livraison proposée pour ces 2 fournisseurs
Je devrais pouvoir en faire tenir beaucoup plus dans un carton de cette taille
Exemple si je prend un carton de 85cm / 40cm / 20cm soit un total de 145cm donc je suis en dessous des 150cm de mondial relayje pourrait faire tenir 60 articles je ne devrais donc pas être bloqué à 21


J'ai donc essayé de passer tous mes produit à 2cm / 2cm/2cm
et là je bloc à 65 produits je n'est pourtant pas atteint la limite de pois ni de taille
Et mon problème c'est qu'il ne propose pas de faire un second carton

Je voudrais comprendre pourquoi cela bloc
Et comment faire pour que sa propose un second carton

J'espère avoir été plus clair cette fois-ci
Merci encore pour vos explications

Please Log in or Create an account to join the conversation.

  • Posts: 82906
  • Thank you received: 13378
  • MODERATOR
8 years 2 weeks ago #254628

Bonjour,

Le plugin utilise les même limites que EnvoiMoinsCher. Par contre, le plugin ne construit surement pas aussi bien que vous les cartons... C'est automatique pas intelligent.
L'algorithme est cependant déjà assez compliqué dans le code du plugin:

// limits for some types, if we don't respect the limitations, it will no work when sending request to envoimoinscher
			//
			if($sending_type == 'pli') {
				$limitation = array(
					'hauteur' => 2,
					'poids' => 3
				);
			}
			else if ($sending_type == 'colis')
			{
				$limitation = array(
					'poids' => 70,
				);
			}
			$j = 1;
			$data[$j]['poids'] = 0;
			$data[$j]['hauteur'] = 0;
			$data[$j]['longueur'] = 0;
			$data[$j]['largeur'] = 0;
			foreach($order->products as $product){
				if($product->product_parent_id == 0){
					if(isset($product->variants)){
						foreach($product->variants as $variant){
							for($i=0;$i<$variant->cart_product_quantity;$i++){
								$caracs["poids"] = $weightClass->convert($variant->product_weight_orig, $variant->product_weight_unit_orig, 'kg');
								if($package == true)
									$caracs["poids"] += $caracs["poids"]*(float)$weight_pack/100;
								else
									$caracs["poids"] += (float)0.1;
								$caracs["longueur"] = $volumeClass->convert($variant->product_length, $variant->product_dimension_unit_orig, 'cm', 'dimension' );
								$caracs["largeur"] = $volumeClass->convert($variant->product_width, $variant->product_dimension_unit_orig, 'cm', 'dimension' );
								//if($sending_type != "pli")
									$caracs["hauteur"] = $volumeClass->convert($variant->product_height, $variant->product_dimension_unit_orig, 'cm' , 'dimension');
								$tmpHeight = $data[$j]['hauteur'] + round($caracs['hauteur'],2);
								$tmpLength = $data[$j]['longueur'] + round($caracs['longueur'],2);
								$tmpWidth = $data[$j]['largeur'] + round($caracs['largeur'],2);
								$dim = $tmpLength+2*$tmpWidth+2*$tmpHeight;
								$x = min($caracs['largeur'],$caracs['hauteur'],$caracs['longueur']);
								if($x == $caracs['largeur']){
									$y = min($caracs['hauteur'],$caracs['longueur']);
									if($y == $caracs['hauteur']) $z = $caracs['longueur'];
									else $z = $caracs['hauteur'];
								}
								if($x == $caracs['hauteur']){
									$y = min($caracs['largeur'],$caracs['longueur']);
									if($y == $caracs['largeur']) $z = $caracs['longueur'];
									else $z = $caracs['largeur'];
								}
								if($x == $caracs['longueur']){
									$y = min($caracs['hauteur'],$caracs['largeur']);
									if($y == $caracs['hauteur']) $z = $caracs['largeur'];
									else $z = $caracs['hauteur'];
								}
								if($sending_type == "pli"){
									if(($data[$j]['poids'] + round($caracs['poids'],2) >= $limitation['poids'] || $data[$j]['hauteur'] > $limitation['hauteur']) &&  $data[$j]['longueur'] != 0){
										//we create a new package if dimensions or weight exceed limitations
										$j++;
										$data[$j]['poids'] = round($caracs['poids'],2);
										$data[$j]['largeur'] = $y;
										$data[$j]['longueur'] = $z;
										$data[$j]['hauteur'] = $x;
										$price_total += $variant->prices[0]->unit_price->price_value_with_tax;
									}
									else{
										$data[$j]['poids'] += round($caracs['poids'],2);
										$data[$j]['largeur'] = max($data[$j]['largeur'],$y);
										$data[$j]['longueur'] = max($data[$j]['longueur'],$z);
										$data[$j]['hauteur'] += $x;
										$price_total += $variant->prices[0]->unit_price->price_value_with_tax;
									}
								}
								else if($sending_type == "colis"){
									if(($data[$j]['poids'] + round($caracs['poids'],2) >= $limitation['poids']) &&  $data[$j]['longueur'] != 0){
										$j++;
										$data[$j]['poids'] = round($caracs['poids'],2);
										$data[$j]['hauteur'] = $y;
										$data[$j]['longueur'] = $z;
										$data[$j]['largeur'] = $x;
										$price_total += $variant->prices[0]->unit_price->price_value_with_tax;
									}
									else{
										$data[$j]['poids'] += round($caracs['poids'],2);
										$data[$j]['hauteur'] = max($data[$j]['hauteur'],$y);
										$data[$j]['longueur'] = max($data[$j]['longueur'],$z);
										$data[$j]['largeur'] += $x;
										$price_total += $variant->prices[0]->unit_price->price_value_with_tax;
									}
								}
								else{
									$data[$j]['poids'] += round($caracs['poids'],2);
									$data[$j]['hauteur'] = max($data[$j]['hauteur'],$y);
									$data[$j]['longueur'] = max($data[$j]['longueur'],$z);
									$data[$j]['largeur'] += $x;
									$price_total += $variant->prices[0]->unit_price->price_value_with_tax;
								}

							}
						}
					}
					//if product isn't a variant
					else{
						for($i=0;$i<$product->cart_product_quantity;$i++){
							$caracs["poids"] = $weightClass->convert($product->product_weight_orig, $product->product_weight_unit_orig, 'kg');
							if($package == true)
								$caracs["poids"] += $caracs["poids"]*(float)$weight_pack/100;
							else
								$caracs["poids"] += (float)0.1;
							$caracs["longueur"] = $volumeClass->convert($product->product_length, $product->product_dimension_unit_orig, 'cm', 'dimension' );
							$caracs["largeur"] = $volumeClass->convert($product->product_width, $product->product_dimension_unit_orig, 'cm', 'dimension' );
							//if($sending_type != "pli")
								$caracs["hauteur"] = $volumeClass->convert($product->product_height, $product->product_dimension_unit_orig, 'cm' , 'dimension');
							$x = min($caracs['largeur'],$caracs['hauteur'],$caracs['longueur']);
							if($x == $caracs['largeur']){
								$y = min($caracs['hauteur'],$caracs['longueur']);
								if($y == $caracs['hauteur']) $z = $caracs['longueur'];
								else $z = $caracs['hauteur'];
							}
							if($x == $caracs['hauteur']){
								$y = min($caracs['largeur'],$caracs['longueur']);
								if($y == $caracs['largeur']) $z = $caracs['longueur'];
								else $z = $caracs['largeur'];
							}
							if($x == $caracs['longueur']){
								$y = min($caracs['hauteur'],$caracs['largeur']);
								if($y == $caracs['hauteur']) $z = $caracs['largeur'];
								else $z = $caracs['hauteur'];
							}
							$tmpHeight = $data[$j]['hauteur'] + round($caracs['hauteur'],2);
							$tmpLength = $data[$j]['longueur'] + round($caracs['longueur'],2);
							$tmpWidth = $data[$j]['largeur'] + round($caracs['largeur'],2);
							$dim = $tmpLength+2*$tmpWidth+2*$tmpHeight;
							if($sending_type == "pli"){
								if(($data[$j]['poids'] + round($caracs['poids'],2) >= $limitation['poids'] || $data[$j]['hauteur'] > $limitation['hauteur']) &&  $data[$j]['longueur'] != 0){
									$j++;
									$data[$j]['poids'] = round($caracs['poids'],2);
									$data[$j]['largeur'] = $y;
									$data[$j]['longueur'] = $z;
									$data[$j]['hauteur'] = $x;
									$price_total += $product->prices[0]->unit_price->price_value_with_tax;
								}
								else{
									$data[$j]['poids'] += round($caracs['poids'],2);
									$data[$j]['largeur'] = max($data[$j]['largeur'],$y);
									$data[$j]['longueur'] = max($data[$j]['longueur'],$z);
									$data[$j]['hauteur'] += $x;
									$price_total += $product->prices[0]->unit_price->price_value_with_tax;
								}
							}
							else if($sending_type == "colis"){
								if(($data[$j]['poids'] + round($caracs['poids'],2) >= $limitation['poids']) &&  $data[$j]['longueur'] != 0){
									$j++;
									$data[$j]['poids'] = round($caracs['poids'],2);
									$data[$j]['hauteur'] = $y;
									$data[$j]['longueur'] = $z;
									$data[$j]['largeur'] = $x;
									$price_total += $product->prices[0]->unit_price->price_value_with_tax;
								}
								else{
									$data[$j]['poids'] += round($caracs['poids'],2);
									$data[$j]['hauteur'] = max($data[$j]['hauteur'],$y);
									$data[$j]['longueur'] = max($data[$j]['longueur'],$z);
									$data[$j]['largeur'] += $x;
									$price_total += $product->prices[0]->unit_price->price_value_with_tax;
								}
							}
							else{
								$data[$j]['poids'] += round($caracs['poids'],2);
								$data[$j]['hauteur'] = max($data[$j]['hauteur'],$y);
								$data[$j]['longueur'] = max($data[$j]['longueur'],$z);
								$data[$j]['largeur'] += $x;
								$price_total += $product->prices[0]->unit_price->price_value_with_tax;
							}
						}
					}
				}
			}
		}

Etre capable de gérer plusieurs colis, ou améliorer la construction des paquets nécessiterait de revoir tout ce code. Donc ce n'est pas une mince affaire.
Mais rien d'impossible. Il suffit d'avoir un développeur pour vous faire cela.

Please Log in or Create an account to join the conversation.

  • Posts: 158
  • Thank you received: 4
8 years 2 weeks ago #254862

Bonjour et merci pour votre réponse. Malgré tout je constate que les prix d'envoi sur le site et en passant directement sur le site envoimoinscher ne sont pas les mêmes. Il y a une net différence en mettant la même taille et le même poids.

Sur le site envoi moins cher ( 1 envoi !)
5kg soit 50 produits
7,9€ mondial relay
13,5€ chronos

9'5kg soit 100 produits
12,6€ mondial
17,6€ chrono


Sur le site
5kg soit 50 produits
12€ mondial relay
16€ chronos

9'5kg soit 100 produits impossible !
Si je mets 70 produits
mondial impossible
30€ chrono au lieu de 17€ !!!!!

Je n'arrive pas à m'expliquer cette différence
Merci de votre retour

voici les paramètres que j'ai mis

Attachments:
Last edit: 8 years 2 weeks ago by poupy.

Please Log in or Create an account to join the conversation.

  • Posts: 82906
  • Thank you received: 13378
  • MODERATOR
8 years 2 weeks ago #254863

Bonjour,

Le problème vient de la façon dont vous faites vos tests sur votre site je suppose.
Plutôt que de mettre 100 produits avec un poids total de 9.5kg, mettez un seul produit avec un poids de 9.5kg dans votre panier HikaShop et vous devrez retomber sur les mêmes frais de livraison.
Comme expliqué, le soucis n'est pas qu'HikaShop calcule différemment les frais de livraison (il sont d'ailleurs calculés par envoimoinscher), mais qu'HikaShop calcule le poids et la taille du colis avec tous les produits différemment de vous.

Please Log in or Create an account to join the conversation.

Time to create page: 0.062 seconds
Powered by Kunena Forum