1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
paymentitembasket.php
См. документацию.
1<?php
2
3namespace Bitrix\Sale\Controller;
4
5use Bitrix\Main\Engine\AutoWire\ExactParameter;
6use Bitrix\Main\Engine\Response\DataType\Page;
7use Bitrix\Main\Entity\ExpressionField;
8use Bitrix\Main\Error;
9use Bitrix\Main\Result;
10use Bitrix\Main\UI\PageNavigation;
11use Bitrix\Sale\Basket;
12use Bitrix\Sale\BasketItem;
13use Bitrix\Sale\Internals\CollectionFilterIterator;
14use Bitrix\Sale\PayableBasketItem;
15use Bitrix\Sale\PayableItem;
16use Bitrix\Sale\PayableItemCollection;
17use Bitrix\Sale\PaymentCollection;
18use Bitrix\Sale\Registry;
19
21{
22 public function getPrimaryAutoWiredParameter(): ExactParameter
23 {
24 return new ExactParameter(
25 PayableBasketItem::class,
26 'paymentItem',
27 function($className, $id)
28 {
30
32 $payableItemCollection = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
33 $pi = $payableItemCollection::getList([
34 'select'=>['PAYMENT_ID'],
35 'filter'=>[
36 'ID'=>$id,
38 ],
39 ]);
40
41 if ($piRow = $pi->fetch())
42 {
45 $paymentClass = $registry->getPaymentClassName();
46
47 $r = $paymentClass::getList([
48 'select'=>['ORDER_ID'],
49 'filter'=>['ID'=>$piRow['PAYMENT_ID']]
50 ]);
51
52 if($row = $r->fetch())
53 {
55 $orderClass = $registry->getOrderClassName();
56
57 $order = $orderClass::load($row['ORDER_ID']);
58 $payment = $order->getPaymentCollection()->getItemById($piRow['PAYMENT_ID']);
59 $payableItemCollection = $payment->getPayableItemCollection();
61 foreach ($payableItemCollection as $item)
62 {
63 if($item->getId() == $id)
64 {
65 return $item;
66 }
67 }
68 }
69 else
70 {
71 $this->addError(new Error('payment is not exists', 200640400001));
72 }
73 }
74
75 $this->addError(new Error('payment item is not exists', 201240400001));
76
77 return null;
78 }
79 );
80 }
81
82 //region Actions
83 public function getFieldsAction(): array
84 {
85 $view = $this->getViewManager()
86 ->getView($this);
87
88 return ['PAYMENT_ITEM_BASKET'=>$view->prepareFieldInfos(
89 $view->getFields()
90 )];
91 }
92
93 public function getAction(PayableBasketItem $paymentItem): array
94 {
95 return ['PAYMENT_ITEM_BASKET'=>$paymentItem->toArray()];
96 }
97
98 public function listAction(PageNavigation $pageNavigation, array $select = [], array $filter = [], array $order = []): Page
99 {
100 $select = empty($select) ? ['*'] : $select;
101 $order = empty($order) ? ['ID'=>'ASC'] : $order;
102
103 $filter['ENTITY_TYPE'] = PayableBasketItem::getEntityType();
104
107 $payableItemCollection = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
108 $paymentItems = $payableItemCollection::getList(
109 [
110 'select' => $select,
111 'filter' => $filter,
112 'order' => $order,
113 'offset' => $pageNavigation->getOffset(),
114 'limit' => $pageNavigation->getLimit(),
115 ]
116 )->fetchAll();
117
118 return new Page('PAYMENT_ITEMS_BASKET', $paymentItems, function() use ($filter)
119 {
122 $payableItemCollection = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
123
124 return (int) $payableItemCollection::getList([
125 'select' => ['CNT'],
126 'filter'=>$filter,
127 'runtime' => [
128 new ExpressionField('CNT', 'COUNT(ID)')
129 ]
130 ])->fetch()['CNT'];
131 });
132 }
133
134 public function addAction(array $fields): ?array
135 {
136 $result = new Result();
137 $paymentItem = null;
138
140
141 $basketId = $fields['BASKET_ID'];
142 $paymentId = $fields['PAYMENT_ID'];
143
144 unset($fields['PAYMENT_ID'], $fields['BASKET_ID']);
145
147 $basketClass = $registry->getBasketClassName();
148
149 $r = $basketClass::getList([
150 'select'=>['ORDER_ID'],
151 'filter'=>['ID'=>$basketId]
152 ]);
153
154 if($row = $r->fetch())
155 {
157 $orderClass = $registry->getOrderClassName();
158
159 $orderId = (int)$row['ORDER_ID'];
160 if ($orderId > 0)
161 {
162 $order = $orderClass::load($orderId);
163 $basketItem = $order->getBasket()->getItemByBasketCode($basketId);
164 if ($basketItem instanceof BasketItem)
165 {
167 $collection = $order->getPaymentCollection();
168 $payment = $collection->getItemById($paymentId);
169 if ($payment instanceof \Bitrix\Sale\Payment)
170 {
171 $paymentItems = $payment->getPayableItemCollection()->getBasketItems();
172 if ($this->isExistBasketItem($paymentItems, $basketItem) == false)
173 {
175 $paymentItem = $payment->getPayableItemCollection()->createItemByBasketItem($basketItem);
176 $result = $paymentItem->setFields($fields);
177 if ($result->isSuccess() && $result->hasWarnings() == false)
178 {
179 $r = $this->save($paymentItem);
180 if (!$r->isSuccess())
181 {
182 $result->addErrors($r->getErrors());
183 }
184 }
185 }
186 else
187 {
188 $result->addError(new Error('Duplicate entry for key [basketId, paymentId]', 201250000001));
189 }
190 }
191 else
192 {
193 $result->addError(new Error('payment not exists', 201240400002));
194 }
195 }
196 }
197 else
198 {
199 $result->addError(new Error('basket item is not linked to the order', 201240400004));
200 }
201 }
202 else
203 {
204 $result->addError(new Error('basket item not exists', 201240400003));
205 }
206
207 if(!$result->isSuccess())
208 {
209 $this->addErrors($result->getErrors());
210 return null;
211 }
212 elseif($result->hasWarnings())
213 {
214 $this->addErrors($result->getWarnings());
215 return null;
216 }
217 elseif($paymentItem instanceof PayableItem)
218 {
219 return ['PAYMENT_ITEM_BASKET'=>$paymentItem->toArray()];
220 }
221 else
222 {
223 return ['PAYMENT_ITEM_BASKET'=>$paymentItem];
224 }
225 }
226
227 public function updateAction(PayableBasketItem $paymentItem, array $fields): ?array
228 {
229 $r = $paymentItem->setFields($fields);
230
231 if($r->isSuccess() == false)
232 {
233 $this->addErrors($r->getErrors());
234 return null;
235 }
236 elseif($r->hasWarnings())
237 {
238 $this->addErrors($r->getWarnings());
239 return null;
240 }
241 else
242 {
243 $r = $this->save($paymentItem);
244 if(!$r->isSuccess())
245 {
246 $this->addErrors($r->getErrors());
247 return null;
248 }
249 else
250 {
251 return ['PAYMENT_ITEM_BASKET'=>$paymentItem->toArray()];
252 }
253 }
254 }
255
256 public function deleteAction(PayableBasketItem $paymentItem): ?bool
257 {
258 $r = $paymentItem->delete();
259
260 if($r->isSuccess() == false)
261 {
262 $this->addErrors($r->getErrors());
263 return null;
264 }
265 elseif($r->hasWarnings())
266 {
267 $this->addErrors($r->getWarnings());
268 return null;
269 }
270 else
271 {
272 $r = $this->save($paymentItem);
273 if(!$r->isSuccess())
274 {
275 $this->addErrors($r->getErrors());
276 return null;
277 }
278 else
279 {
280 return true;
281 }
282 }
283 }
284 //endregion
285
286 private function save(PayableBasketItem $paymentItem): Result
287 {
288 $result = new Result();
290 $collectionPaymentItems = $paymentItem->getCollection();
292 $payment = $collectionPaymentItems->getPayment();
294 $collectionPayments = $payment->getCollection();
295 $order = $collectionPayments->getOrder();
296
297 $r = $order->save();
298 if(!$r->isSuccess())
299 {
300 $result->addErrors($r->getErrors());
301 }
302 elseif($r->hasWarnings())
303 {
304 $result->addErrors($r->getWarnings());
305 }
306 return $result;
307 }
308
309 protected function isExistBasketItem(CollectionFilterIterator $paymentItems, BasketItem $basketItem): bool
310 {
311 foreach ($paymentItems as $paymentItem)
312 {
314 $entityBasketItem = $paymentItem->getEntityObject();
315 if($entityBasketItem->getBasketCode() === $basketItem->getBasketCode())
316 {
317 return true;
318 }
319 }
320 return false;
321 }
322
324 {
325 $r = new Result();
326
327 $saleModulePermissions = self::getApplication()->GetGroupRight("sale");
328 if ($saleModulePermissions < "W")
329 {
330 $r->addError(new Error('Access Denied', 200040300020));
331 }
332 return $r;
333 }
334
335 protected function checkReadPermissionEntity(): Result
336 {
337 $r = new Result();
338
339 $saleModulePermissions = self::getApplication()->GetGroupRight("sale");
340 if ($saleModulePermissions == "D")
341 {
342 $r->addError(new Error('Access Denied', 200040300010));
343 }
344 return $r;
345 }
346}
static delete($id)
Определения entity.php:317
Определения error.php:15
updateAction(PayableBasketItem $paymentItem, array $fields)
Определения paymentitembasket.php:227
getAction(PayableBasketItem $paymentItem)
Определения paymentitembasket.php:93
deleteAction(PayableBasketItem $paymentItem)
Определения paymentitembasket.php:256
static getEntityType()
Определения payablebasketitem.php:20
static getInstance($type)
Определения registry.php:183
const REGISTRY_TYPE_ORDER
Определения registry.php:16
const ENTITY_PAYABLE_ITEM_COLLECTION
Определения registry.php:25
$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
$select
Определения iblock_catalog_list.php:194
$filter
Определения iblock_catalog_list.php:54
Определения aliases.php:54
addErrors(array $errors)
Определения error.php:41
trait Error
Определения error.php:11
$payment
Определения payment.php:14
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$saleModulePermissions
Определения tools.php:21
$fields
Определения yandex_run.php:501