Jump to content

Exportation des commandes pour exel


legrenier

Recommended Posts

bonjour, je viens de télécharger le module créé par Whitelighter. (en piece jointe, merci à son auteur)
pour ceux qui ne le connaissent pas, il permet d'exporter sur exel ses commandes.


je me permet d'ouvrir un post en francais (car l'original est en anglais) traitant du meme sujet.

Je viens de constater plusieurs problemes avec ce module. Les champs crées avec ce module sont séparés avec des virgules. problème rencontré : quand un client mets une virgule dans son adresse, cela décale tous les champs sur exel.


j'ai en parti modifié le code du php, pour creer un csv avec des ; (il faut remplacer les lignes 86 à 89) par :

$f=fopen(dirname(__FILE__).'/orders.csv', 'w');
           fwrite($f, implode('; ', $titles)."\r\n");
           foreach($orderlist AS $order){
               fwrite($f, implode('; ', $order)."\r\n");



autre chose, ce module pourrait être amélioré, notamment ajouté le titre de l'objet commandé (qui pour l'instant n'est pas exporté) quelqu'un serait il apporté cette modif ? (cela doit pas être de la tarte pour les commandes multiples) ...

exportorders.zip

  • Like 1
Link to comment
Share on other sites

Bonsoir, pour revenir à mon probleme d'export, j'essai de faire ceci (autre méthode sans passer par un module du BO)

<?php
mysql_connect("monseveur", "mabase", "motdepasse"); // Connexion à MySQL
mysql_select_db("mabase"); //selection de la base coursphp

$reponse = mysql_query("SELECT id_order, total_paid_real, invoice_number, product_name, payment, shipping_number, total_shipping, invoice_date, firstname, email, lastname FROM ps_orders NATURAL JOIN ps_order_detail, ps_customer, ps_address ORDER BY invoice_number DESC LIMIT 0,100") or die(mysql_error()); // Requête SQL

 // On fait une boucle pour lister tout ce que contient la table :

while ($donnees = mysql_fetch_array($reponse) )
{
?>
   <?php echo $donnees['invoice_number']; ?>;<?php echo $donnees['lastname']; ?>;<?php echo $donnees['firstname']; ?> ( <?php echo $donnees['email']; ?> );<?php echo $donnees['product_name']; ?>;<?php echo $donnees['total_paid_real']; ?>

<?php
}

mysql_close(); // Déconnexion de MySQL
?>



je ne m'en sors pas dans les jointures ! je ne suis pas assez balaise pour écrire correctement la requete, les champs sont ambigus ! quelqu'un serait il me l'ecrire correctement.

car une fois ce code bien ecrit dans un fichier, en se servant des 4 tables (ps_address, ps_custumers, ps_orders et ps_orderdetail) on n'arrive à exporter ce que l'on veut (sans se servir d'un module)

pratique pour tenir ses ventes à jour sous exel par exemple ...

Link to comment
Share on other sites

  • 4 months later...

Bonjour, pour faire simple, sortir un tableau sur exel où apparaiterait : le titre de l'objet vendu, la reference, le prix, la date de facturation, les frais de port, le total frais de port+prix du produit, le nom du client, l'adresse du client. cela me parait déjà pas mal ...


le tout à partir de la base de données ...

j'ai beau cherché dans les modules existants, je ne trouve rien de concluant, et je perds un temps fou à extraire avec phpadmin, les données que j'ai besoin, alors qu'il suffit de bien joindre les tables pour sortir la requete ...

(attention aux commandes multiples, je ne sais pas comment on peut faire, prendre en compte le 1er objet de la commande ?)

a suivre ...

Link to comment
Share on other sites

Bonjour

pour ma part ca serais

Le numéro de la commande
Le nom
Le prenom
L adresse1
L Adresse 2
Province
Ville
Pays
Email

Et pour finir que seule les commandes en cours de préparation sois exportée dans un fichier exel

Avec ca je suis royal j'économise peut être certain jour 1 heure de travail

Possible rémunération pour la personne qui me fait ça

Cordialement

Didier

Link to comment
Share on other sites

  • 1 month later...
  • 7 months later...
  • 4 months later...

Bonjour,

Vous pouvez aussi tout simplement faire un export en CSV via phpMyAdmin avec une requete de ce type :

SELECT o.id_order AS 'Num commande',  
           c1.lastname AS 'Nom', 
           c1.firstname AS 'Prenom',  
           c1.email AS 'Email'
           FROM ps_customer c1, ps_orders o 
           WHERE o.valid=1 
           AND o.id_customer=c1.id_customer
           ORDER BY o.id_order ASC



Vous pouvez ensuite rajouter autant de champs que vous voulez avec des jointures (la doc MySQL est ton amie ! et puis, ça ne fait jamais de mal de maitriser la base de SQL).

Mat.

Link to comment
Share on other sites

  • 3 months later...

Bonjour a tous

Voila ma requete qui me permet de sortir pas mal de chose sur les commande:

 

 

SELECT o.id_order AS 'Num commande',

p.name AS 'Produit',

r.quantity AS 'Quantite',

o.total_products AS 'Prix produit',

o.total_shipping AS 'Transport',

o.total_paid AS 'Total commande',

a1.company AS 'Raison sociale',

c1.id_gender AS 'Civilite',

a1.lastname AS 'Nom',

a1.firstname AS 'Prenom',

a1.address1 AS 'Addresse de facturation',

a1.address2 AS 'Addresse de facturation 2',

a1.postcode AS 'Code postal',

a1.city AS 'Ville',

y1.name AS 'Pays de facturation',

a1.phone AS 'Telephone fixe facturation',

a1.phone_mobile AS 'Telephone mobile facturation',

c1.email AS 'Email',

c1.newsletter AS 'Newsletter',

c1.optin AS 'Newsletter groupe',

c2.id_gender AS 'Civilite livraison',

CONCAT_WS(' ',a2.lastname, a2.firstname) AS 'Destinataire',

a2.address1 AS 'Addresse 1',

a2.address2 AS 'Addresse 2',

a2.postcode AS 'CP',

a2.city AS 'Commune',

n.iso_code AS 'Pays',

a2.phone AS 'Telephone',

a2.other AS 'Instructions'

FROM ps_customer c1, ps_customer c2, ps_address a1, ps_address a2, ps_country_lang y1, ps_country_lang y2, ps_country n, ps_product_lang p, ps_cart_product r, ps_orders o

WHERE o.valid=1

AND o.id_address_invoice=a1.id_address

AND o.id_address_delivery=a2.id_address

AND o.id_cart = r.id_cart

AND r.id_product = p.id_product

AND p.id_lang=1

AND a1.id_country = y1.id_country

AND a2.id_country = y2.id_country

AND y1.id_lang=1

AND y2.id_lang=1

AND a1.id_customer=c1.id_customer

AND a2.id_customer=c2.id_customer

AND a2.id_country=n.id_country

ORDER BY o.id_order ASC;

Se que j'aimerai faire c'est que si une personne a commandé plusieurs chose en une seul commande, que chaque article soit bien voyant.

Link to comment
Share on other sites

Bonjour,

 

voici le module exportorders gratuit modifié, car les accents et virgules posaient trop de problèmes ( fonctionne chez moi sous 1.4.4 )

 

exportorders.zip

 

 

le lien proposant le module original est ici :

http://www.prestasho...-export-orders/

 

 

Cependant il me manque à ce module 2 informations très importantes pour la compta !

 

la TVA payée par le client ( produit + transport )

 

et le Total HT ( produit + transport )

 

j'ai beau chercher sur les bases de données je ne trouve c'est informations nul part

 

Alors si quelqu'un qui connaît le php et peux me donner la solution ou du moins une piste sa serait cool !

 

info : j'ai l'impression que c'est infos ne se trouve pas dans la base, car en regardant le fichier pdf.php ( facture ) je pense que ces montants sont calculés à partir du montant TTC et du taux de TVA, mais comment faire sur ce type de code

 

 

array(
 'n'=>'???',
 'l'=>'Total H.T'
),
array(
 'n'=>'???',
 'l'=>'TVA'
),

 

j'ai posté la même question sur le forum anglais

 

 

Merci

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour

 

Moi j'ai testé la version de Kestouf sur PHP MY Admin et ça fonctionne très bien. Mais il manque toujours la TVA pour ma compta, surtout que je vends dans différents pays

 

Comme toi Francky600, je ne la vois nulle part dans les tables de la BDD. Quelqu'un sait-il où la trouver ?

 

Merci

Link to comment
Share on other sites

Bonjour,

 

Pour ma comptabilité, j'ai besoin d'extraire de ma BDD toutes les commandes hors france du 3eme trimestre (nom, prenom, pays, total commande, date de commande, statut).

Pourriez-vous m'aider à construire la requete SQL à appliquer dans Phpmyadmin ?

 

Merci de votre aide.

Link to comment
Share on other sites

Bonjour

 

Moi j'ai testé la version de Kestouf sur PHP MY Admin et ça fonctionne très bien. Mais il manque toujours la TVA pour ma compta, surtout que je vends dans différents pays

 

Comme toi Francky600, je ne la vois nulle part dans les tables de la BDD. Quelqu'un sait-il où la trouver ?

 

Merci

 

Dans ps_orders tu as tous les champs dont tu as besoin :

 

total_paid --> total TTC (transport + produit)

total_products --> total produits TTC

total_products_wt --> total produit HT (wt : without tax)

total_shipping --> frais de port TTC

carrier_tax_rate --> taux de TVA pour le transporteur

 

 

Avec de simples soustractions et addition dans la requete tu sors facilement le total TVA !

Link to comment
Share on other sites

Merci Manouille,

 

Effectivement c'est plus clair quand on a la traduction des champs ! Je n'avais pas compris que wt voulait dire without tax.

 

C'est quand même un peu tordu de mélanger le HT pour les produits et le TTC pour le transporteur, je ne sais pas pourquoi Prestashop ne fait pas tout bêtement HT, TVA et TTC, ça devait être trop simple ;-(

En fait je commence à travailler avec un expert comptable et je me rends compte qu'il y a plein d'erreurs sur les factures générées par Prestashop. Il vaut mieux passer par un logiciel ad-hoc. Bref 6 mois d'activité à repasser au peigne fin...

Link to comment
Share on other sites

Il faut que tu fasses des jointures en passant de

 

ps_orders --> ps_order_history (id_order.ps_orders=id_order.ps_order_history) --> Tu récupères max(id_order_state.ps_order_history) --> tu va chercher le statut en francais --> max(id_order_state.ps_order_history)=id_order_state.ps_order_state_lang --> et la tu recupères le statut en francais en récupérant la variable name.ps_order_state_lang

 

 

En résumé tu passes de ps_orders à ps_order_history à ps_order_state_lang

Et normalement ca roule !

Link to comment
Share on other sites

Bonjour,

Dans le fichier exportoders.php, il y a ce bout de code qui permet d'afficher le numero du client, son nom et son prenom.

 

Ces info sortent dans une case séparée hors j'aimerai que celle-ci soit dans la meme case comme cela l'est pour l'adresse.

J'ai donc observé et commencé à effectuer une modif sauf que, il doit me manquer un détail car cela ne fonctionne pas.

Voici le bout de code que je cherche à modifié

 

'c'=>array(
  'n'=>'customer',
  'f'=>array(
array(
 'n'=>'id_customer',
 'l'=>'Customer No'
),
array(
 'n'=>'firstname',
 'l'=>'First Name'
),
array(
 'n'=>'lastname',
 'l'=>'Last Name'
),
array(
 'n'=>'email',
 'l'=>'Email'
)
  ),
  'w'=>'c.id_customer=o.id_customer'
 ),

 

Pour le faire évolué comme ceci :

 

 

 

 'c'=>array(
 'n'=>'customer',
 'f'=>array(
  array(
'n'=>'CONCAT(ad.`id_customer`, " ", ad.`lastname`, " ", ad.`firstname`)',
  'l'=>'customer' ,
  'n'=>true
 )
  ),
'w'=>'c.id_customer=o.id_customer'
  ),

 

Je n'arrive pas à trouver d'ou viendrai le probleme :unsure:

Vous avez une idée sur ce qui bloque ? :)

Merci beaucoup pour votre aide :)

