Bitrix-D7  20.0.0
Класс ShipmentItemCollection
Граф наследования:ShipmentItemCollection:
EntityCollection CollectionBase

Открытые члены

 resetCollection (Basket $basket)
 
 createItem (BasketItem $basketItem)
 
 deleteItem ($index)
 
 onItemModify (Internals\CollectableEntity $item, $name=null, $oldValue=null, $value=null)
 
 getItemByBasketCode ($itemCode)
 
 getItemByBasketId ($itemId)
 
 getShippableItems ()
 
 getSellableItems ()
 
 getPrice ()
 
 getWeight ()
 
 getShipment ()
 
 save ()
 
 onBeforeBasketItemDelete (BasketItem $basketItem)
 
 onBasketModify ($action, BasketItem $basketItem, $name=null, $oldValue=null, $value=null)
 
 deleteByBasketItem (BasketItem $basketItem)
 
 isEmpty ()
 
 getBasketItemQuantity (BasketItem $basketItem)
 
 isExistBasketItem (BasketItem $basketItem)
 
 createClone (\SplObjectStorage $cloneEntity)
 
 getErrorEntity ($value)
 
 canAutoFixError ($value)
 
- Открытые члены унаследованные от EntityCollection
 onItemModify (CollectableEntity $item, $name=null, $oldValue=null, $value=null)
 
 clearCollection ()
 
 getItemById ($id)
 
 getIndexById ($id)
 
 getItemByIndex ($index)
 
 isStartField ($isMeaningfulField=false)
 
 clearStartField ()
 
 hasMeaningfulField ()
 
 doFinalAction ($hasMeaningfulField=false)
 
 isMathActionOnly ()
 
 setMathActionOnly ($value=false)
 
 isChanged ()
 
 verify ()
 
 isClone ()
 
 isAnyItemDeleted ()
 
 clearChanged ()
 
- Открытые члены унаследованные от CollectionBase
 getIterator ()
 
 offsetExists ($offset)
 Whether a offset exists. Подробнее...
 
 offsetGet ($offset)
 Offset to retrieve. Подробнее...
 
 offsetSet ($offset, $value)
 Offset to set. Подробнее...
 
 offsetUnset ($offset)
 Offset to unset. Подробнее...
 
 count ()
 Count elements of an object. Подробнее...
 
 current ()
 Return the current element. Подробнее...
 
 next ()
 Move forward to next element. Подробнее...
 
 key ()
 Return the key of the current element. Подробнее...
 
 valid ()
 Checks if current position is valid. Подробнее...
 
 rewind ()
 Rewind the Iterator to the first element. Подробнее...
 

Открытые статические члены

static getRegistryType ()
 
static load (Shipment $shipment)
 
static getList (array $parameters=array())
 

Защищенные члены

 getEntityParent ()
 
 addItem (Internals\CollectableEntity $shipmentItem)
 
 createIndex ()
 
 deleteInternal ($primary)
 
 isExistsBasketItem (BasketItem $basketItem)
 
- Защищенные члены унаследованные от EntityCollection
 __construct ()
 EntityCollection constructor. Подробнее...
 
 addItem (CollectableEntity $item)
 
 getDeletableItems ()
 
 callEventOnBeforeCollectionClear ()
 
 setAnyItemDeleted ($value)
 

Защищенные данные

 $shipment
 
 $shipmentItemIndexMap = array()
 
- Защищенные данные унаследованные от EntityCollection
 $isClone = false
 
 $anyItemDeleted = false
 
- Защищенные данные унаследованные от CollectionBase
 $collection = array()
 

Подробное описание

См. определение в файле shipmentitemcollection.php строка 16

Методы

◆ addItem()

addItem ( Internals\CollectableEntity  $shipmentItem)
protected
Аргументы
Internals\CollectableEntity$shipmentItem
Возвращает
Internals\CollectableEntity|void
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 248

249  {
250  parent::addItem($shipmentItem);
251 
252  $this->shipmentItemIndexMap[$shipmentItem->getBasketCode()] = $shipmentItem->getInternalIndex();
253 
254  /** @var Shipment $shipment */
255  $shipment = $this->getShipment();
256  $shipment->onShipmentItemCollectionModify(EventActions::ADD, $shipmentItem);
257  }

◆ canAutoFixError()

canAutoFixError (   $value)
Аргументы
$value
Возвращает
string

См. определение в файле shipmentitemcollection.php строка 985

