Bitrix-D7  20.0.0
Класс PaymentCollection
Граф наследования:PaymentCollection:
EntityCollection CollectionBase

Открытые члены

 createItem (Service $service=null)
 
 addItem (Internals\CollectableEntity $payment)
 
 deleteItem ($index)
 
 onItemModify (Internals\CollectableEntity $item, $name=null, $oldValue=null, $value=null)
 
 isPaid ()
 
 onOrderModify ($name, $oldValue, $value)
 
 setOrder (Order $order)
 
 getOrder ()
 
 getPaidSum ()
 
 getSum ()
 
 hasPaidPayment ()
 
 hasUnpaidPayment ()
 
 save ()
 
 getInnerPayment ()
 
 createInnerPayment ()
 
 isExistsInnerPayment ()
 
 verify ()
 
 createClone (\SplObjectStorage $cloneEntity)
 
 isMarked ()
 Is the entire collection of marked. Подробнее...
 
- Открытые члены унаследованные от EntityCollection
 onItemModify (CollectableEntity $item, $name=null, $oldValue=null, $value=null)
 
 clearCollection ()
 
 getItemById ($id)
 
 getIndexById ($id)
 
 getItemByIndex ($index)
 
 isStartField ($isMeaningfulField=false)
 
 clearStartField ()
 
 hasMeaningfulField ()
 
 doFinalAction ($hasMeaningfulField=false)
 
 isMathActionOnly ()
 
 setMathActionOnly ($value=false)
 
 isChanged ()
 
 isClone ()
 
 isAnyItemDeleted ()
 
 clearChanged ()
 
- Открытые члены унаследованные от CollectionBase
 getIterator ()
 
 offsetExists ($offset)
 Whether a offset exists. Подробнее...
 
 offsetGet ($offset)
 Offset to retrieve. Подробнее...
 
 offsetSet ($offset, $value)
 Offset to set. Подробнее...
 
 offsetUnset ($offset)
 Offset to unset. Подробнее...
 
 count ()
 Count elements of an object. Подробнее...
 
 current ()
 Return the current element. Подробнее...
 
 next ()
 Move forward to next element. Подробнее...
 
 key ()
 Return the key of the current element. Подробнее...
 
 valid ()
 Checks if current position is valid. Подробнее...
 
 rewind ()
 Rewind the Iterator to the first element. Подробнее...
 
 isEmpty ()
 Checks if collection is empty. Подробнее...
 

Открытые статические члены

static getRegistryType ()
 
static load (Order $order)
 
static getList (array $parameters=array())
 
static getInnerPaySystemId ()
 

Защищенные члены

 getEntityParent ()
 
 deleteInternal ($primary)
 
- Защищенные члены унаследованные от EntityCollection
 __construct ()
 EntityCollection constructor. Подробнее...
 
 addItem (CollectableEntity $item)
 
 createIndex ()
 
 getDeletableItems ()
 
 callEventOnBeforeCollectionClear ()
 
 setAnyItemDeleted ($value)
 

Защищенные статические члены

static createPaymentCollectionObject ()
 

Защищенные данные

 $order
 
- Защищенные данные унаследованные от EntityCollection
 $isClone = false
 
 $anyItemDeleted = false
 
- Защищенные данные унаследованные от CollectionBase
 $collection = array()
 

Подробное описание

См. определение в файле paymentcollection.php строка 17

Методы

◆ addItem()

addItem ( Internals\CollectableEntity  $payment)
Аргументы
Internals\CollectableEntity$payment
Возвращает
Result

См. определение в файле paymentcollection.php строка 49

50  {
51  /** @var Payment $payment */
52  $payment = parent::addItem($payment);
53 
54  $order = $this->getOrder();
55  return $order->onPaymentCollectionModify(EventActions::ADD, $payment);
56  }

◆ createClone()

createClone ( \SplObjectStorage  $cloneEntity)

Переопределяет метод предка EntityCollection.

