Jump to content

Problème avec module de point relais et alert mail


Recommended Posts

Bonjour,
j'ai un soucis, lorsque je fais une commande, et que je choisis un point relais france express. au moment ou je confirme le payement par virement, il me donne cette erreur :

Warning: Invalid argument supplied for foreach() in /home/casse-noisettes.be/htdocs/shop/modules/mailalerts/mailalerts.php on line 274
Fatal error (TopRelaisBean -> point_relais_id is empty)




ce qui correspond à ces lignes là :

public function sendCustomerAlert($id_product, $id_product_attribute)
   {
       global $cookie, $link;

       $customers = Db::getInstance()->ExecuteS('
           SELECT id_customer, customer_email
           FROM `'._DB_PREFIX_.'mailalert_customer_oos`
           WHERE `id_product` = '.intval($id_product).' 
           AND `id_product_attribute` = '.intval($id_product_attribute));

       $product =  new Product(intval($id_product), false, intval($cookie->id_lang));
       $templateVars = array(
           '{product}' => (is_array($product->name) ? $product->name[intval(Configuration::get('PS_LANG_DEFAULT'))] : $product->name),
           '{product_link}' => $link->getProductLink($product)
       );
       foreach ($customers as $cust)
       {
           if ($cust['id_customer'])
           {
               $customer = new Customer(intval($cust['id_customer']));
               $customer_email = $customer->email;
               $customer_id = $customer->id;
           }
           else
           {
               $customer_email = $cust['customer_email'];
               $customer_id = 0;
           }
           $iso = Language::getIsoById(intval($cookie->id_lang));
           if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/customer_qty.txt') AND file_exists(dirname(__FILE__).'/mails/'.$iso.'/customer_qty.html'))
               Mail::Send(intval(Configuration::get('PS_LANG_DEFAULT')), 'customer_qty', $this->l('Product available'), $templateVars, strval($customer_email), NULL, strval(Configuration::get('PS_SHOP_EMAIL')), strval(Configuration::get('PS_SHOP_NAME')), NULL, NULL, dirname(__FILE__).'/mails/');
           if ($customer_id)
               $customer_email = 0;
           self::deleteAlert(intval($customer_id), strval($customer_email), intval($id_product), intval($id_product_attribute));
       }
   }





Alors, là ... je sais franchement pas trop quoi faire.
Est ce que vous pensez que c'est parceque j'utilise la version 1.3.2 ?

Nicolas Deru

Link to comment
Share on other sites

  • 2 weeks later...

Après divers échange je vais proposer une solution rapide au problème en attendant de publier une nouvelle version sur prestastore.

Description du problème :
Lors d'une commande, une fois que l'on sélectionne le point relais et que l'on clique sur suivant, prestashop ne passe pas dans le hookBackBeforePayment. La conséquence est que rien n'est inscrit en base et lors de la validation de la commande, le module ne peux retrouver ses petits.
Ce problème n'apparait pas sur tous les environnements, il ne faut faire les modifications que si cela est nécessaire.

Proposition de solution :
Dans le fichier module.tpl du module :
1) supprimer la ligne suivante (ligne 37-38) :
// Positionner le champ back à extraCarrier si possible
$("input:radio#back").value = 'extraCarrier' ;

2) écrire la ligne suivante dans la fonction initDisplayCarrier :
function initDisplayCarrier()
{
[...]
// Positionner le champ back a extraCarrier si possible
$("input:hidden[@name=back]").val('extraCarrier') ;
}

De fait, prestashop va passer dans le hookBackBeforePayment une fois que vous validerez la sélection.

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