Exporter les commandes pour une gestion comptable

  • Par Magentix le 28/10/2009
  • Difficulté : 2/4

Exporter les commandes pour une gestion comptable Par défaut sous Magento il n'est pas possible d'exporter les informations détaillées relatives aux commandes. Ce module va nous permettre d'exporter un maximum de données au format CSV afin de les exploiter pour une gestion comptable.

Les rapports de ventes disponibles sous Magento permettent de récolter un certain nombre d'informations sur une période donnée, par jour, mois ou année. Ils ne fournissent cependant pas de données détaillées sur les commandes passées. Les tableaux générés restent assez synthétiques (Nombre de commandes, total facturé, total réglé...).

L'idée est donc de développer un module (OrdersExport) capable de générer un fichier CSV et de récolter, ligne par ligne, l'ensemble des informations disponibles pour une commande, afin de les exploiter par la suite sur un ERP par exemple.

Le fichier CSV pourra contenir :

  • Numéro de commande
  • Date de commande
  • Numéro de facture
  • Date de facture
  • Numéro de livraison
  • Date de livraison
  • Numéro de remboursement
  • Date de remboursement
  • Numéro du client
  • Nom et prénom du client
  • Nombre de produits commandés
  • Nombre de produits livrés
  • Sous-total de la commande
  • Montant des taxes
  • Montant des frais de port
  • Montant des remises
  • Total de la commande
  • Montant remboursé
  • Méthode de paiement
  • Statut de la commande

Le fichier est généré manuellement depuis la page du listing des commandes. Il est ainsi possible de filtrer les commandes que l'on souhaite récupérer (période, statut, numéros de commande...).

Export CSV des commandes

Le module de base utilisé pour le développement de cette extension est Manual order export, anciennement disponible sur Magento Connect.

L'extension est compatible avec les versions 1.3.X de Magento.

Export CSV Excel

Architecture du module

  • app/code/local/Magentix/OrdersExport/Block/
  • SalesOrderGrid.php
  • app/code/local/Magentix/OrdersExport/controllers/
  • SalesOrderController.php
  • app/code/local/Magentix/OrdersExport/etc/
  • config.xml
  • app/code/local/Magentix/OrdersExport/Helper/
  • Data.php
  • app/code/local/Magentix/OrdersExport/Model/
  • SalesOrder.php
  • app/locale/fr_FR/
  • Magentix_OrdersExport.csv
  • app/etc/modules/
  • Magentix_OrdersExport.xml

Détails du module

Pour plus de souplesse, la mise en forme du CSV se configure depuis le fichier de configuration config.xml :

app/code/local/Magentix/OrdersExport/etc/config.xml

<!-- ... -->
<default>
    <ordersexport>
        <csv>
            <delimiter>[[blue]];[[/blue]]</delimiter>
            <enclose>[[blue]]"[[/blue]]</enclose>
            <mapping>
                <order_increment_id>[[blue]]Order number[[/blue]]</order_increment_id>
                <order_created_at>[[blue]]Order created at[[/blue]]</order_created_at>
                <invoice_increment_id>[[blue]]Invoice number[[/blue]]</invoice_increment_id>
                <invoice_created_at>[[blue]]Invoice created at[[/blue]]</invoice_created_at>
                <shipment_increment_id>[[blue]]Shipment number[[/blue]]</shipment_increment_id>
                <shipment_created_at>[[blue]]Shipment created at[[/blue]]</shipment_created_at>
                <creditmemo_increment_id>[[blue]]Credit memo number[[/blue]]</creditmemo_increment_id>
                <creditmemo_created_at>[[blue]]Credit memo created at[[/blue]]</creditmemo_created_at>
                <customer_name>[[blue]]Customer name[[/blue]]</customer_name>
                <customer_increment_id>[[blue]]Customer number[[/blue]]</customer_increment_id>
                <products_ordered>[[blue]]Products ordered[[/blue]]</products_ordered>
                <products_delivered>[[blue]]Products delivered[[/blue]]</products_delivered>
                <order_subtotal>[[blue]]Subtotal[[/blue]]</order_subtotal>
                <order_tax_amount>[[blue]]Tax[[/blue]]</order_tax_amount>
                <order_shipping_amount>[[blue]]Shipping[[/blue]]</order_shipping_amount>
                <order_discount_amount>[[blue]]Discount[[/blue]]</order_discount_amount>
                <order_grand_total>[[blue]]Total[[/blue]]</order_grand_total>
                <order_total_refunded>[[blue]]Refunded[[/blue]]</order_total_refunded>
                <order_payment_method>[[blue]]Payment method[[/blue]]</order_payment_method>
                <order_status>[[blue]]Status[[/blue]]</order_status>
            </mapping>
        </csv>
    </ordersexport>
