📥

Régler les stocks depuis un CSV

cafe_quantitybycsv · v2.0.0 · AGPL-3.0-or-later

Déposez l'inventaire de votre fournisseur ou le comptage sorti de votre tableur : le module montre ce qu'il changerait, puis vous décidez d'écrire. L'essai à blanc est actif par défaut, et une ligne douteuse est refusée seule, sans arrêter l'import.

agpl-3.0prestashop-9stockimportcsvdeclinaisonscataloguelibre

Ce que ce module fait, et ce qu'il refuse

  • ✓La version 1.0.0 n'écrivait rien sur PHP 8 — mesuré : une TypeError fatale avant le dernier lot, donc un fichier de moins de 500 lignes ne changeait rien du tout
  • ✓Elle faisait dériver le stock des produits à déclinaisons : 10 demandé, 29 annoncé à la première vente. Une ligne à deux colonnes sur un produit à déclinaisons est désormais refusée, et le message dit quoi ajouter
  • ✓L'essai à blanc est actif par défaut : il lit le fichier, montre le séparateur détecté, les lignes applicables et les refusées, et n'écrit rien
  • ✓Un refus porte sur une ligne, pas sur le fichier : l'import va au bout sans elle et le rapport nomme son numéro de ligne
  • ✓Une cellule de texte ne met plus un produit à zéro, et une quantité décimale n'est pas tronquée en silence
  • ✓Le séparateur est détecté — point-virgule, virgule, tabulation ou barre verticale — et le CSV UTF-8 de votre tableur convient tel quel, marque d'octets comprise
  • ✓La première ligne ne passe pour un en-tête que si elle ne commence pas par un nombre : un export sans titres garde son premier produit
  • ✓Une déclinaison qui appartient à un autre produit est refusée — une erreur de colonnes ne crée pas de stock fantôme
  • ✓Aucune requête SQL dans les tables de stock : le module passe par StockAvailable::setQuantity(), donc la ligne agrégée, le mouvement de stock et actionUpdateQuantity restent justes
  • ✓La quantité est relue après écriture et comparée à celle demandée — le rapport ne dit « réglé » que sur ce qui l'est
  • ✓Les bornes refusent AVANT la première écriture (8 Mo, 20 000 lignes) : un import tué par le max_execution_time ne laisse pas un catalogue à moitié réglé
  • ✓Aucune table créée, aucun greffon posé, aucune clé de configuration : la désinstallation ne laisse rien
  • ✓61 vérifications et 10 mutations livrées avec le module, rejouables sans PHPUnit ni boutique

Le problème

Votre fournisseur vous envoie un inventaire. Vous sortez un comptage de votre tableur. Et il faut reporter trois cents quantités à la main dans le back-office, une fiche après l'autre.

Comment ça marche

Deux colonnes suffisent : l'identifiant du produit, et la quantité.

id;quantite
42;17
43;0

Trois colonnes pour viser une déclinaison précise :

id;declinaison;quantite
51;120;8
51;121;3

Le séparateur est détecté : point-virgule, virgule, tabulation ou barre verticale. Le fichier que votre tableur vient de produire convient tel quel, y compris en « CSV UTF-8 » avec sa marque d'octets invisible.

La première ligne n'est traitée comme un en-tête que si elle ne commence pas par un nombre : un export sans ligne de titres garde donc son premier produit.

L'essai à blanc est actif par défaut

Sur un module qui écrit dans votre stock, le premier geste ne doit pas être celui qui écrit. L'essai à blanc lit le fichier, affiche le séparateur détecté, l'en-tête reconnu, les lignes applicables et les lignes refusées — et n'écrit rien.

Ce qu'il refuse, et pourquoi c'est le cœur du module

Un refus porte sur une ligne, pas sur le fichier : l'import va au bout sans elle, et le rapport nomme son numéro de ligne.

LigneCe qui se passe
42;rupturerefusée. Une cellule de texte ne met pas un produit à zéro.
42;10.6refusée. Une quantité décimale n'est pas tronquée à 10 — c'est une question à vous poser.
42;12 piècesrefusée. Elle ne vaut pas 12.
REF-123;10refusée. Ce module travaille sur les identifiants de produit, pas sur les références.
51;8 quand 51 a des déclinaisonsrefusée, et le message vous dit d'ajouter la colonne de déclinaison.
51;999;8 quand 999 appartient à un autre produitrefusée. Une erreur de colonnes ne crée pas de stock fantôme.
42;10 deux foisla dernière vaut, et le rapport nomme la ligne remplacée. Les quantités ne s'additionnent pas.

