Jump to content

[Résolu] Incrémentation du prochain numéro de facture ou avoir


Recommended Posts

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 by hermes1383 (see edit history)
Link to comment
Share on other sites

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

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

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

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

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

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 by ChDUP (see edit history)
Link to comment
Share on other sites

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

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

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

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 by ChDUP (see edit history)
Link to comment
Share on other sites

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

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

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 by hermes1383 (see edit history)
Link to comment
Share on other sites

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

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

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 by hermes1383 (see edit history)
Link to comment
Share on other sites

  • 2 years later...

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 TTC

Pourquoi 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

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