См. определение в файле paymentcollection.php строка 594

595  {
596  if ($this->isClone() && $cloneEntity->contains($this))
597  {
598  return $cloneEntity[$this];
599  }
600 
601  /** @var PaymentCollection $paymentCollectionClone */
602  $paymentCollectionClone = parent::createClone($cloneEntity);
603 
604  if ($this->order)
605  {
606  if ($cloneEntity->contains($this->order))
607  {
608  $paymentCollectionClone->order = $cloneEntity[$this->order];
609  }
610  }
611 
612  return $paymentCollectionClone;
613  }

◆ createInnerPayment()

createInnerPayment ( )
Возвращает
Payment|bool
Исключения
Main

См. определение в файле paymentcollection.php строка 515

516  {
517  $payment = $this->getInnerPayment();
518  if ($payment)
519  {
520  return $payment;
521  }
522 
523  $paySystemId = PaySystem\Manager::getInnerPaySystemId();
524  if (!empty($paySystemId))
525  {
526  /** @var Service $paySystem */
527  $paySystem = Manager::getObjectById($paySystemId);
528  if ($paySystem)
529  {
530  return $this->createItem($paySystem);
531  }
532  }
533 
534  return false;
535  }

◆ createItem()

createItem ( Service  $service = null)
Аргументы
Service | null$service
Возвращает
Payment

См. определение в файле paymentcollection.php строка 34

35  {
36  /** @var Payment $paymentClassName */
37  $paymentClassName = static::getItemCollectionClassName();
38 
39  $payment = $paymentClassName::create($this, $service);
40  $this->addItem($payment);
41 
42  return $payment;
43  }

◆ createPaymentCollectionObject()

static createPaymentCollectionObject ( )
staticprotected
Возвращает
PaymentCollection

См. определение в файле paymentcollection.php строка 209

210  {
211  $registry = Registry::getInstance(static::getRegistryType());
212  $paymentCollectionClassName = $registry->getPaymentCollectionClassName();
213 
214  return new $paymentCollectionClassName();
215  }

◆ deleteInternal()

deleteInternal (   $primary)
protected
Аргументы
$primary
Возвращает
Entity\DeleteResult

См. определение в файле paymentcollection.php строка 639

640  {
641  return Internals\PaymentTable::delete($primary);
642  }

◆ deleteItem()

deleteItem (   $index)

Переопределяет метод предка EntityCollection.

См. определение в файле paymentcollection.php строка 64

65  {
66  $oldItem = parent::deleteItem($index);
67 
68  /** @var Order $order */
69  $order = $this->getOrder();
70  return $order->onPaymentCollectionModify(EventActions::DELETE, $oldItem);
71  }

◆ getEntityParent()

getEntityParent ( )
protected
Возвращает
Order

Переопределяет метод предка EntityCollection.

См. определение в файле paymentcollection.php строка 25

26  {
27  return $this->getOrder();
28  }

◆ getInnerPayment()

getInnerPayment ( )
Возвращает
Payment|bool
Исключения
Main

См. определение в файле paymentcollection.php строка 490

491  {
492  /** @var Order $order */
493  if (!$order = $this->getOrder())
494  {
495  throw new Main\ObjectNotFoundException('Entity "Order" not found');
496  }
497 
498  if ($paySystemId = PaySystem\Manager::getInnerPaySystemId())
499  {
500  /** @var Payment $payment */
501  foreach ($this->collection as $payment)
502  {
503  if ($payment->getPaymentSystemId() == $paySystemId)
504  return $payment;
505  }
506  }
507 
508  return false;
509  }

◆ getInnerPaySystemId()

static getInnerPaySystemId ( )
static
Уст.:
Use \Bitrix\Sale\PaySystem\Manager::getInnerPaySystemId instead
Возвращает
int

См. определение в файле paymentcollection.php строка 667

668  {
669  return PaySystem\Manager::getInnerPaySystemId();
670  }

◆ getList()

