Requête SQL - extraction de factures pour contrôle fiscal sur Prestashop

Article écrit le

Rentrée 2024 : Gestion des requêtes SQL pour Prestashop et contrôles fiscaux

Nous sommes en septembre 2024, et la rentrée est très chargée pour les projets Prestashop. Un jour, je reçois un email d’une e-commerçante inquiète :

Bonsoir Mr CARETTE,

Je suis la gérante du site : site web prestashop de l'e-commerçante

Mon contrôleur fiscal me demande une liste de factures à partir de Prestashop...

Google m'a donc renvoyée vers ce forum Prestashop, et la requête SQL fonctionne.

Cependant, je n'ai pas les connaissances nécessaires pour la modifier. Il me faudrait ajouter le pays de destination, ainsi que d'autres informations.

Seriez-vous disposé à m'aider, moyennant rémunération ?

J'ai rendez-vous ce mercredi avec le contrôleur fiscal pour définir correctement les données dont il a besoin.

Bonne soirée.

Le post sur le forum Prestashop date de 2016. La commerçante, un peu en panique, précise que l’affaire est urgente, car l’inspecteur fiscal a formulé sa demande pour l’après-midi. Son activité exporte principalement hors de l'Union européenne, ce qui a alerté le fisc français, car l'administration ne récupère pas la TVA.

Requête SQL pour l'extraction de factures sur Prestashop

Voici la requête SQL qui permet d’extraire les informations demandées par le contrôleur fiscal :

SELECT 
    o.id_order AS id_order,
    oi.number AS N_facture,
    oi.date_add AS Date_facture,
    o.id_order AS N_commande,
    CONCAT(c.lastname, ' ', c.firstname) AS "Nom du client",
    ad_delivery.company AS company_delivery,
    ad_delivery.lastname AS lastname_delivery,
    ad_delivery.firstname AS firstname_delivery,
    ad_delivery.address1 AS address1_delivery,
    ad_delivery.address2 AS address2_delivery,
    ad_delivery.postcode AS postcode_delivery,
    ad_delivery.city AS city_delivery,
    ad_delivery.other AS other_delivery,
    ad_delivery.phone AS phone_delivery,
    ad_delivery.phone_mobile AS phone_mobile_delivery,
    ad_delivery.vat_number AS vat_number_delivery,
    ad_delivery.dni AS dni_delivery,
    co_delivery.name AS country_delivery,
    ad_invoice.company AS company_invoice,
    ad_invoice.lastname AS lastname_invoice,
    ad_invoice.firstname AS firstname_invoice,
    ad_invoice.address1 AS address1_invoice,
    ad_invoice.address2 AS address2_invoice,
    ad_invoice.postcode AS postcode_invoice,
    ad_invoice.city AS city_invoice,
    ad_invoice.other AS other_invoice,
    ad_invoice.phone AS phone_invoice,
    ad_invoice.phone_mobile AS phone_mobile_invoice,
    ad_invoice.vat_number AS vat_number_invoice,
    ad_invoice.dni AS dni_invoice,
    co_invoice.name AS country_invoice,
    o.`payment` as Moyen_paiement,
    oi.`total_paid_tax_excl` as Total_paid_HT,
    oi.`total_paid_tax_incl` as Total_paid_TTC,
    oi.`total_products` as Total_produits_HT,
    oi.`total_products_wt` as Total_produits_TTC,
    oi.`total_shipping_tax_excl` as Total_livraison_HT,
    oi.`total_shipping_tax_incl` as Total_livraison_TTC,
    oi.`total_discount_tax_excl` as Total_discount_HT,
    oi.`total_discount_tax_incl` as Total_discount_TTC,
    ca.`name` as Nom_transporteur,
    REPLACE(ca.url, '@', oc.tracking_number) AS Url_transporteur,
    oc.`tracking_number` as Tracking_number,
    oc.`weight` as Masse
FROM ps_orders o
INNER JOIN ps_order_invoice oi ON oi.id_order = o.id_order
INNER JOIN ps_customer c ON o.id_customer = c.id_customer
INNER JOIN ps_address ad_delivery ON ad_delivery.id_address = o.id_address_delivery
INNER JOIN ps_address ad_invoice ON ad_invoice.id_address = o.id_address_invoice
INNER JOIN ps_country_lang co_delivery ON (co_delivery.id_country = ad_delivery.id_country AND co_delivery.id_lang =1)
INNER JOIN ps_country_lang co_invoice ON (co_invoice.id_country = ad_invoice.id_country AND co_invoice.id_lang =1)
INNER JOIN ps_order_carrier oc ON (oc.id_order = o.id_order)
INNER JOIN ps_carrier ca ON (ca.id_carrier = oc.id_carrier)
ORDER BY oi.number DESC;

Cette requête récupère toutes les informations importantes : le numéro de commande, la date de facture, le nom du client, les adresses de livraison et de facturation, ainsi que les détails sur les paiements, produits, et transporteurs. Elle permet ainsi d'extraire des informations détaillées et pertinentes pour un contrôle fiscal.

Si vous avez besoin d'aide pour l'adapter à vos besoins spécifiques, n'hésitez pas à me contacter. Le monde du e-commerce évolue rapidement, et des ajustements sont souvent nécessaires pour répondre aux exigences des autorités fiscales, surtout pour les ventes à l'international.

Une e-commerçante satisfaite:

Bonjour Mr CARETTE,

Le contrôleur fiscal est enchanté des 2 fichiers CSV générés par vos requêtes SQL !

Je vous remercie énormément pour votre travail et de votre disponibilité.

Je suis également intéressée par un "audit" de mon site Prestashop et/ou formation Google Search Console.

Peut-on convenir d'un RDV la semaine prochaine ?

Bonne journée.

Bonne rentrée 2024, et bon courage pour vos projets Prestashop !

Alexandre Carette

Expert Prestashop & Shopify, éducateur & CEO CodemyShop

Discussion (20)

Very straight-to-point article. Really worth time reading. Thank you! But tools are just the instruments for the UX designers. The knowledge of the design tools are as important as the creation of the design strategy.

Much appreciated! Glad you liked it ☺️

The article covers the essentials, challenges, myths and stages the UX designer should consider while creating the design strategy.

Thanks for sharing this. I do came from the Backend development and explored some of the tools to design my Side Projects.

Sign up for our newsletter

Stay up to date with the roadmap progress, announcements and exclusive discounts feel free to sign up with your email.