Bitrix-D7  20.5.0
Класс BasketItem
Граф наследования:BasketItem:
BasketItemBase CollectableEntity Entity

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

 save ()
 
 delete ()
 
 getParentBasketItem ()
 
 getParentBasketItemId ()
 
 isBundleParent ()
 
 isBundleChild ()
 
 getBundleBaseQuantity ()
 
 getBundleCollection ()
 
 createBundleCollection ()
 
 findItemByBasketCode ($basketCode)
 
 findItemById ($id)
 
 createClone (\SplObjectStorage $cloneEntity)
 
 getReservedQuantity ()
 
- Открытые члены унаследованные от BasketItemBase
 getBasketCode ()
 
 setField ($name, $value)
 
 setFieldNoDemand ($name, $value)
 
 getField ($name)
 
 setFields (array $fields)
 
 getProviderName ()
 
 getCallbackFunction ()
 
 getProviderEntity ()
 
 getProvider ()
 
 isVatInPrice ()
 
 getVat ()
 
 getInitialPrice ()
 
 getBasePriceWithVat ()
 
 getPriceWithVat ()
 
 getFinalPrice ()
 
 getProductId ()
 
 getPrice ()
 
 getBasePrice ()
 
 getDiscountPrice ()
 
 isCustomPrice ()
 
 getCurrency ()
 
 getQuantity ()
 
 getWeight ()
 
 getVatRate ()
 
 getFUserId ()
 
 setOrderId ($id)
 
 isBarcodeMulti ()
 
 canBuy ()
 
 isDelay ()
 
 isSupportedMarkingCode ()
 
 getMarkingCodeGroup ()
 
 getPropertyCollection ()
 
 isExistPropertyCollection ()
 
 setPropertyCollection (BasketPropertiesCollectionBase $propertyCollection)
 
 setPrice ($value, $custom=false)
 
 initFields (array $values)
 
 getBasket ()
 
 isChanged ()
 
 verify ()
 
 isCustom ()
 
 toArray ()
 
 getDefaultPrice ()
 
- Открытые члены унаследованные от CollectableEntity
 setCollection (EntityCollection $collection)
 
 getCollection ()
 
 setInternalIndex ($index)
 
 getInternalIndex ()
 
 isStartField ($isMeaningfulField=false)
 
 clearStartField ()
 
 hasMeaningfulField ()
 
 doFinalAction ($hasMeaningfulField=false)
 
 setMathActionOnly ($value=false)
 
 isMathActionOnly ()
 
 isClone ()
 
- Открытые члены унаследованные от Entity
 initializeField ($fieldName, $fieldInfo)
 Fields factory. Подробнее...
 
 initialize ($className)
 
 postInitialize ()
 
 getObjectClass ()
 Returns class of Object for current entity. Подробнее...
 
 getObjectClassName ()
 Returns class name of Object for current entity. Подробнее...
 
 getCollectionClass ()
 
 getCollectionClassName ()
 
 createObject ($setDefaultValues=true)
 
 createCollection ()
 
 wakeUpObject ($row)
 
 wakeUpCollection ($rows)
 
 addField ($fieldInfo, $fieldName=null)
 
 getReferencesCountTo ($refEntityName)
 
 getReferencesTo ($refEntityName)
 
 getFields ()
 
 hasField ($name)
 
 getScalarFields ()
 
 getUField ($name)
 
 hasUField ($name)
 
 getName ()
 
 getFullName ()
 
 getNamespace ()
 
 getModule ()
 
 getDataClass ()
 
 getConnection ()
 
 getDBTableName ()
 
 getPrimary ()
 
 getPrimaryArray ()
 
 getAutoIncrement ()
 
 isUts ()
 
 isUtm ()
 
 getUfId ()
 
 setDefaultScope ($query)
 
 getCode ()
 
 getLangCode ()
 
 getTitle ()
 
 __clone ()
 
 compileDbTableStructureDump ()
 
 createDbTable ()
 Creates table according to Fields collection. Подробнее...
 
 readFromCache ($ttl, $cacheId, $countTotal=false)
 Reads data from cache. Подробнее...
 
 writeToCache (Main\DB\Result $result, $cacheId, $countTotal=false)
 
 getCacheTtl ($ttl)
 Returns cache TTL for the entity, possibly limited by the .settings.php: 'cache_flags' => array('value'=> array( "b_group_max_ttl" => 200, "b_group_min_ttl" => 100, )) Maximum is a higher-priority. Подробнее...
 
 cleanCache ()
 Cleans all cache entries for the entity. Подробнее...
 
 enableFullTextIndex ($field, $mode=true)
 Sets a flag indicating full text index support for a field. Подробнее...
 
 fullTextIndexEnabled ($field)
 Returns true if full text index is enabled for a field. Подробнее...
 

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

