feat : M5 — Tickets de pesée (ERP-188 → ERP-193) #144
+15
-11
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user
🟠 Bug — poids net jamais borné, un net négatif est persisté/affiché/imprimé
computeNetWeight()(l. 204-209) faitfull - emptysans garantirfull >= empty. Si l'opérateur intervertit les deux pesées (saisit la pesée chargée dans le bloc « vide »),net_weightdevient négatif, est stocké, affiché en liste (-7 150 Kg) et imprimé sur le bon de pesée — rien ne le signale. Ajouter une garde (422 sifull < empty, ou au moins un avertissement).