14 private $shipmentItem;
28 private static function createShipmentItemStoreCollectionObject()
31 $shipmentItemStoreCollectionClassName = $registry->getShipmentItemStoreCollectionClassName();
33 return new $shipmentItemStoreCollectionClassName();
51 $shipmentItemStoreCollection = static::createShipmentItemStoreCollectionObject();
52 $shipmentItemStoreCollection->shipmentItem = $shipmentItem;
54 if ($shipmentItem->getId() > 0)
59 $itemClassName = $registry->getShipmentItemStoreClassName();
61 $shipmentItemStoreList = $itemClassName::loadForShipmentItem($shipmentItem->getId());
64 foreach ($shipmentItemStoreList as $shipmentItemStore)
66 $shipmentItemStore->setCollection($shipmentItemStoreCollection);
67 $shipmentItemStoreCollection->bindItem($shipmentItemStore);
71 return $shipmentItemStoreCollection;
79 public function createItem(BasketItem $basketItem)
84 $itemClassName = $registry->getShipmentItemStoreClassName();
86 $item = $itemClassName::create($this, $basketItem);
88 $this->addItem($item);
97 public function getQuantityByBasketCode($basketCode)
102 foreach ($this->collection as $item)
104 $quantity += $item->getQuantity();
116 return $this->shipmentItem;
137 if (
$name ==
"QUANTITY")
139 return $this->syncQuantityAfterModify($shipmentItem, $oldValue, $value);
154 protected function syncQuantityAfterModify(
ShipmentItem $shipmentItem, $oldValue =
null, $value =
null)
156 if (!($basketItem = $shipmentItem->
getBasketItem()) || $basketItem->getId() == 0)
161 $deltaQuantity = $value - $oldValue;
163 if ($deltaQuantity >= 0)
166 $barcodeList =
array();
168 foreach($this->collection as $shipmentItemStore)
170 if (strval($shipmentItemStore->getBarcode()) ==
"")
172 $barcodeList[$shipmentItemStore->getId()] = $shipmentItemStore;
176 if ($basketItem->isBarcodeMulti())
178 if (
count($barcodeList) < $oldValue)
183 $oldItemsList =
array();
186 foreach ($this->collection as $shipmentItemStore)
188 $oldItemsList[$shipmentItemStore->getId()] = $shipmentItemStore;
191 $cutBarcodeList = array_slice($barcodeList, 0, $deltaQuantity,
true);
192 if (!empty($oldItemsList) && is_array($oldItemsList))
198 foreach($oldItemsList as $oldItemId => $oldItem)
200 if (!isset($cutBarcodeList[$oldItemId]))
210 $barcodeItem = reset($barcodeList);
212 if ($barcodeItem->getQuantity() < $oldValue)
216 $r = $barcodeItem->setField(
218 $barcodeItem->getField(
"QUANTITY") + $deltaQuantity
221 if (!$r->isSuccess())
223 $result->addErrors($r->getErrors());
243 if (
$name ==
"QUANTITY")
246 if (!$r->isSuccess())
248 return $result->addErrors($r->getErrors());
273 $itemStoreQuantity = (float)$this->getQuantityByBasketCode($shipmentItem->getBasketCode());
276 (
float)$item->getQuantity() > $shipmentItem->getQuantity()
278 $itemStoreQuantity > $shipmentItem->getQuantity()
283 'SALE_SHIPMENT_ITEM_STORE_QUANTITY_LARGER_ALLOWED',
284 [
'#PRODUCT_NAME#' => $this->
getShipmentItem()->getBasketItem()->getField(
'NAME')]
286 'SALE_SHIPMENT_ITEM_STORE_QUANTITY_LARGER_ALLOWED'
302 public function save()
304 $result =
new Main\Entity\Result();
309 foreach ($this->collection as $item)
312 if (!$r->isSuccess())
314 $result->addErrors($r->getErrors());
317 if (isset($originalItemValues[$item->getId()]))
319 unset($originalItemValues[$item->getId()]);
323 if ($originalItemValues)
325 foreach ($originalItemValues as $id => $itemValues)
327 $this->callEventOnBeforeSaleShipmentItemStoreDeleted($itemValues);
331 $this->callEventOnSaleShipmentItemStoreDeleted($itemValues);
343 $itemsFromDb =
array();
347 $itemsFromDbList = static::getList(
352 while ($itemsFromDbItem = $itemsFromDbList->fetch())
354 $itemsFromDb[$itemsFromDbItem[
"ID"]] = $itemsFromDbItem;
364 protected function callEventOnBeforeSaleShipmentItemStoreDeleted(
array $itemValues)
366 $itemValues[
'ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
369 $event =
new Main\Event(
'sale',
"OnBeforeSaleShipmentItemStoreDeleted", [
'VALUES' => $itemValues]);
376 protected function callEventOnSaleShipmentItemStoreDeleted(
array $itemValues)
378 $itemValues[
'ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
381 $event =
new Main\Event(
'sale',
"OnSaleShipmentItemStoreDeleted", [
'VALUES' => $itemValues]);
391 public function setBarcodeQuantityFromArray(
array $values)
394 $requestBarcodeList = static::getBarcodeListFromArray($values);
397 $oldQuantityList = $this->getAllBarcodeList();
399 foreach ($requestBarcodeList as $storeId => $barcodeDat)
401 foreach ($barcodeDat as $barcodeValue => $barcode)
403 if (isset($oldQuantityList[$storeId][$barcodeValue])
404 && $oldQuantityList[$storeId][$barcodeValue][
'ID'] == $barcode[
'ID'])
406 $oldBarcode = $oldQuantityList[$storeId][$barcodeValue];
407 if ($barcode[
'QUANTITY'] == $oldBarcode[
'QUANTITY'])
411 elseif ($barcode[
'QUANTITY'] < $oldBarcode[
'QUANTITY'])
414 $item = $this->getItemById($oldBarcode[
'ID']);
416 $item->setField(
'QUANTITY', $barcode[
'QUANTITY']);
420 $plusList[$barcodeValue] =
array(
421 'ID' => $barcode[
'ID'],
422 'QUANTITY' => $barcode[
'QUANTITY']
429 foreach ($plusList as $barcode)
431 if ($barcode[
'ID'] <= 0)
434 $item = $this->getItemById($barcode[
'ID']);
438 $r = $item->setField(
'QUANTITY', $barcode[
'QUANTITY']);
439 if (!$r->isSuccess())
441 $result->addErrors($r->getErrors());
454 private function getBarcodeListFromArray(
array $values)
458 foreach ($values[
'BARCODE_INFO'] as $barcodeDat)
462 if (!isset($barcodeDat[
'BARCODE']) || !is_array($barcodeDat[
'BARCODE']))
465 if (
count($barcodeDat[
'BARCODE']) > 1)
467 $quantity = floatval($barcodeDat[
'QUANTITY'] /
count($barcodeDat[
'BARCODE']));
471 $quantity = floatval($barcodeDat[
'QUANTITY']);
474 foreach ($barcodeDat[
'BARCODE'] as $barcode)
480 "QUANTITY" => $quantity,
483 if (isset($barcode[
'ID']) && intval($barcode[
'ID']) > 0)
496 public function getAllBarcodeList()
501 foreach ($this->collection as $item)
503 if (!isset(
$result[$item->getStoreId()]))
505 $result[$item->getStoreId()] = [];
508 $result[$item->getStoreId()][$item->getBarcode()] = [
509 'ID' => $item->getId(),
510 'QUANTITY' => $item->getQuantity(),
521 public function getItemByBarcode($barcode)
524 foreach ($this->collection as $item)
526 if ((
string)$item->getBarcode() === (
string)$barcode)
539 return $itemStore->getStoreId() === $storeId;
558 public function createClone(\SplObjectStorage $cloneEntity)
560 if ($this->isClone() && $cloneEntity->contains($this))
562 return $cloneEntity[$this];
566 $shipmentItemStoreCollectionClone = parent::createClone($cloneEntity) ;
569 if ($shipmentItem = $this->shipmentItem)
571 if (!$cloneEntity->contains($shipmentItem))
573 $cloneEntity[$shipmentItem] = $shipmentItem->createClone($cloneEntity);
576 if ($cloneEntity->contains($shipmentItem))
578 $shipmentItemStoreCollectionClone->shipmentItem = $cloneEntity[$shipmentItem];
582 return $shipmentItemStoreCollectionClone;
589 public function getErrorEntity($value)
594 foreach ($this->collection as $shipmentItemStore)
596 if ($className = $shipmentItemStore->getErrorEntity($value))
610 public function canAutoFixError($value)
614 foreach ($this->collection as $shipmentItemStore)
616 if ($autoFix = $shipmentItemStore->canAutoFixError($value))
633 return Internals\ShipmentItemStoreTable::getList($parameters);
643 return Internals\ShipmentItemStoreTable::delete($primary);
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)