PoOoOoZ Posted November 28, 2016 Share Posted November 28, 2016 Bonjour, j'utilise le module "mailalerts" afin d'envoyer des notifications quand un produit redevient disponible. Cependant je met à jour manuellement les quantité dans la base de donnée, et la fonction d'envoi du mail qui est normalement appellé lors de la mise à jour des quantité ("hookActionUpdateQuantity") n'est pas appellé, je suis obligé de remodifier la quantité en back office pour chaque produit si je veux que les mails d'alertes partent. Y'a t-il un moyen d'activer le hook "hookActionUpdateQuantity" pour chaque produit sans avoir a modifier chaque produit ? Ou alors une autre façon simple d'envoyer les mails en utilisant une autre astuce ? Ci-dessous ce que je cherche a lancer sans passer par une update manuel en BO : (MailAlert::sendCustomerAlert) public function hookActionUpdateQuantity($params) { $id_product = (int)$params['id_product']; $id_product_attribute = (int)$params['id_product_attribute']; $quantity = (int)$params['quantity']; $context = Context::getContext(); $id_shop = (int)$context->shop->id; $id_lang = (int)$context->language->id; $product = new Product($id_product, false, $id_lang, $id_shop, $context); $product_has_attributes = $product->hasAttributes(); $configuration = Configuration::getMultiple( array( 'MA_LAST_QTIES', 'PS_STOCK_MANAGEMENT', 'PS_SHOP_EMAIL', 'PS_SHOP_NAME' ), null, null, $id_shop ); $ma_last_qties = (int)$configuration['MA_LAST_QTIES']; $check_oos = ($product_has_attributes && $id_product_attribute) || (!$product_has_attributes && !$id_product_attribute); if ($check_oos && $product->active == 1 && (int)$quantity <= $ma_last_qties && !(!$this->_merchant_oos || empty($this->_merchant_mails)) && $configuration['PS_STOCK_MANAGEMENT']) { $iso = Language::getIsoById($id_lang); $product_name = Product::getProductName($id_product, $id_product_attribute, $id_lang); $template_vars = array( '{qty}' => $quantity, '{last_qty}' => $ma_last_qties, '{product}' => $product_name ); if (file_exists(dirname(__FILE__).'/mails/'.$iso.'/productoutofstock.txt') && file_exists(dirname(__FILE__).'/mails/'.$iso.'/productoutofstock.html') ) { // Send 1 email by merchant mail, because Mail::Send doesn't work with an array of recipients $merchant_mails = explode(self::__MA_MAIL_DELIMITOR__, $this->_merchant_mails); foreach ($merchant_mails as $merchant_mail) { Mail::Send( $id_lang, 'productoutofstock', Mail::l('Product out of stock', $id_lang), $template_vars, $merchant_mail, null, strval($configuration['PS_SHOP_EMAIL']), strval($configuration['PS_SHOP_NAME']), null, null, dirname(__FILE__).'/mails/', false, $id_shop ); } } } if ($this->_customer_qty && $quantity > 0) MailAlert::sendCustomerAlert((int)$product->id, (int)$params['id_product_attribute']); } Link to comment Share on other sites More sharing options...
BeComWeb Posted November 28, 2016 Share Posted November 28, 2016 Cependant je met à jour manuellement les quantité dans la base de donnée, et la fonction d'envoi du mail qui est normalement appellé lors de la mise à jour des quantité ("hookActionUpdateQuantity") n'est pas appellé Bonjour, J'imagine que le problème vient du fait que vous faites une mise-à-jour des quantités via un fichier d'import (CSV, XML,...) ou un système de type "connecteur web". C'est bien ça ? Link to comment Share on other sites More sharing options...
PoOoOoZ Posted November 28, 2016 Author Share Posted November 28, 2016 Je fait la mise à jour directement par SQL, avec un "ON DUPLICATE KEY UPDATE quantity=values(quantity)". Link to comment Share on other sites More sharing options...
BeComWeb Posted November 28, 2016 Share Posted November 28, 2016 Vous vous connectez à PhpMyAdmin et vous mettez à jour manuellement les quantités produit par produit ??? Link to comment Share on other sites More sharing options...
PoOoOoZ Posted November 28, 2016 Author Share Posted November 28, 2016 (edited) Non j'importe un fichier CSV d'environ 14000 références dans ma base SQL avec deux colonnes, "ID_STOCK" et "QUANTITY" avec "ON DUPLICATE KEY UPDATE quantity=values(quantity)", Edited November 28, 2016 by PoOoOoZ (see edit history) Link to comment Share on other sites More sharing options...
BeComWeb Posted November 28, 2016 Share Posted November 28, 2016 Non j'importe un fichier CSV d'environ 14000 références dans ma base SQL avec deux colonnes, "ID_STOCK" et "QUANTITY" avec "ON DUPLICATE KEY UPDATE quantity=values(quantity)", Ok ça me rassure. L'idée est à mûrir mais on peut imaginer que vous conceviez un module pour gérer vos imports. La classe Module possède une méthode "getInstanceByName()" qui va permettre d’instancier un module (mailalerts dans votre cas) pour pouvoir utiliser ses fonctions/méthodes propres. Le nouveau module en question pourrait vous permettre : 1. d'uploader le fichier csv 2. de vérifier ligne par ligne si le nouveau stock est différent de l'ancien 3. de le mettre à jour si c'est le cas 4. d’exécuter les envois de mails tels qu'ils sont prévus dans mailalerts Avec un fichier de 14000 lignes j'aurais tendance à dire qu'il vaudrait mieux passer par un cron pour éviter le timeout du serveur. Evidemment la solution idéale serait plutôt d'utiliser les webservices Prestashop mais bien sûr il faut que la source des données (un ERP ?), le permette. Link to comment Share on other sites More sharing options...
PoOoOoZ Posted November 29, 2016 Author Share Posted November 29, 2016 J'aurais pensé a une solution pour vérifier chaque ligne de la table "ps_mailalert_customer_oos" car ça ne dépasse pas les 50 lignes, au lieu de vérifier chaque changement de prix de chaque produit. Y'a t-il un moyen d'appeller (je sais pas si le terme est bon) le hook "hookActionUpdateQuantity" pour chaque produit de la table "ps_mailalert_customer_oos" ? Merci pour tes éclaircissements. Link to comment Share on other sites More sharing options...
BeComWeb Posted November 29, 2016 Share Posted November 29, 2016 Boucler 2 fois le fichier CSV ? Une 1ère fois pour mettre-à-jour les stocks et une 2nde pour envoyer les mails ? Si c'est à ça que tu penses ça me semble être la meilleure alternative. Sinon à ta place je créerais une table dans laquelle tu "déplacerais" les infos du fichier CSV avant traitement. De cette manière tu peux "flager" les lignes qui ont déjà été traitées en cas de plantage du script pendant le traitement. 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