Aide - Recherche - Membres - Calendrier
Version complète : [Astuce]Proposition pour les numéros de facture
Forum osCommerce-fr > Adapter OsCommerce MS2 > Contributions
Pages : 1, 2, 3
blancheneige
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.
tom555
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
angiez
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!
Webby And Wappy
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
blancheneige


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
angiez
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
angiez
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
oneill
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)
blancheneige
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
oneill
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
pitstop
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
hermosilla
Juste un gros bravo à Blanche neige pour ce bout de code bien pratique. biggrin.gif
jeanmarie
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
fissiaux


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 . ' '
Capucine
Merci beaucoup pour ce superbe code !!!!! j'ai teste c'est genial tout est ok pour moi...

BRAVO
jeanmarie
Merci mon ami,

Effectivement une erreur dans french/invoice.php,

un doublon dans les define....

Désolé
mais surtout merci.

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

tom555
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
bpe33
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
bpe33
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 : ');
Acuponctus
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
fissiaux

Très probablement dans catalog/templates/content/account_history_info.tpl.php
Acuponctus
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
spray6969
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']);  


mabrocante94
Bonjour,
Merci pour cette contribution fort utile.
Cependant j'ai un petit souci :
le 23/02, dans l'admin, j'ai créé une facture, et dans l'édition de cette facture, le numéro de facture est : facture n°1;
le 24/02, dans l'admin, j'ai édité de nouveau cette facture, et là le numéro de facture s'est incrémé et affiche maintenant : facture n°2

Est-ce moi qui ai mal installé cette contrib ?
Et si oui, quelqu'un peut-il m'indiquer mon erreur ?

Merci par avance.
fissiaux
Dans admin/orders.php, le code suivant

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


il y a le test suivant qui devrait normalement empêcher de remettre un numéro de facture sur un ordre qui en a déjà un.

CODE
              if ($check_status['orders_numero_facture'] == 0) {


et sinon, il génère un message d'erreur :

CODE
               $messageStack->add_session(WARNING_ORDER_WITH_NUMERO, 'warning');


mabrocante94
Encore une fois merci Fissiaux

Ce code est bien présent. Les test de la journée ont parfaitement fonctionné.
C'est seulement le premier numéro de facture qui a été implémenté de 1, tous les autres ont parfaitement fonctionné quelque soit le type de tests effectués.
Ce qui en soit n'est pas vraiment un problème : commencer à 1 ou à 2 la numérotation c'est pas important du moment que les autres sont bien séquentiels.
Et en plus je viens d'apprendre comment faire un test dans le code !!
idea.gif
polo
Bonjour,



Cette contrib est vraiment simple et apparemment elle fonctionne bien en Local, par contre j'ai une question qui me vient à l'esprit, moi je vais installer cette contrib mais j'ai déja 30 factures précédentes , alors comment faire pour commencer à partir de la facture 31 ? et non 1... je suppose qu'il faut modifier la Base SQL non ?


Merci pour votre aide ! rolleyes.gif
Acuponctus
CITATION(polo @ 27 Jul 2006, 04:00) [snapback]185986[/snapback]

Bonjour,



Cette contrib est vraiment simple et apparemment elle fonctionne bien en Local, par contre j'ai une question qui me vient à l'esprit, moi je vais installer cette contrib mais j'ai déja 30 factures précédentes , alors comment faire pour commencer à partir de la facture 31 ? et non 1... je suppose qu'il faut modifier la Base SQL non ?


Merci pour votre aide ! rolleyes.gif



Oui c'est tout à fait ca.

Bon courage
From Fan 2 Fans
Cette contrib à l'air super.

J'aurais quand même deux questiosn à poser:

_ Est-ce que la numérotation reprend à 1 lorsqu'on arrive au premeir janvier? Ou alors faut-il chanegr tout cela manuellement (dans ce cas, comment?)

_ Serait-il de faire n doublon de ce module pour créer des notes de crédit? J'ai créé un statut "annulé". Ce serait chouette que le document édiet un numéto de note de crédit lorsque je mets sur le statut "annulé" car cela m'éviterait de devoir faire les noets de crédit lorsqu'un client annule sa commande.

Quelq'un a-t-il des pistes?
From Fan 2 Fans
J'hésite entre deux utilisations de cette contrib (je commencerai au 1/1/2007 par facilité):

SOIT

J'enregistre une commande dès qu'elle est passée. dans ce cas , je pense travailler comme ceci:

_ Je remet les numéros de commande à 0 au 1er janvier (est-ce possible de le faire sans effacer les commandes passées l'année précédente? Cette remise à zéro est-elle automatique?)
_ J'attribue un numéro de facture séquentiel via cette contrib dès que la commande est enregistrée. Je commence à 070000 (07 pour dire qu'il s'agit d'une facture de 2007)
_ Pour les commandes non payées et annulées (j'en ai quand même pas mal), je fait un document d'annulation global à la fin de chaque mois pour éviter de faire un exemplaire par facture annulée. De toute façon, le client n'a pas besoin de recevoir de note de crédit puisque ce sont des particuliers et qu'ils n'ont pas besoin de cette pièce.

SOIT

Je ne donne un numéro de facture qu'à partir du moment où le client paie sa commande. (statut paiement reçu que j'ai créé).
L'avantage est que je ne dois pas me soucier de notes de crédit puisque la vente est censée être définitive et je n'enregistre pas les commandes non payées.

L'inconvénient est que je risque des erreurs. Je m'explique: Si, à un moment donné de l'année, je perds la facture à laquelle le numéro XXXXX a été donné lorsque j'ai mis le statut sur paiement reçu, comment puis-je faire pour la retrouver? Il n'y a pas de lien entre le numérto de commande et celui de facture. A moins qu'il existe un autre moyen pour la retrouver? Je ne comprends pas très bien le language php (je commence seulement à comprendre qques trucs). Dès lors, je ne sais pas ce que la contrib prévoit. Prévoit-elle par exemple, que le numéro de facture donné figure d'une manière ou d'une autre dans l'admin pour pouvoir retrouver la commande concernée si nécessaire?


J'ai besoin de vos conseils avisés...

Merci d'avance à tous ^^
fissiaux

CITATION
Je ne donne un numéro de facture qu'à partir du moment où le client paie sa commande. (statut paiement reçu que j'ai créé).


