osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

6 Pages V   1 2 3 > »   
Reply to this topicStart new topic
> [Astuce]Proposition pour les numéros de facture, unique et séquentiel
blancheneige
posté 11 Sep 2004, 21:00
Message #1


Ceinture verte OSC
Icône de groupe

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.




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


arrow.gif 1) Sous PHPMYADMIN, création de la table des compteurs de factures :


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);



arrow.gif 2) Sous PHPMYADMIN, insertion de la configuration dans la base de données

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);



arrow.gif 3) Sous PHPMYADMIN, création d'un nouveau champ sur une commande qui contiendra le numéro de facture

CODE
ALTER TABLE `orders` ADD `orders_numero_facture` INT( 11 ) NOT NULL;



arrow.gif 4) Dans catalog/admin/includes/classes/order.php

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']);



arrow.gif 5) Dans catalog/admin/invoice.php

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>



arrow.gif 6) Dans catalog/admin/orders.php

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');
               }
             }
           }



arrow.gif 7) Dans catalog/admin/languages/xxxx/orders.php, rajouter (à faire pour toutes les langues de l'admin):

CODE
define('WARNING_ORDER_WITH_NUMERO', 'Attention : Un nouveau num&eacute;ro de facture n\'a pas &eacute;t&eacute; g&eacute;n&eacute;r&eacute;, car la commande avait d&eacute;j&agrave; fait l\'objet d\'une facture.');



arrow.gif cool.gif Dans catalog/admin/includes/database_tables.php, rajouter :

CODE
define('TABLE_INVOICE_COUNTER', 'invoice_counter');



arrow.gif 9) Dans catalog/admin/includes/languages/xxxx/invoice.php, rajouter :

CODE
define('TITLE_PRINT_ORDER', 'Commande N&deg; ');
define('TITLE_PRINT_INVOICE', 'Facture N&deg; ');


J'espère que cela pourra servir à quelqu'un, chez moi, cela a l'air de marcher.
Go to the top of the page
 
tom555
posté 11 Sep 2004, 23:25
Message #2


Ceinture orange+ OSC
Icône de groupe

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.

wink.gif


--------------------
MS2 - tva intracommunautaire - n° facture séquentiel (merci blanche neige!) - ticket support - programme d'affiliation - Ultimate SEO - header tag- discountplus.
Go to the top of the page
 
angiez
posté 23 Nov 2004, 00:41
Message #3


Ceinture verte OSC
Icône de groupe

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! biggrin.gif

NB : Félicitations pour ce code qui a dû en dépanner plus d'un j'en suis sûre!
Go to the top of the page
 
Webby And Wappy
posté 23 Nov 2004, 20:52
Message #4


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 135
Inscrit : 26-October 04
Lieu : Péage De Vizille (38 Isère)
Membre no 3590



QUOTE (angiez @ 23 nov 2004, 00:41)
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! biggrin.gif

NB : Félicitations pour ce code qui a dû en dépanner plus d'un j'en suis sûre!


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;


excl.gif puis valide une commande (livraison incluse).

excl.gif ensuite remet la valeur +1 (indiqué en rouge ci-dessus)


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
Go to the top of the page
 
blancheneige
posté 23 Nov 2004, 20:52
Message #5


Ceinture verte OSC
Icône de groupe

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
Go to the top of the page
 
angiez
posté 23 Nov 2004, 21:05
Message #6


Ceinture verte OSC
Icône de groupe

Groupe : Membres
Messages : 524
Inscrit : 6-October 04
Membre no 3427



QUOTE (Webby And Wappy @ 23 nov 2004, 14:52)
QUOTE (angiez @ 23 nov 2004, 00:41)
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!  biggrin.gif

NB : Félicitations  pour ce code qui a dû en dépanner plus d'un j'en suis sûre!


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;


excl.gif puis valide une commande (livraison incluse).

excl.gif ensuite remet la valeur +1 (indiqué en rouge ci-dessus)


Sébastien

PS: Bravo pour ce code

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. smile.gif
Go to the top of the page
 
angiez
posté 23 Nov 2004, 21:06
Message #7


Ceinture verte OSC
Icône de groupe

