stephan Posted September 9, 2009 Share Posted September 9, 2009 Bonjour,Une petite question, je souhaite que mes factures soient de la formeAnnée Mois Jour / N° par jour sur 4 chiffresce qui fait par exemple 200909100001Le 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)MErciCordialement Link to comment Share on other sites More sharing options...
stephan Posted September 10, 2009 Author Share Posted September 10, 2009 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 _ordersChamps 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.phpRemplacer $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 !!! Link to comment Share on other sites More sharing options...
stephan Posted September 10, 2009 Author Share Posted September 10, 2009 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 More sharing options...
Jean-Bruno Posted September 25, 2009 Share Posted September 25, 2009 Bonjour à tousce serait possible de diminuer le nombre de 0 avec ta solution stephan ?Du genre aujourd'hui j'ai des factures du type FA00125et les transformer en FA090125 ?Ta solution ça donne quel type de nom ?Merci d'avance Link to comment Share on other sites More sharing options...
stephan Posted September 25, 2009 Author Share Posted September 25, 2009 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 More sharing options...
Jean-Bruno Posted September 25, 2009 Share Posted September 25, 2009 cool je teste et je rapporte ;-) Link to comment Share on other sites More sharing options...
Jean-Bruno Posted September 25, 2009 Share Posted September 25, 2009 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 More sharing options...
Jean-Bruno Posted September 25, 2009 Share Posted September 25, 2009 PardonJ'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 More sharing options...
stephan Posted September 25, 2009 Author Share Posted September 25, 2009 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 More sharing options...
stephan Posted September 25, 2009 Author Share Posted September 25, 2009 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 More sharing options...
Jean-Bruno Posted September 25, 2009 Share Posted September 25, 2009 merci Stephanpas de problème je touche pas au bling bling ;-) Link to comment Share on other sites More sharing options...
stephan Posted September 29, 2009 Author Share Posted September 29, 2009 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)09F090001On 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 More sharing options...
La Matrice Du 67 Posted November 18, 2009 Share Posted November 18, 2009 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 More sharing options...
stephan Posted November 18, 2009 Author Share Posted November 18, 2009 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 More sharing options...
La Matrice Du 67 Posted November 18, 2009 Share Posted November 18, 2009 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 More sharing options...
stephan Posted November 18, 2009 Author Share Posted November 18, 2009 - 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 More sharing options...
La Matrice Du 67 Posted November 18, 2009 Share Posted November 18, 2009 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 More sharing options...
stephan Posted November 18, 2009 Author Share Posted November 18, 2009 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 More sharing options...
stephan Posted November 18, 2009 Author Share Posted November 18, 2009 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 More sharing options...
La Matrice Du 67 Posted November 18, 2009 Share Posted November 18, 2009 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 More sharing options...
stephan Posted November 18, 2009 Author Share Posted November 18, 2009 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 !!! Link to comment Share on other sites More sharing options...
stephan Posted November 18, 2009 Author Share Posted November 18, 2009 Idem pour le bordereau ! Link to comment Share on other sites More sharing options...
La Matrice Du 67 Posted November 18, 2009 Share Posted November 18, 2009 Dès que j'aurais plus de temps j'irais voir pour personnaliser le fichier.pdf (il est un peu gros le fichier !!!!!).Dernière petite question, comment joindre le fichier PDF à la facture envoyer par mail. Link to comment Share on other sites More sharing options...
Ibost Posted February 20, 2011 Share Posted February 20, 2011 Bonjour et bravo pour ce petit mod.Personnellement je suis toujours obligé de renommer les factures selon la structure suivante :AAAAMMJJ-NomClient.pdfAs-tu une solution à m'apporter s'il te plait ? 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