1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
basketbuilderrest.php
См. документацию.
1<?php
2
3
4namespace Bitrix\Sale\Helpers\Order\Builder;
5use Bitrix\Main\Error;
6use Bitrix\Sale\Basket\RefreshFactory;
7use Bitrix\Sale\BasketItem;
8use Bitrix\Sale\BasketPropertyItemBase;
9
16{
17 protected function getDelegate($orderId)
18 {
19 return (int)$orderId > 0 ? new BasketBuildeRestExist($this) : new BasketBuilderNew($this);
20 }
21
22 public static function isBasketItemNew($basketCode)
23 {
24 return (mb_strpos($basketCode, 'n') === 0);
25 }
26 // переопределяем родительский метод,
27 // как временное решение т.к. в админке не поддерживается работа с корзиной в которой одинаковый товар
28 protected function getExistsItem($moduleId, $productId, array $properties = array())
29 {
30 return null;
31 }
32
34 {
35 return $this;
36 }
37
38 public function itemsDataPreparation()
39 {
40 foreach($this->formData["PRODUCT"] as $basketCode => $productData)
41 {
42 if (($productData['IS_SET_ITEM'] ?? null) === 'Y')
43 {
44 continue;
45 }
46
47 if(!isset($productData["PROPS"]) || !is_array($productData["PROPS"]))
48 $productData["PROPS"] = array();
49
50 if(self::isBasketItemNew($basketCode) == true)
51 {
52 $item = $this->createItem($basketCode, $productData);
53 }
54 else
55 {
57 $item = $this->getItemFromBasket($basketCode, $productData);
58
59 if(is_null($item))
60 {
61 $this->builder->getErrorsContainer()->addError(new Error('basketItem - is not exists ['.$basketCode.']'));
62 throw new BuildingException();
63 }
64 }
65
66 foreach ($productData["PROPS"] as &$prop)
67 {
68 unset($prop['BASKET_ID']); // bug \Bitrix\Sale\BasketPropertiesCollectionBase::redefine()
69 }
70
71 if(!empty($productData["PROPS"]) && is_array($productData["PROPS"]))
72 {
74 $property = $item->getPropertyCollection();
75
76 if(!$property->isPropertyAlreadyExists($productData["PROPS"]))
77 $property->setProperty($productData["PROPS"]);
78 }
79 }
80
81 return $this;
82 }
83
84 public function basketCodeMap()
85 {
86 return $this;
87 }
88
89 public function setItemsFields()
90 {
91 $basket = $this->getBasket();
92
94 foreach ($basket as $basketItem)
95 {
96 $basketCode = $basketItem->getBasketCode();
97 if(isset($this->formData['PRODUCT'][$basketCode]))
98 {
99 $itemFields = $this->formData['PRODUCT'][$basketCode];
100
101 if(isset($itemFields['OFFER_ID']))
102 {
103 $itemFields['PRODUCT_ID'] = $itemFields['OFFER_ID'];
104 }
105
106 if(isset($itemFields['PRICE']))
107 {
108 $itemFields['CUSTOM_PRICE'] = 'Y';
109 }
110
111 $fields = array_intersect_key($itemFields, array_flip($basketItem::getAvailableFields()));
112
113 $r = $basketItem->setFields($fields);
114 if($r->isSuccess() == false)
115 {
116 $this->getErrorsContainer()->addErrors($r->getErrors());
117 throw new BuildingException();
118 }
119 }
120 }
121
122 return $this;
123 }
124
125 public function finalActions()
126 {
127 $basket = $this->getBasket();
128
130 foreach ($basket as $basketItem)
131 {
132 if(self::isBasketItemNew($basketItem->getBasketCode()))
133 {
134 $strategy = RefreshFactory::createSingle($basketItem->getBasketCode());
135 $basket->refresh($strategy);
136 }
137 }
138 return $this;
139 }
140}
Определения error.php:15
createItem($basketCode, &$productData)
Определения basketbuilder.php:820
getExistsItem($moduleId, $productId, array $properties=array())
Определения basketbuilderrest.php:28
$orderId
Определения payment.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$moduleId
$fields
Определения yandex_run.php:501