Groupe : Membres
Messages : 524
Inscrit : 6-October 04
Membre no 3427



QUOTE (blancheneige @ 23 nov 2004, 14:52)
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

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! smile.gif
Go to the top of the page
 
oneill
posté 24 Nov 2004, 01:26
Message #8


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7634
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)


--------------------
Go to the top of the page
 
blancheneige
posté 24 Nov 2004, 20:21
Message #9


Ceinture verte OSC
Icône de groupe

Groupe : Membres
Messages : 697
Inscrit : 11-September 04
Membre no 3237



QUOTE (oneill @ 24 nov 2004, 01:26)

(Quel fainéant cet oneill)


Fainéant d'accord (c'est plutôt une vertu). Mais c'est toi qui avait demandé ce développement...... biggrin.gif
Go to the top of the page
 
oneill
posté 24 Nov 2004, 20:49
Message #10


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7634
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)

user posted image


Eh, bravo à vous.


Post à durée de vie limite


--------------------
Go to the top of the page
 
pitstop
posté 25 Nov 2004, 02:19
Message #11


Ceinture verte OSC
Icône de groupe

Groupe : Membres
Messages : 569
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... smile.gif


--------------------
OSc 2.3 Tuning
Go to the top of the page
 
hermosilla
posté 4 Dec 2004, 18:25
Message #12


Ceinture orange+ OSC
Icône de groupe

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


--------------------
Version Osc 2.2 MS2 Delaballe
Go to the top of the page
 
jeanmarie
posté 12 Dec 2004, 17:28
Message #13


Ceinture orange OSC
Icône de groupe

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.
Go to the top of the page
 
fissiaux
posté 12 Dec 2004, 17:35
Message #14


5eme dan OSC
Icône de groupe

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 :

CODE
define('TITLE_PRINT_ORDER', 'Commande N&deg; ');
define('TITLE_PRINT_INVOICE', 'Facture N&deg; ');



Tu peux aussi rajouter le blanc dans le code que tu nous as montré en remplacant

TITLE_PRINT_INVOICE

par

TITLE_PRINT_INVOICE . ' '
Go to the top of the page
 
Capucine
posté 12 Dec 2004, 23:46
Message #15


Ceinture blanche+ OSC
Icône de groupe

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
Go to the top of the page
 
jeanmarie
posté 14 Dec 2004, 21:34
Message #16


Ceinture orange OSC
Icône de groupe

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.
Go to the top of the page
 
tom555
posté 13 Jan 2005, 03:41
Message #17


Ceinture orange+ OSC
Icône de groupe

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

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


--------------------
MS2 - tva intracommunautaire - n° facture séquentiel (merci blanche neige!) - ticket support - programme d'affiliation - Ultimate SEO - header tag- discountplus.
Go to the top of the page
 
thedream
posté 10 Mar 2005, 19:15
Message #18


Ceinture blanche+ OSC
Icône de groupe

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

Go to the top of the page
 
tom555
posté 31 Mar 2005, 13:04
Message #19


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 357
Inscrit : 18-July 03
Membre no 1312



QUOTE (thedream @ 10 mar 2005, 19:15)
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....

voila une question qu'elle est bonne biggrin.gif


--------------------
MS2 - tva intracommunautaire - n° facture séquentiel (merci blanche neige!) - ticket support - programme d'affiliation - Ultimate SEO - header tag- discountplus.
Go to the top of the page
 
bpe33
posté 27 Apr 2005, 22:54
Message #20


Ceinture blanche+ OSC
Icône de groupe

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 ! idea.gif

@++

je suis toujours a la recherche de la contrib pour expinet, logiciel de la poste (imprim auto des noms/adresse) sad.gif

merci ! biggrin.gif


--------------------
oscom MS2 + FR + contrib sur mutualisé 90plan
Go to the top of the page
 
bpe33
posté 2 May 2005, 15:58
Message #21


Ceinture blanche+ OSC
Icône de groupe

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 :




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);





2) Sous PHPMYADMIN, insertion de la configuration dans la base de données



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);




3) Sous PHPMYADMIN, création d'un nouveau champ sur une commande qui contiendra le numéro de facture



