Aide - Recherche - Membres - Calendrier
Version complète : [resolu] Export des commandes sur exel
Forum osCommerce-fr > Adapter OsCommerce MS2 > Contributions
Pages : 1, 2
Broardelle
je cherche à créer mensuellement un ficher (csv, txt, etc...) importable dans exel contenant les champs; nom des clients, date de commande et montants de la commande. J'ai essayé via phpmyadmin avec la série des fichiers order, mais il n'y a pas les montants des commandes.
Est ce quelqu'un à une idée ?

Merci d'avance
fissiaux
Elle est toute fraiche, donc à prendre avec modération, mais pourrait te servir de base à ce que tu veux faire.

Export Order into CSV

A regarder, et à faire un retour dans le forum.
armoise
Bonsoir Fissiaux et Boardelle,

J'ai téléchargé et je l'ai adoptée sans restriction !

Cette contribution permet l'export complet des factures coordonnées du client et détail de la commande

Je l'ai intégrée a ACT ! pour compléter mes fiches clients avec leur commandes et adresse de livraison puis un export vers Ciel gestion commerciale évolution R pour l'édition des factures et la tenue des stock et enfin un export vers expeditor pour l'édition par semaine des étiquettes d'expédition.

La saisie est limité à quelques clics smile.gif sauf pour ciel gestion commercial où les commandes à la différence des contacts clients ne peuvent pas être importées. il en est de même sous EBP

Je pense qu'il répond à de nombreux post sur le sujets de la gestion commerciale et de la gestion de la relation client.

Pour une synchronisation complète il faut un logiciel ouvert comme sage 100 avec base sql et un hébergement sur serveur dédié ou sur la nouvelle offre de OVH qui permettent des requêtes extérieures. Entre Sage et Oscommerce des "moulinette" ont été développée.... Ces solutions sont couteuses et pas à la portée de nos petites entreprises !

Voilou



baj
probleme elle ne marche pas pour la ms2.2
xaglo
CITATION(baj @ 7 Jun 2006, 17:01) [snapback]178496[/snapback]
probleme elle ne marche pas pour la ms2.2
ça c'est de l'info!!!

ils exagèrent ces ricains de proposer des contributions pour MS2 qui ne fonctionnent pas tongue.gif

Si tu disais ce qui ne "fonctionne pas" peut-être pourrions nous t'aider non??
http://www.oscommerce-fr.info/forum/index.php?showtopic=7241

baj
oui je veux bien un petit coup de pouce....

en appelant le fichier depuis admin/outils je rentre les numeros de commande et voila l'erreur:

1054 - Champ 'cvvnumber' inconnu dans field list

select orders_id, date_purchased, customers_name , cc_owner, customers_company, customers_email_address, billing_street_address, billing_city, billing_state, billing_postcode, billing_country, customers_telephone, delivery_name, delivery_company, delivery_street_address, delivery_city, delivery_state, delivery_postcode, delivery_country, cc_type, cc_number, cc_expires, cvvnumber, order_url, refferer from orders where orders_id >= 1 and orders_id <= 2 order by orders_id

[TEP STOP]
fissiaux
Dans le fichier changes

CODE
delivery_postcode, delivery_country, cc_type, cc_number, cc_expires, cvvnumber, order_url, refferer


par

CODE
delivery_postcode, delivery_country, cc_type, cc_number, cc_expires
baj
ok j'essai de suite


ça marche nikel merci beaucoup fissiaux
nadelo
Salut,

elle fonctionne aussi bien chez moi, reste que je n'ai pas trouvé comment faire ressortir mes 2 TVA (5.5% et 19.6%).
Il y en qu'une seule qui ressort avec à priori uniquement la 19.6 quand il y a les 2

je vais creuser avec ma pelle mais si jamais quelqu'un passe avec un tracto pelle, je suis preneur
biggrin.gif
gracias
neolien
Salut Fissiaux,

J'ai suivi ta consigne et effectivement il générait bien un fichier csv mais il reprenait deux fois les données du client sans le détails de la commande, j'ai refais les modifications et maintenant j'ai le message suivant :

CODE
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from orders where orders_id >= 1 and orders_id <= 6 order by orders_id' at line 7

select orders_id, date_purchased, customers_name , cc_owner, customers_company, customers_email_address, billing_street_address, billing_city, billing_state, billing_postcode, billing_country, customers_telephone, delivery_name, delivery_company, delivery_street_address, delivery_city, delivery_state, delivery_postcode, delivery_country, cc_type, cc_number, cc_expires, from orders where orders_id >= 1 and orders_id <= 6 order by orders_id


Voici ma fonction pour générer le CSV :

