hermes1383 Posted August 17, 2014 Share Posted August 17, 2014 (edited) Bonjour à tous, Je suis sous PS 1.5.6.2. J'ai un soucis avec mon prochain numéro de facture entré dans le BackOffice dans le sous menu Factures. Le fait d'entrer un numéro va modifier PS_START_INVOICE_NUMBER dans la table PS_CONFIGURATION comme l'exemple en ligne 1117 ci dessous. Or lorsque une commande est passée, elle crée automatiquement une ligne équivalente à la 1119 ci-dessous, et donc si je modifie le prochain numéro de facture, le numéro n'est plus pris en compte car il y a deux lignes différentes dans la table... id_configuration id_shop_group id_shop name value 1117 NULL NULL PS_INVOICE_START_NUMBER 356 1119 NULL 1 PS_INVOICE_START_NUMBER Si j’efface ces deux lignes dans la table PS_CONFIGURATION, le fait d'entrer le prochain numéro de facture recrée un ligne comme la 1117 donc tout va bien, mais dés qu'une facture est recrée, la 1119 revient... Mes questions ? 1 - Comment faire pour que je n'aie qu'une seule valeur dans ma table ? Quel fichier crée cette deuxième ligne au lieu de modifier la première ? 2 - Comment faire pour que les numéros de Order-Slip (Avoirs) puissent suivre les numéros de factures et s'intégrer comme des factures ? Je peux transmettre le détail de mes fichiers si nécessaire pour analyse du code. Merci pour votre aide. Hermès Edited August 26, 2014 by hermes1383 (see edit history) Link to comment Share on other sites More sharing options...
ChDUP Posted August 17, 2014 Share Posted August 17, 2014 essayez de renseigner l'id_shop à 1 sur la ligne 1117 et d'effacer la 1119 et voyez si une ligne est recréée après la prochaine commande. Link to comment Share on other sites More sharing options...
hermes1383 Posted August 18, 2014 Author Share Posted August 18, 2014 Bonjour, Merci pour votre réponse mais malheureusement ça ne fonctionne pas. id_configuration id_shop_group id_shop name value 1117 NULL NULL PS_INVOICE_START_NUMBER 356 1119 NULL 1 PS_INVOICE_START_NUMBER La première ligne est créée ou modifiée par le back Office "Factures" quand on rentre le prochain numéro de facture, la deuxième ligne est créée lorsque la facture est créée... j'ai rien trouvé dans order.php qui pourtant UPDATE cette valeur : public static function setLastInvoiceNumber($order_invoice_id, $id_shop) { if (!$order_invoice_id) return false; $number = Configuration::get('PS_INVOICE_START_NUMBER', null, null, $id_shop); // If invoice start number has been set, you clean the value of this configuration if ($number) Configuration::updateValue('PS_INVOICE_START_NUMBER', false, false, null, $id_shop); $sql = 'UPDATE `'._DB_PREFIX_.'order_invoice` SET number ='; if ($number) $sql .= (int)$number; else $sql .= '(SELECT new_number FROM (SELECT (MAX(`number`) + 1) AS new_number FROM `'._DB_PREFIX_.'order_invoice`) AS result)'; $sql .=' WHERE `id_order_invoice` = '.(int)$order_invoice_id; return Db::getInstance()->execute($sql); } Alors j'aimerais savoir quel est le contrôleur ou la classe qui génère cette deuxième ligne au lieu de modifier la première. Merci Hermès Link to comment Share on other sites More sharing options...
ChDUP Posted August 18, 2014 Share Posted August 18, 2014 le core 1.5.6.2 fonctionne bien pour ce qui est des numeros de facture, tu ne devrais pas y toucher apres verif, il est normal d'avoir une ligne dont la valeur devrait être NULL pour l'id_shop 1 et une autre avec une valeur pour l'id_shop NULL (si tu n'es pas en multi boutique) celle pour l'id_shop NULL correspond à ce qui est entré dans le back-office dans le champ "numéro de facture". Ca sert juste à retenir ce que tu as rentré, mais c'est indépendant du prochain numéro de facture qui est écrit en dessous : Mettez un zéro si vous souhaitez conservez le numéro actuel (n°63). ce numéro de la prochaine facture (63 dans mon exemple) il est déterminée par l'auto-increment de la table order_invoice donc en résumé : - tu laisse tes 2 lignes, en rajoutant juste un NULL sur la value de la 1119 - si tu veux changer ton prochain numéro de facture, tu modifies l'auto-increment de order_invoice Link to comment Share on other sites More sharing options...
hermes1383 Posted August 18, 2014 Author Share Posted August 18, 2014 Le soucis est que je ne veux pas que l'utilisateur aille dans la base de données, et tant que cette ligne 1119 n'existe pas, la fonction "prochain numéro de commande" du back office fonctionne ... jusqu'à la création de facture suivante qui recrée la ligne 1119 ( à la fin de la table PS_Configuration évidemment. Pour moi la solution serait d'aller effacer cette ligne 1119 recréée, à la fin du processus de génération de facture. Mais je ne sais pas quel est le fichier qui crée la facture et je ne sais pas coder la requête DELETE en php.... Link to comment Share on other sites More sharing options...
ChDUP Posted August 18, 2014 Share Posted August 18, 2014 DELETE est une commande SQL, pas PHP. tant que cette ligne 1119 n'existe pas, la fonction "prochain numéro de commande" du back office fonctionne ... jusqu'à la création de facture suivante qui recrée la ligne 1119 ( à la fin de la table PS_Configuration évidemment. je ne comprend pas pourquoi vous voulez absolument supprimer cette ligne 1119. En fait, vous n'avez pas expliqué ce que vous souhaitez faire au final ? Link to comment Share on other sites More sharing options...
hermes1383 Posted August 18, 2014 Author Share Posted August 18, 2014 C'est très simple, je souhaite que lorsqu'on souhaite sauter un ou deux numéros de factures (qu'on a créé en boutique et non sur le site), on puisse noter dans la case " numéro de facture " du menu "options des factures", le numéro de la prochaine facture créée par prestashop. Ce qui me semble être le rôle de cette case mais qui ne fonctionne pas chez moi ? La prochaine facture commencera à ce numéro, qui augmentera à chaque nouvelle facture. Link to comment Share on other sites More sharing options...
ChDUP Posted August 18, 2014 Share Posted August 18, 2014 (edited) une facture est une facture, qu'elle soit créée en magasin ou sur le site ne change rien. Prestashop permet d'origine de modifier le prochain numéro de facture par la case que vous citez, et ça fonctionne bien, à moins que vous n'ayez un module qui override ça. Etes-vous certain de ne pas confondre n° de facture et n° de commande ? Edited August 18, 2014 by ChDUP (see edit history) Link to comment Share on other sites More sharing options...
hermes1383 Posted August 18, 2014 Author Share Posted August 18, 2014 Je ne confonds pas... Les numeros de facture d'une entreprise doivent se suivre et il ne doit pas y avoir de trou ou de doublon... c'est pour ça que parfois on édite une facture pour un client qui n'est pas passé par le site et que je dois sauter un ou deux numéros, ou quand je crée un avoir qui prend un numéro bidon et que je dois aller renuméroter pour qu'il s'insère dans mes suites de factures. J'ai donc un module qui dois overrider les numéros de factures, mais je n'ai aucun module de facturation ? Chez vous quel numéro prend un avoir que vous avez créé ? Suit il les numéros de factures ? Link to comment Share on other sites More sharing options...
hermes1383 Posted August 18, 2014 Author Share Posted August 18, 2014 j'ai fait un test avec le thème standard, la réaction est la même... je vais désactiver mes modules un par un sur mon site test pour voir d'où ça vient... Link to comment Share on other sites More sharing options...
ChDUP Posted August 18, 2014 Share Posted August 18, 2014 d'accord d'accord. On va rester sur les factures pour le moment, on verra les avoirs après (bien que je ne suis pas sur d'avoir un client qui les utilise) remettez en place le fonctionnement d'origine de Presta. donc avec les 2 lignes. quand vous modifiez en BO la valeur du prochain numero de facture, est-ce que c'est bien repris sur votre ligne 1117 ? si derrière ça vous créez une commande et que vous editez la facture, a-t-elle bien ce numéro ?PS : je m'absente pour 2 jours et je ne pourrai continuer à vous aider avant mercredi malheureusement, bon courage. Link to comment Share on other sites More sharing options...
hermes1383 Posted August 18, 2014 Author Share Posted August 18, 2014 La modification en BO modifie bien la ligne 1117 mais la facture créée ne se numérote selon cette modification uniquement que si la ligne 1119 est absente, sinon comme il trouve 2 valeurs de PS_INVOICE_START_NUMBER contradictoires, il suit l'autoincrement de PS_ORDER... Link to comment Share on other sites More sharing options...
ChDUP Posted August 20, 2014 Share Posted August 20, 2014 (edited) re avez-vous trouvé une solution ? Au fait, êtes vous en multiboutique ? edit: je viens d'installer un 1.5.6.2 pour faire quelques essais à priori, vous êtes en multiboutique, je me suis placé dans le même contexte. lorsque je modifie mon prochain n° de facture en étant coté admin sur "toutes les boutiques" ça me modifie bien l'equivalent de votre ligne 1117 (et ne servira à rien) lorsque je modifie mon prochain n° de facture en étant coté admin sur "ma boutique 1" ça me modifie bien l'equivalent de votre ligne 1119 et la prochaine facture générée sur cette boutique prend le numéro que j'ai entré lorsque vous modifiez coté admin le prochain numéro de facture en étant placé sur la boutique #1 est-ce que ça modifie bien votre ligne 1119 ? Edited August 20, 2014 by ChDUP (see edit history) Link to comment Share on other sites More sharing options...
hermes1383 Posted August 20, 2014 Author Share Posted August 20, 2014 Bonjour, Merci de revenir vers moi, je ne suis pas en multi-boutique, et seule la ligne 1117 est modifiée par le BO, la 1119 est crée à la création de facture et elle reste toujours à 0. Si j'efface la 1119, tout fonctionne jusqu'à ce qu'une nouvelle facture la recrée. La solution serait de placer un code effaçant cette ligne en fin du contrôleur qui crée la facture ? Link to comment Share on other sites More sharing options...
ChDUP Posted August 20, 2014 Share Posted August 20, 2014 prestashop a déjà bien assez de bugs d'origine, n'en voyez pas là ou il n'y en a pas ! ce que je veux dire, c'est que ce système fonctionne, sans avoir a modifier quoi que ce soit dans le core. Si il ne fonctionne pas chez vous cela vient d'autre chose qui "interfere" le fonctionnement. J'ai refait une install vierge en monoboutique. Effectivement, j'ai l'equivalent de votre ligne 1117 à l'origine, et à la generation de la première facture, j'ai votre ligne 1119 qui se crée. Mais ma facture a bien l'ID que je lui ai demandé d'avoir dans le BO. la 1119 est crée à la création de facture et elle reste toujours à 0. La mienne a une valeur NULL. La votre est à 0 ? Interessons à la table order_invoice. Si vous generez une nouvelle facture en ayant au préalable indiquer le numero 5000 par exemple dans le BO, quel numero prend cette facture ? Link to comment Share on other sites More sharing options...
hermes1383 Posted August 20, 2014 Author Share Posted August 20, 2014 (edited) Ma ligne 1119 a bien une valeur NULL. J'ai tenté de mettre l'autoincrement de PS_order_invoice à 5000, ça me numérote bien la ligne à 5000, mais pas le numéro de facture... L'autoincrement est sur ps_order_id pas sur number. Je teste la désactivation de modules non natifs.... j'ai désinstallé tous les modules non développés par prestashop et remis le thème de base et... toujours la même chose.... Edited August 20, 2014 by hermes1383 (see edit history) Link to comment Share on other sites More sharing options...
ChDUP Posted August 20, 2014 Share Posted August 20, 2014 nonon l'autoincrement il faut bien le laisser. je parlais de modifier la valeur de la prochaine facture dans le Back Office Link to comment Share on other sites More sharing options...
hermes1383 Posted August 20, 2014 Author Share Posted August 20, 2014 La valeur modifiée dans le BO modifie toujours la ligne 1117, pas de soucis. Mais le fonctionnement même sans madules complémentaires, sans cache et avec le thème par défaut reste le m^me qu'expliqué dans le post #14. Link to comment Share on other sites More sharing options...
ChDUP Posted August 21, 2014 Share Posted August 21, 2014 c'est difficile de vous suivre quand vous dites "tout fonctionne jusqu'à la prochaine facture", je ne vois pas ce qui peut fonctionner, puisque ce sont justement les factures qui nous intéresse. donc si votre dernière facture est la numéro 10 et qu'en backoffice vous entrez comme prochain numéro le 20, la prochaine facture aura quand même le numéro 11 ? essayez de voir si vous n'avez pas un override la dessus : renommez votre dossier override (à la racine) et renommez le fichier cache/class_index.php pour voir Link to comment Share on other sites More sharing options...
hermes1383 Posted August 21, 2014 Author Share Posted August 21, 2014 Je veux juste dire que quand j'efface la ligne 1119 dans la base de données, la prochaine facture prend le numéro rentré dans le BO, mais cette même facture a recrée la ligne 1119 donc je ne peux plus utiliser la numérotation du BO tant que je n'ai pas ré-effacé manuellement la ligne 1119.... Ça ne fonctionne qu'une fois et ensuite il faut aller dans la base de données (ce que je ne veux pas qu'un utilisateur autre que moi fasse). Je teste les overrides en milieu d'après midi et je vous tiens au courant. Merci Link to comment Share on other sites More sharing options...
hermes1383 Posted August 21, 2014 Author Share Posted August 21, 2014 j'ai testé le "override" et le "cache/class_index.php" j'ai désactivé et vidé le cache, et .... ça ne marche toujours pas !... Rien ne change... Link to comment Share on other sites More sharing options...
ChDUP Posted August 21, 2014 Share Posted August 21, 2014 alors je ne vois vraiment pas désolé. Link to comment Share on other sites More sharing options...
hermes1383 Posted August 25, 2014 Author Share Posted August 25, 2014 La Forge connait ce bug et a trouvé la solution : http://forge.prestashop.com/browse/PSCFV-10386?jql=text%20~%20%22next%20invoice%20number%22 Réponse : Passez à la version 1.6 !!! C'est pas beau comme support ça !?!? Link to comment Share on other sites More sharing options...
ChDUP Posted August 25, 2014 Share Posted August 25, 2014 pfff mais pas surprenant, malheureusement ... Link to comment Share on other sites More sharing options...
hermes1383 Posted August 26, 2014 Author Share Posted August 26, 2014 (edited) Bonjour, Après une dure journée de labeur (parce que je ne connaissais pas PHP !) j'ai créé un script que j'appelle toutes les minutes avec une tache Cron. Ce script me permet d'effacer ma ligne 1119 en trop (créée par chaque nouvelle facture) pour ceux qui tournent en PS 1.5.6.2 et donc de pouvoir utiliser la fonction Prochain numéro de facture dans le Back Office. Il va chercher le dernier numéro d'avoir et le dernier numéro de facture créés et modifie le prochain numéro de facture à créer en conséquence, il va ensuite mettre ce numéro dans l'Auto_Increment de PS_ORDER_SLIP pour que le prochain numéro d'avoir suive les numéros de factures. Enfin je ne serai plus obligé d'aller modifier dans la base de données mes numéros d'avoirs pour qu'ils suivent les numéros de factures... et comme ça mon comptable est content ! <?phpinclude_once('./config/settings.inc.php'); $connection = mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_) or die("Impossible de se connecter à la base de donnees"); $db = mysql_select_db(_DB_NAME_,$connection); if (mysql_connect (_DB_SERVER_, _DB_USER_, _DB_PASSWD_)); // Effacement de la ligne en trop $sql = "DELETE FROM ps_configuration WHERE name='PS_INVOICE_START_NUMBER' AND id_shop='1'"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // Recherche du numéro du dernier avoir $sql = "SELECT MAX(id_order_slip) FROM ps_order_slip;"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $maxslip=mysql_fetch_array($result); // Recherche du numéro de la dernière facture $sql = "SELECT MAX(number) FROM ps_order_invoice;"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $maxfact=mysql_fetch_array($result); // Recherche du numéro entré en back office $sql = "SELECT value FROM ps_configuration WHERE name='PS_INVOICE_START_NUMBER';"; $res = mysql_query($sql) or die('Erreur SQL !<br>'.$sql."<br>".mysql_error()); $result = mysql_fetch_array($res); $forcefact = $result[0]; // Création des variables nfact prochaine facture nslip prochain avoir $fact = $maxfact[0]; $slip = $maxslip[0]; $nfact = $maxfact[0]+1; $nslip = $maxslip[0]+1; $nouvnum = $nfact; echo ("Derniere facture : "); echo $fact; echo ("<br>Dernier avoir : "); echo $slip; echo ("<br>Numero force en BO : "); echo $forcefact; // Recherche du prochain numéro de facture ou avoir if ($nslip > $nfact):{ echo "<br>Dernier Avoir est plus grand que derniere Facture"; $nouvnum = $nslip; } endif; if ($forcefact > $nouvnum):{ $nouvnum = $forcefact; } endif; echo ("<br>Numero a mettre en place sur Avoir et Factures : "); echo $nouvnum; //Mise en du prochain numéro de facture echo ("<br>Prochain numero de facture mis en place : "); echo $nouvnum; $sql = "UPDATE ps_configuration SET value = ".$nouvnum." WHERE name='PS_INVOICE_START_NUMBER'"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); //Mise en du prochain numéro des avoirs echo ("<br>Prochain numero d avoir mis en place : "); echo $nouvnum; $sql = "ALTER TABLE `ps_order_slip` auto_increment = ".$nouvnum.";"; $result = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); mysql_close(); ?> Je vous donne mon script qui doit être "épouvantable" pour les connaisseurs de PHP, mais il fonctionne ! Je l'ai placé sur la racine de mon site, y a-t'il un problème de sécurité ? Si une âme charitable veut bien jeter un oeil dessus et pourquoi pas le corriger.... vous êtes les bienvenus ! En tout cas voici un problème de réglé ! Hermès CODE MODIFIE LE 30/08/2014 Edited August 30, 2014 by hermes1383 (see edit history) Link to comment Share on other sites More sharing options...
helascapclem Posted February 8, 2017 Share Posted February 8, 2017 Bonjour, je tente le coup sur forum, en esperant que quelqu'un puisse m'aider. J'ai un probleme entre mes avoirs et factures. Je vous donne un exemple : Le montant HT affiché sur la facture est de 66,33 HT pour un montant TTC de 79,6 TTCPourquoi sur l'avoir il est inscris 66,33 TTC et non pas 66,33 HT ou 79,6 TTC Quelqu'un serait ou gerer ce probleme?Merci beaucoup.Clem. 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