static getList ( array  $parameters = array())
static
Аргументы
array$parameters
Возвращает
Main\DB\Result

См. определение в файле paymentcollection.php строка 657

658  {
659  return Internals\PaymentTable::getList($parameters);
660  }

◆ getOrder()

getOrder ( )
Возвращает
Order

См. определение в файле paymentcollection.php строка 201

202  {
203  return $this->order;
204  }

◆ getPaidSum()

getPaidSum ( )
Возвращает
float

См. определение в файле paymentcollection.php строка 258

259  {
260  $sum = 0;
261  if (!empty($this->collection) && is_array($this->collection))
262  {
263  /** @var Payment $payment */
264  foreach ($this->collection as $payment)
265  {
266  if ($payment->getField('PAID') == "Y")
267  {
268  $sum += $payment->getSum();
269  }
270  }
271  }
272 
273  return $sum;
274  }

◆ getRegistryType()

static getRegistryType ( )
static
Возвращает
string

Переопределяет метод предка EntityCollection.

См. определение в файле paymentcollection.php строка 220

221  {
223  }

◆ getSum()

getSum ( )
Возвращает
float

См. определение в файле paymentcollection.php строка 279

280  {
281  $sum = 0;
282  if (!empty($this->collection) && is_array($this->collection))
283  {
284  /** @var Payment $payment */
285  foreach ($this->collection as $payment)
286  {
287  $sum += $payment->getSum();
288  }
289  }
290 
291  return $sum;
292  }

◆ hasPaidPayment()

hasPaidPayment ( )
Возвращает
bool

См. определение в файле paymentcollection.php строка 297

298  {
299  /** @var Payment $payment */
300  foreach ($this->collection as $payment)
301  {
302  if ($payment->getField('PAID') === "Y")
303  {
304  return true;
305  }
306  }
307 
308  return false;
309  }

◆ hasUnpaidPayment()

hasUnpaidPayment ( )
Возвращает
bool

См. определение в файле paymentcollection.php строка 314

315  {
316  /** @var Payment $payment */
317  foreach ($this->collection as $payment)
318  {
319  if ($payment->getField('PAID') === "N")
320  {
321  return true;
322  }
323  }
324 
325  return false;
326  }

◆ isExistsInnerPayment()

isExistsInnerPayment ( )
Возвращает
bool

См. определение в файле paymentcollection.php строка 540

541  {
542  if ($paySystemId = PaySystem\Manager::getInnerPaySystemId())
543  {
544  /** @var Payment $payment */
545  foreach ($this->collection as $payment)
546  {
547  if ($payment->getPaymentSystemId() == $paySystemId)
548  return true;
549  }
550  }
551 
552  return false;
553  }

◆ isMarked()

isMarked ( )

Is the entire collection of marked.

Возвращает
bool

См. определение в файле paymentcollection.php строка 620

621  {
622  if (!empty($this->collection) && is_array($this->collection))
623  {
624  /** @var Payment $payment */
625  foreach ($this->collection as $payment)
626  {
627  if ($payment->isMarked())
628  return true;
629  }
630  }
631 
632  return false;
633  }

◆ isPaid()

isPaid ( )
Возвращает
bool

См. определение в файле paymentcollection.php строка 93

94  {
95  if (!empty($this->collection) && is_array($this->collection))
96  {
97  /** @var Payment $payment */
98  foreach ($this->collection as $payment)
99  {
100  if (!$payment->isPaid())
101  return false;
102  }
103 
104  return true;
105  }
106 
107  return false;
108  }

◆ load()

static load ( Order  $order)
static
Аргументы
Order$order
Возвращает
PaymentCollection
Исключения
Main

См. определение в файле paymentcollection.php строка 231