static getRegistryType ()
 
static formatQuantity ($quantity)
 
static load (BasketItemCollection $basket, $data)
 
- Открытые статические члены унаследованные от BasketItemBase
static getRegistryEntity ()
 
static create (BasketItemCollection $basketItemCollection, $moduleId, $productId, $basketCode=null)
 
static getSettableFields ()
 
static getSettableFieldsMap ()
 
static getCalculatedFields ()
 
static getAvailableFields ()
 
static getCustomizableFields ()
 
static getRoundFields ()
 
static getEntityEventName ()
 
- Открытые статические члены унаследованные от Entity
static get ($entityName)
 Returns entity object. Подробнее...
 
static has ($entityName)
 Checks if entity exists. Подробнее...
 
static getInstance ($entityName)
 
static getDefaultObjectClassName ($entityName)
 
static getDefaultCollectionClassName ($entityName)
 
static isExists ($name)
 
static normalizeEntityClass ($entityName)
 
static getEntityClassParts ($class)
 
static camel2snake ($str)
 
static snake2camel ($str)
 
static normalizeName ($entityName)
 
static getInstanceByQuery (Query $query, &$entity_name=null)
 
static compileEntity ($entityName, $fields=null, $parameters=array())
 
static compileObjectClass ($dataClass)
 
static compileCollectionClass ($dataClass)
 
static destroy ($entity)
 

Поля данных

const TYPE_SET = 1
 
- Поля данных унаследованные от Entity
 $name
 
 $connectionName
 
 $dbTableName
 
 $primary
 
 $autoIncrement
 
 $isUts
 
 $isUtm
 
const DEFAULT_OBJECT_PREFIX = 'EO_'
 

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

 add ()
 
 update ()
 
 checkBeforeDelete ()
 
 loadBundleCollectionFromDb ()
 
 loadBundleCollectionFromProvider ()
 
 addChangesToHistory ($name, $oldValue=null, $value=null)
 
 onFieldModify ($name, $oldValue, $value)
 
 addInternal (array $fields)
 
 updateInternal ($primary, array $fields)
 
 deleteInternal ($primary)
 
- Защищенные члены унаследованные от BasketItemBase
 __construct (array $fields=[])
 BasketItemBase constructor. Подробнее...
 
 onBeforeSetFields (array $values)
 
 isCalculatedField ($field)
 
 onBeforeSave ()
 
 callEventOnBasketItemEntitySaved ()
 
 callEventSaleBasketItemBeforeSaved ($isNewEntity)
 
 callEventSaleBasketItemSaved ($isNewEntity)
 
- Защищенные члены унаследованные от Entity
 appendField (Field $field)
 
 getCacheDir ()
 

Защищенные статические члены

static getFieldsMap ()
 
- Защищенные статические члены унаследованные от BasketItemBase
static generateXmlId ()
 
static getMeaningfulFields ()
 
- Защищенные статические члены унаследованные от Entity
static getInstanceDirect ($className)
 

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

- Защищенные данные унаследованные от BasketItemBase
 $propertyCollection
 
 $calculatedFields
 
 $provider
 
 $internalId = null
 
- Защищенные данные унаследованные от CollectableEntity
 $collection
 
 $internalIndex = null
 
 $isClone = false
 
- Защищенные данные унаследованные от Entity
 $className
 
 $module
 
 $uf_id
 
 $fields
 
 $fieldsMap
 
 $u_fields
 
 $code
 
 $references
 
 $isClone = false
 
