feat(piece) : add quantity to structure normalization, PATCH and clone

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matthieu
2026-03-12 12:04:03 +01:00
parent c74bdedf9b
commit a940f53f8a

View File

@@ -242,6 +242,7 @@ class MachineStructureController extends AbstractController
$newLink->setNameOverride($link->getNameOverride()); $newLink->setNameOverride($link->getNameOverride());
$newLink->setReferenceOverride($link->getReferenceOverride()); $newLink->setReferenceOverride($link->getReferenceOverride());
$newLink->setPrixOverride($link->getPrixOverride()); $newLink->setPrixOverride($link->getPrixOverride());
$newLink->setQuantity($link->getQuantity());
$parent = $link->getParentLink(); $parent = $link->getParentLink();
if ($parent && isset($componentLinkMap[$parent->getId()])) { if ($parent && isset($componentLinkMap[$parent->getId()])) {
@@ -395,6 +396,11 @@ class MachineStructureController extends AbstractController
$this->applyOverrides($link, $entry['overrides'] ?? null); $this->applyOverrides($link, $entry['overrides'] ?? null);
if (!isset($entry['parentComponentLinkId']) && !isset($entry['parentLinkId'])) {
$quantity = isset($entry['quantity']) ? (int) $entry['quantity'] : $link->getQuantity();
$link->setQuantity(max(1, $quantity));
}
$pendingParents[$linkId] = $this->resolveIdentifier($entry, [ $pendingParents[$linkId] = $this->resolveIdentifier($entry, [
'parentComponentLinkId', 'parentComponentLinkId',
'parentLinkId', 'parentLinkId',
@@ -636,10 +642,42 @@ class MachineStructureController extends AbstractController
'parentComponentLinkId' => $parentLink?->getId(), 'parentComponentLinkId' => $parentLink?->getId(),
'parentComponentId' => $parentLink?->getComposant()->getId(), 'parentComponentId' => $parentLink?->getComposant()->getId(),
'overrides' => $this->normalizeOverrides($link), 'overrides' => $this->normalizeOverrides($link),
'quantity' => $this->resolvePieceQuantity($link),
]; ];
}, $links); }, $links);
} }
private function resolvePieceQuantity(MachinePieceLink $link): int
{
$parentLink = $link->getParentLink();
if (!$parentLink) {
return $link->getQuantity();
}
$composant = $parentLink->getComposant();
$structure = $composant->getStructure();
if (!is_array($structure) || !isset($structure['pieces']) || !is_array($structure['pieces'])) {
return 1;
}
$piece = $link->getPiece();
$typePiece = $piece->getTypePiece();
$typePieceId = $typePiece?->getId();
foreach ($structure['pieces'] as $pieceDef) {
if (!is_array($pieceDef)) {
continue;
}
if (isset($pieceDef['typePieceId']) && $pieceDef['typePieceId'] === $typePieceId) {
return (int) ($pieceDef['quantity'] ?? 1);
}
}
return 1;
}
private function normalizeProductLinks(array $links): array private function normalizeProductLinks(array $links): array
{ {
return array_map(function (MachineProductLink $link): array { return array_map(function (MachineProductLink $link): array {