Jump to content

[RESOLU] Personnaliser son N° de FACTURE


Recommended Posts

Bonjour,

Une petite question, je souhaite que mes factures soient de la forme

Année Mois Jour / N° par jour sur 4 chiffres

ce qui fait par exemple 200909100001

Le problème qui va certainement se poser :
Le champs dans la base ne sera pas assez long (ça se change)
Il faut un id unique (il me semble) donc je suis obligé d'enregistrer l'ensemble ?

Mon idée était de changer le prochaine numéro suivant le jour en cours. (en php)

MErci

Cordialement

Link to comment
Share on other sites

Un petit tuto vite fait ?

C'est pas long, ça m'a pris la journée .... ;)

Faites une copie de tout ce qui est possible de sauvegarder ;)

Modifier la base de donnée (avec phpmyadmin)


Table _orders
Champs invoice_number , changer le en bigint(10)


ça permet de mettre plus de chiffre ....


Après c'est un gros bazard :
Fichier order.php


public function setInvoice()
{
// Set invoice number
$this->invoice_number = intval(Configuration::get('PS_INVOICE_NUMBER'));
Configuration::updateValue('PS_INVOICE_NUMBER', $this->invoice_number + 1);
if (!intval($this->invoice_number))
die(Tools::displayError('Invalid invoice number'));
// Set invoice date
$this->invoice_date = date('Y-m-d H:i:s');
// Update object
$this->update();
}


Mettez ça :

   public function setInvoice()
   {
       // ##FACTURE
       $InvoiceNumberString = Configuration::get('PS_INVOICE_NUMBER'); // Récupère le nouveau numéro
       $InvoiceNumber = substr ( $InvoiceNumberString , 8 ); // Extrait le numéro de Facture
       $InvoiceNumberString = date("Ymd").$InvoiceNumber; // Reconstruit le numéro de facture avec la date
       $this->invoice_number = $InvoiceNumberString;
       $this->invoice_date = date('Y-m-d H:i:s');
       $this->update();
       // On incrémente le numéro
       $InvoiceNumber = $InvoiceNumber + 1;
       // On rajoute les 0
       $InvoiceNumber = str_repeat("0", (6 - strlen ("$InvoiceNumber"))) . $InvoiceNumber ; 
       // Met à jour le prochain numéro
       Configuration::updateValue('PS_INVOICE_NUMBER', date("Ymd").$InvoiceNumber ); 
   }



et ça :