- Статические защищенные данные унаследованные от BasketItemBase
static $idBasket = 0
 
- Статические защищенные данные унаследованные от Entity
static $instances
 

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

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

Методы

◆ add()

add ( )
protected
Возвращает
Result
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

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

115  {
116  $logFields = $this->getLoggedFields();
117 
118  $result = parent::add();
119 
120  /** @var BasketItemCollection $collection */
121  $collection = $this->getCollection();
122 
123  /** @var BasketBase $basket */
124  if (!$basket = $collection->getBasket())
125  {
126  throw new Main\ObjectNotFoundException('Entity "Basket" not found');
127  }
128 
129  if ($basket->getOrderId() > 0)
130  {
131  $registry = Registry::getInstance(static::getRegistryType());
132  /** @var OrderHistory $orderHistory */
133  $orderHistory = $registry->getOrderHistoryClassName();
134 
135  if (!$result->isSuccess())
136  {
137  $orderHistory::addAction(
138  'BASKET',
139  $basket->getOrderId(),
140  'BASKET_ITEM_ADD_ERROR',
141  null,
142  $this,
143  ["ERROR" => $result->getErrorMessages()]
144  );
145  }
146  else
147  {
148  $orderHistory::addLog(
149  'BASKET',
150  $basket->getOrderId(),
151  "BASKET_ITEM_ADD",
152  $this->getId(),
153  $this,
154  $logFields,
155  $orderHistory::SALE_ORDER_HISTORY_LOG_LEVEL_1
156  );
157 
158  $orderHistory::addAction(
159  'BASKET',
160  $basket->getOrderId(),
161  "BASKET_SAVED",
162  $this->getId(),
163  $this,
164  [],
165  $orderHistory::SALE_ORDER_HISTORY_ACTION_LOG_LEVEL_1
166  );
167  }
168  }
169 
170  return $result;
171  }

◆ addChangesToHistory()

addChangesToHistory (   $name,
  $oldValue = null,
  $value = null 
)
protected
Аргументы
string$name
null$oldValue
null$value
Исключения
ArgumentNullException
ObjectNotFoundException

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

776  {
777  if ($this->getId() > 0)
778  {
779  $fields = [];
780  /** @var Basket $basket */
781  if (!$basket = $this->getCollection())
782  {
783  throw new ObjectNotFoundException('Entity "Basket" not found');
784  }
785 
786  if ($basket->getOrder() && $basket->getOrderId() > 0)
787  {
788  if ($name == "QUANTITY")
789  {
790  if (floatval($value) == 0)
791  {
792  return;
793  }
794  $fields = [
795  'PRODUCT_ID' => $this->getProductId(),
796  'QUANTITY' => $this->getQuantity(),
797  'NAME' => $this->getField('NAME'),
798  ];
799  }
800 
801  $registry = Registry::getInstance(static::getRegistryType());
802 
803  /** @var OrderHistory $orderHistory */
804  $orderHistory = $registry->getOrderHistoryClassName();
805  $orderHistory::addField(
806  'BASKET',
807  $basket->getOrderId(),
808  $name,
809  $oldValue,
810  $value,
811  $this->getId(),
812  $this,
813  $fields
814  );
815  }
816  }
817  }

◆ addInternal()

addInternal ( array  $fields)
protected
Аргументы
array$fields
Возвращает
Main\Entity\AddResult
Исключения

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

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

1049  {
1050  return Internals\BasketTable::add($fields);
1051  }

◆ checkBeforeDelete()

checkBeforeDelete ( )
protected
Возвращает
Result
Исключения
ArgumentNullException
ObjectNotFoundException

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

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