986  {
987  $autoFix = false;
988 
989  /** @var ShipmentItem $shipmentItem */
990  foreach ($this->collection as $shipmentItem)
991  {
992  if ($autoFix = $shipmentItem->canAutoFixError($value))
993  {
994  break;
995  }
996  }
997  return $autoFix;
998  }

◆ createClone()

createClone ( \SplObjectStorage  $cloneEntity)

Переопределяет метод предка EntityCollection.

См. определение в файле shipmentitemcollection.php строка 932

933  {
934  if ($this->isClone() && $cloneEntity->contains($this))
935  {
936  return $cloneEntity[$this];
937  }
938 
939  /** @var ShipmentItemCollection $shipmentItemCollectionClone */
940  $shipmentItemCollectionClone = parent::createClone($cloneEntity);
941 
942  /** @var Shipment $shipment */
943  if ($shipment = $this->shipment)
944  {
945  if (!$cloneEntity->contains($shipment))
946  {
947  $cloneEntity[$shipment] = $shipment->createClone($cloneEntity);
948  }
949 
950  if ($cloneEntity->contains($shipment))
951  {
952  $shipmentItemCollectionClone->shipment = $cloneEntity[$shipment];
953  }
954  }
955 
956  return $shipmentItemCollectionClone;
957  }

◆ createIndex()

createIndex ( )
protected

Переопределяет метод предка EntityCollection.

См. определение в файле shipmentitemcollection.php строка 259

260  {
261  $index = parent::createIndex();
262  $shipment = $this->getShipment();
263  return $shipment->getInternalIndex()."_".$index;
264  }

◆ createItem()

createItem ( BasketItem  $basketItem)
Аргументы
BasketItem$basketItem
Возвращает
ShipmentItem
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 108

109  {
110  if ($this->getShipment()->isShipped())
111  {
112  return null;
113  }
114 
115  $shipmentItem = $this->getItemByBasketCode($basketItem->getBasketCode());
116  if ($shipmentItem !== null)
117  {
118  return $shipmentItem;
119  }
120 
121  /** @var ShipmentItem $itemClassName */
122  $itemClassName = static::getItemCollectionClassName();
123 
124  $shipmentItem = $itemClassName::create($this, $basketItem);
125 
126  $shipmentItem->setCollection($this);
127  $this->addItem($shipmentItem);
128 
129  $shipment = $this->getShipment();
130 
131  if ($basketItem->isBundleParent() && !$shipment->isSystem())
132  {
133  $this->addBundleToCollection($basketItem);
134  }
135 
136  return $shipmentItem;
137  }

◆ deleteByBasketItem()

deleteByBasketItem ( BasketItem  $basketItem)
Аргументы
BasketItem$basketItem
Возвращает
Result
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 811

812  {
813  $result = new Result();
814  $systemShipmentItem = null;
815 
816  /** @var Shipment $shipment */
817  if (!$shipment = $this->getShipment())
818  {
819  throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
820  }
821 
822  /** @var ShipmentItem $shipmentItem */
823  foreach ($this->collection as $shipmentItem)
824  {
825  if ($shipmentItem->getBasketCode() == $basketItem->getBasketCode())
826  {
827  if ($shipment->isSystem())
828  {
829  $systemShipmentItem = $shipmentItem;
830  continue;
831  }
832 
833  $r = $shipmentItem->delete();
834  if (!$r->isSuccess())
835  {
836  $result->addErrors($r->getErrors());
837  }
838  }
839  }
840 
841  if ($systemShipmentItem !== null)
842  {
843  if ($systemShipmentItem->getReservedQuantity() > 0)
844  {
845  /** @var Result $r */
846  $r = $systemShipmentItem->tryUnreserve();
847  if (!$r->isSuccess())
848  {
849  $result->addErrors($r->getErrors());
850  }
851  }
852 
853  if ($result->isSuccess())
854  {
855  $systemShipmentItem->setFieldNoDemand('QUANTITY', 0);
856  $r = $systemShipmentItem->delete();
857  if (!$r->isSuccess())
858  {
859  $result->addErrors($r->getErrors());
860  }
861  }
862  }
863 
864  return $result;
865  }

◆ deleteInternal()

deleteInternal (   $primary)
protected
Аргументы
$primary
Возвращает
Main\Entity\DeleteResult

См. определение в файле shipmentitemcollection.php строка 716

717  {
719  }