Link to comment
Share on other sites

Bonjour,

 

Voila le module qu'il vous faut. Il vous permet d'extraire tous ce que vous souhaitez de vos commandes au format csv(excel), html et vous envoi même le resultat par email de manière automatique si vous le souhaitez.

 

Lien vers le module:

http://addons.prestashop.com/fr/export/3459-yourextractorder-emailcsvhtml.html

 

Vous trouverez sur la fiche produit des liens vers un site de test qui vous permettra de juger par vous même.

 

 

Cordialement G. PREVEAUX

Link to comment
Share on other sites

Je suis d'accord avec toi. Je vous propose simplement celui-ci car malheureusement je sais que votre temps a tous vous est compté. Souvent acheter un module à 50€ vous permettra de gagner du temps et donc de l'argent et vous pourrez ainsi vous concentré sur votre métier et vendre d'avantage.

 

Cordialement G. PREVEAUX

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...

Bonjour

j'ai essayé de rajouter le commentaire de transport dans le csv dans le fichier exportorders.php j'ai rajouté cette ligne dans l'array tables

 

	 ),
 array(
  'n'=>'`other` AS aiother',
  'l'=>$this->l('Invoice Comment')
 )

mais ca na pas changé grand chose

quelqu'un parmi vous sait comment le rajouter