288  {
289  $result = new Result();
290 
291  /** @var BasketItemCollection $collection */
292  $collection = $this->getCollection();
293 
294  /** @var Basket $basket */
295  if (!$basket = $collection->getBasket())
296  {
297  throw new ObjectNotFoundException('Entity "Basket" not found');
298  }
299 
300  /** @var Order $order */
301  if ($order = $basket->getOrder())
302  {
303  /** @var ShipmentCollection $shipmentCollection */
304  if ($shipmentCollection = $order->getShipmentCollection())
305  {
306  /** @var Shipment $shipment */
307  foreach ($shipmentCollection as $shipment)
308  {
309  if ($shipment->isSystem())
310  {
311  continue;
312  }
313 
314  /** @var ShipmentItemCollection $shipmentItemCollection */
315  if ($shipmentItemCollection = $shipment->getShipmentItemCollection())
316  {
317  if ($shipmentItemCollection->getItemByBasketCode($this->getBasketCode()) && $shipment->isShipped())
318  {
319  $result->addError(
320  new ResultError(
322  'SALE_BASKET_ITEM_REMOVE_IMPOSSIBLE_BECAUSE_SHIPPED',
323  ['#PRODUCT_NAME#' => $this->getField('NAME')]
324  ),
325  'SALE_BASKET_ITEM_REMOVE_IMPOSSIBLE_BECAUSE_SHIPPED'
326  )
327  );
328 
329  return $result;
330  }
331  }
332  }
333  }
334  }
335 
336  return $result;
337  }
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Definition: loc.php:29

◆ createBundleCollection()

createBundleCollection ( )
Возвращает
BundleCollection
Исключения
ArgumentOutOfRangeException

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

551  {
552  if ($this->bundleCollection === null)
553  {
554  $registry = Registry::getInstance(static::getRegistryType());
555  /** @var BundleCollection $bundleClassName */
556  $bundleClassName = $registry->getBundleCollectionClassName();
557 
558  $this->bundleCollection = $bundleClassName::createBundleCollectionObject();
559  $this->bundleCollection->setParentBasketItem($this);
560 
561  $this->setField('TYPE', static::TYPE_SET);
562  }
563 
564  return $this->bundleCollection;
565  }

◆ createClone()

createClone ( \SplObjectStorage  $cloneEntity)

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

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

863  {
864  if ($this->isClone() && $cloneEntity->contains($this))
865  {
866  return $cloneEntity[$this];
867  }
868 
869  /** @var BasketItem $basketItemClone */
870  $basketItemClone = parent::createClone($cloneEntity);
871 
872  /** @var Internals\Fields $calculatedFields */
873  if ($calculatedFields = $this->calculatedFields)
874  {
875  $basketItemClone->calculatedFields = $calculatedFields->createClone($cloneEntity);
876  }
877 
878  if (!$cloneEntity->contains($this))
879  {
880  $cloneEntity[$this] = $basketItemClone;
881  }
882 
883  /** @var BasketPropertiesCollection $propertyCollection */
885  {
886  if (!$cloneEntity->contains($propertyCollection))
887  {
888  $cloneEntity[$propertyCollection] = $propertyCollection->createClone($cloneEntity);
889  }
890 
891  if ($cloneEntity->contains($propertyCollection))
892  {
893  $basketItemClone->propertyCollection = $cloneEntity[$propertyCollection];
894  }
895  }
896 
897  if ($this->isBundleParent())
898  {
899  /** @var BundleCollection $bundleCollection */
900  if ($bundleCollection = $this->getBundleCollection())
901  {
902  if (!$cloneEntity->contains($bundleCollection))
903  {
904  $cloneEntity[$bundleCollection] = $bundleCollection->createClone($cloneEntity);
905  }
906 
907  if ($cloneEntity->contains($bundleCollection))
908  {
909  $basketItemClone->bundleCollection = $cloneEntity[$bundleCollection];
910  }
911  }
912  }
913 
914  return $basketItemClone;
915  }

◆ delete()

delete ( )
Возвращает
Result
Исключения
ArgumentOutOfRangeException
ObjectNotFoundException

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

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