◆ deleteItem()

deleteItem (   $index)

Переопределяет метод предка EntityCollection.

См. определение в файле shipmentitemcollection.php строка 274

275  {
276  $oldShipmentItem = parent::deleteItem($index);
277 
278  unset($this->shipmentItemIndexMap[$oldShipmentItem->getBasketCode()]);
279 
280  $shipment = $this->getShipment();
281  $shipment->onShipmentItemCollectionModify(EventActions::DELETE, $oldShipmentItem);
282  }

◆ getBasketItemQuantity()

getBasketItemQuantity ( BasketItem  $basketItem)
Аргументы
BasketItem$basketItem
Возвращает
float|int
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 890

891  {
892  $quantity = 0;
893 
894  $shipmentItem = $this->getItemByBasketCode($basketItem->getBasketCode());
895  if ($shipmentItem)
896  {
897  $quantity = $shipmentItem->getQuantity();
898  }
899 
900  return $quantity;
901  }

◆ getEntityParent()

getEntityParent ( )
protected
Возвращает
Shipment

Переопределяет метод предка EntityCollection.

См. определение в файле shipmentitemcollection.php строка 27

28  {
29  return $this->getShipment();
30  }

◆ getErrorEntity()

getErrorEntity (   $value)
Аргументы
$value
Возвращает
string

См. определение в файле shipmentitemcollection.php строка 964

965  {
966  $className = null;
967 
968  /** @var ShipmentItem $shipmentItem */
969  foreach ($this->collection as $shipmentItem)
970  {
971  if ($className = $shipmentItem->getErrorEntity($value))
972  {
973  break;
974  }
975  }
976 
977  return $className;
978  }

◆ getItemByBasketCode()

getItemByBasketCode (   $itemCode)
Аргументы
$itemCode
Возвращает
ShipmentItem|null

См. определение в файле shipmentitemcollection.php строка 303

304  {
305  if (
306  isset($this->shipmentItemIndexMap[$itemCode])
307  && isset($this->collection[$this->shipmentItemIndexMap[$itemCode]])
308  )
309  {
310  return $this->collection[$this->shipmentItemIndexMap[$itemCode]];
311  }
312 
313  return null;
314  }

◆ getItemByBasketId()

getItemByBasketId (   $itemId)
Аргументы
$itemId
Возвращает
ShipmentItem|null

См. определение в файле shipmentitemcollection.php строка 320

321  {
322  $itemId = (int)$itemId;
323  foreach ($this->collection as $shippedItem)
324  {
325  /** @var ShipmentItem $shippedItem */
326  $shippedItemId = (int)($shippedItem->getBasketId());
327  if ($itemId === $shippedItemId)
328  return $shippedItem;
329  }
330 
331  return null;
332  }

◆ getList()

static getList ( array  $parameters = array())
static
Аргументы
array$parameters
Возвращает
Main\DB\Result
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 707

708  {
709  return Internals\ShipmentItemTable::getList($parameters);
710  }

◆ getPrice()

getPrice ( )
Возвращает
float|int
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 372

373  {
374  $price = 0;
375  $sellableItems = $this->getSellableItems();
376  /** @var ShipmentItem $shipmentItem */
377  foreach ($sellableItems as $shipmentItem)
378  {
379  /** @var BasketItem $basketItem */
380  if ($basketItem = $shipmentItem->getBasketItem())
381  {
382  $price += $basketItem->getPrice() * $shipmentItem->getQuantity();
383  }
384  }
385 
386  return $price;
387  }

◆ getRegistryType()

static getRegistryType ( )
static
Возвращает
string

Переопределяет метод предка EntityCollection.

См. определение в файле shipmentitemcollection.php строка 623

624  {
626  }

◆ getSellableItems()

getSellableItems ( )
Возвращает
Internals\CollectionFilterIterator

См. определение в файле shipmentitemcollection.php строка 354

355  {
356  $callback = function (ShipmentItem $shipmentItem)
357  {
358  $basketItem = $shipmentItem->getBasketItem();
359  if ($basketItem)
360  return !$basketItem->isBundleChild();
361 
362  return true;
363  };
364 
365  return new Internals\CollectionFilterIterator($this->getIterator(), $callback);
366  }

◆ getShipment()

getShipment ( )
Возвращает
Shipment

См. определение в файле shipmentitemcollection.php строка 411

412  {
413  return $this->shipment;
414  }

◆ getShippableItems()