232  {
233  /** @var PaymentCollection $paymentCollection */
234  $paymentCollection = static::createPaymentCollectionObject();
235  $paymentCollection->setOrder($order);
236 
237  if ($order->getId() > 0)
238  {
239  /** @var Payment $paymentClassName */
240  $paymentClassName = static::getItemCollectionClassName();
241 
242  $paymentList = $paymentClassName::loadForOrder($order->getId());
243  /** @var Payment $payment */
244  foreach ($paymentList as $payment)
245  {
246  $payment->setCollection($paymentCollection);
247  $paymentCollection->addItem($payment);
248  }
249  }
250 
251  return $paymentCollection;
252  }

◆ onItemModify()

onItemModify ( Internals\CollectableEntity  $item,
  $name = null,
  $oldValue = null,
  $value = null 
)
Аргументы
Internals\CollectableEntity$item
null$name
null$oldValue
null$value
Возвращает
Result
Исключения
Main

См. определение в файле paymentcollection.php строка 83

84  {
85  /** @var Order $order */
86  $order = $this->getOrder();
87  return $order->onPaymentCollectionModify(EventActions::UPDATE, $item, $name, $oldValue, $value);
88  }

◆ onOrderModify()

onOrderModify (   $name,
  $oldValue,
  $value 
)
Аргументы
$name
$oldValue
$value
Возвращает
Result

См. определение в файле paymentcollection.php строка 116

117  {
118  $result = new Result();
119 
120  switch($name)
121  {
122  case "CANCELED":
123 
124  if ($value == "Y")
125  {
126  $isPaid = false;
127 
128  /** @var Payment $payment */
129  foreach ($this->collection as $payment)
130  {
131  if ($payment->isPaid())
132  {
133  $isPaid = true;
134  break;
135  }
136  }
137 
138  if ($isPaid)
139  {
140  $result->addError(new ResultError(Loc::getMessage('SALE_ORDER_CANCEL_PAYMENT_EXIST_ACTIVE'), 'SALE_ORDER_CANCEL_PAYMENT_EXIST_ACTIVE'));
141  }
142  }
143 
144  break;
145 
146  case "PRICE":
147  if (($order = $this->getOrder()) && !$order->isCanceled())
148  {
149  $currentPayment = false;
150  $allowSumChange = false;
151  if (count($this->collection) == 1)
152  {
153  /** @var Payment $currentPayment */
154  if ($currentPayment = $this->rewind())
155  {
156  $allowSumChange = (bool)(!$currentPayment->isPaid() && !$currentPayment->isReturn() && ($currentPayment->getSum() == $oldValue));
157 
158  if ($allowSumChange)
159  {
160  if ($paySystemService = $currentPayment->getPaysystem())
161  {
162  $allowSumChange = $paySystemService->isAllowEditPayment();
163  }
164  }
165  }
166  }
167 
168  if ($allowSumChange && $currentPayment)
169  {
170  $r = $currentPayment->setField("SUM", $value);
171  if (!$r->isSuccess())
172  {
173  $result->addErrors($r->getErrors());
174  }
175 
176  $service = $currentPayment->getPaySystem();
177  if ($service)
178  {
179  $price = $service->getPaymentPrice($currentPayment);
180  $currentPayment->setField('PRICE_COD', $price);
181  }
182  }
183  }
184  break;
185  }
186 
187  return $result;
188  }

◆ save()

save ( )
Возвращает
Entity\Result
Исключения
Main

См. определение в файле paymentcollection.php строка 332

