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

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

 createItem (BasketItem $basketItem)
 
 getQuantityByBasketCode ($basketCode)
 
 getShipmentItem ()
 
 onShipmentItemModify ($action, ShipmentItem $shipmentItem, $name=null, $oldValue=null, $value=null)
 
 onItemModify (Internals\CollectableEntity $item, $name=null, $oldValue=null, $value=null)
 
 checkAvailableQuantity (Internals\CollectableEntity $item)
 
 save ()
 
 setBarcodeQuantityFromArray (array $values)
 
 getAllBarcodeList ()
 
 getItemByBarcode ($barcode)
 
 createClone (\SplObjectStorage $cloneEntity)
 
 getErrorEntity ($value)
 
 canAutoFixError ($value)
 
- Открытые члены унаследованные от EntityCollection
 onItemModify (CollectableEntity $item, $name=null, $oldValue=null, $value=null)
 
 deleteItem ($index)
 
 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. Подробнее...
 
 isEmpty ()
 Checks if collection is empty. Подробнее...
 

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

static getRegistryType ()
 
static load (ShipmentItem $shipmentItem)
 
static getList (array $parameters=array())
 

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

 getEntityParent ()
 
 syncQuantityAfterModify (ShipmentItem $shipmentItem, $oldValue=null, $value=null)
 
 getOriginalItemValues ()
 
 callEventOnBeforeSaleShipmentItemStoreDeleted (array $itemValues)
 
 callEventOnSaleShipmentItemStoreDeleted (array $itemValues)
 
 deleteInternal ($primary)
 
- Защищенные члены унаследованные от EntityCollection
 __construct ()
 EntityCollection constructor. Подробнее...
 
 addItem (CollectableEntity $item)
 
 createIndex ()
 
 getDeletableItems ()
 
 callEventOnBeforeCollectionClear ()
 
 setAnyItemDeleted ($value)
 

Дополнительные унаследованные члены

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

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

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

Методы

◆ callEventOnBeforeSaleShipmentItemStoreDeleted()

callEventOnBeforeSaleShipmentItemStoreDeleted ( array  $itemValues)
protected
Аргументы
array$itemValues

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