getShippableItems ( )
Возвращает
Internals\CollectionFilterIterator

См. определение в файле shipmentitemcollection.php строка 337

338  {
339  $callback = function (ShipmentItem $shipmentItem)
340  {
341  $basketItem = $shipmentItem->getBasketItem();
342  if ($basketItem)
343  return !$basketItem->isBundleParent();
344 
345  return true;
346  };
347 
348  return new Internals\CollectionFilterIterator($this->getIterator(), $callback);
349  }

◆ getWeight()

getWeight ( )
Возвращает
float
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 393

393  : float
394  {
395  $weight = 0;
396 
397  /** @var ShipmentItem $shipmentItem */
398  foreach ($this->getShippableItems() as $shipmentItem)
399  {
400  $basketItem = $shipmentItem->getBasketItem();
401 
402  $weight += $basketItem->getWeight() * $shipmentItem->getQuantity();
403  }
404 
405  return $weight;
406  }

◆ isEmpty()

isEmpty ( )
Возвращает
bool

Переопределяет метод предка CollectionBase.

См. определение в файле shipmentitemcollection.php строка 870

871  {
872  if (count($this->collection) == 0)
873  return true;
874 
875  /** @var ShipmentItem $item */
876  foreach ($this->collection as $item)
877  {
878  if ($item->getQuantity() > 0)
879  return false;
880  }
881 
882  return true;
883  }

◆ isExistBasketItem()

isExistBasketItem ( BasketItem  $basketItem)
Аргументы
BasketItem$basketItem
Возвращает
bool
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 909

910  {
911  /** @var ShipmentItem $shipmentItem */
912  foreach ($this->collection as $shipmentItem)
913  {
914  if ($shipmentItem->getBasketCode() == $basketItem->getBasketCode())
915  {
916  return true;
917  }
918  }
919 
920  return false;
921  }

◆ isExistsBasketItem()

isExistsBasketItem ( BasketItem  $basketItem)
protected
Аргументы
BasketItem$basketItem
Возвращает
bool
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 790

791  {
792  /** @var ShipmentItem $shipmentItem */
793  foreach ($this->collection as $shipmentItem)
794  {
795  if ($shipmentItem->getBasketCode() == $basketItem->getBasketCode())
796  return true;
797  }
798 
799  return false;
800  }

◆ load()

static load ( Shipment  $shipment)
static
Аргументы
Shipment$shipment
Возвращает
ShipmentItemCollection
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 644

645  {
646  /** @var ShipmentItemCollection $shipmentItemCollection */
647  $shipmentItemCollection = static::createShipmentItemCollectionObject();
648  $shipmentItemCollection->shipment = $shipment;
649 
650  if ($shipment->getId() > 0)
651  {
652 
653  /** @var ShipmentCollection $shipmentCollection */
654  if (!$shipmentCollection = $shipment->getCollection())
655  {
656  throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found');
657  }
658 
659  /** @var Order $order */
660  if (!$order = $shipmentCollection->getOrder())
661  {
662  throw new Main\ObjectNotFoundException('Entity "Order" not found');
663  }
664 
665  /** @var ShipmentItem $itemClassName */
666  $itemClassName = static::getItemCollectionClassName();
667  $shipmentItemList = $itemClassName::loadForShipment($shipment->getId());
668 
669  /** @var ShipmentItem $shipmentItem */
670  foreach ($shipmentItemList as $shipmentItem)
671  {
672  $shipmentItem->setCollection($shipmentItemCollection);
673  $shipmentItemCollection->addItem($shipmentItem);
674 
675  if (!$basketItem = $shipmentItem->getBasketItem())
676  {
677  $msg = Loc::getMessage("SALE_SHIPMENT_ITEM_COLLECTION_BASKET_ITEM_NOT_FOUND", array(
678  '#BASKET_ITEM_ID#' => $shipmentItem->getBasketId(),
679  '#SHIPMENT_ID#' => $shipment->getId(),
680  '#SHIPMENT_ITEM_ID#' => $shipmentItem->getId(),
681  ));
682 
683  $r = new Result();
684  $r->addError( new ResultError($msg, 'SALE_SHIPMENT_ITEM_COLLECTION_BASKET_ITEM_NOT_FOUND'));
685 
686 
687  $registry = Registry::getInstance(static::getRegistryType());
688  /** @var EntityMarker $entityMarker */
689  $entityMarker = $registry->getEntityMarkerClassName();
690  $entityMarker::addMarker($order, $shipment, $r);
691  if (!$shipment->isSystem())
692  {
693  $shipment->setField('MARKED', 'Y');
694  }
695  }
696  }
697  }
698 
699  return $shipmentItemCollection;
700  }

