feat: inventaire bovins #49

Merged
tristan merged 7 commits from feat/bovine-inventory into develop 2026-04-24 07:53:06 +00:00

7 Commits

Author SHA1 Message Date
c0c6c81e74 feat : calcul de l'âge en mois côté back + colonne Age et alertes visuelles
- Champ ageMonths (int) ajouté à Bovine avec migration
- Lifecycle PrePersist/PreUpdate pour maintenir la cohérence
- Sync processor recalcule explicitement ageMonths à chaque passage (cron-friendly)
- Colonne Age + rowClass côté front : rouge >= 24 mois, orange 22-24 mois
- Util formatAgeLabel remplace le calcul client
- Boutons pagination Prev/Next en français avec style bouton bordure primary
- Colonnes Sexe/N° Travail réduites au profit de Bâtiment

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 09:50:39 +02:00
9d3cfd10db feat : améliorations page inventory et filtre date masqué
- Colonnes Bâtiment et Case ajoutées sur inventory (inline buildingCase via readableLink)
- Bouton Rafraîchir repositionné dans l'en-tête du tableau (pattern case.vue)
- Sync : date du jour pour l'appel EDNOTIF, extraction de la dernière exit date
- UiDateMaskedInput : nouveau composant date masqué JJ/MM/AAAA
- Propagation du masque date sur tous les datatables (reception, shipment, case, inventory)
- Label de colonne "Date et heure" raccourci en "Date"
- Champ exitDate ajouté en back (caché côté front, prêt pour future feature)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 09:04:08 +02:00
22797791dc feat : étape 5/5 - card Inventaire bovins sur la page d'accueil
Renommage de PASSEPORT DU BOVIN vers INVENTAIRE BOVINS, lien vers /inventory

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 18:00:05 +02:00
6e20dbf00e feat : étape 4/5 - bouton Rafraîchir l'inventaire
- Admin only avec confirmation window.confirm au clic
- Loader sur le bouton pendant l'appel POST
- Toast de succès avec les stats (créés, maj, sortis, total)
- reload() du tableau après succès

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:59:33 +02:00
72a3a98bfa feat : étape 3/5 - page /inventory (lecture seule)
- UiDataTable server-side sur /api/bovines
- 6 colonnes : N° National, N° Travail, Sex, Né le, Race, Entrée le
- Filtres texte + select sex (Mâle/Femelle) + deux date pickers single input
- Filtre implicite exists[exitedAt]=false pour n'afficher que les bovins actifs

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:57:42 +02:00
2cde091813 feat : étape 2/5 - endpoint POST /bovines/sync-inventory
- Appelle BovinApiInterface::getInventory() puis upsert local par nationalNumber
- Marque exitedAt sur les bovins absents de la réponse EDNOTIF
- Retourne les stats { created, updated, exited, total }
- Admin only

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:56:08 +02:00
a4342af095 feat : étape 1/5 - ajout des champs sex et exitedAt sur Bovine
- Migration pour les nouvelles colonnes
- ExistsFilter sur exitedAt, SearchFilter sur sex/workNumber/breedCode, DateFilter sur birthDate
- DTO front étendu avec workNumber, birthDate, breedCode, sex, exitedAt

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 17:53:37 +02:00