1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
paymentitemshipment.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\Internals\CollectionFilterIterator;
12use Bitrix\Sale\PayableItem;
13use Bitrix\Sale\PayableItemCollection;
14use Bitrix\Sale\PayableShipmentItem;
15use Bitrix\Sale\PaymentCollection;
16use Bitrix\Sale\Registry;
17
19{
20 public function getPrimaryAutoWiredParameter(): ExactParameter
21 {
22 return new ExactParameter(
23 PayableShipmentItem::class,
24 'paymentItem',
25 function($className, $id) {
26
28
30 $payableItemCollection = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
31 $pi = $payableItemCollection::getList([
32 'select'=>['PAYMENT_ID'],
33 'filter'=>[
34 'ID'=>$id,
36 ],
37 ]);
38
39 if($piRow = $pi->fetch())
40 {
43 $paymentClass = $registry->getPaymentClassName();
44
45 $r = $paymentClass::getList([
46 'select'=>['ORDER_ID'],
47 'filter'=>['ID'=>$piRow['PAYMENT_ID']]
48 ]);
49
50 if($row = $r->fetch())
51 {
53 $orderClass = $registry->getOrderClassName();
54
55 $order = $orderClass::load($row['ORDER_ID']);
56 $payment = $order->getPaymentCollection()->getItemById($piRow['PAYMENT_ID']);
57 $payableItemCollection = $payment->getPayableItemCollection();
59 foreach ($payableItemCollection as $item)
60 {
61 if($item->getId() == $id)
62 {
63 return $item;
64 }
65 }
66 }
67 else
68 {
69 $this->addError(new Error('payment is not exists', 200640400001));
70 }
71 }
72
73 $this->addError(new Error('payment item is not exists', 201240400001));
74 return null;
75 }
76 );
77 }
78
79 //region Actions
80 public function getFieldsAction(): array
81 {
82 $view = $this->getViewManager()
83 ->getView($this);
84
85 return ['PAYMENT_ITEM_SHIPMENT'=>$view->prepareFieldInfos(
86 $view->getFields()
87 )];
88 }
89
90 public function getAction(PayableShipmentItem $paymentItem): array
91 {
92 return ['PAYMENT_ITEM_SHIPMENT'=>$paymentItem->toArray()];
93 }
94
105 public function listAction(PageNavigation $pageNavigation, array $select = [], array $filter = [], array $order = []): Page
106 {
107 $select = empty($select) ? ['*'] : $select;
108 $order = empty($order) ? ['ID' => 'ASC'] : $order;
109
111
114 $payableItemCollection = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
115 $paymentItems = $payableItemCollection::getList(
116 [
117 'select' => $select,
118 'filter' => $filter,
119 'order' => $order,
120 'offset' => $pageNavigation->getOffset(),
121 'limit' => $pageNavigation->getLimit(),
122 ]
123 )->fetchAll();
124
125 return new Page('PAYMENT_ITEMS_SHIPMENT', $paymentItems, function() use ($filter)
126 {
129 $payableItemCollection = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
130
131 return (int) $payableItemCollection::getList([
132 'select' => ['CNT'],
133 'filter' => $filter,
134 'runtime' => [
135 new ExpressionField('CNT', 'COUNT(ID)')
136 ]
137 ])->fetch()['CNT'];
138 });
139 }
140
141 public function addAction(array $fields): ?array
142 {
143 $result = new Result();
144 $paymentItem = null;
145
147
148 $shipmentId = (int)$fields['SHIPMENT_ID'];
149 $paymentId = (int)$fields['PAYMENT_ID'];
150
151 unset($fields['PAYMENT_ID'], $fields['SHIPMENT_ID']);
152
154 $shipmentClass = $registry->getShipmentClassName();
155
156 $r = $shipmentClass::getList([
157 'select' => ['ORDER_ID'],
158 'filter' => ['ID' => $shipmentId],
159 ]);
160
161 if ($row = $r->fetch())
162 {
164 $orderClass = $registry->getOrderClassName();
165
166 $order = $orderClass::load($row['ORDER_ID']);
167
169 $shipment = $order->getShipmentCollection()->getItemById($shipmentId);
170
171 $payment = null;
172
173 $collection = $order->getPaymentCollection();
174 if ($paymentId > 0)
175 {
176 $payment = $collection->getItemById($paymentId);
177 if ($payment)
178 {
179 $paymentItems = $payment->getPayableItemCollection()->getShipments();
180 if (!$this->isExistShipment($paymentItems, $shipment))
181 {
183 $paymentItem = $payment->getPayableItemCollection()->createItemByShipment($shipment);
184 $result = $paymentItem->setFields($fields);
185 if ($result->isSuccess() && !$result->hasWarnings())
186 {
187 $r = $this->save($paymentItem);
188 if (!$r->isSuccess())
189 {
190 $result->addErrors($r->getErrors());
191 }
192 }
193 }
194 else
195 {
196 $result->addError(new Error('Duplicate entry for key [shipmentId, paymentId]', 201250000001));
197 }
198 }
199 }
200
201 if (!$payment)
202 {
203 $result->addError(new Error('payment not exists', 201240400002));
204 }
205 }
206 else
207 {
208 $result->addError(new Error('shipment not exists', 201240400003));
209 }
210
211 if (!$result->isSuccess())
212 {
213 $this->addErrors($result->getErrors());
214 return null;
215 }
216 elseif ($result->hasWarnings())
217 {
218 $this->addErrors($result->getWarnings());
219 return null;
220 }
221 elseif ($paymentItem instanceof PayableItem)
222 {
223 return ['PAYMENT_ITEM_SHIPMENT' => $paymentItem->toArray()];
224 }
225 else
226 {
227 return ['PAYMENT_ITEM_SHIPMENT' => $paymentItem];
228 }
229 }
230
231 public function updateAction(PayableShipmentItem $paymentItem, array $fields): ?array
232 {
233 $r = $paymentItem->setFields($fields);
234
235 if($r->isSuccess() == false)
236 {
237 $this->addErrors($r->getErrors());
238 return null;
239 }
240 elseif($r->hasWarnings())
241 {
242 $this->addErrors($r->getWarnings());
243 return null;
244 }
245 else
246 {
247 $r = $this->save($paymentItem);
248 if(!$r->isSuccess())
249 {
250 $this->addErrors($r->getErrors());
251 return null;
252 }
253 else
254 {
255 return ['PAYMENT_ITEM_SHIPMENT'=>$paymentItem->toArray()];
256 }
257 }
258 }
259
260 public function deleteAction(PayableShipmentItem $paymentItem): ?bool
261 {
262 $r = $paymentItem->delete();
263
264 if($r->isSuccess() == false)
265 {
266 $this->addErrors($r->getErrors());
267 return null;
268 }
269 elseif($r->hasWarnings())
270 {
271 $this->addErrors($r->getWarnings());
272 return null;
273 }
274 else
275 {
276 $r = $this->save($paymentItem);
277 if(!$r->isSuccess())
278 {
279 $this->addErrors($r->getErrors());
280 return null;
281 }
282 else
283 {
284 return true;
285 }
286 }
287 }
288 //endregion
289
290 private function save(PayableShipmentItem $paymentItem): Result
291 {
292 $result = new Result();
294 $collectionPaymentItems = $paymentItem->getCollection();
296 $payment = $collectionPaymentItems->getPayment();
298 $collectionPayments = $payment->getCollection();
299 $order = $collectionPayments->getOrder();
300
301 $r = $order->save();
302 if(!$r->isSuccess())
303 {
304 $result->addErrors($r->getErrors());
305 }
306 elseif($r->hasWarnings())
307 {
308 $result->addErrors($r->getWarnings());
309 }
310 return $result;
311 }
312
313 protected function isExistShipment(CollectionFilterIterator $paymentItems, \Bitrix\Sale\Shipment $shipment): bool
314 {
315 foreach ($paymentItems as $paymentItem)
316 {
318 $entityShipment = $paymentItem->getEntityObject();
319 if ($shipment->getInternalIndex() === $entityShipment->getInternalIndex())
320 {
321 return true;
322 }
323 }
324 return false;
325 }
326
328 {
329 $r = new Result();
330
331 $saleModulePermissions = self::getApplication()->GetGroupRight("sale");
332 if ($saleModulePermissions < "W")
333 {
334 $r->addError(new Error('Access Denied', 200040300020));
335 }
336 return $r;
337 }
338
339 protected function checkReadPermissionEntity(): Result
340 {
341 $r = new Result();
342
343 $saleModulePermissions = self::getApplication()->GetGroupRight("sale");
344 if ($saleModulePermissions == "D")
345 {
346 $r->addError(new Error('Access Denied', 200040300010));
347 }
348 return $r;
349 }
350}
static delete($id)
Определения entity.php:317
Определения error.php:15
getAction(PayableShipmentItem $paymentItem)
Определения paymentitemshipment.php:90
deleteAction(PayableShipmentItem $paymentItem)
Определения paymentitemshipment.php:260
updateAction(PayableShipmentItem $paymentItem, array $fields)
Определения paymentitemshipment.php:231
static getInstance($type)
Определения registry.php:183
const REGISTRY_TYPE_ORDER
Определения registry.php:16
const ENTITY_PAYABLE_ITEM_COLLECTION
Определения registry.php:25
</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