CODE
ALTER TABLE `orders` ADD `orders_numero_facture` INT( 11 ) NOT NULL;
ALTER TABLE `orders` ADD `orders_date_facture` DATETIME NULL;



4) Dans catalog/admin/includes/classes/order.php

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, orders_date_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']);
                        'orders_date_facture' => $order['orders_date_facture']);




5) Dans catalog/admin/invoice.php

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, orders_date_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>
<?php
         if (AUTORISE_NUMERO_FACTURE == 'true') {
             
            if ($order->info['orders_date_facture'] == 0) {
?>
          <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_DATEINVOICE  . "pas attribué"; ?></b></td>
<?php
            } else {
?>
          <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_DATEINVOICE  . tep_datetime_short($order->info['orders_date_facture']); ?></b></td>
<?php
            }
          } else {
?>
          <td colspan="2" align="center" class="titleHeading"><b><?php echo TITLE_PRINT_DATEINVOICE  . "pas attribué"; ?></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>




6) Dans catalog/admin/orders.php

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, 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 . "'");
   tep_db_query("update " . TABLE_ORDERS . " set orders_date_facture = now() where orders_id = '" . (int)$oID . "'");
             } else {
               $messageStack->add_session(WARNING_ORDER_WITH_NUMERO, 'warning');
             }
           }
         }




7) Dans catalog/admin/languages/xxxx/orders.php, rajouter (à faire pour toutes les langues de l'admin):



CODE
define('WARNING_ORDER_WITH_NUMERO', 'Attention : Un nouveau num&eacute;ro de facture n\'a pas &eacute;t&eacute; g&eacute;n&eacute;r&eacute;, car la commande avait d&eacute;j&agrave; fait l\'objet d\'une facture.');




Dans catalog/admin/includes/database_tables.php, rajouter :



CODE
define('TABLE_INVOICE_COUNTER', 'invoice_counter');




9) Dans catalog/admin/includes/languages/xxxx/invoice.php, rajouter :



CODE
define('TITLE_PRINT_ORDER', 'Commande N&deg; ');
define('TITLE_PRINT_INVOICE', 'Facture N&deg; ');
define('TITLE_PRINT_DATEINVOICE', 'Date de facture : ');


--------------------
oscom MS2 + FR + contrib sur mutualisé 90plan
Go to the top of the page
 
Acuponctus
posté 6 Dec 2005, 13:05
Message #22


Ceinture jaune OSC
Icône de groupe

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
CODE
tep_datetime_short
par
CODE
tep_date_longt
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
Go to the top of the page
 
fissiaux
posté 6 Dec 2005, 20:08
Message #23


5eme dan OSC
Icône de groupe

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
Go to the top of the page
 
Acuponctus
posté 6 Dec 2005, 22:16
Message #24


Ceinture jaune OSC
Icône de groupe

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é :

QUOTE
<?php
if ($order->info['orders_status'] == 'Facture') { // A adapter selon statut final
echo '<a href="javascript:popupWindow(\'' .  tep_href_link(FILENAME_INVOICE_PRINTABLE , (tep_get_all_get_params(array('order_id')) . 'order_id=' . $HTTP_GET_VARS['order_id']), 'SSL') . '\')">' . tep_template_image_button('button_printorder.gif', IMAGE_BUTTON_PRINT_INVOICE) . '</a>';
}else{?>&nbsp;
<?php echo '<a href="javascript:popupWindow(\'' .  tep_href_link(FILENAME_ORDERS_PRINTABLE, (tep_get_all_get_params(array('order_id')) . 'order_id=' . $HTTP_GET_VARS['order_id']), 'SSL') . '\')">' . tep_template_image_button('button_printorder.gif', IMAGE_BUTTON_PRINT_ORDER) . '</a>';
}?>


Bonsoir,

Jacques


--------------------
osCommerce MS2
CRE Loaded6 v4 Fr Sp1.2 RC2
Go to the top of the page
 
spray6969
posté 4 Mar 2006, 00:18
Message #25


Ceinture blanche OSC
Icône de groupe

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
-----------------------
Go to the top of the page
 

6 Pages V   1 2 3 > » 
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 16th April 2024 - 10:50
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)