[RESOLU] Règle de calcul des frais de port pour panier

Règle de calcul des frais de port pour panier [RESOLU] - PHP - Programmation

Marsh Posté le 20-09-2011 à 21:30:37    

Bonsoir,
 
J'ai un petit problème que je retourne dans tous les sens depuis, plus d'une semaine, sans trouver de solutions !
Pour un site e-commerce (version oscommerce 2.3 modifiée), j'ai besoin de créer une règle de calcul des frais de port.
 
Ci dessous un copie d’écran pour une explication simplifiée :
 
 
Sur l'image on voit que j'ai 4 produits dans mon panier vendus par 2 vendeurs differents.
Les frais de port par article sont stockés en session dans $_SESSION['ship']
 
Je cherche à faire une règle qui lorsque dans mon panier j'ai plus d'un article du vendeur X, les frais de port du deuxième article (colissimo seulement) du même vendeur uniquement soit égal à 1€ (au lieu du montant par défaut).
 
En clair:
Si la panier contient au moins 2 articles du vendeur X alors le coût de transport du 2eme article = 1€
Sachant que si un des deux articles est en sans frais de port (remise en main propre), le cout devra être de 0€
 
Voici le code de mon panier :
 

Code :
  1. // on passe les valeurs postées en session
  2. $array = array_keys($_POST);
  3. foreach ($array as $value) {
  4.  $_SESSION[$value] = $_POST[$value];
  5. }
  6. // [...]
  7.     for ($i=0, $n=sizeof($products); $i<$n; $i++) {
  8. $id = $products[$i]['id'];
  9. $remiseMainsPropres = '';
  10. $colissimo = '';
  11. $shippingCost = getShippingCost($id);
  12.     $shippingMethods = getShippingMethods($id);
  13. $methods = explode(";", $shippingMethods);
  14. if(!isset($_SESSION['ship'][$id])) {
  15.  // spu =  remise en main prope
  16.  // flat = colissimo
  17.  if( (in_array('flat', $methods)) && (in_array('spu', $methods)) ) {
  18.   $_SESSION['ship'][$id] = $shippingCost;
  19.  } elseif( (!in_array('flat', $methods)) && (in_array('spu', $methods)) )  {
  20.   $_SESSION['ship'][$id] = 0;
  21.  } elseif( (in_array('flat', $methods)) && (!in_array('spu', $methods)) )  {
  22.   $_SESSION['ship'][$id] = $shippingCost;
  23.  } else {          
  24.   $_SESSION['ship'][$id] = 0;
  25.  }
  26. }
  27.       echo '<tr class="rowCart">';
  28.       echo '<td align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '">' . tep_image(DIR_WS_IMAGES . $products[$i]['image'], $products[$i]['name'], 60, 60) . '</a></td>';
  29.       echo '<td class="main"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $products[$i]['id']) . '">' . $products[$i]['name'] . '</a><br /><span class="rose">Vendeur:</span> '.getSeller( $products[$i]['id']);
  30.       if (STOCK_CHECK == 'true') {
  31.         $stock_check = tep_check_stock($products[$i]['id'], $products[$i]['quantity']);
  32.         if (tep_not_null($stock_check)) {
  33.           $any_out_of_stock = 1;
  34.           echo '<br />' . $stock_check;
  35.         }
  36.       }
  37.   echo '</td>';
  38.       echo '<td class="main">';
  39.  
  40.   // si remise en main propre et colissmo sont proposés
  41.   if( (in_array('spu', $methods)) && (in_array('flat', $methods)) )  {
  42.  
  43.    if($_SESSION['ship'][$products[$i]['id']] == 0) {
  44.   $remiseMainsPropres .=  'checked="checked"';
  45.   $colissimo .=  '';
  46.  } else {
  47.   $remiseMainsPropres .=  '';
  48.   $colissimo .=  'checked="checked"';
  49.  }
  50.    
  51.  echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="0" '.$remiseMainsPropres.' /> Remise en main propre<br />';
  52.     echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="'.$shippingCost.'"   '.$colissimo.' /> Colissimo ('.$shippingCost.')';
  53.   // si remise en main propre seulement
  54.   } elseif( (in_array('spu', $methods)) && (!in_array('flat', $methods)) )  {
  55.  
  56.  echo '<input type="radio" name="ship['.$products[$i]['id'].']"  value="0" checked="checked" /> Remise en main propre<br />';
  57.  //echo '<input type="radio"  value="0" disabled="disabled"  /> Colissimo (N/A)';
  58.   // si colissimo seulement
  59.   } elseif( (!in_array('spu', $methods)) && (in_array('flat', $methods)) )  {
  60.  //echo '<input type="radio"  value="0" disabled="disabled"  /> Remise en main propre (N/A)<br />';
  61.     echo '<input type="radio" name="ship['.$products[$i]['id'].']" value="'.$shippingCost.'"  checked="checked" /> Colissimo ('.$shippingCost.')';
  62.  
  63.   } else {
  64.  
  65.  echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="0" '.$remiseMainsPropres.' /> Remise en main propre';
  66.     echo '<input type="radio" name="ship['.$products[$i]['id'].']" onclick="this.form.submit()" value="'.$shippingCost.'"   '.$colissimo.' /> Colissimo ('.$shippingCost.')';
  67.   }
  68.   echo '</td>';   
  69.   echo '<td class="main" align="center">' . $currencies->display_price($products[$i]['final_price'], tep_get_tax_rate($products[$i]['tax_class_id']), $products[$i]['quantity']) . '</td>';
  70.       echo '<td align="center"><a href="' . tep_href_link(FILENAME_SHOPPING_CART, 'products_id=' . $products[$i]['id'] . '&action=remove_product') . '"><img src="images/trash.png" border="0" alt="Supprimer cet article"></a></td>';
  71.   echo '</tr>';
  72.     }
  73. echo '</table>';
  74. ?>
  75.     </table>
  76.     <p class="headingCart" align="right"><strong><?php echo SUB_TITLE_SUB_TOTAL; ?> <?php echo $currencies->format($cart->show_total()); ?></strong><br />
  77. <?php
  78.        echo 'Frais d\'expedition : ';
  79.        if(isset($_SESSION['ship']))
  80.         $val = array_sum(array_values($_SESSION['ship']));
  81.        else
  82.         $val = 0;
  83.        echo sprintf("%.2f",$val). '&nbsp;&euro;<br />';
  84.        echo 'Total TTC : ' . $currencies->format($cart->show_total() + $val);
  85. ?>


 
Merci par avance !


Message édité par pipo83 le 07-10-2011 à 22:30:46
Reply

Marsh Posté le 20-09-2011 à 21:30:37   

Reply

Marsh Posté le 21-09-2011 à 10:27:41    

Sans la structure des données c'est difficile, mais en principe ton code devrais ressembler à un truc du genre :

Code :
  1. $vendors = array();
  2.     $totalShippingCost = 0;
  3.     foreach ($panier as $item) {
  4.         if (in_array($vendors, $item->vendor) {
  5.             $shippingCost = 1;
  6.         } else {
  7.             $shippingCost = 6.95;
  8.         }
  9.         $vendors[] = $item->vendor;
  10.         displayItem($item, $shippingCost);
  11.         $totalShippingCost += $shippingCost;
  12.     }


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 22-09-2011 à 09:24:24    

Tu devrais passer sous Magento ou Prestashop ;) OsCommerce est trop vieux aujourd'hui et y'a plus de support...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed