Jump to content

Probleme mail de confirmation commande Prestashop 1.5.4.1


Recommended Posts

Bonjour,

 

Je vous explique mon problème, sur ma boutique qui utilise Prestashop 1.5.4.1 j'ai deux transporteurs qui s'appliquent chacun un une catégorie spécifique de produits.

1 transporteur par lettre pour produit A en fonction du prix

1 transporteur par colis pour produit B en fonction du poids

 

Jusque là tout va bien,

 

1 ) si le client commande seulement un produit A, seulement le transporteur par lettre lui est proposé.

2 ) si le client commande seulement un produit B, seulement le transporteur par colis lui est proposé.

3) si le client commande un produit A et B, le transporteur par lettre et par colis lui seront proposé et seront additionné pour donner un total de frais de port.

 

Si le client passe une commande avec dans son panier la formule 3), une fois le paiement validé, deux mails de confirmation sont envoyé au client car cela créé une commande liée avec la même référence mais avec un #1 pour la commande du produit qui va être livré le transporteur par lettre et la même référence suivie de #2 avec la commande du produit qui va être livré le transporteur par colis.

 

Le problème, dans les deux mails envoyé au client (voir image MailClient.jpg) post-305232-0-29657500-1376051642_thumb.jpg, les deux produits sont listé dans les deux mail avec un frais de port et un total à payer correspondant à un seul produit

 

alors que dans les deux mails envoyé via le module alerte mail (voir image MailAdmin.jpg) post-305232-0-90086200-1376051651_thumb.jpg tout est ok, ils affichent un seul produit avec le bon frais de port et le bon total à payer

 

En regardant les smarty utilisés, le mail côté client utilise {products} et le mail admin utilise {items}

 

Ma question est quel smarty il faut utilisé dans le mail de confirmation client pour afficher que le produit concerné ou quelle class modifier dans prestashop pour réglé ce problème qui peut porter à confusion le client surtout si il a choisi de payer par virement bancaire.

 

Merci d'avance pour celui ou celle qui peut m'apporter un début de réponse sur le sujet

 

Bonne journée

Link to comment
Share on other sites

Re,

 

Bon j'ai trouvé un début de piste, la construction de la boucle des produits injecté via le smarty {products} dans l'email client est géré dans le fichier class\PaymentModule.php à la ligne 346

 

// Construct order detail table for the email
 $products_list = '';
 $virtual_product = true;
 foreach ($products as $key => $product)
 {
  $price = Product::getPriceStatic((int)$product['id_product'], false, ($product['id_product_attribute'] ? (int)$product['id_product_attribute'] : null), 6, null, false, true, $product['cart_quantity'], false, (int)$order->id_customer, (int)$order->id_cart, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
  $price_wt = Product::getPriceStatic((int)$product['id_product'], true, ($product['id_product_attribute'] ? (int)$product['id_product_attribute'] : null), 2, null, false, true, $product['cart_quantity'], false, (int)$order->id_customer, (int)$order->id_cart, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
  $customization_quantity = 0;
  $customized_datas = Product::getAllCustomizedDatas((int)$order->id_cart);
  if (isset($customized_datas[$product['id_product']][$product['id_product_attribute']]))
  {
   $customization_text = '';
   foreach ($customized_datas[$product['id_product']][$product['id_product_attribute']][$order->id_address_delivery] as $customization)
   {
    if (isset($customization['datas'][Product::CUSTOMIZE_TEXTFIELD]))
	 foreach ($customization['datas'][Product::CUSTOMIZE_TEXTFIELD] as $text)
	  $customization_text .= $text['name'].': '.$text['value'].'<br />';
    if (isset($customization['datas'][Product::CUSTOMIZE_FILE]))
	 $customization_text .= sprintf(Tools::displayError('%d image(s)'), count($customization['datas'][Product::CUSTOMIZE_FILE])).'<br />';
    $customization_text .= '---<br />';
   }
   $customization_text = rtrim($customization_text, '---<br />');
   $customization_quantity = (int)$product['customization_quantity'];
   $products_list .=
   '<tr style="background-color: '.($key % 2 ? '#DDE2E6' : '#EBECEE').';">
    <td style="padding: 0.6em 0.4em;width: 15%;">'.$product['reference'].'</td>
    <td style="padding: 0.6em 0.4em;width: 30%;"><strong>'.$product['name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').' - '.Tools::displayError('Customized').(!empty($customization_text) ? ' - '.$customization_text : '').'</strong></td>
    <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ?  Tools::ps_round($price, 2) : $price_wt, $this->context->currency, false).'</td>
    <td style="padding: 0.6em 0.4em; width: 15%;">'.$customization_quantity.'</td>
    <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice($customization_quantity * (Product::getTaxCalculationMethod() == PS_TAX_EXC ? Tools::ps_round($price, 2) : $price_wt), $this->context->currency, false).'</td>
   </tr>';
  }
  if (!$customization_quantity || (int)$product['cart_quantity'] > $customization_quantity)
   $products_list .=
   '<tr style="background-color: '.($key % 2 ? '#DDE2E6' : '#EBECEE').';">
    <td style="padding: 0.6em 0.4em;width: 15%;">'.$product['reference'].'</td>
    <td style="padding: 0.6em 0.4em;width: 30%;"><strong>'.$product['name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').'</strong></td>
    <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ? Tools::ps_round($price, 2) : $price_wt, $this->context->currency, false).'</td>
    <td style="padding: 0.6em 0.4em; width: 15%;">'.((int)$product['cart_quantity'] - $customization_quantity).'</td>
    <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice(((int)$product['cart_quantity'] - $customization_quantity) * (Product::getTaxCalculationMethod() == PS_TAX_EXC ? Tools::ps_round($price, 2) : $price_wt), $this->context->currency, false).'</td>
   </tr>';
  // Check if is not a virutal product for the displaying of shipping
  if (!$product['is_virtual'])
   $virtual_product &= false;
 } // end foreach ($products)

 

