Jump to content

mbarreteau

Members
  • Posts

    13
  • Joined

  • Last visited

mbarreteau's Achievements

Newbie

Newbie (1/14)

0

Reputation

  1. @Sillage : Super ! Et j'utilise également CM-CIC pour un de mes clients, pourriez-vous,svp, poster votre code modifié ?
  2. Je n'ai pas le temps de regarder en ce moment mais oui, il serait intéressant de trouver un moyen de contourner le problème (via le hook postUpdateOrderStatus peut-être).
  3. Je n'ai pas trouvé de solution. comme évoqué précédemment, l'état de la commande est inséré -après- l'envoi du mail de confirmation. Une piste à explorer serait d'utiliser le hook "paymentConfirm" pour l'envoi du mail lorsque l'on est en type CB et restreindre le mail généré via le hook newOrder aux autres types de paiement....
  4. Bonjour, Oui, on est bien d'accord, la requête fonctionne très bien en mysql 5 mais pas en mysql 4. En mysql 4, la requête en question ne fonctionne pas : UPDATE `ps_orders` SET `invoice_number` = (SELECT `invoice_number` FROM ( SELECT MAX(`invoice_number`) + 1 AS `invoice_number` FROM `ps_orders`) tmp ), `invoice_date` = '2011-07-06 13:35:43' WHERE `id_order` = 77 Erreur : #1093 - You can't specify target table 'ps_orders' for update in FROM clause Cordialement,
  5. Bonjour, Si vous utilisez mysql4, il est possible, en utilisant l'override de la classe Order ci-dessous de contourner le problème (il est préférable de passer en mysql5 mais si vous ne pouvez vraiment pas...) : <?php /* * 2011 Net Concept * * @author Matthieu Barreteau / Net Concept * * This override class is used to correctly create an invoice number when using mysql 4. */ class Order extends OrderCore { public function setInvoice() { // in all case call the parent parent::setInvoice(); // look if we have an invoice number set in database $combien = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('SELECT `invoice_number` FROM `'._DB_PREFIX_.'orders` WHERE `id_order` = '.(int)($this->id)); $number = $combien['number']; // No invoice_number, this server use mysql 4 if($number==0) { // Get new invoice number $quelestlemax = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('SELECT MAX(`invoice_number`) + 1 AS `invoice_number` FROM `'._DB_PREFIX_.'orders`'); $lemaxplusun = $quelestlemax['invoice_number']; // Set new invoice number Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'orders` SET `invoice_number` = '.$lemaxplusun.', `invoice_date` = \''.date('Y-m-d H:i:s').'\' WHERE `id_order` = '.(int)$this->id); // store result in the object $res = Db::getInstance()->getRow(' SELECT `invoice_number`, `invoice_date` FROM `'._DB_PREFIX_.'orders` WHERE `id_order` = '.(int)$this->id ); $this->invoice_date = $res['invoice_date']; $this->invoice_number = $res['invoice_number']; } } } ?> Cordialement, Matthieu Barreteau
  6. Bonjour, Ce n'est pas réellement un bug mais ça permet de comprendre pourquoi dans certains cas, il n'y a rien sur le tableau de bord... Les statistiques affichées dans le Tableau de bord de Prestashop sont générée en fonction des dates de création des factures (invoice_date). Si comme pour mon client, vous n'utilisez pas les factures alors ce champ là ne sera jamais rempli et vos statistiques ne seront jamais affichées. On pourrait, afin d'avoir un rendu des commandes, utiliser le champs delivery_date mais cela reviendrait à modifier pas mal de classes/modules. Il est possible de passer par l'override pour forcer la mise à jour de la date de la facture (même sans facture), ce qui permet d'avoir des chiffres plus intéressants sur le tableau de bord : class OrderHistory extends OrderHistoryCore { public function changeIdOrderState($new_order_state = NULL, $id_order) { // load old order history $order = new Order($id_order); $history = $order->getHistory(); // call original method parent::changeIdOrderState($new_order_state, $id_order); switch($new_order_state) { case _PS_OS_PAYMENT_: // or other, you could use SHIPPING FOR EXAMPLE { // force invoice date even if we do not use them Db::getInstance()->Execute(' UPDATE `'._DB_PREFIX_.'orders` SET `invoice_date` = \''.date('Y-m-d H:i:s').'\' WHERE `id_order` = '.(int)$id_order ); } } } } Pour l'onglet statistiques, je ne suis pas certain que ça fonctionne...mais c'est un bon début. [Edit : pour les anciennes commandes, il est possible de forcer la date des commandes validées : UPDATE `ps_orders` SET `invoice_date`=`date_upd` WHERE `valid`=1] Cordialement,
  7. Bonjour, Voici une petite manipulation permettant (j'espère que la condition que j'ai ajouté suffit mais ça à l'air de fonctionner ?) d'avoir un total de commande dans le baco un peu plus intéressant (seules les commandes payées sont comptabilisées) : Fichier admin/tabs/AdminOrders.php (méthode getTotal) : Original : ... foreach($this->_list AS $item) if ($item['id_currency'] == Configuration::get('PS_CURRENCY_DEFAULT')) ... Modifié : ... foreach($this->_list AS $item) if($item['valid']==1) if ($item['id_currency'] == Configuration::get('PS_CURRENCY_DEFAULT')) ... Matthieu
  8. Bonjour, Je suis confronté à un problème un peu particulier et je ne trouve pas de solution. Lorsqu'une commande (par carte en l’occurrence) est en erreur, le module mailalerts génère quand même le mail au propriétaire de la boutique lui indiquant qu'une nouvelle commande est arrivée (et cette commande est passée en préparation ... pas génial). J'ai bien tenté de rajouter le test suivant dans la méthode hookNewOrder du fichier mailalerts.php mais sans résultat : $order_state = OrderHistory::getLastOrderState($order->id); if($order_state->id == _PS_OS_ERROR_) return; Le hook est bien appelé mais il semble que l'état de la commande soit inséré après l'appel à ce hook. Quelqu'un aurait-il une piste concernant ce point-là svp ? Merci.
  9. Bonjour, Nous rencontrons actuellement un problème avec le module socolissimo (prestashop mis à jour de 1.4.1 vers la dernière 1.4.2.5). Le message d'erreur suivant apparait lorsque l'on choisi SoColissimo : une erreur s'est produite lors de l'étape transporteur: Signature invalide Nous avons bien vérifié et les paramètres du module sont corrects. Ce module fonctionnait très bien en version 1.4.1. En comparant les 2 versions du module (dans prestashop 1.4.1 et 1.4.2.5), on peux remarquer un changement dans la création de la clé de validation : - 1.4.1 : $strPs = Configuration::get('SOCOLISSIMO_ID').$ceName.$dyPraparationTime.$dyForwardingCharges.$trClientNumber.self::formatOrderId($orderId).Configuration::get('SOCOLISSIMO_KEY'); $keyPs = sha1($strPs); return $keyPs; - 1.4.2.5 : return sha1(Configuration::get('SOCOLISSIMO_ID').$ceName.number_format($dyPraparationTime, 2, ',', '').$dyForwardingCharges.$trClientNumber.self::formatOrderId($orderId).Configuration::get('SOCOLISSIMO_KEY')); Dans la 1.4.2.5, la variable $dyPraparationTime est formatée par la fonction number_format($dyPraparationTime, 2, ',', '') Si je supprime ce formatage, je n'ai plus de message d'erreur, j'arrive bien à sélectionner une adresse dans la page de la poste mais je boucle systématiquement sur la page de sélection du transporteur (order.php?step=2) Merci.
  10. Hi ! id_parent must be equal to 1 active must be equal to 1 name and description are multi-language fields, so you must specify in which lang you set the name. This code should work : $defaultLanguageId = intval(Configuration::get('PS_LANG_DEFAULT')); $cat = new Category(NULL, NULL); $cat->name[$defaultLanguageId] = "test"; $cat->active = 1; $cat->description[$defaultLanguageId] = "Testing purposes category"; $cat->id_parent = 1; if ($cat->validateFields() === true) { if ($cat->add()) { echo "success"; } else { echo "unsuccess"; } }
×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More