333  {
334  $result = new Entity\Result();
335 
336  /** @var Order $order */
337  if (!$order = $this->getOrder())
338  {
339  throw new Main\ObjectNotFoundException('Entity "Order" not found');
340  }
341 
342  $itemsFromDb = array();
343  if ($this->getOrder()->getId() > 0)
344  {
345  $itemsFromDbList = static::getList(
346  array(
347  "filter" => array("ORDER_ID" => $this->getOrder()->getId()),
348  "select" => array("ID", "PAY_SYSTEM_NAME", "PAY_SYSTEM_ID")
349  )
350  );
351  while ($itemsFromDbItem = $itemsFromDbList->fetch())
352  $itemsFromDb[$itemsFromDbItem["ID"]] = $itemsFromDbItem;
353  }
354 
355  $changeMeaningfulFields = array(
356  "PAID",
357  "PAY_SYSTEM_ID",
358  "PAY_SYSTEM_NAME",
359  "SUM",
360  "IS_RETURN",
361  "ACCOUNT_NUMBER",
362  "EXTERNAL_PAYMENT",
363  );
364 
365  /** @var Payment $payment */
366  foreach ($this->collection as $payment)
367  {
368  $isNew = (bool)($payment->getId() <= 0);
369  $isChanged = $payment->isChanged();
370 
371  if ($order->getId() > 0 && $isChanged)
372  {
373  $logFields = array();
374 
375  $fields = $payment->getFields();
376  $originalValues = $fields->getOriginalValues();
377 
378  foreach($originalValues as $originalFieldName => $originalFieldValue)
379  {
380  if (in_array($originalFieldName, $changeMeaningfulFields) && $payment->getField($originalFieldName) != $originalFieldValue)
381  {
382  $logFields[$originalFieldName] = $payment->getField($originalFieldName);
383  if (!$isNew)
384  $logFields['OLD_'.$originalFieldName] = $originalFieldValue;
385  }
386  }
387  }
388 
389  $r = $payment->save();
390  if ($r->isSuccess())
391  {
392  if ($order->getId() > 0)
393  {
394  if ($isChanged)
395  {
396  $registry = Registry::getInstance(static::getRegistryType());
397 
398  /** @var OrderHistory $orderHistory */
399  $orderHistory = $registry->getOrderHistoryClassName();
400  $orderHistory::addLog(
401  'PAYMENT',
402  $order->getId(),
403  $isNew ? 'PAYMENT_ADD' : 'PAYMENT_UPDATE',
404  $payment->getId(),
405  $payment,
406  $logFields,
407  $orderHistory::SALE_ORDER_HISTORY_LOG_LEVEL_1
408  );
409 
410  $orderHistory::addAction(
411  'PAYMENT',
412  $order->getId(),
413  "PAYMENT_SAVED",
414  $payment->getId(),
415  $payment,
416  array(),
418  );
419  }
420 
421  }
422  }
423  else
424  {
425  $result->addErrors($r->getErrors());
426  }
427 
428  if (isset($itemsFromDb[$payment->getId()]))
429  unset($itemsFromDb[$payment->getId()]);
430  }
431 
432  foreach ($itemsFromDb as $k => $v)
433  {
434  $v['ENTITY_REGISTRY_TYPE'] = static::getRegistryType();
435 
436  /** @var Main\Event $event */
437  $event = new Main\Event('sale', "OnBeforeSalePaymentDeleted", array(
438  'VALUES' => $v,
439  ));
440  $event->send();
441 
442  static::deleteInternal($k);
443 
444  /** @var Main\Event $event */
445  $event = new Main\Event('sale', "OnSalePaymentDeleted", array(
446  'VALUES' => $v,
447  ));
448  $event->send();
449 
450  if ($order->getId() > 0)
451  {
452  $registry = Registry::getInstance(static::getRegistryType());
453 
454  /** @var OrderHistory $orderHistory */
455  $orderHistory = $registry->getOrderHistoryClassName();
456  $orderHistory::addAction('PAYMENT', $order->getId(), 'PAYMENT_REMOVE', $k, null, array(
457  "PAY_SYSTEM_NAME" => $v["PAY_SYSTEM_NAME"],
458  "PAY_SYSTEM_ID" => $v["PAY_SYSTEM_ID"],
459  ));
460 
461  $registry = Registry::getInstance(static::getRegistryType());
462 
463  /** @var EntityMarker $entityMarker */
464  $entityMarker = $registry->getEntityMarkerClassName();
465  $entityMarker::deleteByFilter(array(
466  '=ORDER_ID' => $order->getId(),
467  '=ENTITY_TYPE' => $entityMarker::ENTITY_TYPE_PAYMENT,
468  '=ENTITY_ID' => $k,
469  ));
470  }
471 
472  }
473 
474  if ($order->getId() > 0)
475  {
476  $registry = Registry::getInstance(static::getRegistryType());
477 
478  /** @var OrderHistory $orderHistory */
479  $orderHistory = $registry->getOrderHistoryClassName();
480  $orderHistory::collectEntityFields('PAYMENT', $order->getId());
481  }
482 
483  return $result;
484  }

