- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/order.php
- Класс: BitrixSaleOrder
- Вызов: Order::onPaymentCollectionModify
public function onPaymentCollectionModify($action, Payment $payment, $name = null, $oldValue = null, $value = null)
{
$result = new Result();
if ($action == EventActions::DELETE)
{
if ($this->getField('PAY_SYSTEM_ID') == $payment->getPaymentSystemId())
{
/** @var Payment $entityPayment */
foreach ($payment->getCollection() as $entityPayment)
{
if (intval($entityPayment->getField('PAY_SYSTEM_ID')) > 0
&& intval($entityPayment->getField('PAY_SYSTEM_ID')) != $payment->getPaymentSystemId())
{
$this->setFieldNoDemand('PAY_SYSTEM_ID', $entityPayment->getField('PAY_SYSTEM_ID'));
break;
}
}
}
}
elseif ($action === EventActions::ADD)
{
if ($payment->getId() === 0)
{
$this->getPropertyCollection()->refreshRelated();
}
}
if ($action != EventActions::UPDATE)
{
return $result;
}
if (($name == "CURRENCY") && ($value != $this->getField("CURRENCY")))
{
throw new MainNotImplementedException();
}
if ($name == "SUM" || $name == "PAID")
{
if ($this->isCanceled())
{
$result->addError(new ResultError(Loc::getMessage('SALE_ORDER_PAID_ORDER_CANCELED'), 'SALE_ORDER_PAID_ORDER_CANCELED'));
return $result;
}
if ($name == "SUM"
&& !$payment->isPaid()
)
{
return $result;
}
$r = $this->syncOrderAndPayments($payment);
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
elseif ($r->hasWarnings())
{
$result->addWarnings($r->getWarnings());
}
}
elseif ($name == "PAY_SYSTEM_ID")
{
$this->setFieldNoDemand('PAY_SYSTEM_ID', $payment->getField('PAY_SYSTEM_ID'));
$this->getPropertyCollection()->refreshRelated();
}
elseif ($name == "DATE_PAID")
{
$this->setFieldNoDemand('DATE_PAYED', $payment->getField('DATE_PAID'));
}
elseif ($name == "PAY_VOUCHER_NUM")
{
$this->setFieldNoDemand('PAY_VOUCHER_NUM', $payment->getField('PAY_VOUCHER_NUM'));
}
elseif ($name == "PAY_VOUCHER_DATE")
{
$this->setFieldNoDemand('PAY_VOUCHER_DATE', $payment->getField('PAY_VOUCHER_DATE'));
}
elseif ($name == "EMP_PAID_ID")
{
$this->setFieldNoDemand('EMP_PAYED_ID', $payment->getField('EMP_PAID_ID'));
}
elseif ($name == "MARKED")
{
if ($value == "Y")
{
/** @var Result $r */
$r = $this->setField('MARKED', 'Y');
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
}
}
elseif ($name == "REASON_MARKED")
{
$r = $this->setReasonMarked($value);
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
}
if ($value != $oldValue)
{
$fields = $this->fields->getChangedValues();
if (!empty($fields) && !array_key_exists("UPDATED_1C", $fields) && $name != 'UPDATED_1C')
{
parent::setField("UPDATED_1C", "N");
}
}
return $result;
}