diff --git a/src/Controller/MachineStructureController.php b/src/Controller/MachineStructureController.php index 00d39ba..6db3556 100644 --- a/src/Controller/MachineStructureController.php +++ b/src/Controller/MachineStructureController.php @@ -242,6 +242,7 @@ class MachineStructureController extends AbstractController $newLink->setNameOverride($link->getNameOverride()); $newLink->setReferenceOverride($link->getReferenceOverride()); $newLink->setPrixOverride($link->getPrixOverride()); + $newLink->setQuantity($link->getQuantity()); $parent = $link->getParentLink(); if ($parent && isset($componentLinkMap[$parent->getId()])) { @@ -395,6 +396,11 @@ class MachineStructureController extends AbstractController $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, [ 'parentComponentLinkId', 'parentLinkId', @@ -636,10 +642,42 @@ class MachineStructureController extends AbstractController 'parentComponentLinkId' => $parentLink?->getId(), 'parentComponentId' => $parentLink?->getComposant()->getId(), 'overrides' => $this->normalizeOverrides($link), + 'quantity' => $this->resolvePieceQuantity($link), ]; }, $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 { return array_map(function (MachineProductLink $link): array {