◆ setOrder()

setOrder ( Order  $order)
Аргументы
Order$order

См. определение в файле paymentcollection.php строка 193

194  {
195  $this->order = $order;
196  }

◆ verify()

verify ( )
Возвращает
Result
Исключения
Main

Переопределяет метод предка EntityCollection.

См. определение в файле paymentcollection.php строка 559

560  {
561  $result = new Result();
562 
563  /** @var Payment $payment */
564  foreach ($this->collection as $payment)
565  {
566  $r = $payment->verify();
567  if (!$r->isSuccess())
568  {
569  $result->addErrors($r->getErrors());
570 
571  /** @var Order $order */
572  if (!$order = $this->getOrder())
573  {
574  throw new Main\ObjectNotFoundException('Entity "Order" not found');
575  }
576 
577  $registry = Registry::getInstance(static::getRegistryType());
578 
579  /** @var EntityMarker $entityMarker */
580  $entityMarker = $registry->getEntityMarkerClassName();
581  $entityMarker::addMarker($order, $payment, $r);
582  $order->setField('MARKED', 'Y');
583  }
584  }
585  return $result;
586  }

Поля

◆ $order

$order
protected

См. определение в файле paymentcollection.php строка 20


Объявления и описания членов класса находятся в файле:
Bitrix\Sale\Internals\CollectionBase\rewind
rewind()
Rewind the Iterator to the first element.
Definition: collectionbase.php:120
Bitrix\Main\Localization\Loc\getMessage
static getMessage($code, $replace=null, $language=null)
Returns translation by message code.
Definition: loc.php:29
Bitrix\Sale\EventActions\ADD
const ADD
Definition: eventactions.php:8
Bitrix\Sale\Registry\REGISTRY_TYPE_ORDER
const REGISTRY_TYPE_ORDER
Definition: sale/lib/registry.php:16
Bitrix\Sale\EventActions\DELETE
const DELETE
Definition: eventactions.php:10
Bitrix\Sale\Internals\CollectionBase\count
count()
Count elements of an object.
Definition: collectionbase.php:79
Bitrix\Sale\PaymentCollection\getInnerPayment
getInnerPayment()
Definition: paymentcollection.php:490
Bitrix\Sale\Registry\getInstance
static getInstance($type)
Definition: sale/lib/registry.php:161
Bitrix\Sale\EventActions\UPDATE
const UPDATE
Definition: eventactions.php:9
Bitrix\Sale\PaymentCollection\createItem
createItem(Service $service=null)
Definition: paymentcollection.php:34
Bitrix\Sale\PaymentCollection\addItem
addItem(Internals\CollectableEntity $payment)
Definition: paymentcollection.php:49
Bitrix\Sale\PaymentCollection\$order
$order
Definition: paymentcollection.php:20
Bitrix\Sale\Cashbox\Manager\getObjectById
static getObjectById($id)
Definition: sale/lib/cashbox/manager.php:60
Bitrix\Sale\OrderHistory\SALE_ORDER_HISTORY_ACTION_LOG_LEVEL_1
const SALE_ORDER_HISTORY_ACTION_LOG_LEVEL_1
Definition: orderhistory.php:29
Bitrix\Sale\Internals\EntityCollection\isClone
isClone()
Definition: entitycollection.php:358
Bitrix\Sale\PaymentCollection\getOrder
getOrder()
Definition: paymentcollection.php:201