public function getFields()
{
$fields['invoice_number'] = intval($this->invoice_number);


par

   public function getFields()
   {
$fields['invoice_number'] = $this->invoice_number;










Fichier PDF.php

Remplacer


$pdf->Cell(0, 6, self::l('INVOICE #').Configuration::get('PS_INVOICE_PREFIX', intval($cookie->id_lang)).sprintf('d', self::$order->invoice_number).' '.self::l('from') . ' ' .Tools::displayDate(self::$order->invoice_date, self::$order->id_lang), 1, 2, 'L', 1);


par

        
$pdf->Cell(0, 6, self::l('INVOICE #').Configuration::get('PS_INVOICE_PREFIX', intval($cookie->id_lang)). self::$order->invoice_number .' '.self::l('from') . ' ' .Tools::displayDate(self::$order->invoice_date, self::$order->id_lang), 1, 2, 'L', 1)
;



et ça




$this->Cell(80, 10, self::l('INVOICE #').Configuration::get('PS_INVOICE_PREFIX', intval($cookie->id_lang)).sprintf('d', self::$order->invoice_number), 0, 0, 'C');

par ça

$this->Cell(80, 10, self::l('INVOICE #').Configuration::get('PS_INVOICE_PREFIX', intval($cookie->id_lang)). self::$order->invoice_number, 0, 0, 'C');



N'oublier pas de mettre de suite dans le prochain numéro la bonne chaine de charactère !!!
Si ça met des numéros bizarre, problème de intval qui est resté !

ça a surement des répercutions ailleurs que je ne maitrise pas ! donc

à vos risques et périls !!!

11667_zcA7K0hRtVB0vEhPxVAH_t

Link to comment
Share on other sites

Dans le même genre avec une numérotation par mois discontinue (Remise à 0 à chaque mois) Vu avec l'expert comptable.

   public function setInvoice()
   {
       // ##FACTURE
       $InvoiceNumberString = Configuration::get('PS_INVOICE_NUMBER'); // Récupère le nouveau numéro
       $InvoiceNumber = substr ( $InvoiceNumberString , 6 ); // Extrait le numéro de Facture
   $MonthNumber = substr ( $InvoiceNumberString , 4, 2 ); // Récupère le Mois
   $YearNumber = substr ( $InvoiceNumberString , 0, 4 ); // Récupère l'Année
   if ( ($MonthNumber != date("m")) || ($YearNumber != date("Y"))){ $InvoiceNumber =1 ;} // Change de mois ou d'année, ou passe à 1
   $InvoiceNumberString = date("Ym"). str_repeat("0", (4 - strlen ("$InvoiceNumber"))). $InvoiceNumber; // Reconstruit le numéro de facture avec la date
       $this->invoice_number = $InvoiceNumberString;
       $this->invoice_date = date('Y-m-d H:i:s');
       $this->update();
       // On incrémente le numéro
       $InvoiceNumber = $InvoiceNumber + 1;
       // Met à jour le prochain numéro
       Configuration::updateValue('PS_INVOICE_NUMBER', date("Ym"). str_repeat("0", (4 - strlen ("$InvoiceNumber"))) . $InvoiceNumber ); 
   }

Link to comment
Share on other sites

  • 2 weeks later...

Ta solution ça donne quel type de nom ?

Merci d'avance


Tout est possible, suffit de demander ;)

public function setInvoice()
   {
       // ##FACTURE
       // Principe du CODE FA090001
       // FA est écrite dans la partie Fixe (BO)
       $InvoiceNumberString = Configuration::get('PS_INVOICE_NUMBER'); // Récupère le nouveau numéro : 090001
       $InvoiceNumber = substr ( $InvoiceNumberString , 2 ); // Extrait le numéro de Facture 0001
   $MonthNumber = substr ( $InvoiceNumberString , 0, 2 ); // Récupère le Mois 09
   if ($MonthNumber != date("m")){ $InvoiceNumber =1 ;} // Change de mois ou d'année, ou passe à 1 si tu passes à 1 chaque mois
   $InvoiceNumberString = date("m"). str_repeat("0", (4 - strlen ("$InvoiceNumber"))). $InvoiceNumber; // Reconstruit le numéro de facture avec la date
       $this->invoice_number = $InvoiceNumberString;
       $this->invoice_date = date('Y-m-d H:i:s');
       $this->update();
       // On incrémente le numéro
       $InvoiceNumber = $InvoiceNumber + 1;
       // Met à jour le prochain numéro
       Configuration::updateValue('PS_INVOICE_NUMBER', date("Ym"). str_repeat("0", (4 - strlen ("$InvoiceNumber"))) . $InvoiceNumber ); 
   } 



Fait en live, pas tester, donc pas besoin de changer les bigint ;)

Cordialement.

Link to comment
Share on other sites

CA MARCHE !
trop fort et bien commenté. Juste j'ai pas compris ou paramétrer le nombre de 0 mais c'est pas grave.
Et encore une question pour pousser un peu le concept. Comment faire pour que le client ai ce m^me numéro qui apparaisse dans son compte ?
Et encore une remarque : ce n'est pas parceque tu as résolu toi même cet épineux problème qu'il faut etre modeste. Tu as le droit de mettre résolu à ton post ;-)

Link to comment
Share on other sites

Pardon

J'avais pas vu tout de suite que tout était de toi et je viens de percuté qu'il faut que je fasse peut-être TOUTES les modifications que tu as indiqué. Tu sait qu'un petit module de ton truc ferait un malheur ??? Il y en a qui les vendent et pour des fonctionnalités bien moins intéressantes ;-) Attention je dis pas qu'il faut les imiter ! En tout cas merci vraiment, c'est cool quand m^me cette communauté prestashopienne.

Link to comment
Share on other sites

Attention !!!