◆ onBasketModify()

onBasketModify (   $action,
BasketItem  $basketItem,
  $name = null,
  $oldValue = null,
  $value = null 
)
Аргументы
$action
BasketItem$basketItem
null$name
null$oldValue
null$value
Возвращает
Result
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 756

757  {
758  $result = new Result();
759 
760  if ($action === EventActions::ADD)
761  {
762  $shipmentItem = $this->createItem($basketItem);
763  if ($shipmentItem)
764  {
765  $shipmentItem->onBasketModify($action, $basketItem, $name, $oldValue, $value);
766  }
767 
768  return $result;
769  }
770  elseif ($action === EventActions::UPDATE)
771  {
772  $shipmentItem = $this->getItemByBasketCode($basketItem->getBasketCode());
773 
774  if (!$shipmentItem)
775  {
776  $shipmentItem = $this->createItem($basketItem);
777  }
778 
779  $shipmentItem->setField('QUANTITY', $value);
780  }
781 
782  return $result;
783  }

◆ onBeforeBasketItemDelete()

onBeforeBasketItemDelete ( BasketItem  $basketItem)
Аргументы
BasketItem$basketItem
Возвращает
Result
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 730

731  {
732  $result = new Result();
733 
734  $r = $this->deleteByBasketItem($basketItem);
735  if (!$r->isSuccess())
736  {
737  $result->addErrors($r->getErrors());
738  }
739 
740  return $result;
741  }

◆ onItemModify()

onItemModify ( Internals\CollectableEntity  $item,
  $name = null,
  $oldValue = null,
  $value = null 
)
Аргументы
Internals\CollectableEntity$item
null$name
null$oldValue
null$value
Возвращает
Result
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 293

294  {
295  $shipment = $this->getShipment();
296  return $shipment->onShipmentItemCollectionModify(EventActions::UPDATE, $item, $name, $oldValue, $value);
297  }

◆ resetCollection()

resetCollection ( Basket  $basket)
Аргументы
Basket$basket
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 40

41  {
42  if ($this->getShipment()->isShipped())
43  throw new Main\NotSupportedException();
44 
45  /** @var Shipment $shipment */
46  if (!$shipment = $this->getShipment())
47  {
48  throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
49  }
50 
51  /** @var ShipmentCollection $shipmentCollection */
52  if (!$shipmentCollection = $shipment->getCollection())
53  {
54  throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found');
55  }
56 
57  if (!empty($this->collection))
58  {
59  /** @var ShipmentItem $shipmentItem */
60  foreach ($this->collection as $shipmentItem)
61  {
62  $shipmentItem->setFieldNoDemand('QUANTITY', 0);
63  $shipmentItem->delete();
64  }
65  }
66 
67  $quantityList = array();
68 
69  /** @var BasketItem $basketItem */
70  foreach ($basket as $basketItem)
71  {
72  $quantityList[$basketItem->getBasketCode()] = $shipmentCollection->getBasketItemDistributedQuantity($basketItem);
73  }
74 
75  /** @var ShipmentItem $itemClassName */
76  $itemClassName = static::getItemCollectionClassName();
77 
78  /** @var BasketItem $basketItem */
79  foreach ($basket as $basketItem)
80  {
81  $shipmentItem = $itemClassName::create($this, $basketItem);
82  $this->addItem($shipmentItem);
83 
84  $basketItemQuantity = 0;
85 
86  if (array_key_exists($basketItem->getBasketCode(), $quantityList))
87  {
88  $basketItemQuantity = $quantityList[$basketItem->getBasketCode()];
89  }
90 
91  $quantity = $basketItem->getQuantity() - $basketItemQuantity;
92 
93  $shipmentItem->setFieldNoDemand("QUANTITY", $quantity);
94 
95  if ($basketItem->isBundleParent())
96  {
97  $this->addBundleToCollection($basketItem);
98  }
99 
100  }
101  }

◆ save()

save ( )
Возвращает
Main\Entity\Result
Исключения
Main

См. определение в файле shipmentitemcollection.php строка 423