346  {
347  $result = new Result();
348 
349  $deleteResult = parent::delete();
350  if (!$deleteResult->isSuccess())
351  {
352  $result->addErrors($deleteResult->getErrors());
353  return $result;
354  }
355 
356  if ($this->isBundleParent())
357  {
358  $bundleCollection = $this->getBundleCollection();
359  if ($bundleCollection)
360  {
361  /** @var BasketItem $bundleItem */
362  foreach ($bundleCollection as $bundleItem)
363  {
364  $deleteResult = $bundleItem->delete();
365  if (!$deleteResult->isSuccess())
366  {
367  $result->addErrors($deleteResult->getErrors());
368  }
369  }
370  }
371  }
372 
373  return $result;
374  }

◆ deleteInternal()

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

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

◆ findItemByBasketCode()

findItemByBasketCode (   $basketCode)
Аргументы
$basketCode
Возвращает
BasketItemBase|null
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

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

715  {
716  $item = parent::findItemByBasketCode($basketCode);
717  if ($item !== null)
718  return $item;
719 
720  if ($this->isBundleParent())
721  {
722  $collection = $this->getBundleCollection();
723  /** @var BasketItemBase $basketItem */
724  foreach ($collection as $basketItem)
725  {
726  $item = $basketItem->findItemByBasketCode($basketCode);
727  if ($item !== null)
728  return $item;
729  }
730  }
731 
732  return null;
733  }

◆ findItemById()

findItemById (   $id)
Аргументы
$id
Возвращает
BasketItemBase|null
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

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

748  {
749  $item = parent::findItemById($id);
750  if ($item !== null)
751  return $item;
752 
753  if ($this->isBundleParent())
754  {
755  $collection = $this->getBundleCollection();
756  /** @var BasketItemBase $basketItem */
757  foreach ($collection as $basketItem)
758  {
759  $item = $basketItem->findItemById($id);
760  if ($item !== null)
761  return $item;
762  }
763  }
764 
765  return null;
766  }

◆ formatQuantity()

static formatQuantity (   $quantity)
static
Аргументы
$quantity
Возвращает
float|string
Исключения
ArgumentNullException
ArgumentOutOfRangeException

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

826  {
827  $format = Config\Option::get('sale', 'format_quantity', 'AUTO');
828  if ($format == 'AUTO' || intval($format) <= 0)
829  {
830  $quantity = round($quantity, SALE_VALUE_PRECISION);
831  }
832  else
833  {
834  $quantity = number_format($quantity, intval($format), '.', '');
835  }
836 
837  return $quantity;
838  }
static get($moduleId, $name, $default="", $siteId=false)
Returns a value of an option.

◆ getBundleBaseQuantity()

getBundleBaseQuantity ( )
Возвращает
array|bool
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

456  {
457  if ($this->isBundleParent())
458  {
459  /** @var BundleCollection $bundleCollection */
460  if (!($bundleCollection = $this->getBundleCollection()))
461  {
462  throw new ObjectNotFoundException('Entity "BasketBundleCollection" not found');
463  }
464 
465  $bundleChildList = [];
466  $result = [];
467 
468  $originalQuantity = $this->getQuantity();
469  $originalValues = $this->fields->getOriginalValues();
470  if (array_key_exists('QUANTITY', $originalValues) && $originalValues['QUANTITY'] !== null)
471  {
472  $originalQuantity = $originalValues['QUANTITY'];
473  }
474  /** @var BasketItem $bundleBasketItem */
475  foreach ($bundleCollection as $bundleBasketItem)
476  {
477  $originalBundleQuantity = $bundleBasketItem->getQuantity();
478  $originalBundleValues = $bundleBasketItem->getFields()->getOriginalValues();
479  if (array_key_exists('QUANTITY', $originalBundleValues) && $originalBundleValues['QUANTITY'] !== null)
480  {
481  $originalBundleQuantity = $originalBundleValues['QUANTITY'];
482  }
483 
484  if ($originalQuantity > 0)
485  {
486  $bundleQuantity = $originalBundleQuantity / $originalQuantity;
487  }
488  else
489  {
490  $bundleQuantity = 0;
491  }
492 
493  $bundleChildList[]["ITEMS"][] = [
494  "PRODUCT_ID" => $bundleBasketItem->getProductId(),
495  "QUANTITY" => $bundleQuantity
496  ];
497 
498  }
499 
500  if (empty($bundleChildList))
501  return false;
502 
503  foreach ($bundleChildList as $bundleBasketListDat)
504  {
505  foreach ($bundleBasketListDat["ITEMS"] as $bundleDat)
506  {
507  $result[$bundleDat['PRODUCT_ID']] = $bundleDat['QUANTITY'];
508  }
509  }
510 
511  return $result;
512  }
513 
514  return false;
515  }

