Bienvenue invité ( Connexion | Inscription )
![]() ![]() |
11 Sep 2004, 21:00
Message
#1
|
|
|
Ceinture verte OSC Groupe : Membres Messages : 697 Inscrit : 11-September 04 Membre no 3237 |
J'ai essayé de régler le problème de numéros de factures qui ne se suivaient pas et qui agacaient mon comptable.
Voici une proposition développée à partir de la ms2fr de monsieur Delaballe. C'est très certainement perfectible, donc ne m'en voulez pas. Les numéros de lignes indiquées sur les numéros pris sur une version vierge de toutes contributions. Pour rappel, avant d'installation une contribution d'un(e) inconnu(e), on sauvegarde. Pour ici, il faut sauvegarder ses pages de scripts et sa base de données. - il s'agit d'une contribution débrayable par l'admin, c'est à dire que si vous ne voulez plus l'utiliser, vous retrouver le mode de fonctionnement standard de votre boutique. - il s'agit d'attribuer un numéro de facture unique à chaque vente réputée définitive, telle que l'avait voulu la personne qui a demandé ce développement. - le numéro de facture est un compteur numérique séquentiel : 1, 2, 3, 4, 5, ... - un numéro de facture est attribué quand une commande atteint un certain état. Par défaut, ici, le statut "Livré", correspondant à l'id 3, déclenche un numéro de facture. Le numéro de l'état déclenchant est modifiable par la console d'aministration. Si par exemple, un vendeur souhaite attribuer un numéro de facture quand une commande est à l'état "En cours de traitement", il codera l'id 2. - aucun support par MP pour ces bouts de code : si nécessaire les réponses seront apportées dans le forum pour que tout le monde en profite. CODE CREATE TABLE `invoice_counter` ( `invoice_id` int(11) NOT NULL default '0', `invoice_counter` int(11) NOT NULL default '0', KEY `invoice_id` (`invoice_id`) ) TYPE=MyISAM; # # Contenu de la table `invoice_counter` # INSERT INTO `invoice_counter` VALUES (1, 1); CODE INSERT INTO `configuration_group` VALUES (421, 'Options Facture', 'Options pour les factures', 421, 1); INSERT INTO `configuration` VALUES ('', 'Calcul d un numéro de facture différent du numéro de commande', 'AUTORISE_NUMERO_FACTURE', 'true', 'Calcule un numéro de facture à chaque vente effective', 421, 2, '2004-06-20 18:16:28', '2003-07-17 10:29:22', NULL, 'tep_cfg_select_option(array(\'true\', \'false\'),'); INSERT INTO `configuration` VALUES ('', 'Statut générant une facture', 'STATUT_GENERANT_FACTURE', '3', 'Statut d une commande permettant l attribution d un numéro de facture unique', 421, 1, '2004-06-12 22:53:27', '2003-07-17 10:29:22', NULL, NULL); CODE ALTER TABLE `orders` ADD `orders_numero_facture` INT( 11 ) NOT NULL; En ligne 27, remplacer : CODE $order_query = tep_db_query("select customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'"); par CODE $order_query = tep_db_query("select customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified, orders_numero_facture from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'"); En ligne 45, remplacer : CODE 'last_modified' => $order['last_modified']); par CODE 'last_modified' => $order['last_modified'], 'orders_numero_facture' => $order['orders_numero_facture']); En ligne 19, remplacer : CODE $orders_query = tep_db_query("select orders_id from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'"); par CODE $orders_query = tep_db_query("select orders_id, orders_numero_facture from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'"); En ligne 35, remplacer : CODE <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo nl2br(STORE_NAME_ADDRESS); ?></td> <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'oscommerce.gif', 'osCommerce', '204', '50'); ?></td> </tr> </table></td> </tr> par CODE <tr> <td><table border="0" align="center" width="100%" cellspacing="0" cellpadding="0"> <tr> <td><table border="0" align="center" width="75%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo nl2br(STORE_NAME_ADDRESS); ?></td> <td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES . 'oscommerce.gif', 'osCommerce', '204', '50'); ?></td> </tr> <tr align="left"> <td colspan="2" class="titleHeading"><?php echo tep_draw_separator('pixel_trans.gif', '1', '30'); ?></td> </tr> <tr> <?php if (AUTORISE_NUMERO_FACTURE == 'true') { if ($order->info['orders_numero_facture'] == 0) { ?> <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_ORDER . $oID; ?></b></td> <?php } else { ?> <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_INVOICE . $order->info['orders_numero_facture']; ?></b></td> <?php } } else { ?> <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_ORDER . $oID; ?></b></td> <?php } ?> </tr> <tr align="left"> <td colspan="2" class="titleHeading"><?php echo tep_draw_separator('pixel_trans.gif', '1', '30'); ?></td> </tr> </table></td> </tr> </table></td> </tr> En ligne 37, remplacer : CODE $check_status_query = tep_db_query("select customers_name, customers_email_address, orders_status, date_purchased from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'"); Par CODE $check_status_query = tep_db_query("select customers_name, customers_email_address, orders_status, date_purchased, orders_numero_facture from " . TABLE_ORDERS . " where orders_id = '" . (int)$oID . "'"); En ligne 41, remplacer : CODE tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . tep_db_input($status) . "', last_modified = now() where orders_id = '" . (int)$oID . "'"); Par CODE tep_db_query("update " . TABLE_ORDERS . " set orders_status = '" . tep_db_input($status) . "', last_modified = now() where orders_id = '" . (int)$oID . "'"); if (AUTORISE_NUMERO_FACTURE == 'true') { if (tep_db_input($status) == STATUT_GENERANT_FACTURE) { $check_invoice_counter_query = tep_db_query("select invoice_counter from " . TABLE_INVOICE_COUNTER . " where invoice_id = '1'"); $check_invoice_counter = tep_db_fetch_array($check_invoice_counter_query); $numero_facture = $check_invoice_counter['invoice_counter'] + 1; if ($check_status['orders_numero_facture'] == 0) { tep_db_query("update " . TABLE_INVOICE_COUNTER . " set invoice_counter = '" . $numero_facture . "' where invoice_id = '1'"); tep_db_query("update " . TABLE_ORDERS . " set orders_numero_facture = '" . $numero_facture . "', last_modified = now() where orders_id = '" . (int)$oID . "'"); } else { $messageStack->add_session(WARNING_ORDER_WITH_NUMERO, 'warning'); } } } CODE define('WARNING_ORDER_WITH_NUMERO', 'Attention : Un nouveau numéro de facture n\'a pas été généré, car la commande avait déjà fait l\'objet d\'une facture.'); CODE define('TABLE_INVOICE_COUNTER', 'invoice_counter'); CODE define('TITLE_PRINT_ORDER', 'Commande N° '); define('TITLE_PRINT_INVOICE', 'Facture N° '); J'espère que cela pourra servir à quelqu'un, chez moi, cela a l'air de marcher. |
|
|
11 Sep 2004, 23:25
Message
#2
|
|
|
Ceinture orange+ OSC Groupe : Membres Messages : 357 Inscrit : 18-July 03 Membre no 1312 |
Salut,
On en avait déjà parlé un peu là: http://www.oscommerce-fr.info/forum/index....showtopic=10557 Merci pour ta soluce, je testerai la tienne et l'autre. -------------------- MS2 - tva intracommunautaire - n° facture séquentiel (merci blanche neige!) - ticket support - programme d'affiliation - Ultimate SEO - header tag- discountplus.
|
|
|
23 Nov 2004, 00:41
Message
#3
|
|
|
Ceinture verte OSC Groupe : Membres Messages : 524 Inscrit : 6-October 04 Membre no 3427 |
Blanche Neige!
J'ai essayé la méthode décrite et cela fonctionne pour moi. Toutefois comment faire pour que le n° de facture ne commence pas par 1 mais plutôt par 10000 ou autre. Faut-i l pour cela modifier les 2 tables : orders et invoice_number? J'ai modifié l'entrée invoice_counter de la table invoice_number ms cela ne fonctionne pas. D'avance merci! NB : Félicitations pour ce code qui a dû en dépanner plus d'un j'en suis sûre! |
|
|
23 Nov 2004, 20:52
Message
#4
|
|||
|
Ceinture jaune+ OSC Groupe : Membres Messages : 135 Inscrit : 26-October 04 Lieu : Péage De Vizille (38 Isère) Membre no 3590 |
6) Dans catalog/admin/orders.php $numero_facture = $check_invoice_counter['invoice_counter'] + 1; change le chiffre par le chiffre désiré : exemple 555(en rouge) $numero_facture = $check_invoice_counter['invoice_counter'] + 555; Sébastien PS: Bravo pour ce code -------------------- Creload+Oscomerce 2.2ms2 =>Modules complémentaires dans leur ordre d'insertion:
Atos+payment atos 5 00-2.2.3+Custom PC Creator 2.0.2+OSC2.2MS2 1+Easy Populate 2.74-MS2+Best_sellers_V2+RMA_Returns_2.4.1+Whos online with country and flag+module DEVIS 1.00-MS2 |
||
|
|
23 Nov 2004, 20:52
Message
#5
|
|
|
Ceinture verte OSC Groupe : Membres Messages : 697 Inscrit : 11-September 04 Membre no 3237 |
Si c'est bien la table invoice_counter, mais c'est le second champs qu'il faut mettre à 10000, le premier étant la clé est devant restée à 1 |
|
|
23 Nov 2004, 21:05
Message
#6
|
|||||
|
Ceinture verte OSC Groupe : Membres Messages : 524 Inscrit : 6-October 04 Membre no 3427 |
Merci W&W! Je vais essayer de voir si je ne peux pas agir sur le n° de la commande via la table auquel cas j'aurais recours à ta méthode!! Merci encore. |
||||
|
|
23 Nov 2004, 21:06
Message
#7
|
|||
|
Ceinture verte OSC Groupe : Membres Messages : 524 Inscrit : 6-October 04 Membre no 3427 |
Je viens de refaire une tentative mais cela ne passe. Sans doute faut-il vider la table? Y a-t-il un risque de la faire? Merci Blanche Neige! |
||
|
|
24 Nov 2004, 01:26
Message
#8
|
|
![]() 5eme dan OSC Groupe : Administrateur Messages : 7619 Inscrit : 28-December 03 Lieu : Hollywood les Granits Membre no 1773 |
C'est couillon, mais moi j'ai juste rajouté le statut "Annulé" pour mes factures qui le sont, donc ca se suit quand même d'une certaine manière.
(Quel fainéant cet oneill) -------------------- |
|
|
24 Nov 2004, 20:21
Message
#9
|
|||
|
Ceinture verte OSC Groupe : Membres Messages : 697 Inscrit : 11-September 04 Membre no 3237 |
Fainéant d'accord (c'est plutôt une vertu). Mais c'est toi qui avait demandé ce développement...... |
||
|
|
24 Nov 2004, 20:49
Message
#10
|
|
![]() 5eme dan OSC Groupe : Administrateur Messages : 7619 Inscrit : 28-December 03 Lieu : Hollywood les Granits Membre no 1773 |
Fainéant et lâche en plus.... (Je trouvais que vous trainiez un peu)
![]() Eh, bravo à vous. Post à durée de vie limite -------------------- |
|
|
25 Nov 2004, 02:19
Message
#11
|
|
|
Ceinture verte OSC Groupe : Membres Messages : 566 Inscrit : 19-May 02 Lieu : Poligny 39 Membre no 190 |
Quelque part Oneil à raison puisqu'en comptabilitié, il y a un compte pour les clients qui n'ont pas payé leur commande ce qui fait que les numéros peuvent se suivrent à condition de s'en servir.
Fainéant aussi le Pitstop... -------------------- OSc MS1 Tuning
|
|
|
4 Dec 2004, 18:25
Message
#12
|
|
|
Ceinture orange+ OSC Groupe : Membres Messages : 400 Inscrit : 10-February 04 Lieu : idf france Membre no 1963 |
Juste un gros bravo à Blanche neige pour ce bout de code bien pratique.
-------------------- Version Osc 2.2 MS2 Delaballe
|
|
|
12 Dec 2004, 17:28
Message
#13
|
|
|
Ceinture orange OSC Groupe : Membres Messages : 237 Inscrit : 25-March 02 Membre no 106 |
Hello,
Extra cette contrib, juste une merde (petite), j'arrive pas à mettre un espace entre "facture" et "n°de facture" <?php if (AUTORISE_NUMERO_FACTURE == 'true') { if ($order->info['orders_numero_facture'] == 0) { ?> <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_ORDER . $oID; ?></b></td> <?php } else { ?> <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_INVOICE . $order->info['orders_numero_facture']; ?></b></td> <?php } } else { ?> <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_ORDER . $oID; ?></b></td> je pense que c'est dans ce bout de code. Merci jm -------------------- MS2 FR : InfoBox Admin, Admin Access level, Newsletter, chèque cadeau, login box,
A venir, Affiliate, Point fidélité, RMA return, Callback et plein d'autre encore. |
|
|
12 Dec 2004, 17:35
Message
#14
|
|||
|
5eme dan OSC Groupe : Membres Messages : 17048 Inscrit : 26-November 03 Lieu : Chez moi Membre no 1669 |
Normalement, si tu as copié le code de blancheneige, tu devrais avoir un blanc :
Tu peux aussi rajouter le blanc dans le code que tu nous as montré en remplacant TITLE_PRINT_INVOICE par TITLE_PRINT_INVOICE . ' ' |
||
|
|
12 Dec 2004, 23:46
Message
#15
|
|
|
Ceinture blanche+ OSC Groupe : Membres Messages : 35 Inscrit : 1-January 04 Membre no 1784 |
Merci beaucoup pour ce superbe code !!!!! j'ai teste c'est genial tout est ok pour moi...
BRAVO -------------------- Version MS2
|
|
|
14 Dec 2004, 21:34
Message
#16
|
|
|
Ceinture orange OSC Groupe : Membres Messages : 237 Inscrit : 25-March 02 Membre no 106 |
Merci mon ami,
Effectivement une erreur dans french/invoice.php, un doublon dans les define.... Désolé mais surtout merci. -------------------- MS2 FR : InfoBox Admin, Admin Access level, Newsletter, chèque cadeau, login box,
A venir, Affiliate, Point fidélité, RMA return, Callback et plein d'autre encore. |
|
|
13 Jan 2005, 03:41
Message
#17
|
|
|
Ceinture orange+ OSC Groupe : Membres Messages : 357 Inscrit : 18-July 03 Membre no 1312 |
Bonjour à tous,
ça marche super, merci pour ton boulot, blancheneige. Faudrait juste un dernier truc, c'est de stocker la date de la facture. Se servir de la date d'achat qui se trouve dans "Table orders", c'est pas top car tu peux alors te retrouver avec une facture N°10 qui a une date antérieure à la facture N°1. Mettre la date du jour, c'est facile mais si tu resors ta facture une semaine + tard, elle n'aura pas la même date. J'en demande p'tet beaucoup mais c'est pour faire avancer le smiliblick. Merci aux codeurs. -------------------- MS2 - tva intracommunautaire - n° facture séquentiel (merci blanche neige!) - ticket support - programme d'affiliation - Ultimate SEO - header tag- discountplus.
|
|
|
10 Mar 2005, 19:15
Message
#18
|
|
|
Ceinture blanche+ OSC Groupe : Membres Messages : 23 Inscrit : 25-February 05 Membre no 4907 |
Bonjour, bravo et merci pour ce code.
Juste une question, comment faire pour rajouter en "dur" (dans la base de donnée, pour reprendre le post précédent) la date d'émission de la facture, qui peut-être différente de la commande? Merci, Marc. Peut-être pourriez vous m'indiquez la voie, je débute avec osCommerce.... |
|
|
31 Mar 2005, 13:04
Message
#19
|
|||
|
Ceinture orange+ OSC Groupe : Membres Messages : 357 Inscrit : 18-July 03 Membre no 1312 |
voila une question qu'elle est bonne -------------------- MS2 - tva intracommunautaire - n° facture séquentiel (merci blanche neige!) - ticket support - programme d'affiliation - Ultimate SEO - header tag- discountplus.
|
||
|
|
27 Apr 2005, 22:54
Message
#20
|
|
|
Ceinture blanche+ OSC Groupe : Membres Messages : 21 Inscrit : 3-March 05 Membre no 4994 |
salut tous le monde !
je viens de mettre cette contrib ! nikel ... et j'ai ajouté la date de facture dans la BD la date au moment de valider l'etat "expedié" (dans mon cas) est mise comme date de facture et ne change pas ainsi ! j'ai juste fait les modif sur mon site, alors si certains le veulent postez moi je ferais un detail pour expliquer ! @++ je suis toujours a la recherche de la contrib pour expinet, logiciel de la poste (imprim auto des noms/adresse) merci ! -------------------- oscom MS2 + FR + contrib sur mutualisé 90plan
|
|
|
2 May 2005, 15:58
Message
#21
|
|||||||||||||||||||||||||||||||||||||
|
Ceinture blanche+ OSC Groupe : Membres Messages : 21 Inscrit : 3-March 05 Membre no 4994 |
voici une reprise de la contrib de blanche neige avec la modif pour l'affichage de la date ! en espérant ne pas avoir oublié de ligne (mon code est adapté à mon site qui diffère de la version de base) bonne continuation ! Bpe33 [edit fissiaux : je repasse derrière ton post pour mettre le code entre les bonnes balises. Bravo] 0) Principes - il s'agit d'une contribution débrayable par l'admin, c'est à dire que si vous ne voulez plus l'utiliser, vous retrouver le mode de fonctionnement standard de votre boutique. - il s'agit d'attribuer un numéro de facture unique à chaque vente réputée définitive, telle que l'avait voulu la personne qui a demandé ce développement. - le numéro de facture est un compteur numérique séquentiel : 1, 2, 3, 4, 5, ... - un numéro de facture est attribué quand une commande atteint un certain état. Par défaut, ici, le statut "Livré", correspondant à l'id 3, déclenche un numéro de facture. Le numéro de l'état déclenchant est modifiable par la console d'aministration. Si par exemple, un vendeur souhaite attribuer un numéro de facture quand une commande est à l'état "En cours de traitement", il codera l'id 2. - aucun support par MP pour ces bouts de code : si nécessaire les réponses seront apportées dans le forum pour que tout le monde en profite. 1) Sous PHPMYADMIN, création de la table des compteurs de factures :
2) Sous PHPMYADMIN, insertion de la configuration dans la base de données
3) Sous PHPMYADMIN, création d'un nouveau champ sur une commande qui contiendra le numéro de facture
4) Dans catalog/admin/includes/classes/order.php En ligne 27, remplacer :
par
En ligne 45, remplacer :
par
5) Dans catalog/admin/invoice.php En ligne 19, remplacer :
par
En ligne 35, remplacer :
par
6) Dans catalog/admin/orders.php En ligne 37, remplacer :
Par
En ligne 41, remplacer :
Par
7) Dans catalog/admin/languages/xxxx/orders.php, rajouter (à faire pour toutes les langues de l'admin):
Dans catalog/admin/includes/database_tables.php, rajouter :
9) Dans catalog/admin/includes/languages/xxxx/invoice.php, rajouter :
-------------------- oscom MS2 + FR + contrib sur mutualisé 90plan
|
||||||||||||||||||||||||||||||||||||
|
|
6 Dec 2005, 13:05
Message
#22
|
|||||
|
Ceinture jaune OSC Groupe : Membres Messages : 68 Inscrit : 18-July 05 Lieu : Paris Membre no 6539 |
Bonjour, C'est super, ca marche nickel chez moi ! Merci blancheneige et bpe33. j'ai simplement changé dans catalog/admin/invoice.php
par
dans un souci de prsentation pour que l'affichage de la date de la facture soit du même type que celui de la date de la commande.
Maintenant je voudrais que le client puisse lui même éditer sa facture, j'ai donc fait le nécessaire afin que le catalog\printinvoice.php soit OK. et ce que je souhaite, c'est dans catalog\account_history_info.php avoir en bas lorsque c'est une facture que le bouton IMPRIMER affiche le fichier printinvoice.php à la place du printorder.php Je ne trouve pas le fichier qui génère cette page catalog\account_history_info.php j'ai regardé main_page.tpl.php Merci de vos réponses, Jacques -------------------- osCommerce MS2
CRE Loaded6 v4 Fr Sp1.2 RC2 |
||||
|
|
6 Dec 2005, 20:08
Message
#23
|
|
|
5eme dan OSC Groupe : Membres Messages : 17048 Inscrit : 26-November 03 Lieu : Chez moi Membre no 1669 |
Très probablement dans catalog/templates/content/account_history_info.tpl.php |
|
|
6 Dec 2005, 22:16
Message
#24
|
|||
|
Ceinture jaune OSC Groupe : Membres Messages : 68 Inscrit : 18-July 05 Lieu : Paris Membre no 6539 |
Merci fissiaux ! voici le code qui était tout prêt et qui ne demandait qu'a être modifié :
Bonsoir, Jacques -------------------- osCommerce MS2
CRE Loaded6 v4 Fr Sp1.2 RC2 |
||
|
|
4 Mar 2006, 00:18
Message
#25
|
|
|
Ceinture blanche OSC Groupe : Membres Messages : 4 Inscrit : 29-January 06 Membre no 8787 |
Pour répondre (tardivement) à a_marie2000 et pour ceux qui suivront, il y a une petite erreur dans le code fournit par bpe33.
Dans : 4) Dans catalog/admin/includes/classes/order.php En ligne 45, remplacer : CODE 'last_modified' => $order['last_modified']); par CODE 'last_modified' => $order['last_modified'], 'orders_numero_facture' => $order['orders_numero_facture']); 'orders_date_facture' => $order['orders_date_facture']); Il faut en réalité remplacer par : CODE 'last_modified' => $order['last_modified'], 'orders_numero_facture' => $order['orders_numero_facture'], 'orders_date_facture' => $order['orders_date_facture']); -------------------- -----------------------
OSc MS2fr + STS ----------------------- |
|
|
![]() ![]() |
|
Version bas débit | Nous sommes le : 19th June 2013 - 01:08 |
| Ce site est déclaré auprès de la commision Nationale de l'Informatique et des Libertés (déclaration n°: 1043896) |