La modification de la base de donnée concernant les bigint ne te concerne pas : tu ne dépasses pas la valeur maximale de l'int

Donc, pas basoin de supprimer les intval(xxx) dans les modifications indiquées ...

Si quelqu'un trouve l'équivalent d'intval pour les bigint, je suis preneur :cheese:

Cordialement.

Link to comment
Share on other sites

Tu sait qu'un petit module de ton truc ferait un malheur ???
Il y en a qui les vendent et pour des fonctionnalités bien moins intéressantes ;-)
Attention je dis pas qu'il faut les imiter !


Sur ce coup là , je pars du principe que si je prend, il faut participer, c'est le principe communautaire que j'applique ;)

Pour la question du module, c'est en cours de création, mais j'ai pas mal de soucis, trop de bricoles à droite à gauche.

Cordialement.
Link to comment
Share on other sites

En voici une autre version, qui permet de personnaliser son numéro de facture comme suit :

Exercice(2) Lettre mois(2) Numéro de facture du mois (4)

09F090001

On corrige la structure de la base :

ALTER TABLE `ps_orders` CHANGE `invoice_number` `invoice_number` CHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL  




Modification order.php

// AD-Informatique
// Personnalisation du numéro de facture
// www.ad-informatique.net
   public function setInvoice()
   {
       // Set invoice number
       // Récuperer la date du jour date("Ymd");
       /*
   $this->invoice_number = intval(Configuration::get('PS_INVOICE_NUMBER'));
       Configuration::updateValue('PS_INVOICE_NUMBER', $this->invoice_number + 1);
       if (!intval($this->invoice_number))
           die(Tools::displayError('Invalid invoice number'));
       // Set invoice date
       $this->invoice_date = date('Y-m-d H:i:s');
       // Update object
       $this->update();
       */
       // ##FACTURE
       // Format personnalisé 09F090001
       $InvoiceNumberString = Configuration::get('PS_INVOICE_NUMBER'); // Récupère le nouveau numéro
       $InvoiceNumber = substr ( $InvoiceNumberString , 5 ); // Extrait le numéro de Facture
   $MonthNumber = substr ( $InvoiceNumberString , 3, 2 ); // Récupère le Mois
   $YearNumber = substr ( $InvoiceNumberString , 0, 4 ); // Récupère l'Année
   if ( ($MonthNumber != date("m")) || ($YearNumber != date("y"))){ $InvoiceNumber =1 ;} // Change de mois ou d'année, ou passe à 1
   $InvoiceNumberString = date("y") . "F" . date("m") . str_repeat("0", (4 - strlen ("$InvoiceNumber"))). $InvoiceNumber; // Reconstruit le numéro de facture avec la date
       $this->invoice_number = $InvoiceNumberString;
       $this->invoice_date = date('Y-m-d H:i:s');
       $this->update();
       // On incrémente le numéro
       $InvoiceNumber = $InvoiceNumber + 1;
       // Met à jour le prochain numéro
       Configuration::updateValue('PS_INVOICE_NUMBER', date("y") . "F" . date("m") . str_repeat("0", (4 - strlen ("$InvoiceNumber"))) . $InvoiceNumber );
   }



Cordialement.

Link to comment
Share on other sites

  • 1 month later...

Bonjour @ tous. J'ai essayé cette option mais il semble que cela ne marche pas à 100%. En effet, il me manque des nombre. Etant sous la nouvelle version de Prestashop, il y a peut-être un bug avec cette version.

Juste pour confirmer, le fichier order.php est bien celui qui se situe dans le dossier " ? (je ne le trouve pas ailleur).

Link to comment
Share on other sites


Juste pour confirmer, le fichier order.php est bien celui qui se situe dans le dossier " ? (je ne le trouve pas ailleur).


Bonjour,

Normalement, il faut suivre la procédure décrite depuis son début.

Qu'il y ai des sauts de numéro ? dans quel sens, de quel ordre, cela pourrais être normal !

Il faut personnaliser selon ses besoins, sachant qu'il faut vérifier avec votre comptable.

Cordialement.
Link to comment
Share on other sites