Un produit à déclinaisons ne peut pas être réglé en deux colonnes, et le module le dit plutôt que de deviner. La table de stock porte une ligne par déclinaison, plus une ligne agrégée que PrestaShop recalcule comme leur somme : écrire la même valeur partout donne un stock juste à l'instant de l'import, puis faux à la première vente.

Ce qu'il écrit, et par où

Aucune requête SQL dans les tables de stock. Le module passe par l'API de la boutique — celle qui tient la ligne agrégée, respecte le contexte de boutique, inscrit le mouvement de stock et prévient les autres modules qui en dépendent.

Après l'import, la quantité est relue et comparée à celle demandée : le rapport ne dit « réglé » que sur ce qui l'est vraiment. En multiboutique, l'import s'applique à la boutique du contexte courant, et le rapport la nomme.

Les bornes

BorneValeurPourquoi
Taille du fichier8 Moau-delà, découpez
Nombre de lignes20 000un import tué par le délai d'exécution du serveur laisse un catalogue à moitié réglé sans qu'on sache où il s'est arrêté. Le refus arrive avant la première écriture.
Lignes par appel500borne la mémoire, ne change rien au résultat

Si vous veniez de la version 1.0.0

Elle ne fonctionnait pas sur PHP 8, et c'est mesuré : un fichier de moins de 500 lignes ne changeait rien du tout, et l'écran rendait une erreur serveur. Elle faisait aussi dériver le stock des produits à déclinaisons — 10 demandé, 29 annoncé à la première vente.

Les quantités déjà posées par la 1.0.0 ne sont pas corrigées par la mise à jour : elle ne peut pas savoir ce que vous vouliez. Un produit dont le stock a dérivé se règle en redéposant son fichier, cette fois avec la colonne de déclinaison — l'essai à blanc vous montrera le résultat avant de l'écrire.

Installation

Back-office → Modules → Installer un module → déposer le .zip, puis Configurer. Aucune table créée, aucun greffon posé, aucune clé de configuration : la désinstallation ne laisse rien derrière elle.

Le module n'a qu'un seul point d'entrée, la page de configuration, derrière la session employé et le jeton d'administration que PrestaShop pose lui-même.

Ce que la licence exige de vous

Ce module est sous AGPL-3.0-or-later. Installé sans modification, vous n'avez rien à publier. Modifié et servi à vos visiteurs, vous devez leur offrir la source de ce module modifié — jamais celle de votre boutique, de votre thème, ni du cœur de PrestaShop. Le fichier NOTICE de l'archive porte les attributions exactes.

Le module est gratuit. Une adresse e-mail suffit.

Sans compte à créer, et la lettre d'information reste facultative.

Avis vérifiés

Ce que disent nos clients

5.0 / 5

33 avis clients

Nous travaillons avec Alexandre depuis quelques mois et sommes ravis de son a

Nous travaillons avec Alexandre depuis quelques mois et sommes ravis de son accompagnement. Alexandre comprend parfaitement les enjeux et problématiques liés à notre activité et parvient, en réponse, à nous apporter des solutions techniques et fonctionnelles en respectant coûts et délais.

Office

MONOGRAM

Malt

La résolution de mes problèmes à été rapide et efficace, je recommande :)

La résolution de mes problèmes à été rapide et efficace, je recommande :).

Marine

MES-Distribution

Malt

Super

Super

Jl

Kaigan

Malt

Au Top

Au Top. tout simplement

Elite Cbd

Canna Elite Europe Ltd

Malt

Configuration d''un VPS et migration réalisée avec succès, bons conseils, dia

Configuration d'un VPS et migration réalisée avec succès, bons conseils, diagnostique rapide et efficace de nos problèmes. Je recommande.

Lorie

GRIIN outdoor

Malt

Toujours aussi clair et clairvoyant

Toujours aussi clair et clairvoyant... ;) Un plaisir de travailler avec Alexandre

Elite Cbd

Canna Elite Europe Ltd

Malt