◆ getBundleCollection()

getBundleCollection ( )
Возвращает
BundleCollection|null
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

529  {
530  if ($this->bundleCollection === null)
531  {
532  if ($this->getId() > 0)
533  {
534  $this->bundleCollection = $this->loadBundleCollectionFromDb();
535  }
536  else
537  {
538  $this->bundleCollection = $this->loadBundleCollectionFromProvider();
539  }
540  }
541 
542  return $this->bundleCollection;
543  }

◆ getFieldsMap()

static getFieldsMap ( )
staticprotected
Возвращает
array

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

◆ getParentBasketItem()

getParentBasketItem ( )
Возвращает
BasketItem|null

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

403  {
404  $collection = $this->getCollection();
405 
406  if ($collection instanceof BundleCollection)
407  {
408  return $collection->getParentBasketItem();
409  }
410 
411  return null;
412  }

◆ getParentBasketItemId()

getParentBasketItemId ( )
Возвращает
int|null|string
Исключения
ArgumentNullException

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

419  {
420  if ($parentBasketItem = $this->getParentBasketItem())
421  {
422  return $parentBasketItem->getId();
423  }
424  return null;
425  }

◆ getRegistryType()

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

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

37  {
39  }

◆ getReservedQuantity()

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

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

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

1079  {
1080  $reservedQuantity = 0;
1081 
1082  /** @var BasketItemCollection $basketItemCollection */
1083  $basketItemCollection = $this->getCollection();
1084 
1085  /** @var Order $order */
1086  $order = $basketItemCollection->getOrder();
1087  if ($order)
1088  {
1089  $shipmentCollection = $order->getShipmentCollection();
1090  /** @var Shipment $shipment */
1091  foreach ($shipmentCollection as $shipment)
1092  {
1093  $shipmentItemCollection = $shipment->getShipmentItemCollection();
1094  $shipmentItem = $shipmentItemCollection->getItemByBasketCode($this->getBasketCode());
1095  if ($shipmentItem)
1096  $reservedQuantity += $shipmentItem->getReservedQuantity();
1097  }
1098  }
1099 
1100  return $reservedQuantity;
1101  }

◆ isBundleChild()

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

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

440  {
441  return $this->collection instanceof BundleCollection;
442  }

◆ isBundleParent()

isBundleParent ( )
Возвращает
bool
Исключения
ArgumentNullException

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

432  {
433  return (int)$this->getField('TYPE') === static::TYPE_SET;
434  }

◆ load()

static load ( BasketItemCollection  $basket,
  $data 
)
static
Аргументы
BasketItemCollection$basket
$data
Возвращает
BasketItem|mixed
Исключения
ArgumentException
ArgumentOutOfRangeException
Main

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

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

1023  {
1024  $bundleItems = [];
1025  if (isset($data['ITEMS']))
1026  {
1027  $bundleItems = $data['ITEMS'];
1028  unset($data['ITEMS']);
1029  }
1030 
1031  /** @var BasketItem $basketItem */
1032  $basketItem = parent::load($basket, $data);
1033 
1034  if ($bundleItems)
1035  {
1036  $bundleCollection = $basketItem->createBundleCollection();
1037  $bundleCollection->loadFromArray($bundleItems);
1038  }
1039 
1040  return $basketItem;
1041  }

◆ loadBundleCollectionFromDb()

loadBundleCollectionFromDb ( )
protected
Возвращает
BundleCollection
Исключения
ArgumentNullException
ArgumentOutOfRangeException

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

574  {
576 
577  if ($this->getId() > 0)
578  {
579  return $collection->loadFromDb(["SET_PARENT_ID" => $this->getId(), "TYPE" => false]);
580  }
581 
582  return $collection;
583  }

◆ loadBundleCollectionFromProvider()

