fix(logistique) : bloque la saisie manuelle poids/DSD à 5 chiffres
Masque front 5 chiffres sur la modale manuelle + Assert\LessThanOrEqual(99999) sur WeighbridgeReadingResource (weight/dsd, mode MANUAL) et backstop entité (validateManualEntryDigits). Le DSD auto (compteur de site) n'est pas contraint.
This commit is contained in:
@@ -184,6 +184,9 @@ class WeighingTicket implements TimestampableInterface, BlamableInterface
|
||||
/** Contrepartie « Autre » (libelle libre) — RG-5.03. */
|
||||
public const string COUNTERPARTY_AUTRE = 'AUTRE';
|
||||
|
||||
/** Plafond des poids/DSD saisis a la main (5 chiffres) — cf. validateManualEntryDigits. */
|
||||
public const int MANUAL_VALUE_MAX = 99999;
|
||||
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column]
|
||||
@@ -379,6 +382,25 @@ class WeighingTicket implements TimestampableInterface, BlamableInterface
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Plafond des valeurs SAISIES A LA MAIN (poids et DSD) : 5 chiffres, soit
|
||||
* 99999. Garde-fou serveur du masque front 5 chiffres de la modale de pesee
|
||||
* manuelle. Ne s'applique QU'EN mode MANUAL (decision metier) :
|
||||
* - le poids AUTO (pont-bascule) tient deja dans 5 chiffres (10000-50000) ;
|
||||
* - le DSD AUTO est un compteur de site croissant (DsdAllocator) qu'on ne
|
||||
* doit PAS contraindre, sinon l'allocation echouerait au-dela de 99999.
|
||||
* Jouee dans le groupe Default (POST/PATCH brouillon ET validate) -> chaque
|
||||
* 422 est mappee inline sous le champ via useFormErrors (ERP-101).
|
||||
*/
|
||||
#[Assert\Callback]
|
||||
public function validateManualEntryDigits(ExecutionContextInterface $context): void
|
||||
{
|
||||
$this->assertManualDigitCap($context, $this->emptyMode, $this->emptyWeight, 'emptyWeight', 'Le poids saisi ne peut pas dépasser 5 chiffres (99999 kg maximum).');
|
||||
$this->assertManualDigitCap($context, $this->emptyMode, $this->emptyDsd, 'emptyDsd', 'Le DSD saisi ne peut pas dépasser 5 chiffres (99999 maximum).');
|
||||
$this->assertManualDigitCap($context, $this->fullMode, $this->fullWeight, 'fullWeight', 'Le poids saisi ne peut pas dépasser 5 chiffres (99999 kg maximum).');
|
||||
$this->assertManualDigitCap($context, $this->fullMode, $this->fullDsd, 'fullDsd', 'Le DSD saisi ne peut pas dépasser 5 chiffres (99999 maximum).');
|
||||
}
|
||||
|
||||
/**
|
||||
* Date du ticket affichee en LISTE (§ 4.0) : date de la pesee a plein si
|
||||
* disponible, sinon date de la pesee a vide. Getter calcule (jamais
|
||||
@@ -646,4 +668,14 @@ class WeighingTicket implements TimestampableInterface, BlamableInterface
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function assertManualDigitCap(ExecutionContextInterface $context, ?string $mode, ?int $value, string $path, string $message): void
|
||||
{
|
||||
if ('MANUAL' === $mode && null !== $value && $value > self::MANUAL_VALUE_MAX) {
|
||||
$context->buildViolation($message)
|
||||
->atPath($path)
|
||||
->addViolation()
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user