- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/orderpayment.php
- Класс: BitrixSaleHelpersAdminBlocksOrderPayment
- Вызов: OrderPayment::updateData
static function updateData(SaleOrder &$order, $payments, $canSetPaid = false)
{
global $USER, $APPLICATION;
$saleModulePermissions = $APPLICATION->GetGroupRight("sale");
$result = new Result();
$data['PAYMENT'] = array();
if (!$order)
throw new UserMessageException('Order does not exist');
foreach ($payments as $payment)
{
$paymentId = intval($payment['PAYMENT_ID']);
$isNew = ($paymentId <= 0);
$paymentCollection = $order->getPaymentCollection();
/** @var BitrixSalePayment $paymentItem */
if ($isNew)
{
$paymentItem = $paymentCollection->createItem();
}
else
{
$paymentItem = $paymentCollection->getItemById($paymentId);
if (!$paymentItem)
throw new UserMessageException('Payment does not exist');
}
self::$defaultFields = $paymentItem->getFieldValues();
$isReturn = (isset($payment['IS_RETURN']) && ($payment['IS_RETURN'] == 'Y' || $payment['IS_RETURN'] == 'P'));
$psService = null;
if ($payment['PAY_SYSTEM_ID'] > 0)
$psService = PaySystemManager::getObjectById($payment['PAY_SYSTEM_ID']);
$paymentFields = array(
'PAY_SYSTEM_ID' => $payment['PAY_SYSTEM_ID'],
'COMPANY_ID' => (isset($payment['COMPANY_ID']) && intval($payment['COMPANY_ID']) > 0) ? intval($payment['COMPANY_ID']) : 0,
'PAY_VOUCHER_NUM' => $payment['PAY_VOUCHER_NUM'],
'PAY_RETURN_NUM' => $payment['PAY_RETURN_NUM'],
'PAY_RETURN_COMMENT' => $payment['PAY_RETURN_COMMENT'],
'COMMENTS' => $payment['COMMENTS'] ?? null,
'PAY_SYSTEM_NAME' => ($psService) ? $psService->getField('NAME') : ''
);
if ($isNew && $saleModulePermissions == "P")
{
if (empty($payment['COMPANY_ID']))
{
$paymentFields['COMPANY_ID'] = $order->getField('COMPANY_ID');
}
if (empty($payment['RESPONSIBLE_ID']))
{
$paymentFields['RESPONSIBLE_ID'] = $order->getField('RESPONSIBLE_ID');
$paymentFields['EMP_RESPONSIBLE_ID'] = $USER->GetID();
$paymentFields['DATE_RESPONSIBLE_ID'] = new DateTime();
}
}
if (!$paymentItem->isPaid())
$paymentFields['SUM'] = (float)str_replace(',', '.', $payment['SUM']);
if ($payment['PRICE_COD'])
$paymentFields['PRICE_COD'] = $payment['PRICE_COD'];
if ($isNew)
$paymentFields['DATE_BILL'] = new DateTime();
if (!empty($payment['PAY_RETURN_DATE']))
{
try
{
$paymentFields['PAY_RETURN_DATE'] = new Date($payment['PAY_RETURN_DATE']);
}
catch (MainObjectException $exception)
{
$result->addError(
new EntityError(Loc::getMessage('SALE_ORDER_PAYMENT_ERROR_RETURN_DATE_FORMAT'))
);
}
}
if (!empty($payment['PAY_VOUCHER_DATE']))
{
try
{
$paymentFields['PAY_VOUCHER_DATE'] = new Date($payment['PAY_VOUCHER_DATE']);
}
catch (MainObjectException $exception)
{
$result->addError(
new EntityError(Loc::getMessage('SALE_ORDER_PAYMENT_ERROR_VOUCHER_DATE_FORMAT'))
);
}
}
if (isset($payment['RESPONSIBLE_ID']))
{
$paymentFields['RESPONSIBLE_ID'] = !empty($payment['RESPONSIBLE_ID']) ? $payment['RESPONSIBLE_ID'] : $USER->GetID();
if ($payment['RESPONSIBLE_ID'] != $paymentItem->getField('RESPONSIBLE_ID'))
{
$paymentFields['DATE_RESPONSIBLE_ID'] = new DateTime();
if (!$isNew)
$paymentFields['EMP_RESPONSIBLE_ID'] = $USER->GetID();
}
}
if ($result->isSuccess())
{
$setResult = $paymentItem->setFields($paymentFields);
if (!$setResult->isSuccess())
$result->addErrors($setResult->getErrors());
if ($isReturn && $payment['OPERATION_ID'])
{
$setResult = $paymentItem->setReturn($payment['OPERATION_ID']);
if (!$setResult->isSuccess())
$result->addErrors($setResult->getErrors());
}
$isReturnChanged = $payment['IS_RETURN_CHANGED'] === 'Y';
if (!$canSetPaid && !$isReturnChanged)
{
$setResult = $paymentItem->setPaid($payment['PAID']);
if (!$setResult->isSuccess())
$result->addErrors($setResult->getErrors());
}
if (isset($payment['ORDER_STATUS_ID']) && $payment['ORDER_STATUS_ID'])
{
$order->setField('STATUS_ID', $payment['ORDER_STATUS_ID']);
}
}
$verify = $paymentItem->verify();
if (!$verify->isSuccess())
{
$result->addErrors($verify->getErrors());
}
$data['PAYMENT'][] = $paymentItem;
}
$result->setData($data);
return $result;
}