Bitrix-D7  20.0.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)
 
 getFieldValues ()
 
 setFields (array $fields)
 
 getProviderName ()
 
 getCallbackFunction ()
 
 getProviderEntity ()
 
 getProvider ()
 
 isVatInPrice ()
 
 getVat ()
 
 getInitialPrice ()
 
 getBasePriceWithVat ()
 
 getPriceWithVat ()
 
 getFinalPrice ()
 
 getId ()
 
 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 ()
 
 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=array())
 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  array("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  array(),
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 = array();
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 = array(
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  }

◆ addInternal()

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

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

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

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

◆ 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  array('#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  }

◆ 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 строка 861

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

◆ 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 строка 1068

1069  {
1070  return Internals\BasketTable::delete($primary);
1071  }

◆ 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 строка 824

825  {
826  $format = Config\Option::get('sale', 'format_quantity', 'AUTO');
827  if ($format == 'AUTO' || intval($format) <= 0)
828  {
829  $quantity = round($quantity, SALE_VALUE_PRECISION);
830  }
831  else
832  {
833  $quantity = number_format($quantity, intval($format), '.', '');
834  }
835 
836  return $quantity;
837  }

◆ 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 = array();
466  $result = array();
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"][] = array(
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 строка 842

843  {
845  }

◆ 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 строка 1077

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

◆ 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 строка 1021

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

◆ loadBundleCollectionFromDb()

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

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

574  {
576 
577  if ($this->getId() > 0)
578  {
579  return $collection->loadFromDb(array("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 = array();
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 = array(
613  'SITE_ID' => $order->getSiteId(),
614  'USER_ID' => $order->getUserId(),
615  'CURRENCY' => $order->getCurrency(),
616  );
617  }
618  else
619  {
620  $context = array(
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  }

◆ onFieldModify()

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

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

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

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

◆ 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 = array();
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  array(
69  'select' => array('ID'),
70  'filter' => array('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  array("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  array(),
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 строка 1058

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

Поля

◆ TYPE_SET

const TYPE_SET = 1

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


Объявления и описания членов класса находятся в файле:
Bitrix\Sale\BasketItem\isBundleParent
isBundleParent()
Definition: basketitem.php:431
Bitrix\Main\Localization\Loc\getMessage
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Definition: loc.php:29
Bitrix\Sale\BasketItemBase\$propertyCollection
$propertyCollection
Definition: basketitembase.php:24
Bitrix\Sale\BasketItem\getParentBasketItem
getParentBasketItem()
Definition: basketitem.php:402
Bitrix\Sale\BasketItemBase\getId
getId()
Definition: basketitembase.php:957
Bitrix\Sale\BasketItemBase\getQuantity
getQuantity()
Definition: basketitembase.php:1021
Bitrix\Sale\BasketItemBase\setField
setField($name, $value)
Definition: basketitembase.php:384
Bitrix\Sale\Registry\REGISTRY_TYPE_ORDER
const REGISTRY_TYPE_ORDER
Definition: sale/lib/registry.php:16
Bitrix\Main\ORM\Entity\$fields
$fields
Definition: main/lib/orm/entity.php:44
Bitrix\Sale\Internals\CollectableEntity\getCollection
getCollection()
Definition: collectableentity.php:46
Bitrix\Main\ORM\Entity\$primary
$primary
Definition: main/lib/orm/entity.php:35
Bitrix\Sale\Internals\CollectableEntity\isClone
isClone()
Definition: collectableentity.php:166
Bitrix\Main\Config\Option\get
static get($moduleId, $name, $default="", $siteId=false)
Returns a value of an option.
Definition: main/lib/config/option.php:29
Bitrix\Sale\Registry\getInstance
static getInstance($type)
Definition: sale/lib/registry.php:161
Bitrix\Sale\Internals\BasketTable\getMap
static getMap()
Definition: sale/lib/internals/basket.php:78
Bitrix\Sale\BasketItemBase\getField
getField($name)
Definition: basketitembase.php:464
Bitrix\Sale\BasketItemBase\getBasketCode
getBasketCode()
Definition: basketitembase.php:78
Bitrix\Sale\BasketItem\createBundleCollection
createBundleCollection()
Definition: basketitem.php:550
Bitrix\Sale\BasketItem\loadBundleCollectionFromProvider
loadBundleCollectionFromProvider()
Definition: basketitem.php:596
Bitrix\Sale\BasketItem\deleteInternal
deleteInternal($primary)
Definition: basketitem.php:1068
Bitrix\Sale\BasketItem\getBundleCollection
getBundleCollection()
Definition: basketitem.php:528
Bitrix\Sale\BasketItemBase\getPropertyCollection
getPropertyCollection()
Definition: basketitembase.php:1119
Bitrix\Currency\CurrencyManager\getBaseCurrency
static getBaseCurrency()
Return base currency.
Definition: currencymanager.php:59
Bitrix\Sale\BasketItem\loadBundleCollectionFromDb
loadBundleCollectionFromDb()
Definition: basketitem.php:573
Bitrix\Sale\Internals\CollectableEntity\$collection
$collection
Definition: collectableentity.php:16
Bitrix\Sale\BasketItemBase\$calculatedFields
$calculatedFields
Definition: basketitembase.php:27
Bitrix\Sale\Internals\ProviderCreator\create
static create(array $context)
Definition: providercreator.php:22
Bitrix\Sale\BasketItemBase\getProductId
getProductId()
Definition: basketitembase.php:966
Bitrix\Main\ORM\Entity\$name
$name
Definition: main/lib/orm/entity.php:32
Bitrix\Sale\BasketItem\getBundleBaseQuantity
getBundleBaseQuantity()
Definition: basketitem.php:455