Effectivement, j'avais pas vu le haut du post. Tout compte fais, j'ai pas laissé cette procédure. J'ai personnalisé les numéros avec la possibilité par défaut.
Par contre, j'ai 2 questions :
- Comment faire pour correspondre le numéro de commande et le numéro de facture ?
- Comment remettre tout à zéro ?

Comme de toute façon, la commande et la facture s'incrémente à chaque fois et en même temps, on peux avoir les 2 avec le même numéro.
Quand je dis tout, c'est le numéro de commande et les commandes. En effet, je fais des test chez une personne mais bien sûr, lorsque le site sera en place, il faudra remettre tout à zéro.

Link to comment
Share on other sites


- Comment faire pour correspondre le numéro de commande et le numéro de facture ?


Je ne comprends pas bien la question !
La procédure de lien est établie dans une table ....
Tu veux que les numéros soient identiques ???

Rappel, la numérotation des factures doit être incrémental, par an ou par mois.



- Comment remettre tout à zéro ?


Il y a un post qui traite le sujet.
Link to comment
Share on other sites

Pour une société, je ne pense pas qu'il y a de procédure fixe pour des numéro de facture ou de commande. En fait, une fois le site installé, les numéro de commande commence à "1". Par contre, le numéro de facture est personnalisable.
Donc ce que je veux, c'est que le numéro de commande soit le même que le numéro de facture.

Pour la remise à zéro, j'ai pas bien cherché, je m'y remet. Merci.

Link to comment
Share on other sites

Pour une société, je ne pense pas qu'il y a de procédure fixe pour des numéro de facture ou de commande. En fait, une fois le site installé, les numéro de commande commence à "1". Par contre, le numéro de facture est personnalisable.
Donc ce que je veux, c'est que le numéro de commande soit le même que le numéro de facture.

Pour la remise à zéro, j'ai pas bien cherché, je m'y remet. Merci.


Il me semble que cette question à déjà été traitée : IMPOSSIBLE, et ce pour deux raisons

- La première: pas impossible mais long et fastidieu, il faut toucher à toutes les tables et programme faisant référence à ce numéro de commande, ainsi que toutes les pages affichant ce numéro, et oui c'est un longint qu'il faut basculer en texte ..... pas gagné !

- La seconde, c'est que le numéro de facture n'est attribué qu'après recéption du paiement (en ligne) et ça selon le paramétrage et les diverses bricoles qui trainent de ci de là, ce que je veut dire par là , c'est que tu pourras jamais faire coincider les deux numéros !!! et surtout, le grand danger de vouloir s'engager dans cette voie sans issue, c'est que le jour ou tu sautes un numéro, il faudra pouvoir justifier auprès de l'administration fiscal cet écart !

Regarde un peu mes autres posts concernant les autres personnalisation, avoir, borderau, retour, etc, tu comprendras la difficulté de la chose .....


Cordialement.
Link to comment
Share on other sites

Il se pourrait que pour le mois de janvier/février je mette à disposition une version remodelée de prestashop (sans prétentions, quoi que ) qui reprends tous les thèmes évoqués dans mes posts, plus les quelques corrections et améliorations diverses...

Cordialement.

Link to comment
Share on other sites

Je comprend que cela risque de poser problème. Disons que d'un ordre partique cela aurais été plus simple. Si un client viens avec un numéro de facture,ce sera pas facile à trouver dans l'historique des commandes. Pas grave, le client devra venir avec son numéro de commande !!!

Pour le RAZ, j'ai trouvé et je dois dire qu'il est même impératif de le mettre par défaut.

Très bonne idée de faire une petite mise à jour avec les différents modules proposer (comme le RAZ).

Bravo encore à tous pour PRESTASHOP, je dois dire que j'en ai fais des CMS avant de trouver le bon. Je ne changerais plus !!!!!!

Link to comment
Share on other sites


Si un client viens avec un numéro de facture,ce sera pas facile à trouver dans l'historique des commandes. Pas grave, le client devra venir avec son numéro de commande !!!


Il suffit simplement de modifier le pdf.php et de faire apparaitre tous les éléments nécessaires !!!

14649_s7UWTZ7cYnNfO4CzoHqD_t

Link to comment
Share on other sites

  • 1 year later...

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