Aussi est ce que vous savez comment mettre des champs specifiques par defaut pour l'extraction sans avoir a selectionner chaque fois ce qu'on veut extraire. j'ai essayé de rajouter des checked par defaut mais j'ai pas su ou le faire.

mercii

Link to comment
Share on other sites

  • 5 weeks later...
  • 1 year later...
  • 2 months later...

Bonjour

Je galere à rajouter le "PRODUCT NAME " de la table ps_order_detail. voici mon code .

<?php
class ExportCommandes extends Module
{
function __construct()
{
 $this->name = 'exportcommandes';
 $this->tab = 'Export';
 $this->version = 1.0;

 parent::__construct();

 $this->displayName = $this->l('Export commandes');
 $this->description = $this->l('Module d\'exportation des commandes.');
}
function install()
{
 if (!parent::install())
  return false;
}
function getContent()
{
 $this->_html = '<hr><h2>'.$this->displayName.'</h2>';
 $this->_html.= '<p>'.$this->l('Ce module permet d\'exporter toutes les commandes validées dans un fichier CSV.').'</p>';

 if (isset($_POST['download']))
 {
  $sql="SELECT o.id_order AS 'Num commande',
  c1.id_customer AS 'Num client',
  prs_product.id_product AS 'id_produit',				 
  prs_product.reference AS 'reference',
  p.name AS 'Produit',
  r.quantity AS 'Quantite',
  prs_order_detail.product_name AS 'Taille'
  a1.lastname AS 'Nom',
  a1.firstname AS 'Prenom',
  a1.address1 AS 'Addresse de facturation',
  a1.address2 AS 'Addresse de facturation 2',
  a1.postcode AS 'Code postal',
  a1.city AS 'Ville',
  y1.name AS 'Pays de facturation',
  a1.phone AS 'Telephone fixe facturation',
  a1.phone_mobile AS 'Telephone mobile facturation',
  c1.email AS 'Email',

  CONCAT_WS(' ',a2.lastname, a2.firstname) AS 'Destinataire',
  a2.address1 AS 'Addresse 1',
  a2.address2 AS 'Addresse 2',
  a2.postcode AS 'CP',
  a2.city AS 'Commune',
  n.iso_code AS 'Pays',
  a2.phone AS 'Telephone',
  a2.other AS 'Instructions'
  FROM "._DB_PREFIX_."customer c1, "._DB_PREFIX_."customer c2, "._DB_PREFIX_."address a1, "._DB_PREFIX_."address a2, "._DB_PREFIX_."country_lang y1, "._DB_PREFIX_."country_lang y2, "._DB_PREFIX_."country n, "._DB_PREFIX_."product, "._DB_PREFIX_."product_lang p, "._DB_PREFIX_."cart_product r,"._DB_PREFIX_." order_detail, "._DB_PREFIX_."orders o
  WHERE o.valid=1
  AND o.id_order = prs_order_detail_.id_order
  AND o.id_address_invoice=a1.id_address
  AND o.id_address_delivery=a2.id_address
  AND o.id_cart = r.id_cart 
  AND r.id_product = p.id_product
  AND p.id_product = prs_product.id_product
  AND p.id_lang=1
  AND a1.id_country = y1.id_country
  AND a2.id_country = y2.id_country
  AND y1.id_lang=1
  AND y2.id_lang=1
  AND a1.id_customer=c1.id_customer
  AND a2.id_customer=c2.id_customer
  AND a2.id_country=n.id_country
  ORDER BY o.id_order ASC";

  $orderlist = Db::getInstance()->ExecuteS($sql);

  $file = fopen(dirname(__FILE__).'/export.csv', 'w');
  $firstline = "Num commande;Num client;id_produit;reference;Produit;Quantite;Taille;Nom;Prenom;Addresse de facturation;Addresse de facturation 2;Code postal;Ville;Pays de facturation;Telephone fixe facturation;Telephone mobile facturation;Email;Destinataire;Addresse 1;Addresse 2;CP;Commune;Pays;Telephone;Instructions";
  fwrite($file, $firstline."\r\n");
  foreach($orderlist AS $orderline){
   fwrite($file, implode(';', $orderline)."\r\n");
  }
  fclose($file);

  Tools::redirect('modules/exportcommandes/export.csv');

 }
 else
 {
  $this->_html .= '<form method="post"><input type="submit" name="download" value="'.$this->l('Exporter le fichier').'" /></form>';
  $this->_html.='
  <h3 style="margin-top:2em;">'.$this->l('Explication de quelques champs :').'</h3>
  <dl>
   <dt><i class="champ">'.$this->l('Num commande').'</i> :</dt><dd style="padding: 0.2em 0 0.6em 2em;">'.$this->l('Identifiant unique de la commande').'</dd>
   <dt><i class="champ">'.$this->l('Civilité').'</i> :</dt><dd style="padding: 0.2em 0 0.6em 2em;">'.$this->l('(1/2) 1 si le client est un homme – 2 si le client est une femme &ndash 9 si non renseigné').'</dd>
   <dt><i class="champ">'.$this->l('Newsletter').'</i> '.$this->l('et').' <i class="champ">'.$this->l('Newsletter groupe').'</i> :</dt><dd style="padding: 0.2em 0 0.6em 2em;">'.$this->l('(0/1) 0 si non inscrit – 1 si inscrit').'</dd>
   <dt><i class="champ">'.$this->l('Destinataire').'</i> '.$this->l('et colonnes suivantes').' :</dt><dd style="padding: 0.2em 0 0.6em 2em;">'.$this->l('Coordonnées de livraison').'</dd>
  </dl>
  ';
  $this->_html .= '<hr>';
  return $this->_html;
 }
}
}
?>

 

 

Quelqu'un ? merci

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...