1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
basket.php
См. документацию.
1<?php
8namespace Bitrix\Sale;
9
10use Bitrix\Main\Localization\Loc;
11use Bitrix\Sale\Internals;
12use Bitrix\Main;
13
14Loc::loadMessages(__FILE__);
15
20class Basket extends BasketBase
21{
22 const BASKET_DELETE_LIMIT = 2000;
23
27 public static function getRegistryType()
28 {
30 }
31
37 public static function getList(array $parameters = array())
38 {
39 return Internals\BasketTable::getList($parameters);
40 }
41
49 public static function deleteNoDemand($idOrder)
50 {
51 $result = new Result();
52
53 $itemsDataList = static::getList(
54 array(
55 "filter" => array("=ORDER_ID" => $idOrder),
56 "select" => array("ID", "TYPE")
57 )
58 );
59
61 $itemClassName = static::getItemCollectionClassName();
62 while ($item = $itemsDataList->fetch())
63 {
64 if ($item['TYPE'] === $itemClassName::TYPE_SET)
65 {
67 }
68 else
69 {
70 $r = Internals\BasketTable::deleteWithItems($item['ID']);
71 }
72
73 if (!$r->isSuccess())
74 {
75 $result->addErrors($r->getErrors());
76 }
77 }
78
79 return $result;
80 }
81
87 public static function deleteOld($days): int
88 {
89 $days = (int)$days;
90
92 $helper = $connection->getSqlHelper();
93
94 $query = $helper->prepareDeleteLimit(
95 Internals\BasketTable::getTableName(),
96 ['ID'],
97 "
98 FUSER_ID IN (
99 SELECT b_sale_fuser.ID FROM b_sale_fuser WHERE
100 b_sale_fuser.DATE_UPDATE < " . $helper->addDaysToDateTime(-$days) . "
101 AND b_sale_fuser.USER_ID IS NULL
102 ) AND ORDER_ID IS NULL
103 ",
104 [],
105 static::BASKET_DELETE_LIMIT
106 );
107
108 $connection->queryExecute($query);
109 $affectRows = $connection->getAffectedRowsCount();
110
111 $query = $helper->prepareDeleteLimit(
112 Internals\BasketTable::getTableName(),
113 ['ID'],
114 "
115 FUSER_ID NOT IN (SELECT b_sale_fuser.ID FROM b_sale_fuser)
116 AND ORDER_ID IS NULL
117 ",
118 [],
119 static::BASKET_DELETE_LIMIT
120 );
121
122 $connection->queryExecute($query);
123 $affectRows = max($affectRows, $connection->getAffectedRowsCount());
124
125 $query = $helper->prepareDeleteLimit(
127 ['ID'],
128 "
129 BASKET_ID NOT IN (
130 SELECT b_sale_basket.ID FROM b_sale_basket
131 )
132 ",
133 [],
134 static::BASKET_DELETE_LIMIT
135 );
136
137 $connection->queryExecute($query);
138
139 return max($affectRows, $connection->getAffectedRowsCount());
140 }
141
147 public static function deleteOldAgent($days, $speed = 0)
148 {
149 $days = (int)$days;
150
151 $affectRows = static::deleteOld($days);
152 Fuser::deleteOld($days);
153
154 $days = (int)Main\Config\Option::get('sale', 'delete_after');
155 $result = "\Bitrix\Sale\Basket::deleteOldAgent(" . $days . ");";
156
157 if ($affectRows === static::BASKET_DELETE_LIMIT)
158 {
159 global $pPERIOD;
160 $pPERIOD = 300;
161 }
162
163 return $result;
164 }
165
172 // must be moved to notify
173 public function getListOfFormatText()
174 {
175 $list = array();
176
178 $basketItemClassName = static::getItemCollectionClassName();
179
181 foreach ($this->collection as $basketItem)
182 {
183 $basketItemData = $basketItem->getField("NAME");
184
186 if ($basketPropertyCollection = $basketItem->getPropertyCollection())
187 {
188 $basketItemDataProperty = "";
190 foreach ($basketPropertyCollection as $basketPropertyItem)
191 {
192 if ($basketPropertyItem->getField('CODE') == "PRODUCT.XML_ID"
193 || $basketPropertyItem->getField('CODE') == "CATALOG.XML_ID"
194 || $basketPropertyItem->getField('CODE') == "SUM_OF_CHARGE"
195 )
196 {
197 continue;
198 }
199
200 if (strval(trim($basketPropertyItem->getField('VALUE'))) == "")
201 continue;
202
203
204 $basketItemDataProperty .= (!empty($basketItemDataProperty) ? "; " : "").trim($basketPropertyItem->getField('NAME')).": ".trim($basketPropertyItem->getField('VALUE'));
205 }
206
207 if (!empty($basketItemDataProperty))
208 $basketItemData .= " [".$basketItemDataProperty."]";
209 }
210
211 $measure = (strval($basketItem->getField("MEASURE_NAME")) != '') ? $basketItem->getField("MEASURE_NAME") : Loc::getMessage("SOA_SHT");
212 $list[$basketItem->getBasketCode()] = $basketItemData." - ".$basketItemClassName::formatQuantity($basketItem->getQuantity())." ".$measure." x ".SaleFormatCurrency($basketItem->getPrice(), $basketItem->getCurrency());
213
214 }
215
216 return !empty($list) ? $list : false;
217 }
218
224 public function save()
225 {
226 $result = parent::save();
227
228 $orderId = $this->getOrderId();
229 if ($orderId > 0)
230 {
231 $registry = Registry::getInstance(static::getRegistryType());
232
234 $orderHistory = $registry->getOrderHistoryClassName();
235 $orderHistory::collectEntityFields('BASKET', $orderId);
236 }
237
238 return $result;
239 }
240
248 protected function deleteInternal(array $itemValues)
249 {
250 $result = new Result();
251
253 $itemClassName = static::getItemCollectionClassName();
254 if ($itemValues['TYPE'] == $itemClassName::TYPE_SET)
255 {
256 $r = Internals\BasketTable::deleteBundle($itemValues['ID']);
257 }
258 else
259 {
260 $r = Internals\BasketTable::deleteWithItems($itemValues['ID']);
261 }
262
263 if (!$r->isSuccess())
264 {
265 $result->addErrors($r->getErrors());
266 }
267
268 $orderId = $this->getOrderId();
269 if ($orderId > 0)
270 {
271 $registry = Registry::getInstance(static::getRegistryType());
272
274 $orderHistory = $registry->getOrderHistoryClassName();
275 $orderHistory::addLog(
276 'BASKET',
277 $orderId,
278 'BASKET_ITEM_DELETED',
279 $itemValues['ID'],
280 null,
281 array(
282 "PRODUCT_ID" => $itemValues["PRODUCT_ID"],
283 "NAME" => $itemValues["NAME"],
284 "QUANTITY" => $itemValues["QUANTITY"],
285 ),
286 $orderHistory::SALE_ORDER_HISTORY_LOG_LEVEL_1
287 );
288 }
289
290 return $result;
291 }
292
298 protected function callEventOnSaleBasketItemDeleted($itemValues)
299 {
300 parent::callEventOnSaleBasketItemDeleted($itemValues);
301
302 $orderId = $this->getOrderId();
303 if ($orderId > 0)
304 {
305 $registry = Registry::getInstance(static::getRegistryType());
306
308 $orderHistory = $registry->getOrderHistoryClassName();
309 $orderHistory::addAction(
310 'BASKET',
311 $orderId,
312 'BASKET_REMOVED',
313 $itemValues['ID'],
314 null,
315 array(
316 'NAME' => $itemValues['NAME'],
317 'QUANTITY' => $itemValues['QUANTITY'],
318 'PRODUCT_ID' => $itemValues['PRODUCT_ID'],
319 )
320 );
321
323 $entityMarker = $registry->getEntityMarkerClassName();
324 $entityMarker::deleteByFilter(array(
325 '=ORDER_ID' => $orderId,
326 '=ENTITY_TYPE' => $entityMarker::ENTITY_TYPE_BASKET_ITEM,
327 '=ENTITY_ID' => $itemValues['ID'],
328 ));
329 }
330 }
331
344 public function deleteItem($index)
345 {
347 if ($order = $this->getOrder())
348 {
350 $item = $this->getItemByIndex($index);
351
352 $order->onBeforeBasketItemDelete($item);
353 }
354
355 return parent::deleteItem($index);
356 }
357
358}
$connection
Определения actionsdefinitions.php:38
static getConnection($name="")
Определения application.php:638
getOrder()
Определения query.php:457
callEventOnSaleBasketItemDeleted($itemValues)
Определения basketbase.php:563
const BASKET_DELETE_LIMIT
Определения basket.php:22
static getList(array $parameters=array())
Определения basket.php:37
static deleteOldAgent($days, $speed=0)
Определения basket.php:147
static deleteOld($days)
Определения basket.php:87
static getRegistryType()
Определения basket.php:27
static deleteOld($days)
Определения fuser.php:205
static deleteBundle($id)
Определения basket.php:42
static getInstance($type)
Определения registry.php:183
const REGISTRY_TYPE_ORDER
Определения registry.php:16
$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
$result
Определения get_property_values.php:14
$query
Определения get_search.php:11
SaleFormatCurrency($fSum, $strCurrency, $OnlyValue=false, $withoutFormat=false)
Определения include.php:142