diff --git a/src/Module/Logistique/Infrastructure/ApiPlatform/State/Processor/WeighingTicketProcessor.php b/src/Module/Logistique/Infrastructure/ApiPlatform/State/Processor/WeighingTicketProcessor.php index 1476af0..984a298 100644 --- a/src/Module/Logistique/Infrastructure/ApiPlatform/State/Processor/WeighingTicketProcessor.php +++ b/src/Module/Logistique/Infrastructure/ApiPlatform/State/Processor/WeighingTicketProcessor.php @@ -84,7 +84,7 @@ final class WeighingTicketProcessor implements ProcessorInterface // depuis la base. Garde defensive si jamais il manque (ne devrait pas). $site = $data->getSite(); if ($site instanceof Site) { - $this->allocateAutoDsd($data, $site, $isNew); + $this->allocateAutoDsd($data, $site); } $this->computeNetWeight($data); @@ -162,21 +162,25 @@ final class WeighingTicketProcessor implements ProcessorInterface } /** - * RG-5.04 : (re)attribution AUTORITAIRE du DSD pour chaque pesee AUTO via - * DsdAllocator (verrou FOR UPDATE). A la creation, le DSD prévisionnel envoye - * par le client (issu de POST /api/weighbridge_readings) est ecrase. Sur PATCH, - * on n'alloue que pour une pesee AUTO encore depourvue de DSD (ex. la pesee a - * plein realisee apres coup) — sinon on churne le compteur a chaque edition. - * Les pesees MANUELLES conservent leur DSD (deja alloue par l'endpoint de - * pesee, « dernier + 1 »). + * RG-5.04 : le DSD d'une pesee est attribue A LA PESEE (POST /api/weighbridge_readings) + * et CONSERVE tel quel sur le ticket — on ne le reattribue PAS au save. Raison : + * le DSD est l'index de pesee du pont, deja verrouille (FOR UPDATE) a l'emission ; + * demain il proviendra directement du materiel (driver reel derriere + * WeighbridgeReaderInterface) et devra etre persiste a l'identique. Reallouer ici + * ecraserait cet index (double comptage aujourd'hui, perte de l'index reel demain) + * et ferait diverger le DSD previsionnel affiche du DSD enregistre. + * + * On n'alloue donc qu'en FILET DE SECURITE : pesee AUTO sans DSD (ex. ticket cree + * sans passer par l'endpoint de pesee). Les pesees MANUELLES conservent egalement + * leur DSD (alloue « dernier + 1 » par l'endpoint de pesee). */ - private function allocateAutoDsd(WeighingTicket $data, Site $site, bool $isNew): void + private function allocateAutoDsd(WeighingTicket $data, Site $site): void { - if ('AUTO' === $data->getEmptyMode() && ($isNew || null === $data->getEmptyDsd())) { + if ('AUTO' === $data->getEmptyMode() && null === $data->getEmptyDsd()) { $data->setEmptyDsd($this->dsdAllocator->next($site)); } - if ('AUTO' === $data->getFullMode() && ($isNew || null === $data->getFullDsd())) { + if ('AUTO' === $data->getFullMode() && null === $data->getFullDsd()) { $data->setFullDsd($this->dsdAllocator->next($site)); } }