• Модуль: 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;
}