Jump to content

[astuce pour générer le numéro de facture avec mysql 4]


Recommended Posts

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

Link to comment
Share on other sites

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,

Link to comment
Share on other sites

Okay je vois, en fait ce bug avait déjà été remonté sur le bug tracker et est corrigé sur le SVN depuis la révision 7217, la correction sera donc disponible dans la prochaine version qui sortira, ce qui explique pourquoi je ne voyais aucun soucis.

Merci tout de même pour le fix, qui permettra à ceux qui ont besoin de rapidement corriger le problème d'avoir un Prestashop fonctionnel pour MySQL4 en attendant la prochaine version.

Cordialement

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