366  {
367  $itemValues['ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
368 
369  /** @var Main\Event $event */
370  $event = new Main\Event('sale', "OnBeforeSaleShipmentItemStoreDeleted", ['VALUES' => $itemValues]);
371  $event->send();
372  }

◆ callEventOnSaleShipmentItemStoreDeleted()

callEventOnSaleShipmentItemStoreDeleted ( array  $itemValues)
protected
Аргументы
array$itemValues

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

378  {
379  $itemValues['ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
380 
381  /** @var Main\Event $event */
382  $event = new Main\Event('sale', "OnSaleShipmentItemStoreDeleted", ['VALUES' => $itemValues]);
383  $event->send();
384  }

◆ canAutoFixError()

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

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

602  {
603  $autoFix = false;
604  /** @var ShipmentItemStore $shipmentItemStore */
605  foreach ($this->collection as $shipmentItemStore)
606  {
607  if ($autoFix = $shipmentItemStore->canAutoFixError($value))
608  {
609  break;
610  }
611  }
612  return $autoFix;
613  }

◆ checkAvailableQuantity()

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

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

264  {
265  $result = new Result();
266 
267  if (!$item instanceof ShipmentItemStore)
268  {
269  return $result;
270  }
271 
272  $shipmentItem = $this->getShipmentItem();
273 
274  $itemStoreQuantity = (float)$this->getQuantityByBasketCode($shipmentItem->getBasketCode());
275 
276  if (
277  (float)$item->getQuantity() > (float)$shipmentItem->getQuantity()
278  ||
279  $itemStoreQuantity > (float)$shipmentItem->getQuantity()
280  )
281  {
282  $result->addError(new Main\Error(
284  'SALE_SHIPMENT_ITEM_STORE_QUANTITY_LARGER_ALLOWED',
285  ['#PRODUCT_NAME#' => $this->getShipmentItem()->getBasketItem()->getField('NAME')]
286  ),
287  'SALE_SHIPMENT_ITEM_STORE_QUANTITY_LARGER_ALLOWED'
288  )
289  );
290  }
291 
292  return $result;
293  }

◆ createClone()

createClone ( \SplObjectStorage  $cloneEntity)

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

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

550  {
551  if ($this->isClone() && $cloneEntity->contains($this))
552  {
553  return $cloneEntity[$this];
554  }
555 
556  /** @var ShipmentItemStoreCollection $shipmentItemStoreCollectionClone */
557  $shipmentItemStoreCollectionClone = parent::createClone($cloneEntity) ;
558 
559  /** @var ShipmentItem $shipmentItem */
560  if ($shipmentItem = $this->shipmentItem)
561  {
562  if (!$cloneEntity->contains($shipmentItem))
563  {
564  $cloneEntity[$shipmentItem] = $shipmentItem->createClone($cloneEntity);
565  }
566 
567  if ($cloneEntity->contains($shipmentItem))
568  {
569  $shipmentItemStoreCollectionClone->shipmentItem = $cloneEntity[$shipmentItem];
570  }
571  }
572 
573  return $shipmentItemStoreCollectionClone;
574  }

◆ createItem()

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

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

89  {
90  $registry = Registry::getInstance(static::getRegistryType());
91  $itemClassName = $registry->getShipmentItemStoreClassName();
92 
93  $item = $itemClassName::create($this, $basketItem);
94 
95  $this->addItem($item);
96 
97  return $item;
98  }

◆ deleteInternal()

deleteInternal (   $primary)
protected
Аргументы
$primary
Возвращает
Main\ORM\Data\DeleteResult
Исключения

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

633  {
634  return Internals\ShipmentItemStoreTable::delete($primary);
635  }

◆ getAllBarcodeList()

getAllBarcodeList ( )
Возвращает
array

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

498  {
499  $result = [];
500 
501  /** @var ShipmentItemStore $item */
502  foreach ($this->collection as $item)
503  {
504  if (!isset($result[$item->getStoreId()]))
505  {
506  $result[$item->getStoreId()] = [];
507  }
508 
509  $result[$item->getStoreId()][$item->getBarcode()] = [
510  'ID' => $item->getId(),
511  'QUANTITY' => $item->getQuantity(),
512  ];
513  }
514 
515  return $result;
516  }

◆ getEntityParent()

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

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

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

24  {
25  return $this->getShipmentItem();
26  }

◆ getErrorEntity()

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

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

581  {
582  $className = null;
583 
584  /** @var ShipmentItemStore $shipmentItemStore */
585  foreach ($this->collection as $shipmentItemStore)
586  {
587  if ($className = $shipmentItemStore->getErrorEntity($value))
588  {
589  break;
590  }
591  }
592 
593  return $className;
594  }

◆ getItemByBarcode()

getItemByBarcode (   $barcode)
Аргументы
$barcode
Возвращает
ShipmentItemStore|null

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

523  {
524  /** @var ShipmentItemStore $item */
525  foreach ($this->collection as $item)
526  {
527  if ((string)$item->getBarcode() === (string)$barcode)
528  {
529  return $item;
530  }
531  }
532 
533  return null;
534  }

◆ getList()

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

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

623  {
624  return Internals\ShipmentItemStoreTable::getList($parameters);
625  }

◆ getOriginalItemValues()

getOriginalItemValues ( )
protected
Возвращает
array

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

342  : array
343  {
344  $itemsFromDb = array();
345 
346  if ($this->getShipmentItem()->getId() > 0)
347  {
348  $itemsFromDbList = static::getList(
349  array(
350  "filter" => array("ORDER_DELIVERY_BASKET_ID" => $this->getShipmentItem()->getId()),
351  )
352  );
353  while ($itemsFromDbItem = $itemsFromDbList->fetch())
354  {
355  $itemsFromDb[$itemsFromDbItem["ID"]] = $itemsFromDbItem;
356  }
357  }
358 
359  return $itemsFromDb;
360  }

◆ getQuantityByBasketCode()

getQuantityByBasketCode (   $basketCode)
Аргументы
$basketCode
Возвращает
float|int

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

105  {
106  $quantity = 0;
107 
108  /** @var ShipmentItemStore $item */
109  foreach ($this->collection as $item)
110  {
111  $quantity += $item->getQuantity();
112  }
113 
114  return $quantity;
115  }

◆ getRegistryType()

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

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

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

44  {
46  }

◆ getShipmentItem()

getShipmentItem ( )
Возвращает
ShipmentItem

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

122  {
123  return $this->shipmentItem;
124  }

◆ load()

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

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

58  {
59  /** @var ShipmentItemStoreCollection $shipmentItemStoreCollection */
60  $shipmentItemStoreCollection = static::createShipmentItemStoreCollectionObject();
61  $shipmentItemStoreCollection->shipmentItem = $shipmentItem;
62 
63  if ($shipmentItem->getId() > 0)
64  {
65  $registry = Registry::getInstance(static::getRegistryType());
66 
67  /** @var ShipmentItemStore $itemClassName */
68  $itemClassName = $registry->getShipmentItemStoreClassName();
69 
70  $shipmentItemStoreList = $itemClassName::loadForShipmentItem($shipmentItem->getId());
71 
72  /** @var ShipmentItemStore $shipmentItemStore */
73  foreach ($shipmentItemStoreList as $shipmentItemStore)
74  {
75  $shipmentItemStore->setCollection($shipmentItemStoreCollection);
76  $shipmentItemStoreCollection->addItem($shipmentItemStore);
77  }
78  }
79 
80  return $shipmentItemStoreCollection;
81  }

◆ onItemModify()

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

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

247  {
248  if ($name == "QUANTITY")
249  {
250  return $this->checkAvailableQuantity($item);
251  }
252 
253  return new Result();
254  }

◆ onShipmentItemModify()

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

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

138  {
139  if ($action !== EventActions::UPDATE)
140  {
141  return new Result();
142  }
143 
144  if ($name == "QUANTITY")
145  {
146  return $this->syncQuantityAfterModify($shipmentItem, $oldValue, $value);
147  }
148 
149  return new Result();
150  }

◆ save()

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

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

304  {
305  $result = new Main\Entity\Result();
306 
307  $originalItemValues = $this->getOriginalItemValues();
308 
309  /** @var ShipmentItemStore $item */
310  foreach ($this->collection as $item)
311  {
312  $r = $item->save();
313  if (!$r->isSuccess())
314  {
315  $result->addErrors($r->getErrors());
316  }
317 
318  if (isset($originalItemValues[$item->getId()]))
319  {
320  unset($originalItemValues[$item->getId()]);
321  }
322  }
323 
324  if ($originalItemValues)
325  {
326  foreach ($originalItemValues as $id => $itemValues)
327  {
329 
330  $this->deleteInternal($id);
331 
332  $this->callEventOnSaleShipmentItemStoreDeleted($itemValues);
333  }
334  }
335 
336  return $result;
337  }

◆ setBarcodeQuantityFromArray()

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

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

393  {
394  $result = new Result();
395  $requestBarcodeList = static::getBarcodeListFromArray($values);
396 
397  $plusList = array();
398  $oldQuantityList = $this->getAllBarcodeList();
399 
400  foreach ($requestBarcodeList as $storeId => $barcodeDat)
401  {
402  foreach ($barcodeDat as $barcodeValue => $barcode)
403  {
404  if (isset($oldQuantityList[$storeId][$barcodeValue])
405  && $oldQuantityList[$storeId][$barcodeValue]['ID'] == $barcode['ID'])
406  {
407  $oldBarcode = $oldQuantityList[$storeId][$barcodeValue];
408  if ($barcode['QUANTITY'] == $oldBarcode['QUANTITY'])
409  {
410  continue;
411  }
412  elseif ($barcode['QUANTITY'] < $oldBarcode['QUANTITY'])
413  {
414  /** @var ShipmentItemStore $item */
415  $item = $this->getItemById($oldBarcode['ID']);
416  if ($item)
417  $item->setField('QUANTITY', $barcode['QUANTITY']);
418  }
419  else
420  {
421  $plusList[$barcodeValue] = array(
422  'ID' => $barcode['ID'],
423  'QUANTITY' => $barcode['QUANTITY']
424  );
425  }
426  }
427  }
428  }
429 
430  foreach ($plusList as $barcode)
431  {
432  if ($barcode['ID'] <= 0)
433  continue;
434 
435  $item = $this->getItemById($barcode['ID']);
436  if ($item)
437  {
438  /** @var Result $r */
439  $r = $item->setField('QUANTITY', $barcode['QUANTITY']);
440  if (!$r->isSuccess())
441  {
442  $result->addErrors($r->getErrors());
443  }
444  }
445  }
446 
447  return $result;
448  }

◆ syncQuantityAfterModify()

syncQuantityAfterModify ( ShipmentItem  $shipmentItem,
  $oldValue = null,
  $value = null 
)
protected
Аргументы
ShipmentItem$shipmentItem
null$oldValue
null$value
Возвращает
Result
Исключения
Main

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

162  {
163  if (!($basketItem = $shipmentItem->getBasketItem()) || $basketItem->getId() == 0)
164  return new Result();
165 
166  $result = new Result();
167 
168  $deltaQuantity = $value - $oldValue;
169 
170  if ($deltaQuantity >= 0)
171  return $result;
172 
173  $barcodeList = array();
174  /** @var ShipmentItemStore $shipmentItemStore */
175  foreach($this->collection as $shipmentItemStore)
176  {
177  if (strval($shipmentItemStore->getBarcode()) == "")
178  {
179  $barcodeList[$shipmentItemStore->getId()] = $shipmentItemStore;
180  }
181  }
182 
183  if ($basketItem->isBarcodeMulti())
184  {
185  if (count($barcodeList) < $oldValue)
186  {
187  return $result;
188  }
189 
190  $oldItemsList = array();
191 
192  /** @var ShipmentItemStore $shipmentItemStore */
193  foreach ($this->collection as $shipmentItemStore)
194  {
195  $oldItemsList[$shipmentItemStore->getId()] = $shipmentItemStore;
196  }
197 
198  $cutBarcodeList = array_slice($barcodeList, 0, $deltaQuantity, true);
199  if (!empty($oldItemsList) && is_array($oldItemsList))
200  {
201  /**
202  * @var int $oldItemId
203  * @var ShipmentItemStore $oldItem
204  */
205  foreach($oldItemsList as $oldItemId => $oldItem)
206  {
207  if (!isset($cutBarcodeList[$oldItemId]))
208  {
209  $oldItem->delete();
210  }
211  }
212  }
213  }
214  elseif (count($barcodeList) == 1)
215  {
216  /** @var ShipmentItemStore $barcodeItem */
217  $barcodeItem = reset($barcodeList);
218 
219  if ($barcodeItem->getQuantity() < $oldValue)
220  return new Result();
221 
222  /** @var Result $r */
223  $r = $barcodeItem->setField(
224  "QUANTITY",
225  $barcodeItem->getField("QUANTITY") + $deltaQuantity
226  );
227 
228  if (!$r->isSuccess())
229  {
230  $result->addErrors($r->getErrors());
231  return $result;
232  }
233  }
234 
235  return $result;
236  }

Объявления и описания членов класса находятся в файле:
Bitrix\Main\Localization\Loc\getMessage
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Definition: loc.php:29
Bitrix\Sale\ShipmentItemStoreCollection\deleteInternal
deleteInternal($primary)
Definition: shipmentitemstorecollection.php:632
Bitrix\Sale\ShipmentItemStoreCollection\getShipmentItem
getShipmentItem()
Definition: shipmentitemstorecollection.php:121
Bitrix\Sale\Registry\REGISTRY_TYPE_ORDER
const REGISTRY_TYPE_ORDER
Definition: sale/lib/registry.php:16
Bitrix\Sale\ShipmentItemStoreCollection\callEventOnBeforeSaleShipmentItemStoreDeleted
callEventOnBeforeSaleShipmentItemStoreDeleted(array $itemValues)
Definition: shipmentitemstorecollection.php:365
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\Internals\EntityCollection\addItem
addItem(CollectableEntity $item)
Definition: entitycollection.php:86
Bitrix\Sale\Internals\EntityCollection\getItemById
getItemById($id)
Definition: entitycollection.php:165
Bitrix\Sale\ShipmentItemStoreCollection\callEventOnSaleShipmentItemStoreDeleted
callEventOnSaleShipmentItemStoreDeleted(array $itemValues)
Definition: shipmentitemstorecollection.php:377
Bitrix\Sale\ShipmentItemStoreCollection\getOriginalItemValues
getOriginalItemValues()
Definition: shipmentitemstorecollection.php:342
Bitrix\Sale\ShipmentItemStoreCollection\getQuantityByBasketCode
getQuantityByBasketCode($basketCode)
Definition: shipmentitemstorecollection.php:104
Bitrix\Sale\ShipmentItemStoreCollection\getAllBarcodeList
getAllBarcodeList()
Definition: shipmentitemstorecollection.php:497
Bitrix\Sale\ShipmentItemStoreCollection\syncQuantityAfterModify
syncQuantityAfterModify(ShipmentItem $shipmentItem, $oldValue=null, $value=null)
Definition: shipmentitemstorecollection.php:161
Bitrix\Sale\Internals\EntityCollection\isClone
isClone()
Definition: entitycollection.php:358
Bitrix\Sale\ShipmentItemStoreCollection\checkAvailableQuantity
checkAvailableQuantity(Internals\CollectableEntity $item)
Definition: shipmentitemstorecollection.php:263