loadBundleCollectionFromProvider ( )
protected
Возвращает
BundleCollection|null
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

597  {
598  global $USER;
599 
600  $bundleChildList = [];
601 
602  /** @var BasketItemCollection $basket */
603  if (!$basket = $this->getCollection())
604  {
605  throw new Main\ObjectNotFoundException('Entity "Basket" not found');
606  }
607 
608  /** @var Order $order */
609  $order = $basket->getOrder();
610  if ($order)
611  {
612  $context = [
613  'SITE_ID' => $order->getSiteId(),
614  'USER_ID' => $order->getUserId(),
615  'CURRENCY' => $order->getCurrency(),
616  ];
617  }
618  else
619  {
620  $context = [
621  'SITE_ID' => SITE_ID,
622  'USER_ID' => $USER && $USER->GetID() > 0 ? $USER->GetID() : 0,
623  'CURRENCY' => CurrencyManager::getBaseCurrency(),
624  ];
625  }
626 
627  $creator = Internals\ProviderCreator::create($context);
628  $creator->addBasketItem($this);
629  $r = $creator->getBundleItems();
630  if ($r->isSuccess())
631  {
632  $resultProductListData = $r->getData();
633  if (!empty($resultProductListData['BUNDLE_LIST']))
634  {
635  $bundleChildList = $resultProductListData['BUNDLE_LIST'];
636  }
637  }
638 
639  if (empty($bundleChildList))
640  {
641  return null;
642  }
643 
644  $this->bundleCollection = $this->setItemsAfterGetBundle($bundleChildList);
645  return $this->bundleCollection;
646  }
static getBaseCurrency()
Return base currency.

◆ onFieldModify()

onFieldModify (   $name,
  $oldValue,
  $value 
)
protected
Аргументы
string$name
mixed$oldValue
mixed$value
Возвращает
Result
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

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

931  {
932  $result = new Result();
933 
934  $r = parent::onFieldModify($name, $oldValue, $value);
935  if (!$r->isSuccess())
936  {
937  $result->addErrors($r->getErrors());
938  return $result;
939  }
940  elseif ($r->hasWarnings())
941  {
942  $result->addWarnings($r->getWarnings());
943  }
944 
945  if (!$this->isBundleParent())
946  return $result;
947 
948  if ($name === 'QUANTITY')
949  {
950  $deltaQuantity = $value - $oldValue;
951  if ($deltaQuantity != 0)
952  {
953  if ($bundleCollection = $this->getBundleCollection())
954  {
955  $bundleBaseQuantity = $this->getBundleBaseQuantity();
956 
957  /** @var BasketItemBase $bundleItem */
958  foreach ($bundleCollection as $bundleItem)
959  {
960  $bundleProductId = $bundleItem->getProductId();
961 
962  if (!isset($bundleBaseQuantity[$bundleProductId]))
963  throw new ArgumentOutOfRangeException('bundle product id');
964 
965  $quantity = $bundleBaseQuantity[$bundleProductId] * $value;
966 
967  $r = $bundleItem->setField('QUANTITY', $quantity);
968  if (!$r->isSuccess())
969  {
970  $result->addErrors($r->getErrors());
971  }
972  }
973  }
974  }
975  }
976  elseif ($name == "DELAY")
977  {
978  /** @var BundleCollection $bundleCollection */
979  if ($bundleCollection = $this->getBundleCollection())
980  {
981  /** @var BasketItemBase $bundleItem */
982  foreach ($bundleCollection as $bundleItem)
983  {
984  $r = $bundleItem->setField('DELAY', $value);
985  if (!$r->isSuccess())
986  {
987  $result->addErrors($r->getErrors());
988  }
989  }
990  }
991  }
992  elseif ($name == "CAN_BUY")
993  {
994  /** @var BundleCollection $bundleCollection */
995  if ($bundleCollection = $this->getBundleCollection())
996  {
997  /** @var BasketItemBase $bundleItem */
998  foreach ($bundleCollection as $bundleItem)
999  {
1000  $r = $bundleItem->setField('CAN_BUY', $value);
1001  if (!$r->isSuccess())
1002  {
1003  $result->addErrors($r->getErrors());
1004  }
1005  }
1006  }
1007  }
1008 
1009  return $result;
1010  }

