1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
payableitemcollection.php
См. документацию.
1<?php
2
3namespace Bitrix\Sale;
4
5use Bitrix\Main;
6use Bitrix\Sale\Internals\CollectableEntity;
7
9
15{
16 protected $payment;
17
21 protected function getEntityParent()
22 {
23 return $this->getPayment();
24 }
25
29 public function getPayment() : Payment
30 {
31 return $this->payment;
32 }
33
39 protected static function createCollectionObject()
40 {
41 $registry = Registry::getInstance(static::getRegistryType());
42 $className = $registry->get(Registry::ENTITY_PAYABLE_ITEM_COLLECTION);
43
44 return new $className();
45 }
46
50 public static function getRegistryType()
51 {
53 }
54
58 public function setPayment(Payment $payment)
59 {
60 $this->payment = $payment;
61 }
62
67 public static function load(Payment $payment)
68 {
69 $collection = static::createCollectionObject();
70 $collection->setPayment($payment);
71
72 if ($payment->getId() > 0)
73 {
74 $registry = Registry::getInstance(static::getRegistryType());
75
78
79 $items = $entity::loadForPayment($payment->getId());
80 foreach ($items as $item)
81 {
82 $item->setCollection($collection);
83 $collection->bindItem($item);
84 }
85
88
89 $items = $entity::loadForPayment($payment->getId());
90 foreach ($items as $item)
91 {
92 $item->setCollection($collection);
93 $collection->bindItem($item);
94 }
95 }
96
97 return $collection;
98 }
99
107 public static function getList(array $parameters = array())
108 {
109 return Internals\PayableItemTable::getList($parameters);
110 }
111
113 {
114 if (!$item instanceof PayableItem)
115 {
116 throw new Main\SystemException(
117 Main\Localization\Loc::getMessage(
118 'SALE_PAYABLE_ITEM_COLLECTION_INCOMPATIBLE_ITEM_TYPE',
119 ['#CLASS#' => PayableItem::class]
120 )
121 );
122 }
123
124 return parent::bindItem($item);
125 }
126
136 public function createItemByBasketItem(BasketItem $basketItem) : PayableBasketItem
137 {
139 foreach ($this->getBasketItems() as $item)
140 {
141 $payableBasketItem = $item->getEntityObject();
142 if (
143 $payableBasketItem
144 && $basketItem->getBasketCode() === $payableBasketItem->getBasketCode())
145 {
146 return $item;
147 }
148 }
149
150 $registry = Registry::getInstance(static::getRegistryType());
151
153 $payableItemClass = $registry->get(Registry::ENTITY_PAYABLE_BASKET_ITEM);
154
156 $payableItem = $payableItemClass::create($this, $basketItem);
157 $this->addItem($payableItem);
158
159 return $payableItem;
160 }
161
162 public function onBeforeBasketItemDelete(BasketItem $basketItem)
163 {
164 $result = new Result();
165
167 foreach ($this->getBasketItems() as $item)
168 {
170 $entity = $item->getEntityObject();
171 if ($entity->getBasketCode() === $basketItem->getBasketCode())
172 {
173 $r = $item->delete();
174 if (!$r->isSuccess())
175 {
176 $result->addErrors($r->getErrors());
177 }
178 }
179 }
180
181 return $result;
182 }
183
192 public function createItemByShipment(Shipment $shipment) : PayableShipmentItem
193 {
195 foreach ($this->getShipments() as $item)
196 {
197 if ($shipment->getInternalIndex() === $item->getEntityObject()->getInternalIndex())
198 {
199 return $item;
200 }
201 }
202
203 $registry = Registry::getInstance(static::getRegistryType());
204
206 $payableItemClass = $registry->get(Registry::ENTITY_PAYABLE_SHIPMENT);
207
209 $payableItem = $payableItemClass::create($this, $shipment);
210 $this->addItem($payableItem);
211
212 return $payableItem;
213 }
214
219 {
220 $callback = function (PayableItem $entity)
221 {
222 return $entity instanceof PayableBasketItem;
223 };
224
225 return new Internals\CollectionFilterIterator($this->getIterator(), $callback);
226 }
227
232 {
233 $callback = function (PayableItem $entity)
234 {
235 return $entity instanceof PayableShipmentItem;
236 };
237
238 return new Internals\CollectionFilterIterator($this->getIterator(), $callback);
239 }
240
248 public function save()
249 {
250 $result = new Result();
251
252 $dbRes = static::getList([
253 'filter' => ['PAYMENT_ID' => $this->getPayment()->getId()]
254 ]);
255
256 while ($item = $dbRes->fetch())
257 {
258 if (!$this->getItemById($item['ID']))
259 {
260 static::deleteInternal($item['ID']);
261 }
262 }
263
265 foreach ($this->collection as $entity)
266 {
267 $r = $entity->save();
268 if (!$r->isSuccess())
269 {
270 $result->addErrors($r->getErrors());
271 }
272 }
273
274 $this->clearChanged();
275
276 return $result;
277 }
278
288 public static function deleteNoDemand($paymentId)
289 {
290 $result = new Result();
291
292 $dbRes = static::getList([
293 "filter" => ["=PAYMENT_ID" => $paymentId],
294 "select" => ["ID"]
295 ]);
296
297 while ($entity = $dbRes->fetch())
298 {
299 $r = static::deleteInternal($entity['ID']);
300 if (!$r->isSuccess())
301 {
302 $result->addErrors($r->getErrors());
303 }
304 }
305
306 return $result;
307 }
308
314 protected static function deleteInternal($primary)
315 {
316 return Internals\PayableItemTable::delete($primary);
317 }
318
325 public function createClone(\SplObjectStorage $cloneEntity)
326 {
327 if ($this->isClone() && $cloneEntity->contains($this))
328 {
329 return $cloneEntity[$this];
330 }
331
333 $payableItemCollection = parent::createClone($cloneEntity);
334
335 if ($this->payment)
336 {
337 if ($cloneEntity->contains($this->payment))
338 {
339 $payableItemCollection->payment = $cloneEntity[$this->payment];
340 }
341 }
342
343 return $payableItemCollection;
344 }
345}
static loadMessages($file)
Определения loc.php:65
static getList(array $parameters=array())
Определения datamanager.php:431
static delete($primary)
Определения datamanager.php:1644
static getList(array $parameters=array())
Определения payableitemcollection.php:107
bindItem(CollectableEntity $item)
Определения payableitemcollection.php:112
setPayment(Payment $payment)
Определения payableitemcollection.php:58
static deleteInternal($primary)
Определения payableitemcollection.php:314
static deleteNoDemand($paymentId)
Определения payableitemcollection.php:288
Определения payment.php:19
const ENTITY_PAYABLE_BASKET_ITEM
Определения registry.php:23
static getInstance($type)
Определения registry.php:183
const ENTITY_PAYABLE_SHIPMENT
Определения registry.php:24
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
$entity
$payment
Определения payment.php:14
$items
Определения template.php:224
$dbRes
Определения yandex_detail.php:168