</default>
<!-- ... -->

On définit ici les séparateurs de champs et de texte souhaités, les informations à récupérer et l'ordre des colonnes.

L'intitulé des colonnes peut être modifié depuis le fichier de langue Magentix_OrdersExport.csv :

app/locale/fr_FR/Magentix_OrdersExport.csv

"Order number","Commande"
"Order created at","Date commande"
"Invoice number","Facture"
"Invoice created at","Date facture"
"Shipment number","Expedition"
"Shipment created at","Date expedition"
"Credit memo number","Remboursement"
"Credit memo created at","Date remboursement"
"Customer name","Client"
"Customer number","Numero client"
"Products ordered","Produits commandes"
"Products delivered","Produits livres"
"Subtotal","Sous total HT"
"Tax","Taxe"
"Shipping","Frais de port"
"Discount","Remise"
"Refunded","Rembourse"
"Total","Total TTC"
"Payment method","Reglement"
"Status","Statut"

Le module surcharge le bloc Mage_Adminhtml_Block_Sales_Order_Grid. Il peut donc entraîner un conflit avec un autre module installé (ex : Fia-Net).

Les fichiers CSV générés sont stockés dans le dossier /var/export. Un lien de téléchargement est affiché suite à l'export :

Export CSV fichier
28

Commentez cet article Exporter les commandes pour une gestion comptable

maher Le 20/06/2010 à 23:48
Excellent module !!
Est ce qu'on peut exporter les commandes sous forme de page "html" dont on aura tous les informations et un bouton "imprimer"?
#1
Magentix Le 20/06/2010 à 23:49
Cela ne pose pas de problème... Il suffit de modifier quelques fonctions de l'extension :

Fichier local/Magentix/OrdersExport/Model/SalesOrder.php, modifier la méthode exportOrders() de cette façon :

public function exportOrders($orders,$content='') {
$delimiter = Mage::getStoreConfig('ordersexport/csv/delimiter');
$enclose = Mage::getStoreConfig('ordersexport/csv/enclose');
$mapping = Mage::getStoreConfig('ordersexport/csv/mapping');
$content .= '<table border="1"><tr>';

foreach($mapping as $k => $v) $content .= '<td>'.Mage::helper('ordersexport')->__($v).'</td>';
$content .= "</tr>";
foreach ($orders as $o) {
$data = $this->getInfos(Mage::getModel("sales/order")->load($o));
$content .= "<tr>";
foreach($mapping as $k => $v) $content .= '<td>'.$data[$k].'</td>';
$content .= "</tr>";
}
$content .= "</table>";
return $content;
}



Puis la méthode ordersExportAction() du fichier local/Magentix/OrdersExport/controllers/SalesOrderController.php :

public function ordersExportAction() {
$orderIds = $this->getRequest()->getPost('order_ids',array());
echo Mage::getModel('sales/order')->exportOrders($orderIds);
}