Je ne suis $pas très fort en programmation, mais je crois que c'est ce que fait la contribution de blkancheneige, non ?
From Fan 2 Fans
C'est ce qu'il me semble avoir compris aussi. Par contre, ce qui me chipote (c'est ce que j'explique n peu plus bas dans mon post précédent), c'est de savoir si je pourrai retrouver une commande sur base du numéro de facture qui aura été mis automatiquement par la contrib.
Exemple: j'égare la commande à laquelle le numéro de facture 178 a été donné. Il faut que je puisse retrouver cette commande facilement. Dès lors, je voudrais savoir si, une fois la contrib installée, il y a un moyen quelconque de faire une recherche sur base du numéro de facture dans l'admin. Je me vois mal vérifier toutes les commandes pour savoir laquelle correspond à la facture que j'ai perdue...
Acuponctus
Bonsoir,

cette contrib associé à PDFInvoice fonctionne uniquement avec le N° de la commande et la date de la commande.
comment reprendre le numéro de la facture et la date de la facture ?

avez vous déjà essayé ?
car pour m apart je ne parvient pas à récupérer ces variables sur le PDF

@+

Jacques
fissiaux

La contribution de blancheneige stocke au niveau de la base le numéro de facture. Donc partout où on est capable de lire la base, on est capable de récupérer le numéro de facture.
letoff
Bonjour, je rencontre un problème du très certainement au copié/coller depuis ce forum… je suis sur Mac.
Existe-t-il un ficher texte de modifications apportées ?
Merci
fissiaux
Non, Blancheneige n'a pas voulu allé jusqu'à poster une contribution : tout est ici.
letoff
CITATION(Acuponctus @ 6 Dec 2005, 13:05) [snapback]144675[/snapback]

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.


Perso j'ai mis tep_date_short mais je me retrouve avec une date sous la forme MM/JJ/AAAA au lieu de JJ/MM/AAAA…
Dozier
Bonjour,

J'ai installé hier la modif de BPE33 et cela semble marcher sauf une chose :

Quand je demande la page commande dans l'admin c'est ok il m'affiche toutes les commandes.
Si je sélectionne uniquement les commande traitées par ex cela est encore ok
mais si après cela je redemande toutes les commandes, je n'ai plus rien.

Quelqu'un a-t-il ce problème aussi ? Comment faire ?

Merci beaucoup,

Marc
From Fan 2 Fans
J'hésite entre cette contribution et celle-ci (que j'appelerai "pro invoice"): http://www.oscommerce.com/community/contributions,2604/

J'aurais donc besoin d'une petite info ou l'auter me permettant de les "départager"

date sur la facture:
_ blancheneige: quelle date s'affiche? date de commande ou date à laquelle un numéro de facture a été attribué (par exemple jour où le statut passe en "paiement reçu")
_ pro invoice: qu'entend on par
CITATION
Invoice Date (linked to Order Date)
. Cela signifie-t-il que la date de facturation correspond à la date de commande?

numérotation:
_ la solution de blancheneige permet de ne pas donner de numéro à toutes els commandes (ex: commande annulée). Est-ce aussi el cas pour la solution invoice pro?
_ la numérotation recommence-t-elle automatiquement à 0 pour la solution de blancheneige comme c'est le cas pour invoice pro?

si certains d'entre vous utilisent une des deux contrib, ce serait sympa de faire part de voter expérience personnelle ^^

fissiaux
La vocation de la contribution de blancheneige est de travailler le numéros de facture, rien d'autres. Donc la date de la facture, reste celle de la version standard.

Pour le début de la numérotation, cela est dans une table de la base de données. On doit donc pouvoir commencer à 0.
tom555
la modif de bpe33 en première page permet de stocker la date de facture en même temps que le N° de facture. Voir le post de spray6969 concernant la petite erreur de code à modifier.