Puis le smarty est créer à la ligne 599

 

'{products}' => $this->formatProductAndVoucherForEmail($products_list),

 

Du coté du module Mail alerte cela est gérer dans le fichier \module\mailsalerts\mailalerts.php à la ligne 279

 

$items_table = '';
 $products = $params['order']->getProducts();
 $customized_datas = Product::getAllCustomizedDatas((int)$params['cart']->id);
 Product::addCustomizationPrice($products, $customized_datas);
 foreach ($products as $key => $product)
 {
  $unit_price = $product['product_price_wt'];
  $customization_text = '';
  if (isset($customized_datas[$product['product_id']][$product['product_attribute_id']]))
  {
   foreach ($customized_datas[$product['product_id']][$product['product_attribute_id']] as $customization)
   {
 if (isset($customization['datas'][_CUSTOMIZE_TEXTFIELD_]))
  foreach ($customization['datas'][_CUSTOMIZE_TEXTFIELD_] as $text)
   $customization_text .= $text['name'].': '.$text['value'].'<br />';
 if (isset($customization['datas'][_CUSTOMIZE_FILE_]))
  $customization_text .= count($customization['datas'][_CUSTOMIZE_FILE_]).' '.$this->l('image(s)').'<br />';
 $customization_text .= '---<br />';
   }
   $customization_text = rtrim($customization_text, '---<br />');
  }
  $items_table .=
   '<tr style="background-color:'.($key % 2 ? '#DDE2E6' : '#EBECEE').';">
 <td style="padding:0.6em 0.4em;">'.$product['product_reference'].'</td>
 <td style="padding:0.6em 0.4em;">
  <strong>'
   .$product['product_name'].(isset($product['attributes_small']) ? ' '.$product['attributes_small'] : '').(!empty($customization_text) ? '<br />'.$customization_text : '').
  '</strong>
 </td>
 <td style="padding:0.6em 0.4em; text-align:right;">'.Tools::displayPrice($unit_price, $currency, false).'</td>
 <td style="padding:0.6em 0.4em; text-align:center;">'.(int)$product['product_quantity'].'</td>
 <td style="padding:0.6em 0.4em; text-align:right;">'.Tools::displayPrice(($unit_price * $product['product_quantity']), $currency, false).'</td>
   </tr>';
 }

 

et le smarty est construit à la ligne 374

 

'{items}' => $items_table,

 

Si un développeur plus expérimenté passe dans le coin pour une petite explication des differences entre ces deux codes ça serait cool car là je coince et je m'arrache le peu de cheveux qu'il me reste depuis plus de 4 heures <_<

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...