◆ save()

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

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

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

48  {
49  $result = parent::save();
50  if (!$result->isSuccess())
51  {
52  return $result;
53  }
54 
55  if ($this->isBundleParent())
56  {
57  $bundleCollection = $this->getBundleCollection();
58  $itemsFromDb = [];
59 
60  $id = $this->getId();
61  if ($id != 0)
62  {
63  $register = Registry::getInstance(static::getRegistryType());
64  /** @var BasketBase $basketClassName */
65  $basketClassName = $register->getBasketClassName();
66 
67  $itemsFromDbList = $basketClassName::getList(
68  [
69  'select' => ['ID'],
70  'filter' => ['SET_PARENT_ID' => $id],
71  ]
72  );
73  while ($itemsFromDbItem = $itemsFromDbList->fetch())
74  {
75  if ($itemsFromDbItem['ID'] == $id)
76  continue;
77 
78  $itemsFromDb[$itemsFromDbItem['ID']] = true;
79  }
80  }
81 
82  /** @var BasketItem $bundleItem */
83  foreach ($bundleCollection as $bundleItem)
84  {
85  $parentId = (int)$bundleItem->getField('SET_PARENT_ID');
86  if ($parentId <= 0)
87  $bundleItem->setFieldNoDemand('SET_PARENT_ID', $id);
88 
89  $saveResult = $bundleItem->save();
90  if (!$saveResult->isSuccess())
91  $result->addErrors($saveResult->getErrors());
92 
93  if (isset($itemsFromDb[$bundleItem->getId()]))
94  unset($itemsFromDb[$bundleItem->getId()]);
95  }
96 
97  foreach ($itemsFromDb as $id => $value)
98  {
99  $this->deleteInternal($id);
100  }
101  }
102 
103  return $result;
104  }

◆ update()

update ( )
protected
Возвращает
Result
Исключения
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Main

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

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

183  {
184  $registry = Registry::getInstance(static::getRegistryType());
185  /** @var OrderHistory $orderHistory */
186  $orderHistory = $registry->getOrderHistoryClassName();
187 
188  /** @var BasketItemCollection $collection */
189  $collection = $this->getCollection();
190 
191  /** @var BasketBase $basket */
192  if (!$basket = $collection->getBasket())
193  {
194  throw new Main\ObjectNotFoundException('Entity "Basket" not found');
195  }
196 
197  $logFields = $this->getLoggedFields();
198 
199  $result = parent::update();
200 
201  if (!$result->isSuccess())
202  {
203  if ($basket->getOrderId() > 0)
204  {
205  $orderHistory::addAction(
206  'BASKET',
207  $basket->getOrderId(),
208  'BASKET_ITEM_UPDATE_ERROR',
209  null,
210  $this,
211  ["ERROR" => $result->getErrorMessages()]
212  );
213  }
214  }
215  else
216  {
217  $orderHistory::addLog(
218  'BASKET',
219  $basket->getOrderId(),
220  "BASKET_ITEM_UPDATE",
221  $this->getId(),
222  $this,
223  $logFields,
224  $orderHistory::SALE_ORDER_HISTORY_LOG_LEVEL_1
225  );
226 
227  $orderHistory::addAction(
228  'BASKET',
229  $basket->getOrderId(),
230  "BASKET_SAVED",
231  $this->getId(),
232  $this,
233  [],
234  $orderHistory::SALE_ORDER_HISTORY_ACTION_LOG_LEVEL_1
235  );
236  }
237 
238  return $result;
239  }

◆ updateInternal()

updateInternal (   $primary,
array  $fields 
)
protected
Аргументы
$primary
array$fields
Возвращает
Main\Entity\UpdateResult
Исключения

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

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

1060  {
1061  return Internals\BasketTable::update($primary, $fields);
1062  }

Поля

◆ TYPE_SET

const TYPE_SET = 1

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


Объявления и описания членов класса находятся в файле: