/** * @param Order $entityToUpdate * @param Order $entityToImport */ protected function processItems(Order $entityToUpdate, Order $entityToImport) { $importedOriginIds = $entityToImport->getItems()->map(function (OrderItem $item) { return $item->getOriginId(); })->toArray(); // insert new and update existing items /** @var OrderItem $item - imported order item */ foreach ($entityToImport->getItems() as $item) { $originId = $item->getOriginId(); $existingItem = $entityToUpdate->getItems()->filter(function (OrderItem $item) use($originId) { return $item->getOriginId() == $originId; })->first(); if ($existingItem) { $this->strategyHelper->importEntity($existingItem, $item, ['id', 'order']); $item = $existingItem; } if (!$item->getOrder()) { $item->setOrder($entityToUpdate); } if (!$entityToUpdate->getItems()->contains($item)) { $entityToUpdate->getItems()->add($item); } } // delete order items that not exists in remote order $deleted = $entityToUpdate->getItems()->filter(function (OrderItem $item) use($importedOriginIds) { return !in_array($item->getOriginId(), $importedOriginIds); }); foreach ($deleted as $item) { $entityToUpdate->getItems()->remove($item); } }
/** * @param Order $order * * @return OrderStrategy */ protected function processItems(Order $order) { foreach ($order->getItems() as $item) { $item->setOwner($order->getOrganization()); $item->setOrder($order); } return $this; }