CODE
function generatecsv($start, $end)
{
$orders = tep_db_query("select orders_id, date_purchased, customers_name
, cc_owner, customers_company, customers_email_address,
billing_street_address, billing_city, billing_state, billing_postcode,
billing_country, customers_telephone, delivery_name,
delivery_company, delivery_street_address, delivery_city, delivery_state,
delivery_postcode, delivery_country, cc_type, cc_number, cc_expires,
from orders where orders_id >= $start and orders_id <= $end order by orders_id");


Aurais-tu encore une fois la solution ?

De plus baj a dit :
CITATION
en appelant le fichier depuis admin/outils je rentre les numeros de commande et voila l'erreur:


Pour moi il n'apparait rien dans admin/outils ?, j'ai tester le fichier directement via le navigateur, car dans la contribution, il n'y a que le fichier exportorders.php, comment l'intégrer dans admin/outil/ ??


D'avance merci pour tes efforts et bonne journée!
fissiaux
Tu as laissé une virgule après

CODE
cc_expires,


Enlèves là, comme indiqué....
neolien
Merci Fissiaux, maintenant le fichier Excel est bien généré mais j'obtiens plein de doublons et aucune infos sur le détails des commandes clients, en effet j'ai 4 fois le nom du client qui apparait et deux fois le reste de ses infos clients (mails, adresse, ville, département, téléphone) dans le fichier Excel généré ??

De plus, je ne vois aucun lien dans admim/outils/ pour tomber directement sur la page http://www.maboutique.com/admin/exportorders.php ?

As-tu une idée pour résoudre ces deux problèmes ?

D'avance merci et bonne journée
keuj
Bonjour,

Tu dois créer tes liens pour que la fonction s'affiche dans le menu de gauche
Fichier admin/includes/boxes/customers.php
après la ligne 25 :
'<a href="' . tep_href_link(FILENAME_ORDERLIST, '', 'NONSSL') . '" class="menuBoxContentLink" target="_BLANK">' . BOX_CUSTOMERS_ORDERLIST . '</a>');
et modifie la fin de la ligne 25 :
'<a href="' . tep_href_link(FILENAME_ORDERS, '', 'NONSSL') . '" class="menuBoxContentLink">' . BOX_CUSTOMERS_ORDERS . '</a><br>' .


Fichier admin/includes/filenames.php
ajoute à la fin du fichier :
define('FILENAME_ORDERLIST', 'exportorders.php');

Fichier admin/includes/languages/french.php ( et éventuelement les autres langues)
ajoute à la fin duu fichier :
define('BOX_CUSTOMERS_ORDERLIST', 'Exporter la liste de commandes');

Je crois que c'est tout.

Si certains sont intéressés, j'ai aussi modifié la fonction pour :
ajouter un entête
enlever les champs qui m'étaient inutiles
ajouter les sous-totaux par taux de taxe (19.6, 5.5 et exonéré)

Le format final est sans-doute à valider avec votre comptable/
neolien
Merci Keuj de l'info pour l'affichage dans l'admin !

Je vois que tu as modifié également les fonctions qui chez moi fonctionne bizarrement comme tu peux le lire dans mon post au dessus !

Pourrais-tu recopier le code de ton fichier exportorders.php ou me le faire parvenir par MP pour les comparer et essayer de voir ce qui cloche chez moi ?

D'avance merci @ toi wink.gif
keuj
Bonjour

Je le mets tel quel, avec les lignes commentées.
J'ai enlevé plein de champs qui ne servent pas à mon client.

La dernière partie "affichage des totaux par taux de taxe" (Queries 9) est très mal écrit mais je n'ai pas réfléchi à une meilleur écriture.

Le résultat final donnera avec la ligne d'entête :
numéro facture;date;heure;nom client;société;email;adresse1;adresse2;ville;cp;pays;type paiement;montant hors FP;frais port ttc;total facture;totalht 19.6;total tva 19.6;totalht 5.5;total tva 5.5;total exonere
27;15/01/2007;14:45:56;nom client bidon;société bidon;adresse_web@imaginez.fr;all?e aux moineaux;;FONTAINEBLEAU;25000;France;Carte Bleue;32.95;9.6;42.55;20.07;3.93;8.48;0.47;

CODE

<?php
/*
  $Id: exportorders.php,v 1.1 April 21, 2006 Harris Ahmed $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2004 Oscommerce

  Use this module on your own risk. I will be updating a new one soon. This template is used to create
  the csv export for Ideal Computer Systems Accounting Software
*/

require('includes/application_top.php');
// Check if the form is submitted
if (!$submitted || $submitted != 1) {

    ?>

<!-- header_eof //-->

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS;
    ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET;
    ?>">
<title><?php echo TITLE;
    ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php');
    ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
    <td width="<?php echo BOX_WIDTH;
    ?>" valign="top">
    <table border="0" width="<?php echo BOX_WIDTH;
    ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php');
    ?>
<!-- left_navigation_eof //-->
    </table>
    </td>
<!-- body_text //-->
    <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading"><?php echo "Export Order" ?></td>
            <td class="pageHeading" align="right"></td>
          </tr>
        </table>
        </td>
      </tr>
      <!-- first ends // -->
      <tr>
        <td>

<table border="0" style="font-family:tahoma;font-size:11px;" width="100%" cellspacing="2" cellpadding="2">
<tr>
<td>

<form method="GET" action="<?php echo $PHP_SELF;
    ?>">
<table border="0" style="font-family:tahoma;font-size:11px;" cellpadding="3">
<tr>
<td><?php echo "Start Order #:";
    ?></td>
<td><input name="start" size="5" value="<?php echo $start;
    ?>">
</tr>
<tr>
<td><?php echo "End Order #:";
    ?></td>
<td><input name="end" size="5" value="<?php echo $end;
    ?>">
</tr>
<tr>
<td> </td>
<td><input type="submit" value="<?php echo "Create CSV";
    ?>"></td>
</tr>
</table>
<input type="hidden" name="submitted" value="1">
</form>

</td>
</tr>
</table>

</td></tr>
<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php');
    ?>
<!-- footer_eof //-->
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php');
    ?>

<?php
}
// submitted so generate csv if the form is submitted
else {
    generatecsv($start, $end);
}
// generates csv file from $start order to $end order, inclusive
function generatecsv($start, $end)
{
    $orders = tep_db_query("select orders_id, date_purchased, customers_name
, cc_owner, customers_company, customers_email_address,
billing_street_address, billing_city, billing_state, billing_postcode,
billing_country, customers_telephone, delivery_name,
delivery_company, delivery_street_address, delivery_city, delivery_state,
delivery_postcode, delivery_country, cc_type, cc_number, cc_expires
from orders where orders_id >= $start and orders_id <= $end order by orders_id");
    // $csv_output ="\n";
    $csv_output = "numéro facture;date;heure;nom client;société;email;adresse1;adresse2;ville;cp;pays;type paiement;montant hors FP;frais port ttc;total facture;totalht 19.6;total tva 19.6;totalht 5.5;total tva 5.5;total exonere\n".$CSV_NEWLINE;

    while ($row_orders = mysql_fetch_array($orders)) { // start one loop
        $Orders_id = $row_orders["orders_id"];
        $Date1 = $row_orders["date_purchased"];
        // list($Date, $Time) = explode (' ',$Date1);
        $Date = date('d/m/Y', strtotime($Date1));
        $Time = date('H:i:s', strtotime($Date1));
        $Name_On_Card1 = $row_orders["customers_name"];
        $Name_On_Card = filter_text($Name_On_Card1); // order changed
        list($First_Name, $Last_Name) = explode(', ', $Name_On_Card1); // order changed
        $Company = filter_text($row_orders["customers_company"]);
        $email = filter_text($row_orders["customers_email_address"]);
        $Billing_Address_1 = filter_text($row_orders["billing_street_address"]);
        $Billing_Address_2 = "";
        $Billing_City = filter_text($row_orders["billing_city"]);
        $Billing_State = filter_text($row_orders["billing_state"]);
        $Billing_Zip = filter_text($row_orders["billing_postcode"]);
        $Billing_Country = str_replace("(48 Contiguous Sta", "", $row_orders["billing_country"]);
        $Billing_Phone = filter_text($row_orders["customers_telephone"]);
        /* $ShipTo_Name1 = $row_orders["delivery_name"];
$ShipTo_Name = filter_text($ShipTo_Name1); // order changed
list($ShipTo_First_Name,$ShipTo_Last_Name) = explode(', ',$ShipTo_Name1); // order changed
$ShipTo_Company = filter_text($row_orders["delivery_company"]);
$ShipTo_Address_1 = filter_text($row_orders["delivery_street_address"]);
$ShipTo_Address_2 = "";
$ShipTo_City = filter_text($row_orders["delivery_city"]);
$ShipTo_State = filter_text($row_orders["delivery_state"]);
$ShipTo_Zip = filter_text($row_orders["delivery_postcode"]);
$ShipTo_Country = str_replace("(48 Contiguous Sta", "", $row_orders["delivery_country"]);
$ShipTo_Phone = "";*/
        $Card_Type = $row_orders["cc_type"];
        // $Card_Number = $row_orders["cc_number"];
        // $Exp_Date = $row_orders["cc_expires"];
        // $Bank_Name = "";
        // $Gateway  = "";
        // $AVS_Code = "";
        // $Transaction_ID = "";
        // $Order_Special_Notes = "";
        // --------------------    QUERIES 1  ------------------------------------//
        // Orders_status_history for comments
/*        $orders_status_history = tep_db_query("select comments from orders_status_history
where orders_id = " . $Orders_id);
        // $row_orders_status_history = tep_db_fetch_array($comments);
        while ($row_orders_status_history = mysql_fetch_array($orders_status_history)) {
            // end //
            // $Comments = filter_text($row_orders_status_history["comments"]);
        }*/
        // --------------------    QUERIES 2  ------------------------------------//
        // Orders_subtotal
        $orders_subtotal = tep_db_query("select value from orders_total
where class = 'ot_subtotal' and orders_id = " . $Orders_id);
        // $row_orders_subtotal = tep_db_fetch_array($orders_subtotal);
        while ($row_orders_subtotal = mysql_fetch_array($orders_subtotal)) {
            // end //
            $Order_Subtotal = filter_text($row_orders_subtotal["value"]);
        }
        // --------------------    QUERIES 3  ------------------------------------//
        // Orders_tax
/*        $orders_tax = tep_db_query("select value from orders_total
where class = 'ot_tax' and orders_id = " . $Orders_id);
        // $row_orders_tax = tep_db_fetch_array($orders_tax);
        while ($row_orders_tax = mysql_fetch_array($orders_tax)) {
            // end //
            $Order_Tax = filter_text($row_orders_tax["value"]);
        }*/
        // --------------------    QUERIES 4  ------------------------------------//
        // Orders_Insurance
/*        $orders_insurance = tep_db_query("select value from orders_total
where class = 'ot_insurance' and orders_id = " . $Orders_id);
        // $row_orders_insurance = tep_db_fetch_array($orders_insurance);
        while ($row_orders_insurance = mysql_fetch_array($orders_insurance)) {
            // end //
            $Order_Insurance = filter_text($row_orders_insurance["value"]);
        }
        $Tax_Exempt_Message = "";*/
        // --------------------    QUERIES 5  ------------------------------------//
        // Orders_Shipping
        $orders_shipping = tep_db_query("select title, value from orders_total
where class = 'ot_shipping' and orders_id = " . $Orders_id);
        // $row_orders_shipping = tep_db_fetch_array($orders_shipping);
        while ($row_orders_shipping = mysql_fetch_array($orders_shipping)) {
            // end //
            $Order_Shipping_Total = $row_orders_shipping["value"];
            $Shipping_Method = filter_text($row_orders_shipping["title"]); // Shipping method from query 5
        }
        // --------------------    QUERIES 6  ------------------------------------//
        // Orders_Residential Del Fee (Giftwrap)
/*        $orders_residential_fee = tep_db_query("select value from orders_total
where class = 'ot_giftwrap' and orders_id = " . $Orders_id);
        // $row_orders_residential_fee = tep_db_fetch_array($orders_residential_fee);
        while ($row_orders_residential_fee = mysql_fetch_array($orders_residential_fee)) {
            // end //
            $Small_Order_Fee = $row_orders_residential_fee["value"];
        }
        // //////////////////////////////////
        $Discount_Rate = "";
        $Discount_Message = "";
        $CODAmount = "";*/
        // --------------------    QUERIES 7  ------------------------------------//
        // Orders_Total
        $orders_total = tep_db_query("select value from orders_total
where class = 'ot_total' and orders_id = " . $Orders_id);
        // $row_orders_total = tep_db_fetch_array($orders_total);
        while ($row_orders_total = mysql_fetch_array($orders_total)) {
            // end //
            $Order_Grand_Total = $row_orders_total["value"];
        }
        // --------------------    QUERIES 8  ------------------------------------//
        // Products COunt
/*        $orders_count = tep_db_query("select count(products_quantity) as o_count from orders_products
where orders_id = " . $Orders_id);
        // $row_orders_total = tep_db_fetch_array($orders_total);
        while ($row_orders_count = mysql_fetch_array($orders_count)) {
            // end //
            $Number_of_Items = $row_orders_count[0]; // used array to show the number of items ordered
        }
*/
        // csv settings
        $CSV_SEPARATOR = ";";
        $CSV_NEWLINE = "\r\n";
        $csv_output .= $Orders_id . $CSV_SEPARATOR;
        $csv_output .= $Date . $CSV_SEPARATOR;
        $csv_output .= $Time . $CSV_SEPARATOR;
        $csv_output .= $First_Name . $CSV_SEPARATOR;
//        $csv_output .= $Last_Name . $CSV_SEPARATOR;
//        $csv_output .= $Name_On_Card . $CSV_SEPARATOR;
        $csv_output .= $Company . $CSV_SEPARATOR;
        $csv_output .= $email . $CSV_SEPARATOR;
        $csv_output .= $Billing_Address_1 . $CSV_SEPARATOR;
        $csv_output .= $Billing_Address_2 . $CSV_SEPARATOR;
        $csv_output .= $Billing_City . $CSV_SEPARATOR;
//        $csv_output .= $Billing_State . $CSV_SEPARATOR;
        $csv_output .= $Billing_Zip . $CSV_SEPARATOR;
        $csv_output .= $Billing_Country . $CSV_SEPARATOR;
//        $csv_output .= $Billing_Phone . $CSV_SEPARATOR;
        $csv_output .= $Card_Type . $CSV_SEPARATOR;

        $csv_output .= tep_round($Order_Subtotal,2) . $CSV_SEPARATOR;
        // $csv_output .= $Order_Tax . $CSV_SEPARATOR;
//        $csv_output .= $Order_Insurance . $CSV_SEPARATOR;
//        $csv_output .= $Tax_Exempt_Message . $CSV_SEPARATOR;
        $csv_output .= tep_round($Order_Shipping_Total,2) . $CSV_SEPARATOR;
//        $csv_output .= $Small_Order_Fee . $CSV_SEPARATOR;
//        $csv_output .= $Discount_Rate . $CSV_SEPARATOR;
//        $csv_output .= $Discount_Message . $CSV_SEPARATOR;
//        $csv_output .= $CODAmount . $CSV_SEPARATOR;
        $csv_output .= tep_round($Order_Grand_Total,2) . $CSV_SEPARATOR;

        // --------------------    QUERIES 9  ------------------------------------//
        $orders_products = tep_db_query("select sum(products_price) as total_ht, sum(products_price*products_tax/100) as total_tva,products_tax as taux_tva from orders_products
where orders_id = " . $Orders_id. " group by products_tax order by taux_tva desc");
        $case ="normal";
        while ($row_orders_products = mysql_fetch_array($orders_products)) {

            if ($case == "normal") {
                if (tep_round($row_orders_products['taux_tva'],2) == "19.60") {
                    $csv_output .= tep_round(filter_text($row_orders_products['total_ht']),2) . $CSV_SEPARATOR;
                    $csv_output .= tep_round(filter_text($row_orders_products['total_tva']),2) . $CSV_SEPARATOR;
                } else {
                    $csv_output .=  "0";
                    $csv_output .= "0";
                }
                $case="reduit";
                continue;
            }
            if ($case== "reduit") {
                if (tep_round($row_orders_products['taux_tva'],2) == "5.50") {
                    $csv_output .= tep_round(filter_text($row_orders_products['total_ht']),2) . $CSV_SEPARATOR;
                    $csv_output .= tep_round(filter_text($row_orders_products['total_tva']),2) . $CSV_SEPARATOR;
                } else {
                    $csv_output .=  "0";
                    $csv_output .= "0";
                }
                $case="exonere";
                continue;
            }
            if ($case== "exonere") {
                if (tep_round($row_orders_products[2],2) == "0.00") {
                    $csv_output .= tep_round(filter_text($row_orders_products['total_ht']),2) . $CSV_SEPARATOR;
                    //$csv_output .= tep_round(filter_text($row_orders_products['total_tva']),2) . $CSV_SEPARATOR;
                } else {
                    $csv_output .=  "0";
                    //$csv_output .= "0";
                }
            }
        }
        // --------------------------------------------------------------------------//
        $csv_output .= "\n";
    } // while loop main first

    // print
    header("Content-Type: application/force-download\n");
    header("Cache-Control: cache, must-revalidate");
    header("Pragma: public");
    header("Content-Disposition: attachment; filename=ordersexports_" . date("Ymd") . ".csv");
    print $csv_output;
    exit;
} //function main
function filter_text($text)
{
    $filter_array = array(";", "\r", "\n", "\t");
    return str_replace($filter_array, "", $text);
} // function for the filter

?>
neolien
Merci keuj, cela marche nickel ! great, great smile.gif biggrin.gif
Lolo30
Bjr .. oui c'est vraiment super ...
une petite question .. j'ai les champs du fichier exporté pour le mode de paiement vide..
Je suis sur cybermut (paiement en cb ou chèque uniquement).. ou regarder au niveau du code pour verifier le probleme ??
Merci .
nadelo
salut

rajoute 'payment_method' à la requete puis
ajoute
CITATION
$csv_output .= $Payment_method . $CSV_SEPARATOR;

après
CITATION
$csv_output .= $Billing_Country . $CSV_SEPARATOR;


et
CITATION
$Payment_method = $row_orders["payment_method"];
après
CITATION
$ShipTo_Phone = "";*/
tom555
J'ai modifié cette contrib pour faire un export vers SAGE.
Mon comptable en a plein le dos d'entrer toutes les données de la compta à la main laugh.gif

Pour chaque N° de facture (contrib. blancheneige), j'ai 4 lignes générées:

Ex:
VENTE, Facture n° 45 du 11.01.2007 au client YVES TRUCBAZARD pour le montant de EUR 115,00 TTC + frais de port EUR 1,15 TTC (donc marchandise HT 100 EUR, transport HT 1 EUR et tva sur marchandise et transport 15,15 EUR, donc total à payer par le client 116.15 EUR) :

CODE
VEN;11.01.2007;;45;41000000;YVES TRUCBAZARD;;D;116,15
VEN;11.01.2007;;45;70300000;YVES TRUCBAZARD;VL4;C;100,00
VEN;11.01.2007;;45;70850000;YVES TRUCBAZARD;VL4;C;1,00
VEN;11.01.2007;;45;44511000;YVES TRUCBAZARD;VL4;C;15,15


Bon jusque là, ça va.

Mon problème est que j'ai 2 types de factures, les factures avec TVA et les factures Hors TVA, je dois les trier.
J'aimerai un coup de main sur cette requête:

CITATION
("select orders_id, date_purchased, customers_name
, cc_owner, customers_company, customers_email_address,
billing_street_address, billing_city, billing_state, billing_postcode,
billing_country, billing_tva_intracom, customers_telephone, delivery_name,
delivery_company, delivery_street_address, delivery_city, delivery_state,
delivery_postcode, delivery_country, cc_type, cc_number, cc_expires, orders_numero_facture, orders_date_facture
from orders where orders_numero_facture >= $start and orders_numero_facture <= $end order by orders_numero_facture");


Là, je trie sur les n° de facture, c'est bon.
Je dois ajouter 2 autres conditions => 'billing_tva_intracom' doit être 'NULL' ou ''billing_country doit être 'Luxembourg'
En clair, je trie par ex. de la facture 100 à 200, les factures qui apparaissent devront soit n'avoir pas de tva intracom (NULL), soit avoir luxembourg comme 'billing_country'. (ou les 2 en même temps)

J'ai bidouillé pendant 2 heures, je n'y arrive pas. evil.gif
Un âme charitable pourrait y jeter une oeil?

Merci. smile.gif
farfads
J'ai reussi a faire ce que je voulais mais je souhaite y insere le libelle de la vente en reprenant la requete: products_name.

Mais comment faire pour la lancer vu qu'elle n'est pas dans orders mais dans orders_products.

Merci
farfads
j'ai trouvé en jouant avec le code.

si cela interesse quelqu'un

n'oubliez pas d'inserer la requete : orders_products dans ce code:
CODE
$orders_products = tep_db_query("select ...


placer ce code ou vous souhaitez qu'il apparaisse:
CODE
$csv_output .= $products_name . $CSV_SEPARATOR;


dans mon cas après:
CODE
$csv_output .= $Billing_Country . $CSV_SEPARATOR;


ensuite,
placer ce code:
CODE
$products_name = $row_orders_products["products_name"];


apres:
CODE
while ($row_orders_products = mysql_fetch_array($orders_products)) {


si quelqu'un voit une erreur,
je suis preneur
tom555
Pour mon problème, j'ai finalement trouvé.
Juste un problème de NULL qui n'est pas égal à zéro, ni à l'absence de données dans le champ.
Fallait saisir à quoi correspondait la valeur NULL
blush.gif
aurelienp59
ça fonctionne avec Ciel Gestion Commerciale Evolution 2007 (version 6.30 reseau)?
schwarzyz
Salut à tous,

tom555 ou farfads: L'un de vous peut il poster son code car je n'arrive pas à générer plusieur ligne pour l'export en compta.

Merci d'avance.
tom555
Pour générer plusieurs ligne, il suffit de répéter les lignes du csv output.
Mon code est tellement spécifique qu'il ne te servira à rien, mais je vais te mettre la partie en question:

CITATION
// csv settings
$CSV_SEPARATOR = ",";
$CSV_NEWLINE = "\r\n";
$csv_output .= $journal_vente . ";" ; <= début 1ère ligne
$csv_output .= $Date . ";" ;
$csv_output .= $compte_general5 . ";" ;
$csv_output .= $orders_numero_facture . ";" ;
$csv_output .= $compte_general1 . ";" ;
$csv_output .= $vide . ";" ;
$csv_output .= $Name_On_Card2 . ";" ;
$csv_output .= $customers_id . "_" . $First_Name . ";" ;
$csv_output .= $compte_general5 . ";" ;
$csv_output .= $c . ";" ;
$csv_output .= $Order_Grand_Total;
//$csv_output .= $Order_Tax . ";" ; <= ne doit pas apparaitre dans ma 1ère ligne, je le commente
//$csv_output .= $Order_Shipping_Total . ";" ; <= ne doit pas apparaitre dans ma 1ère ligne, je le commente
$csv_output .= "\n"; <= retour à la ligne
$csv_output .= $journal_vente . ";" ; <= début 2ème ligne
$csv_output .= $Date . ";" ;
$csv_output .= $compte_general5 . ";" ;
$csv_output .= $orders_numero_facture . ";" ;
$csv_output .= $compte_general2 . ";" ;
$csv_output .= $vide . ";" ;
$csv_output .= $customers_id . "_" . $First_Name . ";" ;
$csv_output .= $vl4 . ";" ;
$csv_output .= $b . ";" ;
$csv_output .= $Order_Subtotal;
//$csv_output .= $Order_Tax . ";" ;
//$csv_output .= $Order_Shipping_Total . ";" ;
$csv_output .= "\n"; <= retour à la ligne
$csv_output .= $journal_vente . ";" ; <= début 3ème ligne
$csv_output .= $Date . ";" ;
$csv_output .= $compte_general5 . ";" ;
$csv_output .= $orders_numero_facture . ";" ;
$csv_output .= $compte_general3 . ";" ;
$csv_output .= $vide . ";" ;
$csv_output .= $customers_id . "_" . $First_Name . ";" ;
$csv_output .= $vl4 . ";" ;
$csv_output .= $b . ";" ;
//$csv_output .= $order_total_htva . ";" ;
//$csv_output .= $Order_Tax . ";" ;
$csv_output .= $Order_Shipping_Total;
$csv_output .= "\n"; <= retour à la ligne
$csv_output .= $journal_vente . ";" ; <= début 4ème ligne
$csv_output .= $Date . ";" ;
$csv_output .= $compte_general5 . ";" ;
$csv_output .= $orders_numero_facture . ";" ;
$csv_output .= $compte_general4 . ";" ;
$csv_output .= $vide . ";" ;
$csv_output .= $customers_id . "_" . $First_Name . ";" ;
$csv_output .= $vl4 . ";" ;
$csv_output .= $b . ";" ;
//$csv_output .= $Order_Subtotal . ";" ;
$csv_output .= $Order_Tax;
//$csv_output .= $Order_Shipping_Total . ";" ;
$csv_output .= "\n"; <= retour à la ligne
} // while loop main first <= Retour en haut, commande suivante

Donc, tu dupliques le code 3 fois, par ex. pour l'avoir sur 3 lignes. Un retour à la ligne entre chaque partie du code dupliqué.
Puis tu commentes (//) les champs que tu ne veux pas voir apparaitre.

Voilà, j'espère t'avoir éclairé un peu.
schwarzyz
Salut,

Effectivement il fallait y penser. tongue.gif

Merci beaucoup tom555 et à tous ceux qui on participé, maintenant c'est sur la compta c'est moins un souci.
lusitain
Attention au post de "Keuj", son code est bien mis à part qu'il y un bug qui peut vous couter cher... en effet, il oublie de multiplier son résutat sur les taxes par le nombre de produits achetés...

La bonne requête pour son QUERIES 9 est donc

$orders_products = tep_db_query("select sum(products_price*products_quantity) as total_ht, sum((products_price*products_tax/100)*products_quantity) as total_tva,products_tax as taux_tva from orders_products
where orders_id = " . $Orders_id. " group by products_tax order by taux_tva desc");


farfads
Salut,

j'avance sur mon fichier mais je bloque pour avoir le prix HT,

je souhaites avoir :

$csv_output .= Order_total / 1.196

mais je bloque ! Help !
farfads
Bon j'ai trouvé une solution si cela interesse certains:

j'ai travailler sur la Queries 7:

CITATION
// -------------------- QUERIES 7 ------------------------------------//
// Orders_Total
$orders_total = tep_db_query("select value/1.196 as total_ht, value/1.196*0.196 as total_tva, value from orders_total
where class = 'ot_total' and orders_id = " . $Orders_id);
// $row_orders_total = tep_db_fetch_array($orders_total);
while ($row_orders_total = mysql_fetch_array($orders_total)) {
// end //
$Order_Grand_Total = $row_orders_total["value"];
$Order_Ht = $row_orders_total["total_ht"];
$Order_Tva = $row_orders_total["total_tva"];
}


et j'appel les fonctions $Order_Ht et $Order_Tva dans les lignes souhaitées

c'est pas terrible mais cela marche blush.gif
xawaks
CITATION(nadelo @ 27 Jun 2006, 16:33) [snapback]181747[/snapback]
Salut,

elle fonctionne aussi bien chez moi, reste que je n'ai pas trouvé comment faire ressortir mes 2 TVA (5.5% et 19.6%).
Il y en qu'une seule qui ressort avec à priori uniquement la 19.6 quand il y a les 2

je vais creuser avec ma pelle mais si jamais quelqu'un passe avec un tracto pelle, je suis preneur
biggrin.gif
gracias


Salut,

je suis entrain de mettre en place sur ma boutique cette contribution car mon expert comptable me menace d'une augmentation des tarifs vu la pile de facture papier que je lui dépose chaque mois ;o))

Cela marche pas mal, j'ai même rajouté le mode de paiment et les coupons de réductions, mais j'ai le même problème que Nadelo !

Le calcul de la TVA ne marche pas correctement.

Quand c'est que 19,6 c'est bon, lorqu'il y a les deux c'est bon aussi, mais si je n'ai rien ou uniquement 5,5 cela ne marche pas...

Pourquoi ? unsure.gif
tom555
CITATION(farfads @ 8 Jan 2008, 14:40) [snapback]265319[/snapback]
Salut,

j'avance sur mon fichier mais je bloque pour avoir le prix HT,

je souhaites avoir :

$csv_output .= Order_total / 1.196

mais je bloque ! Help !


Suite à ton MP, voilà le bout de code qui me calcule le total HTVA.

CODE
// --------------------    QUERIES 2  ------------------------------------//
//Orders_subtotal
$orders_subtotal = tep_db_query("select value from orders_total
where class = 'ot_subtotal' and orders_id = " . $Orders_id);
//$row_orders_subtotal = tep_db_fetch_array($orders_subtotal);
while($row_orders_subtotal = mysql_fetch_array($orders_subtotal)) {
// end //
$Order_Subtotal = filter_text(round($row_orders_subtotal["value"] *100/115, 2));
}


Puis, plus bas dans le CSv output
CODE
$csv_output .= $Order_Subtotal;


Voilà




xawaks
Et pour mon soucis de différenciation des deux TVA (19,6 et 5,5) tu n'aurais pas une piste ?


tom555
je ne gère qu'un seul taux de TVA dans ma boutique.
Je n'ai jamais regardé à cela.

Les différents montants de TVA sont-ils présent dans la table "orders_total" ?
xawaks
oui et non

En fait ils sont dans la table orders_total mais avec la même variable ot_tax, donc impossible de faire la différence.

Donc j'ai utilisé la queries 9 de keuj que j'ai un peu adapté

CODE
// --------------------    QUERIES 9  ------------------------------------//
        $orders_products = tep_db_query("select sum(products_price*products_quantity) as total_ht, sum((products_price*products_tax/100)*products_quantity)
as total_tva,products_tax as taux_tva from orders_products
where orders_id = " . $Orders_id. " group by products_tax order by products_tax desc");
        $case ="19.6000";
        while ($row_orders_products = mysql_fetch_array($orders_products)) {

            if ($case == "19.6000") {
                if (tep_round($row_orders_products['taux_tva'],2) == "19.6000") {
                    $csv_output .= tep_round(filter_text($row_orders_products['total_ht']),2) . $CSV_SEPARATOR;
                    $csv_output .= tep_round(filter_text($row_orders_products['total_tva']),2) . $CSV_SEPARATOR;
                } else {
                    $csv_output .=  "0";
                    //$csv_output .= "0";
                }
                $case="5.5000";
                continue;
            }
            if ($case== "5.5000") {
                if (tep_round($row_orders_products['taux_tva'],2) == "5.5000") {
                    $csv_output .= tep_round(filter_text($row_orders_products['total_ht']),2) . $CSV_SEPARATOR;
                    $csv_output .= tep_round(filter_text($row_orders_products['total_tva']),2) . $CSV_SEPARATOR;
                } else {
                    $csv_output .=  "0";
                  //  $csv_output .= "0";
                }
                $case="0.0000";
                continue;
            }
            if ($case== "0.0000") {
                if (tep_round($row_orders_products['taux_tva'],2) == "0.0000") {
                    $csv_output .= tep_round(filter_text($row_orders_products['total_ht']),2) . $CSV_SEPARATOR;
                    //$csv_output .= tep_round(filter_text($row_orders_products['total_tva']),2) . $CSV_SEPARATOR;
                } else {
                    $csv_output .=  "0";
                    //$csv_output .= "0";
                }
            }
        }
        // --------------------------------------------------------------------------//
        $csv_output .= "\n";
    } // while loop main first


Et comme expliqué plus haut, le calcul de la TVA ne marche pas correctement.

Quand c'est que 19,6 c'est bon, lorqu'il y a les deux c'est bon aussi, mais si je n'ai rien ou uniquement 5,5 cela ne marche pas...

Alors une idée ?

tom555
Mes connaissances sont trop limitées pour débuguer ton bout de code mais si les 2 montants sont dans la table "orders_total", qu'est-ce qui t'empêche de filtrer sur le champ 'title' plutôt que 'class' ?
Les 2 champs 'title' des 2 montants TVA sont différents, genre "TVA:5.5" et "TVA:19.6", non?

CITATION
// -------------------- QUERIES 3 ------------------------------------//
//Orders_tax
$orders_tax = tep_db_query("select value from orders_total
where title = 'TVA:19.6' and orders_id = " . $Orders_id);
//$row_orders_tax = tep_db_fetch_array($orders_tax);
while($row_orders_tax = mysql_fetch_array($orders_tax)) {
// end //
$Order_Tax = filter_text(round($row_orders_tax["value"], 2));
}
// -------------------- QUERIES 3bis ------------------------------------//
//Orders_tax55
$orders_tax55 = tep_db_query("select value from orders_total
where title = 'TVA:5.5' and orders_id = " . $Orders_id);
//$row_orders_tax = tep_db_fetch_array($orders_tax);
while($row_orders_tax55 = mysql_fetch_array($orders_tax55)) {
// end //
$Order_Tax55 = filter_text(round($row_orders_tax55["value"], 2));
}


En rouge, faut bien sûr mettre la dénomination exacte qui est utilisée chez toi.

Puis dans ton csv output, tu fais sortir ces 2 montants où tu veux.
CITATION
$csv_output .= $Order_Tax;
$csv_output .= $Order_Tax55;


Je vois quelque chose dans ce genre là.
A tester, j'suis sûr de rien.
xawaks
Merci de te pencher sur ce soucis.

Mais malheureusement cela ne marche pas confused.gif

C'est quand même étrange que depuis 2006, date à laquel Keuj a mis son code, personne n'est eu le soucis.

Personne n'a de double TVA sur son site question.gif

Je retourne dans mon bbedit faire des essais et je vous tiens au courant si je trouve le truc evil.gif
Gnidhal
J'arrive un peu après la bataille mais bon, voilà le script que j'utilise :
Code
<?php
/*
  $Id: orders_compta.php,v 1.1 13/01/2008 09:48:11 fxm Mod $

  osCommerce, Open Source E-Commerce Solutions
  [url="http://www.oscommerce.com"]http://www.oscommerce.com[/url]

  Copyright © 2003 osCommerce - 2007 WebEspace.fr

  Released under the GNU General Public License
*/

  require('includes/application_top.php');

if ($_POST['export_x']){
              header ("Content-type: application/csv");
              header('Content-Disposition: attachment; filename="rapport_comptable.csv"');

              $rapport_ventes = base64_decode($_POST['ExportCSV']);
              $rapport_ventes = str_replace(".", ",", $rapport_ventes);
              echo $rapport_ventes;
              exit();
              tep_redirect(tep_href_link(FILENAME_SALES_COMPTA));
}

  function tep_date_day($raw_date) {
    if ( ($raw_date == '0000-00-00 00:00:00') || ($raw_date == '') ) return false;

    $year = substr($raw_date, 0, 4);
    $month = (int)substr($raw_date, 5, 2);
    $day = (int)substr($raw_date, 8, 2);
    $hour = (int)substr($raw_date, 11, 2);
    $minute = (int)substr($raw_date, 14, 2);
    $second = (int)substr($raw_date, 17, 2);

    if (@date('Y', mktime($hour, $minute, $second, $month, $day, $year)) == $year) {
      $jour = date('w', mktime($hour, $minute, $second, $month, $day, $year));
    } else {
      $jour =  ereg_replace('2037' . '$', $year, date('w', mktime($hour, $minute, $second, $month, $day, 2037)));
    }
   $jours_semaine = array ('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
   $j_semaine = array ('D', 'L', 'M', 'M', 'J', 'V', 'S');

   return array($jour, $j_semaine[$jour], $jours_semaine[$jour]);
  }


  require(DIR_WS_CLASSES . 'currencies.php');
  $currencies = new currencies();
  include(DIR_WS_CLASSES . 'order.php');

    ////////////////////////////////////////////////////////////
    // calcul du total de vente pour une date ou une période donnée
    // $date doit $etre au format Y-m-d : Y donne un rapport annuel Y-m un rapport mensuel et Y-m-d le rapport du jour
    function get_order_total($date_in, $date_out = false) {
         $mois_array = array('01' => array('id' => '01', 'article' => 'de ', 'mois' => 'Janvier'),
                       '02' => array('id' => '02', 'article' => 'de ', 'mois' => 'Février'),
                       '03' => array('id' => '03', 'article' => 'de ', 'mois' => 'Mars'),
                       '04' => array('id' => '04', 'article' => 'd\'', 'mois' => 'Avril'),
                       '05' => array('id' => '05', 'article' => 'de ', 'mois' => 'Mai'),
                       '06' => array('id' => '06', 'article' => 'de ', 'mois' => 'Juin'),
                       '07' => array('id' => '07', 'article' => 'de ', 'mois' => 'Juillet'),
                       '08' => array('id' => '08', 'article' => 'd\'', 'mois' => 'Août'),
                       '09' => array('id' => '09', 'article' => 'de ', 'mois' => 'Septembre'),
                       '10' => array('id' => '10', 'article' => 'd\'', 'mois' => 'Octobre'),
                       '11' => array('id' => '11', 'article' => 'de ', 'mois' => 'Novembre'),
                       '12' => array('id' => '12', 'article' => 'de ', 'mois' => 'Décembre'));
        if ($date_out == false)  $query_orders = "SELECT orders_id, date_purchased FROM " . TABLE_ORDERS . " WHERE date_purchased LIKE \"$date_in%\"  ORDER by orders_id";
        if ($date_out && $date_in )  $query_orders = "SELECT distinct orders_id, date_purchased FROM " . TABLE_ORDERS . " WHERE date_purchased <= \"$date_out\" and date_purchased >= \"$date_in\" ORDER by orders_id";

        $orders_query = tep_db_query($query_orders);
        $i=0;
        $orders_list = array();
        while ($orders_array = tep_db_fetch_array($orders_query)) {
                    if ($i == 0) {
                      $first_id = $orders_array['orders_id'];
                      $first_date = $orders_array['date_purchased'];
                    }
                    $last_id = $orders_array['orders_id'];
                    $last_date = $orders_array['date_purchased'];
                    $i++;
               if (tep_not_null($orders_array['orders_id']) && is_string($orders_array['orders_id']) ) $orders_list[] =  $orders_array['orders_id'];
        }
        $nb_cmde = $i; // nombre de commandes listées

        foreach ( $orders_list as $o_id) {
        // Total des commandes facturées dans cette période
        $query_total = "SELECT value FROM " . TABLE_ORDERS_TOTAL . " WHERE orders_id = '".$o_id."' and class = 'ot_total' ";
        $total_query = tep_db_query($query_total);
         while ($total_array = tep_db_fetch_array($total_query)) {
          $order_ligne['total_ttc'] = $total_array['value'];
         }
           // Total Frais de ports facturés pour cette période
        $query_shipping = "SELECT value FROM " . TABLE_ORDERS_TOTAL . " WHERE orders_id = '".$o_id."' and class = 'ot_shipping' ";
        $shipping_query = tep_db_query($query_shipping);;
         while ($shipping_array = tep_db_fetch_array($shipping_query)) {
          $order_ligne['total_shipping_ttc'] = $shipping_array['value'];
          $order_ligne['total_shipping'] = $shipping_array['value'] / 1.196;
         }
         $order = new order($o_id);
         $order_ligne['id'] = $o_id;
         $order_ligne['jour'] = tep_date_day($order->info['date_purchased']);
         $order_ligne['mois'] = $mois_array[substr($order->info['date_purchased'], 5,2)];
         $order_ligne['date'] = tep_date_short($order->info['date_purchased']);
         $order_ligne['customer'] = $order->customer['name'];
         $order_ligne['payment'] = $order->info['payment_method'];
         $order_ligne['tva55'] = 0;
         $order_ligne['tva196'] = 0;
         $order_ligne['HT55'] = 0;
         $order_ligne['HT196'] = 0;
         $order_ligne['total_products'] = 0;
             for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
                   // TVA 5.5
                   if ( $order->products[$i]['tax'] == 5.5 ) {
                      $order_ligne['tva55'] +=  (($order->products[$i]['price'] *$order->products[$i]['qty'])*  $order->products[$i]['tax'] /100 );
                      $order_ligne['HT55'] +=  (($order->products[$i]['price'] *$order->products[$i]['qty']));
                   }
                   // TVA 19.6
                   if ( $order->products[$i]['tax'] == 19.6 ) {
                      $order_ligne['tva196'] +=  (($order->products[$i]['price'] *$order->products[$i]['qty'])*  $order->products[$i]['tax'] /100 );
                      $order_ligne['HT196'] +=  (($order->products[$i]['price'] *$order->products[$i]['qty']));
                   }
                   $order_ligne['total_products'] +=  $order->products[$i]['price'] *$order->products[$i]['qty'];
             }
             $order_ligne['HT196'] += $order_ligne['total_shipping'];
             $order_ligne['tva196'] += ($order_ligne['total_shipping_ttc'] - ($order_ligne['total_shipping']));
         $result[] = $order_ligne;
        }
       return $result;
    }
    ///////////////////////////////////////////////////
    
   $date_debut = ($_POST['date_debut'])
             ? $_POST['date_debut']
             : (date("d/m/Y", mktime(0,0,0, date("m") - 1 , 1 , date("Y"))));

   $date_fin = ($_POST['date_fin'])
             ? $_POST['date_fin']
             : (date("d/m/Y", mktime(0,0,0, date("m"), 0 , date("Y"))));


$date_in = (date("Y-m-d", mktime(0,0,0, substr($date_debut,3,2),  substr($date_debut,0,2) ,  substr($date_debut,6,4))));
$mk_in = mktime(0,0,0, substr($date_debut,3,2),  substr($date_debut,0,2) ,  substr($date_debut,6,4));
$mk_out = mktime(0,0,0, substr($date_fin,3,2),  substr($date_fin,0,2) ,  substr($date_fin,6,4));
$nb_jours = (($mk_out -  $mk_in) / 86400);

for ($i=$nb_jours;$i>=0;$i--){
   $result =  get_order_total(date("Y-m-d", mktime(0,0,0, substr($date_fin,3,2),  substr($date_fin,0,2) -$i ,  substr($date_fin,6,4) )));
   $resultat[] = $result;
}




?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo 'Rapport des ventes'; ?></title>
<link rel="stylesheet" type="text/css" href="includes/javascript/spiffyCal/spiffyCal_v2_1.css">
<style type="text/css">
/* <![CDATA[ */
table.petit {font-size:8px; background-color:#eeeeff;}
tr.TitreTable{background-color: #6666FF;color:#FFFFFF;font-weight:bold;}
tr.TotalTable{background-color: #D3605E;color:#FFFFFF;font-weight:bold;font-size:10px;}
tr.Totaux{background-color: #666666;color:#FFFFFF;font-weight:bold;font-size:12px; text-align:right;}
.warning {color:#990000; font-weight:bold;}
td.bright {border-right:2px solid silver;}
/* ]]> */
</style>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script language="javascript" src="includes/general.js"></script>
</head>
<body>
<div id="spiffycalendar" class="text"></div>
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
    <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
    </table></td>
<!-- body_text //-->
    <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100%">
<script type="text/javascript" src="includes/javascript/spiffyCal/spiffyCal_v2_1.js"></script>
<script type="text/javascript"><!--
  var dateDebut = new ctlSpiffyCalendarBox("dateDebut", "formulaire_date", "date_debut","btnDate1","<?php echo $date_debut; ?>",scBTNMODE_CUSTOMBLUE);
  var dateFin = new ctlSpiffyCalendarBox("dateFin", "formulaire_date", "date_fin","btnDate2","<?php echo $date_fin; ?>",scBTNMODE_CUSTOMBLUE);
//--></script>
        <?php
            echo tep_draw_form('formulaire_date',FILENAME_SALES_COMPTA, '','post', 'enctype="multipart/form-data" onReset="return ResetCheck()" ');
?><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading"><?php echo 'Rapport commandes mensuel'; ?></td>
            <td><?php echo tep_draw_separator('pixel_trans.gif', '24', '40') . '&nbsp;'; ?></td>
            <td colspan="2" align="right"></td>
          </tr>
          <tr>
            <td align="right" class="main">Date de début de période : </td>
            <td colspan="2" class="main"><script type="text/javascript">dateDebut.writeControl(); dateDebut.dateFormat="dd/MM/yyyy";</script></td>
            <td class="main">Par défaut le premier du mois dernier</td>
          </tr>
          <tr>
            <td align="right" class="main">Date de fin de période : </td>
            <td colspan="2" class="main"><script type="text/javascript">dateFin.writeControl(); dateFin.dateFormat="dd/MM/yyyy";</script></td>
            <td class="main">Par défaut le dernier jour du mois dernier</td>
          </tr>
          <tr>
            <td align="right" class="main"></td>
            <td colspan="2" class="main"></td>
            <td class="main"><?php echo tep_image_submit('button_send.gif', 'Envoyer'); ?></td>
          </tr>
        </table><?php echo '</form>'; ?></td>
      </tr>
      <tr>
        <td>
        <table border="1" width="100%" cellspacing="0" cellpadding="4" class="petit">
<?php
$ligne_titre = '    <tr class="TitreTable">
      <td class="bright">jour</td>
      <td class="bright">date</td>
      <td align="right" class="bright">Commande N°</td>
      <td align="center">Client</td>
      <td align="right" class="bright">Montant HT </td>
      <td align="right">Frais de port HT</td>
      <td align="right" class="bright">Total commande HT</td>
      <td align="right">HT de TVA 5.5%</td>
      <td align="right">TVA 5.5%</td>
      <td align="right">HT de TVA 19.6%</td>
      <td align="right">TVA 19.6%</td>
      <td align="right">Total TTC</td>
      <td align="right">Mode de paiement</td>
    </tr>'. "\n";
echo $ligne_titre;
$export_xl = "Jour; Date; N° Commande; Client; Produits HT; Port HT; Total Commande HT; Total HT sur TVA 5.50%; TVA 5.50%; Total HT sur TVA 19.60%; TVA 19.60%; Total TTC; Mode de paiement \n";
    $date_in = '';
    $date_out = '';
    $l=0;
     if (sizeof($resultat) < 1) {
       echo '<tr class="Totaux"><td colspan="11" align="center">Aucun résultat pour cette période '. "</tr>\n";
     } else {
     for ($i=0, $n=sizeof($resultat); $i<$n; $i++) {
     $lignes = $resultat[$i];
        if (tep_not_null($lignes)){
             foreach ( $lignes as $ligne) {
             if (!isset($mois)) $mois = $ligne['mois']['id'];

             $tva_55 = ($ligne['tva55'] > 0 ) ? $currencies->format($ligne['tva55']): "-";
             $HT_55 = ($ligne['HT55'] > 0 ) ? $currencies->format($ligne['HT55']): "-";
             $tva_196 = ($ligne['tva196'] > 0 ) ? $currencies->format($ligne['tva196']): "-";
             $HT_196 = ($ligne['HT196'] > 0 ) ? $currencies->format($ligne['HT196']): "-";
             $port_ht = ($ligne['total_shipping'] > 0) ? $currencies->format($ligne['total_shipping']) : "-";

             $style_day = ($ligne['jour'][0] == 6)? 'style="background-color:#D3E8FA;"':'';
             if ($ligne['jour'][0] == 0)$style_day =  'style="background-color:#BDD2E3;"';

                if ($ligne['mois']['id'] != $mois){
                   echo '<tr class="TotalTable">'."\n";
                   echo '<td colspan="4">Total '.$total['mois'].'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_products']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_shipping']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_HT']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['HT55']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['tva55']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['HT196']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['tva196']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_ttc']).'</td>'."\n";
                   echo '<td ></td>'."\n";
                   echo "</tr>\n";
                   $mois = $ligne['mois']['id'];
                   $total = array();
                   echo $ligne_titre;
                }
                       echo "<tr $style_day>\n";
                       echo "<td class=\"bright\">". $ligne['jour'][2] . '</td><td>'.$ligne['date'] . "</td>\n";
                       echo '<td align="right">'. $ligne['id']. "</td>\n";
                       echo '<td align="left">'. $ligne['customer']. "</td>\n";
                       echo '<td align="right" class="bright">'. $currencies->format($ligne['total_products']). "</td>\n";
                     $total['total_products'] += $ligne['total_products'];
                       echo '<td align="right" class="bright">'. $port_ht. "</td>\n";
                     $total['total_shipping'] += $ligne['total_shipping'];
                       echo '<td align="right"><b>'. $currencies->format($ligne['total_products']+$ligne['total_shipping']). "</b></td>\n";
                     $total['total_HT'] += ($ligne['total_products']+$ligne['total_shipping']);
                       echo '<td align="right">'. $HT_55. "</td>\n";
                     $total['HT55'] += $ligne['HT55'];
                       echo '<td align="right">'. $tva_55. "</td>\n";
                     $total['tva55'] += $ligne['tva55'];
                       echo '<td align="right">'. $HT_196. "</td>\n";
                     $total['HT196'] += $ligne['HT196'];
                       echo '<td align="right">'. $tva_196. "</td>\n";
                     $total['tva196'] += $ligne['tva196'];
                       echo '<td align="right"><b>'. $currencies->format($ligne['total_ttc']). "</b></td>\n";
                     $total['total_ttc'] += $ligne['total_ttc'];
                       echo '<td align="right">'. $ligne['payment']. "</td>\n";
                       echo "</tr>\n";
                     $total['mois'] = $ligne['mois']['article'] . $ligne['mois']['mois'];
                    
                    $export_xl .= $ligne['jour'][2] . ";";
                    $export_xl .= $ligne['date'] . ";";
                    $export_xl .= $ligne['id'] . ";";
                    $export_xl .= $ligne['customer'] . ";";
                    $export_xl .= $ligne['total_products'] . ";";
                    $export_xl .= $ligne['total_shipping'] . ";";
                    $export_xl .= $ligne['total_products']+$ligne['total_shipping'] . ";";
                    $export_xl .= $ligne['HT55'] . ";";
                    $export_xl .= $ligne['tva55'] . ";";
                    $export_xl .= $ligne['HT196'] . ";";
                    $export_xl .= $ligne['tva196'] . ";";
                    $export_xl .= $ligne['total_ttc'] . ";";
                    $export_xl .= $ligne['payment'] . ";";
                    $export_xl .= "\n";
            }
        }
    }
                   echo '<tr class="TotalTable">'."\n";
                   echo '<td colspan="4">Total '.$total['mois'].'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_products']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_shipping']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_HT']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['HT55']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['tva55']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['HT196']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['tva196']).'</td>'."\n";
                   echo '<td align="right">'.$currencies->format($total['total_ttc']).'</td>'."\n";
                   echo '<td ></td>'."\n";
                   echo "</tr>\n";
}
?>
        </table>
    </td></tr>
    <tr>
    <td align="center">
    <b>Télécharger le tableau au format Excel (CSV) &nbsp;</b>
    <?php
    echo tep_draw_form('export_csv', FILENAME_SALES_COMPTA);
    echo tep_draw_hidden_field('ExportCSV', base64_encode($export_xl));
    echo tep_image_submit('button_upload.gif', 'EXPORTER', 'name="export"');
    echo '</form>';
    ?>
    </td>
    </tr>
    </table></td>

<!-- body_text_eof //-->
  </tr>
</table>

<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
</body>
</html>

NB : il n'est pas localisé et fonctionne uniquement en français.
NB2 : pour qu'il fonctionne correctement, il faut penser à déclarer le nom du script en define dans includes/filename.php :
define('FILENAME_SALES_COMPTA', 'orders_compta.php');

Enfin, ce code n'est pas optimisé pour une utilisation intensive.
La méthode utilisée est très gourmande en ressources sql et pourrait être copieusement allégée.

il ne s'agit pas d'une contribution mais d'un script franco-français qui retourne une ligne par commande avec :
le jour, la date, le N° de cmde($order_id), le client, le montant HT, les frais de port HT, le HT de TVA5.5%, la TVA 5.5, le HT de TVA19.6%, la TVA 19.6, le total TTC et le mode de paiement.
Une ligne de total conclut le tableau et c'est exportable en csv (un bouton)
on peut choisir la date de début et la date de fin. (par défaut le mois dernier du 1 au 31)
Attention, pour un rapport annuel, ça peut demander plusieurs dizaines de secondes en fonction du nombre de commandes. Attention au timeout!
dernier point, je ne fais pas de SAV là dessus, mais c'est utilisable en l'état et ça peut servir de trame pour un script plus abouti.

Bon code wink.gif
tom555
CITATION(xawaks @ 12 Jan 2008, 17:06) [snapback]265721[/snapback]
Mais malheureusement cela ne marche pas confused.gif


y'a pas de raison, si les données sont là dans la table, tu dois pouvoir les faire resortir.
J'ai fait un essai sur une boutique de test en créant les 2 taux de TVA et l'export se fait sans problème en filtrant sur le champ "title".

Essaye le script de Gnidhal.

@+



xawaks
Merci les gars,

alors pour Tom555 : je sais c'est étrange mais cela me retourne à chaque fois 0 alors qu'ils y a des trucs dans la base. Je ne sais pas si c'est parce que mon champ title est complexe -> dont TVA à 19,6 %:
je vais encore faire des tests. Merci en tous les cas de t'être penché sur mon soucis wink.gif

Pour Gnidhal : Merci beaucoup pour ton fichier, mais je vais faire mon case cou*lles, cela vas moins bien que le fichiers de keuj. En fait dans le fichier de keuj, j'ai déjà fait pleins de modif, j'ai rajouté à l'export mon numéro de facture et la date de celle-ci, ainsi que la présence ou non de coupons de réductions. De plus elle permet d'avoir le total ht par type de tva ce que souhaite ma comptable.
Je vais tenter de faire un mix entre ton fichier et celui de keuj, ensuite je le mettrais ici afin de faire partager notre travail ;o)
Car visiblement le soucis se situe au niveau de la boucle de conditions, je vais essayer d'adapter la tienne lorsque j'aurais compris son fonctionnement.

Merci encore à vous deux, je pense que je suis sur la bonne voie, même si cela me fait rager d'être si proche et de ne pas y arriver evil.gif
Gnidhal
C'est pas idiot cette remarque sur les totaux HT TVA 5.5 et 19.6... tiens j'en ai modifié mon script plus haut wink.gif !
mais pour ce qui est du N° de commande, c'est toujours le N° Order_id ... s'il ne reste que ça tu devrais y arriver non ?
xawaks
merci !

Bon j'avance à grand pas aujourd'hui !!!

J'ai donc repris ton fichier Gnidhal et j'ai rajouté la date et le numéro de facture.

J'arrive également à recupérer les coupons de réductions, mais, ben oui il y a un mais, lors de l'affichage la variable ne se vide pas avant la nouvelle boucle.

En fait si pour la commande n°6100 j'ai 3 euros de coupons, ensuite je vais avoir 3 euros de coupons pour toutes les commandes de cette journée.

La variable n'est remise à zéro que lors du changement de jour, je voudrais quelle soit remise à zéro pour chaque commande.

Une idée ? blush.gif
xawaks
bon je viens de tester un truc, c'est un peu violent, mais cela marche

CITATION
// Coupons
$query_coupons = "SELECT value FROM " . TABLE_ORDERS_TOTAL . " WHERE orders_id = '".$o_id."' and class = 'ot_coupon' ";
$coupons_query = tep_db_query($query_coupons);
$order_ligne['coupons'] = 0;
while ($coupons_array = tep_db_fetch_array($coupons_query)) {
$order_ligne['coupons'] = $coupons_array['value'] ;
}


A ton avis ? il y a plus simple, ou plus "correct" ?

Allez, je bidouille encore un peu et je mets ma version en ligne. rolleyes.gif
xawaks
Bon, je continue.

J'ai mis en place la contrib "edit order" et celle-ci me rajoute des options. Je l'utilise pour faire des reduction spécifique.

Dans ce cas, cela me mets dans la BDD une class "ot_custom"

J'ai modifié le fichier pour qu'il prenne en compte également cette class, mais comme la "value" de cette class est toujours négative, il ne m'affiche rien shock.gif

J'ai fait le test, si je mets un chiffre positif, c'est bon

C'est normal ça ?
Gnidhal
CITATION(xawaks @ 13 Jan 2008, 15:22) [snapback]265760[/snapback]
A ton avis ? il y a plus simple, ou plus "correct" ?

non, ça me semble bien.
D'ailleurs dans mon script je réinitialise ces variables de la même manière :
CODE
$order = new order($o_id);
$order_ligne['id'] = $o_id;
$order_ligne['jour'] = tep_date_day($order->info['date_purchased']);
$order_ligne['mois'] = $mois_array[substr($order->info['date_purchased'], 5,2)];
$order_ligne['date'] = tep_date_short($order->info['date_purchased']);
$order_ligne['customer'] = $order->customer['name'];
$order_ligne['payment'] = $order->info['payment_method'];
$order_ligne['tva55'] = 0;
$order_ligne['tva196'] = 0;
$order_ligne['HT55'] = 0;
$order_ligne['HT196'] = 0;
$order_ligne['total_products'] = 0;

car sinon on se retrouve avec la somme du jour à chaque commande et non pas la somme de la commande.
Ce script est une version de départ car il permet aussi que sortir la somme par jour puisque la boucle est quotidienne. ça peut avoir son intérêt. Reste à extraire ces info dans un format présentable.
Le système de boucle utilisé est très lourd mais il a le mérite de permettre toutes les sorties ( pour une journée ou pour une période au choix)

en ce qui concerne ta valeur négative le problème vient du fait que le champ value est de type "DECIMAL" or mysql stocke ces champs sous forme texte :
CITATION
Les valeurs de type DECIMAL et NUMERIC sont stockées sous forme de chaînes de caractères, plutôt que comme des nombres à virgule flottante, afin de préserver la précision décimale des valeurs. Un caractère est donc nécessaire pour chaque chiffre, plus la virgule (si scale > 0), et le signe moins ‘-’ (pour les nombres négatifs). Si scale vaut 0, les valeurs de type DECIMAL et NUMERIC ne comporteront pas de valeur décimale, ni de virgule.

(+ d'infos ici : http://dev.mysql.com/doc/refman/5.0/fr/numeric-types.html )
Donc pour les valeurs négatives il faut récupérer la valeur comme un float mais aussi extraire le potentiel caractère "-" au début de chaine pour utiliser un négatif
$value_num = floatval($value);
puis utiliser cette valeur avec une soustraction au lieu d'une addition si la condition suivante est vraie :
if (substr($value,0,1)=="-")
et hop wink.gif
xawaks
Je touche au but, mais c'est pas encore ça...

Voic ma requete :
CODE
// Coupons
        $query_coupons = "SELECT value FROM " . TABLE_ORDERS_TOTAL . " WHERE orders_id = '".$o_id."' and class = 'ot_coupon' or 'ot_custom' or 'ot_custom_1' or 'ot_custom_2' or 'ot_custom_3' or 'ot_custom_4' or 'ot_custom_5' ";
        $coupons_query = tep_db_query($query_coupons);
        $order_ligne['coupons'] = 0;
                        
         while ($coupons_array = tep_db_fetch_array($coupons_query)) {
        
        $value_num = floatval($value);
                        
         if (substr($value_num,0,1)=="-") {
                                 
          $order_ligne['coupons'] =- $coupons_array['value_num'];
                  
         }        
          $order_ligne['coupons'] = $coupons_array['value'];
        
         }


Cela marche quand le signe est positif, mais cela ne marche toujours pas quand le signe est négatif mrgreen.gif
Gnidhal
Ahem,
au regard de ce que tu avais codé jusque là, je te croyais un poil plus avancé smile.gif
je t'ai filé un code générique pas la soluce wink.gif

CODE
        while ($coupons_array = tep_db_fetch_array($coupons_query)) {
        
        $value_num = floatval($coupons_array['value']);
                        
         if (substr($coupons_array['value'],0,1)=="-") {
                                
          $order_ligne['coupons'] =- $value_num;
                  
         }  else  $order_ligne['coupons'] += $value_num;

Voilà qui est plus près de ta soluce
xawaks
CITATION(Gnidhal @ 14 Jan 2008, 21:16) [snapback]265841[/snapback]
Ahem,
au regard de ce que tu avais codé jusque là, je te croyais un poil plus avancé smile.gif
je t'ai filé un code générique pas la soluce wink.gif


blush.gif blush.gif

Ton code marche nickel, c'est moi le boulet !!!

Mille merci Môsieur !

Je vérifie dans tous les sens et si cela ne dérange personne je mets mon code ici...

Gnidhal, tu rejoins Xaglo sur son piédestal sur le mur de mon bureau wink.gif
Gnidhal
CITATION(xawaks @ 14 Jan 2008, 23:54) [snapback]265852[/snapback]
Gnidhal, tu rejoins Xaglo sur son piédestal sur le mur de mon bureau wink.gif

Rhaaa non alors !
Pas que la proximité de Xaglo me gêne, bien au contraire, mais j'ai horreur des piédestaux!
C'est comme tout espace réduit, ça ressemble bien trop à une prison.
Et puis, plus le singe monte haut, plus il montre son cul!
bon, c'était la minute de philosophie matinale laugh.gif
concorde44
Salut Xawaks,
marrant, je suis exactement dans le meme cas de figure que toi : tva différenciée, coupons de réduc,... et comptable qui n'en peux plus de tout saisir!
Pourrais-tu partager ton fichier pour à mon tour rendre mon comptable heureux ?
Merci d'avance.
Je devrais ensuite importer les données dans ciel compta...

Seb
xawaks
un peu la bourre en ce moment, mais j'essaye de te mettre ça dans le week-end ;o))
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.