pour faire une recherche sur le n° de facture ou tout autre champ de la table order, voir le bout de code que Pitt m'avait gentillement pondu à l'époque.
http://www.oscommerce-fr.info/forum/index....f=3&t=23496

@Dozier
ça le fait avec ou sans la modif de bpe33. je ne l'avais jamais remarqué mais il suffit de cliquer sur commande à gauche et tout revient.

@From Fan 2 Fans
Je ne vois pas l'intérêt de revenir à zéro avec le numérotation des factures, le numéro de facture doit être unique. Si t'as vraiment besoin que l'année figure dans le n° de facture (je ne vois pas l'utilité mais ça m'échappe p-ê), chaque début d'année tu changes le premier chiffre de la numérotation avec phpmyadmin, ça prend 30 secondes.

@+
From Fan 2 Fans
J'ai plusieurs problèmes

1/ attribution du numéro. j'ai voulu faire comme indiqué en page 1 pour choisir mon 1er nuùéro de facture mùais cela déconne. J'ai essayé de mettre +060000 (pour attribuer un numéro pour l'année 2006) et cela m'a donné une facture numéro 24xxx !!!
Comment puis-je faire pour commencer après le drnier numéro de facture que j'ai attribué à mes commandes précédentes manuellement?

2/ Dans la table orders, le numéro de facture ne s'indique pas. Ce n'ets vraiment pas pratique. admettons qu'une commande reçoit le numéro de facture 1234. Si jégare ma copie papier, il faut que je puisse faire une recherche dans ma table orders pour retrouver celle qui correspond à la facture 1234. J'ai suivi le lien donné par tom555 mais le résultat n'est pas celui escompté :/

3/ lorsque le client tente de faire uen commande, ce message s'affiche au moment de la confirmation: Parse error: syntax error, unexpected T_DOUBLE_ARROW in /var/www/vhosts/ff2f.be/httpdocs/includes/classes/order.php on line 64

qui peut m'aider?
tom555
1) Pourquoi faire compliqué quand on peut faire simple? Tu vas dans la table invoice_counter avec phpmyadmin et tu mets le nombre que tu veux, la facturation débutera au nombre suivant.

2) le numéro de facture doit s'inscrire dans la table orders, c'est que t'as mal fait un truc (install contrib ou configuration). Le bout de code dont j'ai donné le lien fonctionne parfaitement puisque je m'en sert tous les jours. Evidemment, si t'as rien qui s'inscrit dans la table order, pas la peine d'essayer de rechercher quoi que ce soit tongue.gif

3) T'as du foirer un truc car on ne touche pas à la partie catalogue avec la modif de blancheneige. Si tu confonds déjà l'admin et le catalogue, t'es pas sorti de l'auberge.


Bonne année à tous wink.gif

Edit: Puis duplique ta boutique pour faire des tests, travailler directement sur la boutique en production, faut être casse-cou.
From Fan 2 Fans
J'ai remis les fichier stels qu'ils étaient auparavant.
J'ai maintenant une auter erreur:
"Parse error: syntax error, unexpected T_DOUBLE_ARROW in /var/www/vhosts/ff2f.be/httpdocs/admin/includes/classes/order.php on line 47"

Lorsque j'efface cette ligne, cela fonctionne. le code correspondant est
CITATION
'orders_date_facture' => $order['orders_date_facture']);


Avec cette ligne en moins, aucune date n'est attrivbuée aux factures. Je ne comprends pas cette erreur de "double arrow". Qqun peut m'aider?

Edit. je viens de faire un test. C'est cette instruction qui pose problème:

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

Si j'efface une des deux dernière lignes, cela focntionne. Autrement, j'ai le message d'erreur. J'ai fait un test en ne mettant que la partie relative à la date de facture. Aucune date n'est attribuée. Est-ce normal?
xaglo
je me permet de déplacer ce message, il semblerait que l'on n'y développe plus rien depuis longtemps et qu'il sert juste de support à cette contribution??

En espérant ne vexer personne blush.gif
From Fan 2 Fans
Mon problème est réglé. Je n'avais pas vu le dernier post de la pagé précédente... tout y était ^^

j'ai maintenant deux petites questions subsidiaires:
_ le numéro de facture est attribué au statut paiement reçu. Cependant, les commandes payées par paypal sont directement enregistrées avec ce statut. Et aucun numéro de facture ne leur est attribué. Je dois donc faire une mise à jour de statut manuellement pour que la date soit attribuée. Une petite idée pour règler ce problème?

_ la date ne s'attribue toujours pas. j'ai "Date de facture : pas attribué". Est-ce normal? Où pourrais-je avori fait une erreur?
From Fan 2 Fans
Mon problème viendrait-il de ses lignes dans invoice.php?

CODE
<?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


ou alors ne manque-t-il pas qque chose ici (orders.php):

CODE
if ( ($check_status['orders_status'] != $status) || tep_not_null($comments)) {
         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');
             }
farfads
bonjour,
je relance le poste pour savoir s'il est possible d'insérer un champ Numéro de Facture dans:
account_history.php et account_history_info.php.
Le numéro de commande pour le client est important, mais de numéro de facture etant différent, il est indispensable.

Merci
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2013 Invision Power Services, Inc.