Il ne reste plus qu'à styler ce tableau comme tu le souhaites, ajouter le bouton "imprimer"...
#2
Cédric Le 20/06/2010 à 23:49
Bonjour,
Si j'obtiens un conflit avec un autre module (je n'utilise pas FIA-NET mais d'autres modules), la désinstallation du module est simple à effectuer ?
D'avance merci pour votre aide
#3
Magentix Le 20/06/2010 à 23:50
La désinstallation ne posera aucun problème, il suffira d'indiquer "false" dans le fichier "Magentix_OrdersExport.xml" ou de supprimer l'ensemble des fichiers puis de rafraîchir le cache.
#4
William Le 20/06/2010 à 23:50
Bravo !!
Excellent module, indispensable !
#5
Keaz Le 20/06/2010 à 23:50
Bonjour,
Y a-t'il possibilité d'étendre le module afin d'avoir le détail de chaque commande?
Si oui par ou commencer merci.
#6
Magentix Le 20/06/2010 à 23:51
De quels détails supplémentaires avez-vous besoin ?
Tout se passe dans le fichier "SalesOrder.php" (model). On y récupère l'ensemble des informations d'une commande : paiement, facturation, livraison, remboursement, produits... Sur ces objets on récupère ce qui nous intéresse (j'utilise principalement des getData).
#7
Julien Le 20/06/2010 à 23:51
Bien pratique, mais le problème reste pour un marchand utilisant plusieurs taux de TVA, par exemple à 5,5% et à 19,6%. Comptablement, on a besoin de la base HT pour chacun des taux...
#8
Legen Le 20/06/2010 à 23:51
Bravo et Merci !
Tuto tout simplement brillant !
Juste une question, je voudrais faire en sorte que l'export se fasse automatiquement grâce a une tâche Cron.
Dois-je modifier le module ou pas du tout?
Une idée de comment je pourrais m'y prendre?
Merci beaucoup par avance!
#9
Magentix Le 20/06/2010 à 23:52
Pour la configuration d'une tâche Cron tu peux suivre ce petit tutoriel ;) : http://www.magentix.fr/modules-magento/taches-cron-magento-module-anniversaire-clients.html
#10
Geeko Le 20/06/2010 à 23:52
Enorme !!!!
Merci !
#11
george Le 14/09/2010 à 10:58
Bonjour,
il existe une version compatible 1.4.1 ?
#12
kom'ca Le 15/09/2010 à 18:38
Salut Magentix et merci pour ton site.

J'aimerai bcp utiliser ce module sur mon site mais j'ai besoin de récupérer un champ supplémentaire le champ cost
aurais tu un début de piste pour m'aider?

Merci d'avance et bonne continuation :)
#13
Magentix Le 15/09/2010 à 18:44
Le coût total des produits est stocké à chaque commande ? J'ai un doute, je vais regarder. Sinon il faudrait lister les produits commandés et récupérer le champ cost associé à chacun d'entre eux :

$items = $order->getAllItems();

$cost = 0;

foreach ($items as $item) {

$p = Mage::getModel('catalog/product')->load($item->getProductId());
$cost += $p->getCost()*$item->getQtyOrdered();

}

Le problème c'est que cette valeur peut varier selon les prix obtenus chez les fournisseurs...
#14
rdelon Le 28/09/2010 à 11:09
george,
je viens de tester sur un 1.4.1.1 ça fonctionne.
#15
Pierre Le 22/10/2010 à 13:50
Le seul soucis avec cette (très bonne) extension est que cela n'exporte pas toutes les factures rattachées à une seule et même commande. En cas de livraison partielle ou en plusieurs fois, si plusieurs factures sont éditées ce module d'export ne le gère pas et ne mentionne que le dernier numéro de facture, sans préciser son montant ...

Cela n'est donc pas très utilisable pour une gestion comptable !

Quelqu'un aurait-il une solution d'exportation des factures et idéalement des remboursements ?!?

C'est assez fou que Magento ne le propose pas en standard ! c'est le b-a-ba !
#16
Idealclic Le 09/11/2010 à 19:32
Bonjour,

Merci pour ce module, très pratique et simple à utiliser.

Ma question porte sur la possibilité de pouvoir filtrer les infos à l'export.

Je m'explique, je souhaiterais mettre en place un cron journalier sur les commandes et pouvoir sélectionner uniquement les ventes effectuées le même jour. Aussi pourrait on envisager de greffer sur ce module la possibilité de le poser de l'envoyer par mail chaque jour a heure fixe ou le poser sur un ftp comme avec les profils avancés ?

Merci par avance..
#17
Magentix Le 09/11/2010 à 22:01
Bonjour,

Cela est tout à fait possible, l'idée est d'ajouter une tâche cron (ex : http://www.magentix.fr/modules-magento/taches-cron-magento-module-anniversaire-clients.html). La méthode exécutée par le cron charge la collection de commandes (avec les filtres pour la date du jour) que l'on parcourt pour exécuter la méthode "getInfos" de la classe Magentix_OrdersExport_Model_SalesOrder. La méthode retourne un array avec toutes les informations que l'on peut exploiter...
#18
Laurent Le 25/11/2010 à 23:55
Bonjour,

C'est une réelle bonne initiative, sauf qu'elle est malheureusement incomplète pour être utilisée dans un contexte comptable "pur et dur". Idéalement, un journal des ventes contiendra tout le détail de chaque commande, produit par produit, avec quantité, taux de tva associé etc...
A ma connaissance cela n'existe pas encore, et c'est bien dommage car c'est précisément là que réside l'intérêt de générer des exports vers un quelconque logiciel comptable. Se contenter d'exporter des commandes sans en connaitre précisément le détail n'a d'autre intérêt que d'alimenter un simple journal de banque pour des rapprochements bancaires...Mais dans ce cas là, nul besoin d'export, Magento et sa présentation ergonomique suffisent amplement !

Cordialement
#19
Laurent Le 10/12/2010 à 01:40
Bonsoir,

Etonnant, depuis ce soir j'ai cette erreur dans mes logs :

2010-12-10T00:32:41+00:00 ERR (3):
exception 'Varien_Exception' with message 'Invalid method Magentix_OrdersExport_Model_SalesOrder::sendNewOrderFile(Array
(
[0] => order_export_10-12-2010.csv
)
)' in /var/www/imatone/domain/prod/lib/Varien/Object.php:569
Stack trace:
#0 [internal function]: Varien_Object->__call('sendNewOrderFil...', Array)
#1 /var/www/imatone/domain/prod/app/code/local/Ecsso/Checkout/Model/Type/Onepage.php(551): Magentix_OrdersExport_Model_SalesOrder->sendNewOrderFile('order_export_10...')
#2 /var/www/imatone/domain/prod/app/code/core/Mage/Checkout/controllers/OnepageController.php(451): Ecsso_Checkout_Model_Type_Onepage->saveOrder()
#3 /var/www/imatone/domain/prod/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Checkout_OnepageController->saveOrderAction()
#4 /var/www/imatone/domain/prod/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('saveOrder')
#5 /var/www/imatone/domain/prod/app/code/core/Mage/Core/Controller/Varien/Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#6 /var/www/imatone/domain/prod/app/code/core/Mage/Core/Model/App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
#7 /var/www/imatone/domain/prod/app/Mage.php(596): Mage_Core_Model_App->run(Array)
#8 /var/www/imatone/domain/prod/index.php(88): Mage::run('', 'store')
#9 {main}

J'ai mis la main sur cette erreur après avoir constaté qu'il n'était plus possible de payer en ligne après avoir cliqué sur "Validation" qui renvoie vers le module de paiement bancaire. Une erreur de type "Erreur lors du traitement de votre commande, veuillez réessayer plus tard." apparait systématiquement...

Y'a-t-il un lien de cause à effet ?

Merci de votre réponse

Cordialemnt
#20
Cedric Le 17/12/2010 à 15:08
Bonjour,
super module
je souhaiterais avoir une export de ce type de tableau excel en 3 lignes pour chaque commande:
"compte client - date facture - numero facture - montant ttc - vide"
"compte HT - date facture - numero facture - vide - montant HT"
"compte TVA - date facture - numero facture - vide - montant TVA"

N'etant pas spécialiste de code, je n'arrive pas evidemment a modifier salesorder.php et config.xml afin d'arriver a ce résultat.
une idée?
merci
#21
Cédric Le 27/12/2010 à 11:22
Pour faire plus simple, comment rajouter un saut dans le fichier config.xml
merci
#22
cedric Le 27/12/2010 à 13:16
j'ai trouvé, il faut rajouter les mapping : mapping2; mapping3 dans le fichier config.xml
ensuite dans le fichier d'export reporter comme cela:

foreach ($orders as $o) {
$data = $this->getInfos(Mage::getModel("sales/order")->load($o));
foreach($mapping as $k => $v) $content .= $enclose.$data[$k].$enclose.$delimiter;
$content .= "\r\n";
foreach($mapping2 as $k => $v) $content .= $enclose.$data[$k].$enclose.$delimiter;
$content .= "\r\n";
foreach($mapping3 as $k => $v) $content .= $enclose.$data[$k].$enclose.$delimiter;
$content .= "\r\n";

et ca marche
#23
Geoff Le 28/12/2010 à 16:17
Bonjour cette extension est géniale. Bravo ^^

Par contre, je cherche à faire une petite modification mais je n'y arrive pas. Je développe en ce moment un site qui va exporter les données des commandes vers le logiciel du transporteur. Pour ce faire, j'aurai besoin de pouvoir renseigner le poids du panier contenant tous les articles.
Quelqu'un saurait-il comment il est possible d'ajouter cet attribut?

Merci à vous :)
#24
Gaetan Le 23/01/2011 à 20:41
Bonjour et merci pour cette extension

Je souhaite l'utiliser non pas à partir de la page admin magento/commandes mais admin magento/factures et afficher les mêmes données pour les factures sélectionnées.
J'ai déjà effectué plusieurs modifs mais maintenant je bloque.
(Par m'y repérer j'ai remplacé les mots orders par fact)

Dans le fichier Magentix/Ordersexport/Model/SalesFact.php (copie de SalesOrder.php)

Tout d'abord est-ce toujours correct de faire un extend de la classe Mage_Sales_Model_Order pour les factures ?

class Magentix_FactExport_Model_SalesFact extends Mage_Sales_Model_Order {

public function exportFact($fact,$content='') {
$delimiter = Mage::getStoreConfig('ordersexport/csv/delimiter');
$enclose = Mage::getStoreConfig('ordersexport/csv/enclose');
$mapping = Mage::getStoreConfig('ordersexport/csv/mapping');

foreach($mapping as $k => $v) $content .= $enclose.Mage::helper('ordersexport')->__($v).$enclose.$delimiter;
$content .= "\r\n";

foreach ($fact as $gb) {

// $gb : variable d'identification de la facture
// Comment passer de $gb à $o : variable d'identification de la commande correspondante qui permet d'utiliser la fonction getInfos ?
// Dans la page des factures, $fact donne la valeur entity_id issue de la table mg_sales_order_entity

$data = $this->getInfos(Mage::getModel("sales/order")->load($o));
foreach($mapping as $k => $v) $content .= $enclose.$data[$k].$enclose.$delimiter;
$content .= "\r\n";
}

Donc en gros, comment passer de $gb à $o : variables d'identification des factures à celle des commandes correspondantes, ce qui permet d'utiliser la fonction getInfos ?

Merci de votre aide
#25
JUCHA Le 05/04/2011 à 16:59
Bonjour,

Je souhaite tensférer les commandes vers mon ERP. D'après mon développeur, il y a plusieurs contraintes :
1- l'export csv est par défaut encodé au format utf8, est-il possible de générer un fichier csv au format unicode unicode ISO-8859-15 ?
2- les dates peuvent-elles être formatées sous la forme JJ/MM/AAAA au lieu de "2 nov. 2010 09:39:20"
3- Le retour à la ligne à l'intérieur d'une données peut-il ^etre enlevé ?
4- Est-il possible de fournir les montants avec 2 décimales seulement, et sans le symbole € ?

Merci d'avance pour votre aide.

Merci de votre aide
#26
Laurent Le 11/05/2011 à 13:23
Bonjour,

J'ai une question concernant cette extension.

Peux t'on rajouter d'autres fields dans le csv, tels que le giftmessage ?
Comment s'y prendre ?

Ce module est'il compatible avec EnhancedProductGrid extension ?

Merci beaucou.
#27
Darwin59 Le 19/08/2011 à 14:03
Hello, super module correspondant parfaitement à mes attentes mais y'aurait il une version compatible 1.5 ????
#28
Rédiger un commentaire

Cliquez pour générer un nouveau code

* champs obligatoires