424  {
425  $result = new Main\Entity\Result();
426 
427  /** @var Shipment $shipment */
428  if (!$shipment = $this->getShipment())
429  {
430  throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
431  }
432 
433  /** @var ShipmentCollection $shipmentCollection */
434  if (!$shipmentCollection = $shipment->getCollection())
435  {
436  throw new Main\ObjectNotFoundException('Entity "ShipmentCollection" not found');
437  }
438 
439  /** @var Order $order */
440  if (!$order = $shipmentCollection->getOrder())
441  {
442  throw new Main\ObjectNotFoundException('Entity "Order" not found');
443  }
444 
445  $itemsFromDb = array();
446  if ($this->getShipment()->getId() > 0)
447  {
448  $itemsFromDbList = static::getList(
449  array(
450  "filter" => array("ORDER_DELIVERY_ID" => $this->getShipment()->getId()),
451  "select" => array("ID", 'BASKET_ID')
452  )
453  );
454  while ($itemsFromDbItem = $itemsFromDbList->fetch())
455  $itemsFromDb[$itemsFromDbItem["ID"]] = $itemsFromDbItem;
456  }
457 
458 
459  /** @var ShipmentItem $shipmentItem */
460  foreach ($this->collection as $shipmentItem)
461  {
462  /** @var BasketItem $basketItem */
463  if (!$basketItem = $shipmentItem->getBasketItem())
464  {
465  continue;
466  }
467 
468  if ($basketItem->isBundleParent())
469  {
470  $this->addBundleToCollection($basketItem);
471  }
472  }
473 
474  /** @var Shipment $shipment */
475  if (!$shipment = $this->getShipment())
476  {
477  throw new Main\ObjectNotFoundException('Entity "Shipment" not found');
478  }
479 
480  $changeMeaningfulFields = array(
481  "QUANTITY",
482  "RESERVED_QUANTITY",
483  );
484 
485  /** @var ShipmentItem $shipmentItem */
486  foreach ($this->collection as $shipmentItem)
487  {
488  /** @var BasketItem $basketItem */
489  if (!$basketItem = $shipmentItem->getBasketItem())
490  {
491  continue;
492  }
493 
494  $isNew = (bool)($shipmentItem->getId() <= 0);
495  $isChanged = $shipmentItem->isChanged();
496 
497  if ($order->getId() > 0 && $isChanged)
498  {
499  $logFields = array(
500  "BASKET_ID" => $basketItem->getId(),
501  "BASKET_ITEM_NAME" => $basketItem->getField("NAME"),
502  "BASKET_ITEM_PRODUCT_ID" => $basketItem->getField("PRODUCT_ID"),
503  "ORDER_DELIVERY_ID" => $shipmentItem->getField("ORDER_DELIVERY_ID"),
504  );
505 
506  $fields = $shipmentItem->getFields();
507  $originalValues = $fields->getOriginalValues();
508 
509  foreach($originalValues as $originalFieldName => $originalFieldValue)
510  {
511  if (in_array($originalFieldName, $changeMeaningfulFields) && $shipmentItem->getField($originalFieldName) != $originalFieldValue)
512  {
513  $logFields[$originalFieldName] = $shipmentItem->getField($originalFieldName);
514  if (!$isNew)
515  $logFields['OLD_'.$originalFieldName] = $originalFieldValue;
516  }
517  }
518  }
519 
520  $r = $shipmentItem->save();
521  if ($r->isSuccess())
522  {
523  if ($order->getId() > 0 && $isChanged)
524  {
525  $registry = Registry::getInstance(static::getRegistryType());
526 
527  /** @var OrderHistory $orderHistory */
528  $orderHistory = $registry->getOrderHistoryClassName();
529  $orderHistory::addLog(
530  'SHIPMENT_ITEM',
531  $order->getId(),
532  $isNew ? 'SHIPMENT_ITEM_ADD' : 'SHIPMENT_ITEM_UPDATE',
533  $shipmentItem->getId(),
534  $shipmentItem,
535  $logFields,
536  $orderHistory::SALE_ORDER_HISTORY_LOG_LEVEL_1
537  );
538  }
539  }
540  else
541  {
542  $result->addErrors($r->getErrors());
543  }
544 
545  if (isset($itemsFromDb[$shipmentItem->getId()]))
546  {
547  unset($itemsFromDb[$shipmentItem->getId()]);
548  }
549  }
550 
551  /** @var Basket $basket */
552  if (!$basket = $order->getBasket())
553  {
554  throw new Main\ObjectNotFoundException('Entity "Basket" not found');
555  }
556 
557  foreach ($itemsFromDb as $k => $v)
558  {
559  $v['ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
560 
561  /** @var Main\Event $event */
562  $event = new Main\Event('sale', "OnBeforeSaleShipmentItemDeleted", array(
563  'VALUES' => $v,
564  ));
565  $event->send();
566 
567  static::deleteInternal($k);
568 
569  /** @var Main\Event $event */
570  $event = new Main\Event('sale', "OnSaleShipmentItemDeleted", array(
571  'VALUES' => $v,
572  ));
573  $event->send();
574 
575  /** @var BasketItem $basketItem */
576  if ($basketItem = $basket->getItemById($k))
577  {
578  $registry = Registry::getInstance(static::getRegistryType());
579 
580  /** @var OrderHistory $orderHistory */
581  $orderHistory = $registry->getOrderHistoryClassName();
582  $orderHistory::addAction(
583  'SHIPMENT',
584  $order->getId(),
585  'SHIPMENT_ITEM_BASKET_REMOVED',
586  $shipment->getId(),
587  null,
588  array(
589  'NAME' => $basketItem->getField('NAME'),
590  'QUANTITY' => $basketItem->getQuantity(),
591  'PRODUCT_ID' => $basketItem->getProductId(),
592  )
593  );
594  }
595  }
596 
597  if ($order->getId() > 0)
598  {
599  $registry = Registry::getInstance(static::getRegistryType());
600 
601  /** @var OrderHistory $orderHistory */
602  $orderHistory = $registry->getOrderHistoryClassName();
603  $orderHistory::collectEntityFields('SHIPMENT_ITEM', $order->getId());
604  }
605 
606  return $result;
607  }

Поля

◆ $shipment

$shipment
protected

См. определение в файле shipmentitemcollection.php строка 20

◆ $shipmentItemIndexMap

$shipmentItemIndexMap = array()
protected

См. определение в файле shipmentitemcollection.php строка 22


Объявления и описания членов класса находятся в файле:
Bitrix\Main\Localization\Loc\getMessage
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Definition: loc.php:29
Bitrix\Sale\Internals\CollectionBase\getIterator
getIterator()
Definition: collectionbase.php:26
Bitrix\Sale\ShipmentItemCollection\createItem
createItem(BasketItem $basketItem)
Definition: shipmentitemcollection.php:108
Bitrix\Sale\EventActions\ADD
const ADD
Definition: eventactions.php:8
Bitrix\Sale\Registry\REGISTRY_TYPE_ORDER
const REGISTRY_TYPE_ORDER
Definition: sale/lib/registry.php:16
Bitrix\Sale\EventActions\DELETE
const DELETE
Definition: eventactions.php:10
Bitrix\Sale\Internals\CollectionBase\count
count()
Count elements of an object.
Definition: collectionbase.php:79
Bitrix\Sale\Registry\getInstance
static getInstance($type)
Definition: sale/lib/registry.php:161
Bitrix\Sale\EventActions\UPDATE
const UPDATE
Definition: eventactions.php:9
Bitrix\Sale\ShipmentItemCollection\getItemByBasketCode
getItemByBasketCode($itemCode)
Definition: shipmentitemcollection.php:303
Bitrix\Sale\ShipmentItemCollection\deleteByBasketItem
deleteByBasketItem(BasketItem $basketItem)
Definition: shipmentitemcollection.php:811
Bitrix\Sale\ShipmentItemCollection\getShippableItems
getShippableItems()
Definition: shipmentitemcollection.php:337
Bitrix\Sale\ShipmentItemCollection\getShipment
getShipment()
Definition: shipmentitemcollection.php:411
Bitrix\Sale\ShipmentItemCollection\getSellableItems
getSellableItems()
Definition: shipmentitemcollection.php:354
Bitrix\Sale\ShipmentItemCollection\$shipment
$shipment
Definition: shipmentitemcollection.php:20
Bitrix\Sale\Internals\ShipmentItemTable\deleteWithItems
static deleteWithItems($id)
Definition: internals/shipmentitem.php:49
Bitrix\Sale\ShipmentItemCollection\addItem
addItem(Internals\CollectableEntity $shipmentItem)
Definition: shipmentitemcollection.php:248
Bitrix\Sale\Internals\EntityCollection\isClone
isClone()
Definition: entitycollection.php:358