34 private $isLoadForFUserId =
false;
48 isset($this->basketItemIndexMap[$code])
49 && isset($this->collection[$this->basketItemIndexMap[$code]])
52 return $this->collection[$this->basketItemIndexMap[$code]];
55 return parent::getItemByBasketCode($code);
69 if ($propertyCollection)
71 $propertyList = $propertyCollection->getPropertyValues();
91 private static function createBasketObject()
94 $basketClassName = $registry->getBasketClassName();
96 return new $basketClassName;
110 $basket = static::create(
$siteId);
114 $basket->isLoadForFUserId =
true;
117 return $basket->loadFromDb([
134 "ID",
"LID",
"MODULE",
"PRODUCT_ID",
"QUANTITY",
"WEIGHT",
135 "DELAY",
"CAN_BUY",
"PRICE",
"CUSTOM_PRICE",
"BASE_PRICE",
136 'PRODUCT_PRICE_ID',
'PRICE_TYPE_ID',
"CURRENCY",
'BARCODE_MULTI',
137 "RESERVED",
"RESERVE_QUANTITY",
"NAME",
"CATALOG_XML_ID",
138 "VAT_RATE",
"NOTES",
"DISCOUNT_PRICE",
"PRODUCT_PROVIDER_CLASS",
139 "CALLBACK_FUNC",
"ORDER_CALLBACK_FUNC",
"PAY_CALLBACK_FUNC",
140 "CANCEL_CALLBACK_FUNC",
"DIMENSIONS",
"TYPE",
"SET_PARENT_ID",
141 "DETAIL_PAGE_URL",
"FUSER_ID",
'MEASURE_CODE',
'MEASURE_NAME',
142 'ORDER_ID',
'DATE_INSERT',
'DATE_UPDATE',
'PRODUCT_XML_ID',
143 'SUBSCRIBE',
'RECOMMENDATION',
'VAT_INCLUDED',
'SORT',
144 'DATE_REFRESH',
'DISCOUNT_NAME',
'DISCOUNT_VALUE',
'DISCOUNT_COUPON',
145 'XML_ID',
'MARKING_CODE_GROUP'
151 $res = static::getList([
154 "order" => [
'SORT' =>
'ASC',
'ID' =>
'ASC'],
156 while ($item = $res->fetch())
165 $itemList[$item[
'ID']] = $item;
168 foreach ($itemList as $id => $item)
170 if ($item[
'SET_PARENT_ID'] > 0)
172 $itemList[$item[
'SET_PARENT_ID']][
'ITEMS'][$id] = &$itemList[$id];
177 foreach ($itemList as $id => $item)
179 if ($item[
'SET_PARENT_ID'] == 0)
181 $result[$id] = $item;
218 $itemSort = (int)$item->
getField(
'SORT') ?: 100;
220 if ($this->maxItemSort ===
null)
222 $this->maxItemSort = $itemSort;
226 if ($itemSort > $this->maxItemSort)
228 $this->maxItemSort = $itemSort;
232 $this->maxItemSort += 100 + $this->maxItemSort % 100;
247 $basket = static::createBasketObject();
264 foreach ($this->collection as $basketItem)
266 $orderPrice += $basketItem->getFinalPrice();
283 foreach ($this->collection as $basketItem)
302 foreach ($this->collection as $basketItem)
305 if ($basketItem->getQuantity() == 0)
310 $vatSum += $basketItem->getVat();
327 foreach ($this->collection as $basketItem)
330 if ($basketItem->getQuantity() == 0)
335 if ($basketItem->getVatRate() > $vatRate)
337 $vatRate = $basketItem->getVatRate();
355 foreach ($this->collection as $basketItem)
357 $r = $basketItem->verify();
358 if (!$r->isSuccess())
360 $result->addErrors($r->getErrors());
368 $entityMarker = $registry->getEntityMarkerClassName();
369 $entityMarker::addMarker(
$order, $basketItem, $r);
370 $order->setField(
'MARKED',
'Y');
388 foreach ($this->collection as $basketItem)
390 $orderWeight += $basketItem->getWeight() * $basketItem->getQuantity();
399 private function getOriginalItemsValues()
410 $filter[
'ORDER_ID'] =
$order->getId();
414 if ($this->isLoadForFUserId)
428 $userId =
$order->getUserId();
429 if (intval($userId) > 0)
441 $dbRes = static::getList(
443 "select" => array(
"ID",
'TYPE',
'SET_PARENT_ID',
'PRODUCT_ID',
'NAME',
'QUANTITY',
'FUSER_ID',
'ORDER_ID'),
448 while ($item = $dbRes->fetch())
450 if ((
int)$item[
'SET_PARENT_ID'] > 0 && (
int)$item[
'SET_PARENT_ID'] != $item[
'ID'])
455 $result[$item[
"ID"]] = $item;
481 $this->isSaveExecuting =
true;
488 if (!$r->isSuccess())
490 return $result->addErrors($r->getErrors());
494 if (!$r->isSuccess())
496 $this->isSaveExecuting =
false;
498 return $result->addErrors($r->getErrors());
502 $originalItemsValues = $this->getOriginalItemsValues();
505 foreach ($this->collection as $basketItem)
507 $r = $basketItem->save();
508 if (!$r->isSuccess())
510 $result->addErrors($r->getErrors());
513 if (isset($originalItemsValues[$basketItem->getId()]))
515 unset($originalItemsValues[$basketItem->getId()]);
519 if ($originalItemsValues)
521 foreach ($originalItemsValues as $id => $itemValues)
523 $this->callEventOnBeforeSaleBasketItemDeleted($itemValues);
534 if (!$r->isSuccess())
536 $result->addErrors($r->getErrors());
542 $this->isSaveExecuting =
false;
551 private function callEventOnBeforeSaleBasketItemDeleted($itemValues)
553 $itemValues[
'ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
556 $event =
new Main\Event(
'sale',
"OnBeforeSaleBasketDeleted", array(
'VALUES' => $itemValues));
566 $itemValues[
'ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
569 $event =
new Main\Event(
'sale',
"OnSaleBasketDeleted", array(
'VALUES' => $itemValues));
584 array(
'ENTITY' => $this)
588 if ($event->getResults())
591 foreach ($event->getResults() as $eventResult)
596 Main\Localization\
Loc::getMessage(
'SALE_EVENT_ON_BEFORE_BASKET_SAVED'),
597 'SALE_EVENT_ON_BEFORE_BASKET_SAVED'
599 if ($eventResultData = $eventResult->getParameters())
601 if (isset($eventResultData) && $eventResultData instanceof
ResultError)
604 $errorMsg = $eventResultData;
608 $result->addError($errorMsg);
629 if ($event->getResults())
632 foreach($event->getResults() as $eventResult)
638 'SALE_EVENT_ON_BASKET_SAVED'
640 if ($eventResultData = $eventResult->getParameters())
642 if (isset($eventResultData) && $eventResultData instanceof
ResultError)
645 $errorMsg = $eventResultData;
649 $result->addError($errorMsg);
685 if ($this->fUserId ===
null)
707 public static function getList(array $parameters = array())
731 if (!$r->isSuccess())
733 $result->addErrors($r->getErrors());
735 elseif ($r->hasWarnings())
737 $result->addWarnings($r->getWarnings());
756 $r =
$order->onBeforeBasketRefresh();
757 if (!$r->isSuccess())
763 if ($strategy ===
null)
768 $result = $strategy->refresh($this);
772 $r =
$order->onAfterBasketRefresh();
773 if (!$r->isSuccess())
779 $changedBasketItems = $result->get(
'CHANGED_BASKET_ITEMS');
780 if (!empty($changedBasketItems))
786 $r =
$order->refreshData(array(
'PRICE',
'PRICE_DELIVERY'));
787 if (!$r->isSuccess())
789 $result->addErrors($r->getErrors());
800 if (!$r->isSuccess())
802 $result->addErrors($r->getErrors());
816 $basket = static::create($this->
getSiteId());
818 if ($this->isLoadForFUserId)
825 $basket->setOrder(
$order);
834 foreach ($sortedCollection as $item)
836 if (!$item->canBuy() || $item->isDelay())
839 $item->setCollection($basket);
840 $basket->addItem($item);
885 $context[
'USER_ID'] =
$order->getUserId();
886 $context[
'SITE_ID'] =
$order->getSiteId();
887 $context[
'CURRENCY'] =
$order->getCurrency();
891 $context = parent::getContext();
905 $quantityList = array();
911 foreach ($this->collection as $basketKey => $basketItem)
913 $quantityList[$basketItem->getBasketCode()] = $basketItem->getQuantity();
916 return $quantityList;
931 $oldItem = parent::deleteItem($index);
933 unset($this->basketItemIndexMap[$oldItem->getBasketCode()]);
957 if ($this->
count() == 0 || empty($basketRows))
961 foreach ($this->collection as $basketItem)
963 if ($basketItem->isCustomPrice())
965 $basketCode = $basketItem->getBasketCode();
966 if (!isset($basketRows[$basketCode]))
969 $fields = $basketRows[$basketCode];
971 if (isset($fields[
'PRICE']) && isset($fields[
'DISCOUNT_PRICE']))
973 $fields[
'PRICE'] = (float)$fields[
'PRICE'];
974 $fields[
'DISCOUNT_PRICE'] = (float)$fields[
'DISCOUNT_PRICE'];
976 if ($fields[
'PRICE'] >= 0
977 && $basketItem->getPrice() != $fields[
'PRICE'])
980 $basketItem->setFieldNoDemand(
'PRICE', $fields[
'PRICE']);
983 if ($basketItem->getDiscountPrice() != $fields[
'DISCOUNT_PRICE'])
986 $basketItem->setFieldNoDemand(
'DISCOUNT_PRICE', $fields[
'DISCOUNT_PRICE']);
989 if (isset($fields[
'DISCOUNT_VALUE']))
990 $basketItem->setFieldNoDemand(
'DISCOUNT_VALUE', $fields[
'DISCOUNT_VALUE']);
993 unset($fields, $basketCode, $basketItem);
1006 if ($cloneEntity ===
null)
1008 $cloneEntity = new \SplObjectStorage();
1012 $basketClone = parent::createClone($cloneEntity);
1016 if ($cloneEntity->contains($this->order))
1022 return $basketClone;
1039 if($this->order !==
null)
1044 $basket = static::create($this->siteId);
1046 foreach($this as $originalItem)
1048 $item = $basket->createItem($originalItem->getField(
"MODULE"), $originalItem->getProductId());
1049 $item->initFields($originalItem->getFields()->getValues());
1068 $basket = static::createBasketObject();
1069 $basket->setOrder(
$order);
1070 $basket->setSiteId(
$order->getSiteId());
1072 return $basket->loadFromDb(array(
"ORDER_ID" =>
$order->getId()));
1090 $basketItem = parent::addItem($basketItem);
1092 $this->basketItemIndexMap[$basketItem->getBasketCode()] = $basketItem->getInternalIndex();
1096 $basketItem->setCollection($this);
1115 if ($refreshItem !==
null)
1124 return $this->
refresh($strategy);
Exception is thrown when the type of an argument is not accepted by function.
static loadMessages($file)
Loads language messages for specified file in a lazy way.
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Exception is thrown when operation is not implemented but should be.
Base class for fatal exceptions.
static createSingle($basketItemCode)
static create($type='', $params=null)
callEventOnSaleBasketSaved()
callEventOnSaleBasketBeforeSaved()
applyDiscount(array $basketRows)
Apply the result of the discounts to the basket.
setSiteId($siteId)
Setting site ID to basket.
getVatSum()
Getting the value of the tax basket.
refresh(RefreshStrategy $strategy=null)
refreshData($select=array(), BasketItemBase $refreshItem=null)
getPrice()
Getting basket price with discounts and taxes.
getSiteId()
Getting Site ID.
getItemByBasketCode($code)
getExistsItemByItem(BasketItemBase $item)
getOrder()
Getting the object of the order.
loadFromDb(array $filter)
static getList(array $parameters=array())
static loadItemsForFUser($fUserId, $siteId)
deleteInternal(array $itemValues)
addItem(Internals\CollectableEntity $basketItem)
getQuantityList()
Getting a list of a count of elements in the basket.
static loadItemsForOrder(OrderBase $order)
verifyItemSort(BasketItemBase $item)
setFUserId($fUserId)
Setting Customer ID to basket.
callEventOnSaleBasketItemDeleted($itemValues)
static deleteNoDemand($idOrder)
setOrder(OrderBase $order)
Attach to the essence of the object of the order basket.
getWeight()
Getting the weight basket.
getFUserId($skipCreate=false)
Getting Customer ID.
getBasePrice()
Getting basket price without discounts.
copy()
Returns copy of current basket.
onItemModify(Internals\CollectableEntity $item, $name=null, $oldValue=null, $value=null)
getVatRate()
Getting the value of the tax rate basket.
createClone(\SplObjectStorage $cloneEntity=null)
setFieldNoDemand($name, $value)
loadFromArray(array $itemList)
getExistsItem($moduleId, $productId, array $properties=array())
const EVENT_ON_BASKET_BEFORE_SAVED
const EVENT_ON_BASKET_SAVED
static getId($skipCreate=false)
Return fuserId.
static getIdByUserId($userId)
Return fuserId for user.
count()
Count elements of an object.
doFinalAction($hasMeaningfulField=false)
isStartField($isMeaningfulField=false)
static roundPrecision($value)
static getInstance($type)