feat : commande de feed des prix bovins depuis un XLSX
- app:feed-bovine-prices <file> [--dry-run] - Met à jour receivedWeight, pricePerKg et supplier sur les bovins existants (pas de création) - Strip défensif du préfixe FR - Supplier introuvable -> bovin updaté avec supplier=null + warning - Préload des suppliers pour lookup O(1) - Documentation ajoutée au README Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
59
README.md
59
README.md
@@ -178,3 +178,62 @@ Pour suivre les logs en temps réel :
|
||||
|
||||
- tail -f var/log/dev.log
|
||||
- tail -f var/log/prod.log
|
||||
|
||||
## Feed des prix bovins
|
||||
|
||||
Une commande Symfony permet de mettre à jour le **poids à l'arrivée**, le **prix au kilo** et le **fournisseur** des bovins existants à partir d'un fichier XLSX. La commande **ne crée jamais de nouveau bovin** : elle complète seulement ceux déjà présents en BDD.
|
||||
|
||||
### Format du fichier XLSX attendu
|
||||
|
||||
Pas de ligne d'en-tête, 4 colonnes dans cet ordre :
|
||||
|
||||
| Colonne | Champ | Format | Exemple |
|
||||
|---------|-------|--------|---------|
|
||||
| A | Numéro national | Avec ou sans préfixe `FR ` (insensible casse) | `FR 7979580026` ou `7979580026` |
|
||||
| B | Fournisseur | Texte libre, casse ignorée | `TERRENA` |
|
||||
| C | Poids à l'arrivée (kg) | Entier | `368` |
|
||||
| D | Prix au kilo | Décimal | `5.7` |
|
||||
|
||||
### Comportement
|
||||
|
||||
- **Numéro national** : le préfixe `FR` (avec ou sans espace) est retiré s'il est présent. Sinon la valeur est utilisée telle quelle.
|
||||
- **Bovin introuvable** en BDD → ligne ignorée, log warning à la fin avec aperçu.
|
||||
- **Fournisseur introuvable** en BDD → le bovin est mis à jour quand même avec `supplier = null`, log warning.
|
||||
- **Cellules `weight` / `price` vides ou non numériques** → champ non modifié.
|
||||
- La commande est **idempotente** : peut être relancée sans effet de bord.
|
||||
|
||||
### Lancement en dev
|
||||
|
||||
Copie le fichier dans la racine du projet (mappée dans le container sous `/var/www/html`), puis :
|
||||
|
||||
```bash
|
||||
# Simulation sans écriture en BDD
|
||||
docker compose exec php bin/console app:feed-bovine-prices /var/www/html/feed_bovin.xlsx --dry-run
|
||||
|
||||
# Persistance effective
|
||||
docker compose exec php bin/console app:feed-bovine-prices /var/www/html/feed_bovin.xlsx
|
||||
```
|
||||
|
||||
### Lancement en prod
|
||||
|
||||
```bash
|
||||
# 1. Envoyer le fichier sur le serveur
|
||||
scp feed_bovin.xlsx ferme-prod:/tmp/
|
||||
|
||||
# 2. SSH sur le serveur et lancer la commande dans le dossier de l'app
|
||||
ssh ferme-prod
|
||||
cd /var/www/ferme
|
||||
php bin/console app:feed-bovine-prices /tmp/feed_bovin.xlsx --dry-run # vérification
|
||||
php bin/console app:feed-bovine-prices /tmp/feed_bovin.xlsx # exécution
|
||||
rm /tmp/feed_bovin.xlsx # nettoyage
|
||||
```
|
||||
|
||||
### Sortie attendue
|
||||
|
||||
À la fin, un tableau récapitule :
|
||||
|
||||
- Lignes totales lues
|
||||
- Bovins mis à jour
|
||||
- Bovins introuvables (avec aperçu des 10 premiers numéros)
|
||||
- Lignes invalides (numéro national vide)
|
||||
- Fournisseurs introuvables (avec liste et compte par nom)
|
||||
|
||||
Reference in New Issue
Block a user