feat : cause d'entrée bovin + confirmation EDNOTIF asynchrone + historique entrées
- Champ entryCause sur Bovine (enum App\Enum\CauseEntree : Achat/Naissance/PretOuPension) - Sélecteur "Cause d'entrée" sur le formulaire de saisie (default Achat, required) - ednotif_confirmed_at sur Bovine : timestamp set par le sync EDNOTIF la première fois qu'un bovin remonte dans getInventory. Backfill des bovins existants au jour de la migration. - Inventaire (page + export + stats) filtre les bovins encore "en attente EDNOTIF" : ils n'apparaissent qu'une fois confirmés par le sync. - getter getConfirmedBovineCount sur Reception, exposé en reception:read. - Tableau Historique full-width sur /entry-exit listant les entrées validées, avec filtres de colonnes (numéro, date, fournisseur), compteur Confirmés/Saisis, et badge de statut "Confirmée" / "EDNOTIF en attente". - Tableau récap de l'écran de saisie passé en useDataTableServerState pour bénéficier du loading et de la pagination serveur. - Validation entrée : confirm window obligatoire, message renforcé en cas d'écart entre saisis et déclarés. - Pattern projet "submitted" sur le formulaire d'ajout pour le visuel required. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -301,6 +301,32 @@ class Reception
|
||||
return $this->bovines->count();
|
||||
}
|
||||
|
||||
#[Groups(['reception:read'])]
|
||||
public function getConfirmedBovineCount(): int
|
||||
{
|
||||
$count = 0;
|
||||
foreach ($this->bovines as $bovine) {
|
||||
if (null !== $bovine->getEdnotifConfirmedAt()) {
|
||||
++$count;
|
||||
}
|
||||
}
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
#[Groups(['reception:read'])]
|
||||
public function getDeclaredBovineCount(): int
|
||||
{
|
||||
$fromTypes = 0;
|
||||
foreach ($this->bovines_types as $rb) {
|
||||
$fromTypes += (int) ($rb->getQuantity() ?? 0);
|
||||
}
|
||||
|
||||
$fromOther = is_numeric($this->bovineDetail) ? (int) $this->bovineDetail : 0;
|
||||
|
||||
return $fromTypes + $fromOther;
|
||||
}
|
||||
|
||||
#[Groups(['reception:read'])]
|
||||
public function getReceptionDate(): ?DateTimeImmutable
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user