%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/helpers/admin/blocks/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/helpers/admin/blocks/orderpayment.php |
<?php namespace Bitrix\Sale\Helpers\Admin\Blocks; use Bitrix\Main\Entity\EntityError; use Bitrix\Sale\Cashbox\CheckManager; use Bitrix\Sale\Cashbox\Internals\CashboxTable; use Bitrix\Sale\Helpers\Admin\OrderEdit; use Bitrix\Sale\Internals\PaySystemActionTable; use Bitrix\Sale\OrderStatus; use Bitrix\Sale\Payment; use Bitrix\Sale\PaySystem; use Bitrix\Sale\Services\Company; use Bitrix\Sale\Services\PaySystem\Restrictions; use Bitrix\Sale\Internals\CompanyTable; use Bitrix\Sale\Order; use Bitrix\Main\Page\Asset; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Type\Date; use Bitrix\Main\Type\DateTime; use Bitrix\Sale\Result; use Bitrix\Main; use Bitrix\Sale\UserMessageException; Loc::loadMessages(__FILE__); class OrderPayment { /** @var $order \Bitrix\Sale\Order */ private static $order = null; private static $defaultFields = null; private static function prepareData($item, $error = false) { /** @var $item \Bitrix\Sale\Payment */ global $USER, $APPLICATION; static $users = array(); static $userCompanyList = array(); if (is_null(self::$order)) self::$order = $item->getCollection()->getOrder(); $fields = ($error) ? self::$defaultFields : $item->getFieldValues(); $fields['EMP_PAID_ID_NAME'] = ''; $fields['EMP_PAID_ID_LAST_NAME'] = ''; $empPaidId = $fields['EMP_PAID_ID']; if ($empPaidId > 0) { if (!array_key_exists($item->getField('EMP_PAID_ID'), $users)) $users[$empPaidId] = $USER->GetByID($empPaidId)->Fetch(); $fields['EMP_PAID_ID_NAME'] = $users[$empPaidId]['NAME']; $fields['EMP_PAID_ID_LAST_NAME'] = $users[$empPaidId]['LAST_NAME']; } $fields['ORDER_ID'] = self::$order->getId(); $fields['SUM'] = $item->getSum(); $fields['ORDER_PRICE'] = self::$order->getPrice(); $fields['ORDER_PAYMENT_SUM'] = $item->getCollection()->getSum(); $fields['CURRENCY'] = self::$order->getCurrency(); $fields['PERSON_TYPE_ID'] = self::$order->getPersonTypeId(); $fields['SITE_ID'] = self::$order->getSiteId(); $fields['STATUS_ID'] = self::$order->getField('STATUS_ID'); $fields['ORDER_LOCKED'] = Order::isLocked($fields['ORDER_ID']); $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); if($saleModulePermissions == "P") { if (empty($userCompanyList)) { $userCompanyList = Company\Manager::getUserCompanyList($USER->GetID()); } $isUserResponsible = false; if (self::$order->getField('RESPONSIBLE_ID') == $USER->GetID() || ($fields['RESPONSIBLE_ID'] == $USER->GetID())) { $isUserResponsible = true; } $isAllowCompany = in_array($item->getField('COMPANY_ID'), $userCompanyList) || in_array(self::$order->getField('COMPANY_ID'), $userCompanyList); if (!$isUserResponsible && !$isAllowCompany) { foreach ($fields as $fieldName => $fieldValue) { if (in_array($fieldName, static::getDisallowFields())) { unset($fields[$fieldName]); } } } $fields['IS_USER_RESPONSIBLE'] = $isUserResponsible; $fields['IS_ALLOW_COMPANY'] = $isAllowCompany; } $fields['PAY_SYSTEM_LIST'] = self::getPaySystemList($item); $fields['CHECK'] = CheckManager::getCheckInfo($item); $fields['CAN_PRINT_CHECK'] = $fields['PAY_SYSTEM_LIST'][$fields['PAY_SYSTEM_ID']]['CAN_PRINT_CHECK']; $dbRes = CashboxTable::getList(array('filter' => array('=ACTIVE' => 'Y', '=ENABLED' => 'Y'))); $fields['HAS_ENABLED_CASHBOX'] = ($dbRes->fetch()) ? 'Y' : 'N'; return $fields; } private static function getDisallowFields() { return array( 'EMP_PAID_ID_NAME', 'EMP_PAID_ID_LAST_NAME', ); } /** * @param $paySystemId * @return mixed * @throws Main\ArgumentException */ public static function getPaySystemParams($paySystemId) { static $result = array(); if (!isset($result[$paySystemId])) { $data = array(); if ($paySystemId > 0) { $data = PaySystemActionTable::getRow(array( 'select' => array('NAME', 'LOGOTIP', 'HAVE_RESULT', 'RESULT_FILE', 'ACTION_FILE'), 'filter' => array('ID' => $paySystemId), )); } $result[$paySystemId] = $data; if(intval($data["LOGOTIP"]) > 0) { $tmp = \CFile::ResizeImageGet($data["LOGOTIP"], array('width' => 100, 'height' => 60)); $result[$paySystemId]["LOGOTIP_PATH"] = $tmp['src']; $tmp = \CFile::ResizeImageGet($data["LOGOTIP"], array('width' => 80, 'height' => 50)); $result[$paySystemId]["LOGOTIP_SHORT_PATH"] = $tmp['src']; } else { $result[$paySystemId]["LOGOTIP_PATH"] = '/bitrix/images/sale/nopaysystem.gif'; $result[$paySystemId]["LOGOTIP_SHORT_PATH"] = '/bitrix/images/sale/nopaysystem.gif'; } } return $result[$paySystemId]; } /** * @param $payment * @param $data * @return mixed */ public static function modifyData($payment, $data) { /** @var \Bitrix\sale\Order $order */ if (is_null(self::$order)) self::$order = $payment->getCollection()->getOrder(); if (!$data['ERROR']) $data['ERROR'] = 'Y'; $data['ID'] = $data['PAYMENT_ID']; $data['CURRENCY'] = self::$order->getCurrency(); $data['PERSON_TYPE_ID'] = self::$order->getPersonTypeId(); $data['SITE_ID'] = self::$order->getSiteId(); return $data; } /** * @param \Bitrix\Sale\Payment $payment * @param int $index * @param $dataForRecovery * @return string */ public static function getEdit($payment, $index = 1, $dataForRecovery = array()) { global $USER, $APPLICATION; $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); $data = self::prepareData($payment, !empty($dataForRecovery)); $data['COMPANIES'] = Company\Manager::getListWithRestrictions($payment, Company\Restrictions\Manager::MODE_MANAGER); $userCompanyId = null; if($saleModulePermissions == "P") { $userCompanyList = Company\Manager::getUserCompanyList($USER->GetID()); if (!empty($userCompanyList) && is_array($userCompanyList) && count($userCompanyList) == 1) { $userCompanyId = reset($userCompanyList); } if ($payment->getId() == 0) { if (intval($userCompanyId) > 0) { $payment->setField('COMPANY_ID', $userCompanyId); } $payment->setField('RESPONSIBLE_ID', $USER->GetID()); } } $result = self::getEditTemplate($data, $index, $dataForRecovery); return $result; } /** * @param $payment * @param int $index * @param string $form * @return string */ public static function getView($payment, $index = 1, $form='') { $data = self::prepareData($payment); return self::getViewTemplate($data, $index, $form); } /** * @return string */ public static function getScripts() { Asset::getInstance()->addJs("/bitrix/js/sale/admin/order_payment.js"); $imgPathList = self::getImgPathList(); $message = array( 'PAYMENT_PAID_NO' => Loc::getMessage('SALE_ORDER_PAYMENT_STATUS_NO'), 'PAYMENT_PAID_YES' => Loc::getMessage('SALE_ORDER_PAYMENT_STATUS_YES'), 'PAYMENT_PAID_RETURN' => Loc::getMessage('SALE_ORDER_PAYMENT_RETURN'), 'PAYMENT_PAID_CANCEL' => Loc::getMessage('SALE_ORDER_PAYMENT_CANCEL'), 'PAYMENT_RETURN_COMMENT' => Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_COMMENT'), 'PAYMENT_RETURN_NUM' => Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_NUM'), 'PAYMENT_RETURN_DATE' => Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_DATE'), 'PAYMENT_OPERATION_TITLE' => Loc::getMessage('SALE_ORDER_PAYMENT_OPERATION_TITLE'), 'PAYMENT_OPERATION_RETURN' => Loc::getMessage('SALE_ORDER_PAYMENT_OPERATION_RETURN'), 'PAYMENT_RETURN_DATE_ALT' => Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_DATE_ALT'), 'PAYMENT_WINDOW_RETURN_TITLE' => Loc::getMessage('SALE_ORDER_PAYMENT_WINDOW_RETURN_TITLE'), 'PAYMENT_WINDOW_CANCEL_TITLE' => Loc::getMessage('SALE_ORDER_PAYMENT_WINDOW_CANCEL_TITLE'), 'PAYMENT_WINDOW_RETURN_BUTTON_SAVE' => Loc::getMessage('SALE_ORDER_PAYMENT_WINDOW_RETURN_BUTTON_SAVE'), 'PAYMENT_RETURN_NUM_DOC' => Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_NUM_DOC'), 'PAYMENT_RETURN_SUM' => Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_SUM'), 'PAYMENT_OPERATION_CANCEL' => Loc::getMessage('SALE_ORDER_PAYMENT_OPERATION_CANCEL'), 'PAYMENT_TOGGLE_DOWN' => Loc::getMessage('SALE_ORDER_PAYMENT_TOGGLE_DOWN'), 'PAYMENT_TOGGLE_UP' => Loc::getMessage('SALE_ORDER_PAYMENT_TOGGLE_UP'), 'PAYMENT_PAY_VOUCHER_NUM' => Loc::getMessage('SALE_ORDER_PAYMENT_PAY_VOUCHER_NUM'), 'PAYMENT_PAY_VOUCHER_DATE' => Loc::getMessage('SALE_ORDER_PAYMENT_PAY_VOUCHER_DATE'), 'PAYMENT_WINDOW_VOUCHER_TITLE' => Loc::getMessage('SALE_ORDER_PAYMENT_WINDOW_VOUCHER_TITLE'), 'PAYMENT_USE_INNER_BUDGET' => Loc::getMessage('SALE_ORDER_PAYMENT_USE_INNER_BUDGET'), 'PAYMENT_ORDER_STATUS' => Loc::getMessage('SALE_ORDER_PAYMENT_ORDER_STATUS'), 'PAYMENT_CONFIRM_DELETE' => Loc::getMessage('SALE_ORDER_PAYMENT_CONFIRM_DELETE'), 'PAYMENT_CASHBOX_CHECK_ADD_WINDOW_TITLE' => Loc::getMessage('PAYMENT_CASHBOX_CHECK_ADD_WINDOW_TITLE') ); return '<script type="text/javascript"> BX.message('.\CUtil::PhpToJSObject($message).'); logoList = '.\CUtil::PhpToJSObject($imgPathList).'; BX.ready(function(){ if(BX.Sale.Admin.OrderEditPage && BX.Sale.Admin.OrderEditPage.registerFieldsUpdaters) BX.Sale.Admin.OrderEditPage.registerFieldsUpdaters( BX.Sale.Admin.OrderPayment.prototype.getCreateOrderFieldsUpdaters() ); }); </script>'; } private static function getEditTemplate($data, $index, $post = array()) { global $USER, $APPLICATION; $saleModulePermissions = $APPLICATION->GetGroupRight("sale"); $paid = ($post) ? htmlspecialcharsbx($post['PAID']) : $data['PAID']; $id = ($post) ? (int)$post['PAYMENT_ID'] : $data['ID']; $priceCod = ($post) ? htmlspecialcharsbx($post['PRICE_COD']) : $data['PRICE_COD']; $paidString = ($paid == 'Y') ? 'YES' : 'NO'; if (!$post) { if ($data['SUM'] > 0) $sum = $data['SUM']; else $sum = ($data['ORDER_PRICE'] - $data['ORDER_PAYMENT_SUM'] <= 0) ? 0 : $data['ORDER_PRICE'] - $data['ORDER_PAYMENT_SUM']; } else { $sum = $post['SUM']; } $psData = self::getPaySystemParams( (isset($post['PAY_SYSTEM_ID'])) ? $post['PAY_SYSTEM_ID'] : $data['PAY_SYSTEM_ID'] ); if (isset($psData["LOGOTIP_PATH"])) $data['PAY_SYSTEM_LOGOTIP'] = $psData["LOGOTIP_PATH"]; $allowedOrderStatusesPayment = OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('payment')); $isAllowPayment = in_array($data["STATUS_ID"], $allowedOrderStatusesPayment); $triangle = ($isAllowPayment) ? '<span class="triangle"> ▾</span>' : ''; $class = ($paid != 'Y') ? 'notpay' : ''; $class .= (!$isAllowPayment) ? ' not_active' : ''; $paymentStatus = '<span><span id="BUTTON_PAID_'.$index.'" class="'.$class.'">'.Loc::getMessage('SALE_ORDER_PAYMENT_STATUS_'.$paidString).'</span>'.$triangle.'</span>'; $note = BeginNote(); $note .= Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_ALERT'); $note .= EndNote(); $hiddenPaySystemInnerId = ''; if ($index == 1) $hiddenPaySystemInnerId = '<input type="hidden" value="'.PaySystem\Manager::getInnerPaySystemId().'" id="PAYMENT_INNER_BUDGET_ID">'; $notPaidBlock = ($paid == 'N' && !empty($data['EMP_PAID_ID'])) ? '' : 'style="display:none;"'; $return = ($post['IS_RETURN'] == 'Y') ? '' : 'style="display:none;"'; $option = '<option value="Y">'.Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_ACCOUNT').'</option>'; if ($data['PAY_SYSTEM_ID'] != PaySystem\Manager::getInnerPaySystemId()) { /** @var \Bitrix\Sale\PaySystem\Service $service */ $service = PaySystem\Manager::getObjectById($data['PAY_SYSTEM_ID']); if ($service && $service->isRefundable()) $option .= '<option value="P">'.htmlspecialcharsbx($service->getField('NAME')).'</option>'; } $returnInformation = ' <tr '.$return.' class="return"> <td class="adm-detail-content-cell-l fwb">'.Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_TO').':</td> <td class="adm-detail-content-cell-r"> <select name="PAYMENT['.$index.'][OPERATION_ID]" id="OPERATION_ID_'.$index.'" class="adm-bus-select"> '.$option.' </select> </td> </tr> <tr '.$return.' class="return"> <td colspan="2" style="text-align: center">'.$note.'</td> </tr> <tr '.$notPaidBlock.' class="not_paid"> <td class="adm-detail-content-cell-l" width="40%"><br>'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_RETURN_NUM').':</td> <td class="adm-detail-content-cell-r tal"> <br> <input type="text" class="adm-bus-input" name="PAYMENT['.$index.'][PAY_RETURN_NUM]" id="PAYMENT_RETURN_NUM_'.$index.'" value="'.htmlspecialcharsbx(($post['PAY_RETURN_NUM']) ? $post['PAY_RETURN_NUM'] : $data['PAY_RETURN_NUM']).'" maxlength="20"> </td> </tr> <tr '.$notPaidBlock.' class="not_paid"> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_RETURN_DATE').':</td> <td class="adm-detail-content-cell-r tal"> <div class="adm-input-wrap adm-calendar-second" style="display: inline-block;"> <input type="text" class="adm-input adm-calendar-to" name="PAYMENT['.$index.'][PAY_RETURN_DATE]" id="PAYMENT_RETURN_DATE_'.$index.'" size="15" value="'.htmlspecialcharsbx(($post['PAY_RETURN_DATE']) ? $post['PAY_RETURN_DATE'] : $data['PAY_RETURN_DATE']).'"> <span class="adm-calendar-icon" title="'.Loc::getMessage('SALE_ORDER_PAYMENT_CHOOSE_DATE').'" onclick="BX.calendar({node:this, field:\'PAYMENT_RETURN_DATE_'.$index.'\', form: \'\', bTime: false, bHideTime: false});"></span> </div> </td> </tr> <tr '.$notPaidBlock.' class="not_paid"> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_RETURN_COMMENT').':</td> <td class="adm-detail-content-cell-r tal"> <div class="adm-input-wrap adm-calendar-second" style="display: inline-block;"> <textarea name="PAYMENT['.$index.'][PAY_RETURN_COMMENT]" id="PAYMENT_RETURN_COMMENTS_'.$index.'">'.htmlspecialcharsbx(isset($post['PAY_RETURN_COMMENT']) ? $post['PAY_RETURN_COMMENT'] : $data['PAY_RETURN_COMMENT']).'</textarea> </div> </td> </tr>'; $lang = Main\Application::getInstance()->getContext()->getLanguage(); if ($id > 0) { $dateBill = new Date($data['DATE_BILL']); $title = Loc::getMessage('SALE_ORDER_PAYMENT_BLOCK_EDIT_PAYMENT_TITLE', array('#ID#' => $data['ID'], '#DATE_BILL#' => $dateBill)); } else { $title = Loc::getMessage('SALE_ORDER_PAYMENT_BLOCK_NEW_PAYMENT_TITLE'); } $curFormat = \CCurrencyLang::GetFormatDescription($data['CURRENCY']); $currencyLang = preg_replace("/(^|[^&])#/", '$1', $curFormat["FORMAT_STRING"]); $disabled = ($data['PAID'] == 'Y') ? 'readonly' : ''; $companyList = $data['COMPANIES']; $companies = ''; if (!empty($companyList)) { if ($saleModulePermissions == "P") { $userCompanyId = null; $userCompanyList = Company\Manager::getUserCompanyList($USER->GetID()); if (is_array($userCompanyList) && count($userCompanyList) == 1) { $userCompanyId = reset($userCompanyList); $companyName = $data['COMPANIES'][$userCompanyId]["NAME"]." [".$data['COMPANIES'][$userCompanyId]["ID"]."]"; $companies = htmlspecialcharsbx($companyName); } else { foreach ($data['COMPANIES'] as $companyId => $companyData) { $foundCompany = false; if (!empty($userCompanyList) && is_array($userCompanyList)) { foreach ($userCompanyList as $userCompanyId) { if ($userCompanyId == $companyId) { $foundCompany = true; break; } } } if (!$foundCompany) { unset($data['COMPANIES'][$companyId]); } } if (count($data['COMPANIES']) == 1) { $company = reset($data['COMPANIES']); $companies = htmlspecialcharsbx($company["NAME"]." [".$company["ID"]."]"); } } } if (empty($companies)) { $companies = OrderEdit::makeSelectHtmlWithRestricted( 'PAYMENT['.$index.'][COMPANY_ID]', $companyList, isset($post["COMPANY_ID"]) ? $post["COMPANY_ID"] : $data["COMPANY_ID"], true, array( "class" => "adm-bus-select", "id" => "PAYMENT_COMPANY_ID_".$index ) ); } } else { if ($saleModulePermissions >= "W") { $companies = str_replace("#URL#", "/bitrix/admin/sale_company_edit.php?lang=".$lang, Loc::getMessage('SALE_ORDER_PAYMENT_ADD_COMPANY')); } } $checkLink = ''; $checkLink .= '<tr><td class="tac" id="PAYMENT_CHECK_LIST_ID_'.$data['ID'].'">'; if (!empty($data['CHECK'])) { $checkLink .= static::buildCheckHtml($data['CHECK']); } $checkLink .= '</td></tr>'; if ($data['CAN_PRINT_CHECK'] == 'Y' && $data['HAS_ENABLED_CASHBOX'] === 'Y') { $checkLink .= '<tr><td class="adm-detail-content-cell-r tac"><a href="javascript:void(0);" onclick="BX.Sale.Admin.OrderPayment.prototype.showCreateCheckWindow('.$data['ID'].');">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_ADD').'</a></td></tr>'; } $result = '<div> <div class="adm-bus-pay" id="payment_container_'.$index.'"> <input type="hidden" name="PAYMENT['.$index.'][PAYMENT_ID]" id="payment_id_'.$index.'" value="'.$id.'"> <input type="hidden" name="PAYMENT['.$index.'][INDEX]" value="'.$index.'" class="index"> <input type="hidden" name="PAYMENT['.$index.'][PAID]" id="PAYMENT_PAID_'.$index.'" value="'.(empty($paid) ? 'N' : $paid).'"> <input type="hidden" name="PAYMENT['.$index.'][IS_RETURN]" id="PAYMENT_IS_RETURN_'.$index.'" value="'.($post['IS_RETURN'] ? htmlspecialcharsbx($post['IS_RETURN']) : 'N').'"> '.$hiddenPaySystemInnerId.' <div class="adm-bus-component-content-container"> <div class="adm-bus-pay-section"> <div class="adm-bus-pay-section-title-container"> <div class="adm-bus-pay-section-title">'.$title.'</div> <div class="adm-bus-pay-section-action-block">'. ((!isset($data['ID']) || $data['ID'] <= 0) ? '<div class="adm-bus-pay-section-action" id="SECTION_'.$index.'_DELETE">'.Loc::getMessage('SALE_ORDER_PAYMENT_DELETE').'</div>' : '') .'</div> </div> <div class="adm-bus-pay-section-content" id="SECTION_'.$index.'"> <div class="adm-bus-pay-section-sidebar"> <div style="background: url(\''.$data['PAY_SYSTEM_LOGOTIP'].'\')" class="adm-shipment-block-logo" id="LOGOTIP_'.$index.'"></div> </div> <div class="adm-bus-pay-section-right"> <div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_METHOD').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table "> <tbody> <tr> <td class="adm-detail-content-cell-l fwb" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_SYSTEM').':</td> <td class="adm-detail-content-cell-r">'. OrderEdit::makeSelectHtmlWithRestricted( 'PAYMENT['.$index.'][PAY_SYSTEM_ID]', $data['PAY_SYSTEM_LIST'], (isset($post['PAY_SYSTEM_ID'])) ? $post['PAY_SYSTEM_ID'] : $data['PAY_SYSTEM_ID'], false, array( "class" => "adm-bus-select", "id" => "PAY_SYSTEM_ID_".$index ) ) .'</td> </tr> </tbody> </table> </div> <div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_SUM').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table "> <tbody> <tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAYABLE_SUM').':</td> <td class="adm-detail-content-cell-r tal"><input type="text" class="adm-bus-input-price" name="PAYMENT['.$index.'][SUM]" id="PAYMENT_SUM_'.$index.'" value="'.round($sum, 2).'" '.$disabled.'> '.htmlspecialcharsbx($currencyLang).'<br></td> </tr> <tr '.($priceCod > 0 ?: 'style="display: none"').'> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAYABLE_PRICE_COD').':</td> <td class="adm-detail-content-cell-r tal"> <input type="text" class="adm-bus-input-price" name="PAYMENT['.$index.'][PRICE_COD]" id="PAYMENT_PRICE_COD_'.$index.'" value="'.round($priceCod, 2).'" readonly> '.htmlspecialcharsbx($currencyLang).'<br></td> </tr> </tbody> </table> </div> <div class="adm-bus-table-container caption border" style="padding-top:10px;"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_STATUS').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table alternation edit-table" id="PAYMENT_BLOCK_STATUS_'.$index.'"> <tbody> <tr> <td class="adm-detail-content-cell-l vat payment-status" width="40%"> '.$paymentStatus.' </td> <td class="adm-detail-content-cell-r tal" id="PAYMENT_CHANGE_USER_INFO_'.$index.'"> '.$data['DATE_PAID'].' <a href="/bitrix/admin/user_edit.php?lang='.$lang.'&ID='.$data['EMP_PAID_ID'].'">'.htmlspecialcharsbx($data['EMP_PAID_ID_NAME']).' '.htmlspecialcharsbx($data['EMP_PAID_ID_LAST_NAME']).'</a> </td> </tr> </tbody> </table> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table" id="PAYMENT_BLOCK_STATUS_INFO_'.$index.'"> <tbody> <tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_VOUCHER_NUM').':</td> <td class="adm-detail-content-cell-r tal"> <input type="text" class="adm-bus-input" id="PAYMENT_NUM" name="PAYMENT['.$index.'][PAY_VOUCHER_NUM]" value="'.htmlspecialcharsbx(isset($post['PAY_VOUCHER_NUM']) ? $post['PAY_VOUCHER_NUM'] : $data['PAY_VOUCHER_NUM']).'" maxlength="20"> </td> </tr> <tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_VOUCHER_DATE').':</td> <td class="adm-detail-content-cell-r tal"> <div class="adm-input-wrap adm-calendar-second" style="display: inline-block;"> <input type="text" class="adm-input adm-calendar-to" id="PAYMENT_DATE_'.$index.'" name="PAYMENT['.$index.'][PAY_VOUCHER_DATE]" size="15" value="'.htmlspecialcharsbx(($post['PAY_VOUCHER_DATE']) ? $post['PAY_VOUCHER_DATE'] : $data['PAY_VOUCHER_DATE']).'"> <span class="adm-calendar-icon" title="'.Loc::getMessage('SALE_ORDER_PAYMENT_CHOOSE_DATE').'" onclick="BX.calendar({node:this, field:\'PAYMENT_DATE_'.$index.'\', form: \'\', bTime: false, bHideTime: false});"></span> </div> </td> </tr> '.$returnInformation.' </tbody> </table> </div>'; if ($data['CAN_PRINT_CHECK'] == 'Y' && $data['ID'] > 0) { $result .= '<div class="adm-bus-table-container caption border" style="padding-top:10px;"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_LINK_TITLE').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table"> <tbody> '.$checkLink.' </tbody> </table> </div>'; } if (isset($data['PS_STATUS']) && !empty($data['PS_STATUS'])) { $result .= '<div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_TITLE').'</div> <a href="javascript:void(0);" id="PS_INFO_'.$index.'">'.Loc::getMessage('SALE_ORDER_PAYMENT_TOGGLE_DOWN').'</a> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table" style="display: none"> <tbody> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS').':</td> <td class="adm-detail-content-cell-r tal">'.$data['PS_STATUS'].'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_CODE').':</td> <td class="adm-detail-content-cell-r tal">'.$data['PS_STATUS_CODE'].'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_DESCRIPTION').':</td> <td class="adm-detail-content-cell-r tal">'.$data['PS_STATUS_DESCRIPTION'].'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_CURRENCY').':</td> <td class="adm-detail-content-cell-r tal">'.$data['PS_CURRENCY'].'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_MESSAGE').':</td> <td class="adm-detail-content-cell-r tal">'.$data['PS_STATUS_MESSAGE'].'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_SUM').':</td> <td class="adm-detail-content-cell-r tal">'.$data['PS_SUM'].'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_DATE').':</td> <td class="adm-detail-content-cell-r tal">'.$data['PS_RESPONSE_DATE'].'</td> </tr> </tbody> </table> </div>'; } if ($companies !== '') { $result .= '<div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_BLOCK_COMPANY').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table "> <tbody> <tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_COMPANY_BY').':</td> <td class="adm-detail-content-cell-r">'.$companies.'</td> </tr> </tbody> </table> </div>'; } $result .= '</div><div class="clb"></div></div></div></div></div></div>'; $refundablePs = array(); if ($data['ID'] > 0) { $innerService = PaySystem\Manager::getObjectById(PaySystem\Manager::getInnerPaySystemId()); $refundablePs[Payment::RETURN_INNER] = $innerService->getField('NAME'); if ($data['PAY_SYSTEM_ID'] != $innerService->getField('ID')) { $service = PaySystem\Manager::getObjectById($data['PAY_SYSTEM_ID']); if ($service && $service->isRefundable()) $refundablePs[Payment::RETURN_PS] = $service->getField('NAME'); } } $params = array( 'index' => $index, 'functionOnSave' => 'saveInHiddenFields', 'isPaid' => ($data['PAID'] == 'Y'), 'viewForm' => false, 'isAvailableChangeStatus' => $isAllowPayment, 'psToReturn' => $refundablePs ); $result .= self::initJsPayment($params); return $result; } private static function getViewTemplate($data, $index, $form) { global $USER; $isUserResponsible = null; $isAllowCompany = null; if (array_key_exists('IS_USER_RESPONSIBLE', $data)) { $isUserResponsible = $data['IS_USER_RESPONSIBLE']; } if (array_key_exists('IS_ALLOW_COMPANY', $data)) { $isAllowCompany = $data['IS_ALLOW_COMPANY']; } $psData = self::getPaySystemParams($data['PAY_SYSTEM_ID']); if ($isAllowCompany === false) { $data['PAY_VOUCHER_NUM'] = ''; $data['PAY_VOUCHER_DATE'] = ''; $data['PAY_RETURN_NUM'] = ''; $data['PAY_RETURN_DATE'] = ''; $data['PS_STATUS'] = ''; } else { if (isset($psData["LOGOTIP_PATH"])) { $data['PAY_SYSTEM_LOGOTIP'] = $psData["LOGOTIP_PATH"]; $data['PAY_SYSTEM_LOGOTIP_SHORT'] = $psData["LOGOTIP_SHORT_PATH"]; } } $psResult = ''; if ($psData['HAVE_RESULT'] == 'Y' && $form != 'edit') { $psResult .= ' <span style="border-bottom: 1px dashed #658d0f; color: #658d0f; cursor: pointer" id="ps_update_'.$index.'">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_SYSTEM_CHECK').'</span>'; } $lang = Main\Application::getInstance()->getContext()->getLanguage(); $paidString = ($data['PAID'] == 'Y') ? 'YES' : 'NO'; $allowedOrderStatusesPayment = OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('payment')); $isAllowPayment = in_array($data["STATUS_ID"], $allowedOrderStatusesPayment); $isActive = ($form != 'edit' && $form != 'archive') && !$data['ORDER_LOCKED'] && $isAllowPayment; $triangle = ($isActive) ? '<span class="triangle"> ▾</span>' : ''; if ($data['PAID'] == 'Y') $class = (!$isActive) ? 'class="not_active"' : ''; else $class = (!$isActive) ? 'class="notpay not_active"' : 'class="notpay"'; $paymentStatus = '<span><span id="BUTTON_PAID_'.$index.'" '.$class.'>'.Loc::getMessage('SALE_ORDER_PAYMENT_STATUS_'.$paidString).'</span>'.$triangle.'</span>'; $res = CompanyTable::getList(array( 'select' => array('NAME'), 'filter' => array('ID' => $data['COMPANY_ID']) )); $company = $res->fetch(); $paymentStatusBlockVoucherNum = ''; if (strlen($data['PAY_VOUCHER_NUM']) > 0) { $paymentStatusBlockVoucherNum = '<tr> <td class="adm-detail-content-cell-l" width="40%"><br>'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_VOUCHER_NUM').':</td> <td class="adm-detail-content-cell-r tal"> <br> '.htmlspecialcharsbx($data['PAY_VOUCHER_NUM']).' </td> </tr>'; } $paymentStatusBlockVoucherDate = ''; if (strlen($data['PAY_VOUCHER_DATE']) > 0) { $paymentStatusBlockVoucherDate = '<tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_VOUCHER_DATE').':</td> <td class="adm-detail-content-cell-r tal"> <div class="adm-input-wrap adm-calendar-second" style="display: inline-block;">'.htmlspecialcharsbx($data['PAY_VOUCHER_DATE']).'</div> </td> </tr>'; } $paymentStatusBlockReturnNum = ''; if (strlen($data['PAY_RETURN_NUM']) > 0) { $paymentStatusBlockReturnNum = '<tr> <td class="adm-detail-content-cell-l" width="40%"><br>'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_RETURN_NUM').':</td> <td class="adm-detail-content-cell-r tal"> <br>'.htmlspecialcharsbx($data['PAY_RETURN_NUM']).'</td> </tr>'; } $paymentStatusBlockReturnDate = ''; if (strlen($data['PAY_RETURN_DATE']) > 0) { $paymentStatusBlockReturnDate = '<tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_RETURN_DATE').':</td> <td class="adm-detail-content-cell-r tal"> <div class="adm-input-wrap adm-calendar-second" style="display: inline-block;">'.htmlspecialcharsbx($data['PAY_RETURN_DATE']).'</div> </td> </tr>'; } $dateBill = new Date($data['DATE_BILL']); $allowedOrderStatusesEdit = OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('update')); $isAllowEdit = in_array($data["STATUS_ID"], $allowedOrderStatusesEdit) && $form != 'archive'; $sectionEdit = ''; if ($isAllowEdit && !$data['ORDER_LOCKED']) $sectionEdit = '<div class="adm-bus-pay-section-action" id="SECTION_'.$index.'_EDIT"><a href="/bitrix/admin/sale_order_payment_edit.php?order_id='.$data['ORDER_ID'].'&payment_id='.$data['ID'].'&backurl='.urlencode($_SERVER['REQUEST_URI']).'">'.Loc::getMessage('SALE_ORDER_PAYMENT_EDIT').'</a></div>'; $allowedOrderStatusesDelete = OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('delete')); $isAllowDelete = in_array($data["STATUS_ID"], $allowedOrderStatusesDelete) && $form != 'archive'; $sectionDelete = ''; if ($isAllowDelete && !$data['ORDER_LOCKED']) $sectionDelete = '<div class="adm-bus-pay-section-action" id="SECTION_'.$index.'_DELETE">'.Loc::getMessage('SALE_ORDER_PAYMENT_DELETE').'</div>'; $checkLink = '<tr><td class="tac" id="PAYMENT_CHECK_LIST_ID_'.$data['ID'].'">'; if (!empty($data['CHECK'])) { $checkLink .= static::buildCheckHtml($data['CHECK']); } $checkLink .= "</td></tr>"; if($form != 'archive' && $data['CAN_PRINT_CHECK'] == 'Y' && $data['HAS_ENABLED_CASHBOX'] === 'Y') { $checkLink .= '<tr><td class="adm-detail-content-cell-r tac"><a href="javascript:void(0);" onclick="BX.Sale.Admin.OrderPayment.prototype.showCreateCheckWindow('.$data['ID'].');">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_ADD').'</a></td></tr>'; } $result = ' <div> <div class="adm-bus-pay" id="payment_container_'.$index.'"> <input type="hidden" name="PAYMENT['.$index.'][PAYMENT_ID]" id="PAYMENT_ID_'.$index.'" value="'.$data['ID'].'"> <div class="adm-bus-component-content-container"> <div class="adm-bus-pay-section"> <div class="adm-bus-pay-section-title-container"> <div class="adm-bus-pay-section-title" id="payment_'.$data['ID'].'">'.$tabTitle = Loc::getMessage('SALE_ORDER_PAYMENT_BLOCK_EDIT_PAYMENT_TITLE', array('#ID#' => $data['ID'], '#DATE_BILL#' => $dateBill)).'</div> <div class="adm-bus-pay-section-action-block"> '.$sectionDelete.$sectionEdit.' <div class="adm-bus-pay-section-action" id="SECTION_'.$index.'_TOGGLE">'.Loc::getMessage('SALE_ORDER_PAYMENT_TOGGLE_DOWN').'</div> </div> </div> <div class="adm-bus-pay-section-content" id="SECTION_'.$index.'" style="display:none"> <div class="adm-bus-pay-section-sidebar"> <div style="background: url(\''.$data['PAY_SYSTEM_LOGOTIP'].'\')" class="adm-shipment-block-logo" id="LOGOTIP_'.$index.'"></div> </div> <div class="adm-bus-pay-section-right"> <div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_METHOD').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table "> <tbody> <tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_SYSTEM').':</td> <td class="adm-detail-content-cell-r">'.($isAllowCompany === false && $isUserResponsible === false ? Loc::getMessage('SALE_ORDER_PAYMENT_HIDDEN') : htmlspecialcharsbx($data['PAY_SYSTEM_NAME']).' ['.$data['PAY_SYSTEM_ID'].'] ').$psResult.'</td> </tr> </tbody> </table> </div> <div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_SUM').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table "> <tbody> <tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAYABLE_SUM').':</td> <td class="adm-detail-content-cell-r tal">'.SaleFormatCurrency($data['SUM'], $data['CURRENCY']).'<br></td> </tr> <tr '.($data['PRICE_COD'] > 0 ?: 'style="display: none"').'> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAYABLE_PRICE_COD').':</td> <td class="adm-detail-content-cell-r tal" id="PAYMENT_PRICE_COD_'.$index.'">'.SaleFormatCurrency($data['PRICE_COD'], $data['CURRENCY']).'</td> </tr> </tbody> </table> </div> <div class="adm-bus-table-container caption border" style="padding-top:10px;"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_STATUS').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table alternation edit-table" id="PAYMENT_BLOCK_STATUS_'.$index.'"> <tbody> <tr> <td class="adm-detail-content-cell-l vat payment-status" width="40%"> '.$paymentStatus.' </td> <td class="adm-detail-content-cell-r tal" id="PAYMENT_CHANGE_USER_INFO_'.$index.'"> '.$data['DATE_PAID'].' <a href="/bitrix/admin/user_edit.php?lang='.$lang.'&ID='.$data['EMP_PAID_ID'].'">'.htmlspecialcharsbx($data['EMP_PAID_ID_NAME']).' '.htmlspecialcharsbx($data['EMP_PAID_ID_LAST_NAME']).'</a> </td> </tr> </tbody> </table> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table"> <tbody> '.$paymentStatusBlockVoucherNum.$paymentStatusBlockVoucherDate.$paymentStatusBlockReturnNum.$paymentStatusBlockReturnDate.' </tbody> </table> </div>'; if ($checkLink) { $result .= '<div class="adm-bus-table-container caption border" style="padding-top:10px;"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_LINK_TITLE').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table"> <tbody> '.$checkLink.' </tbody> </table> </div>'; } if (isset($data['PS_STATUS']) && !empty($data['PS_STATUS'])) { $result .= '<div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_TITLE').'</div> <a href="javascript:void(0);" id="PS_INFO_'.$index.'">'.Loc::getMessage('SALE_ORDER_PAYMENT_TOGGLE_UP').'</a> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table"> <tbody> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS').':</td> <td class="adm-detail-content-cell-r tal">'.htmlspecialcharsbx($data['PS_STATUS']).'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_CODE').':</td> <td class="adm-detail-content-cell-r tal">'.htmlspecialcharsbx($data['PS_STATUS_CODE']).'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_DESCRIPTION').':</td> <td class="adm-detail-content-cell-r tal">'.htmlspecialcharsbx($data['PS_STATUS_DESCRIPTION']).'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_CURRENCY').':</td> <td class="adm-detail-content-cell-r tal">'.htmlspecialcharsbx($data['PS_CURRENCY']).'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_STATUS_MESSAGE').':</td> <td class="adm-detail-content-cell-r tal">'.htmlspecialcharsbx($data['PS_STATUS_MESSAGE']).'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_SUM').':</td> <td class="adm-detail-content-cell-r tal">'.htmlspecialcharsbx($data['PS_SUM']).'</td> </tr> <tr> <td class="adm-detail-content-cell-l vat" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_PS_DATE').':</td> <td class="adm-detail-content-cell-r tal">'.htmlspecialcharsbx($data['PS_RESPONSE_DATE']).'</td> </tr> </tbody> </table> </div>'; } $result .= '<div class="adm-bus-table-container caption border"> <div class="adm-bus-table-caption-title" style="background: #eef5f5;">'.Loc::getMessage('SALE_ORDER_PAYMENT_BLOCK_COMPANY').'</div> <table border="0" cellspacing="0" cellpadding="0" width="100%" class="adm-detail-content-table edit-table "> <tbody> <tr> <td class="adm-detail-content-cell-l" width="40%">'.Loc::getMessage('SALE_ORDER_PAYMENT_COMPANY_BY').':</td> <td class="adm-detail-content-cell-r">'. ($isAllowCompany === false && $isUserResponsible === false ? Loc::getMessage('SALE_ORDER_PAYMENT_HIDDEN') : (isset($company['NAME']) && !empty($company['NAME']) ? htmlspecialcharsbx($company['NAME']).' ['.$data['COMPANY_ID'].']' : Loc::getMessage('SALE_ORDER_PAYMENT_NO_COMPANY'))) .'</td> </tr> </tbody> </table> </div> </div> <div class="clb"></div> </div> '.self::getShortViewTemplate($data, $index, $form).' </div> </div> </div> </div>'; $innerService = PaySystem\Manager::getObjectById(PaySystem\Manager::getInnerPaySystemId()); if ($innerService) { $refundablePs = array(Payment::RETURN_INNER => $innerService->getField('NAME')); if ($data['PAY_SYSTEM_ID'] != $innerService->getField('ID')) { $service = PaySystem\Manager::getObjectById($data['PAY_SYSTEM_ID']); if ($service && $service->isRefundable()) $refundablePs[Payment::RETURN_PS] = $service->getField('NAME'); } } else { $refundablePs = array(); } $params = array( 'index' => $index, 'functionOnSave' => 'sendAjax', 'viewForm' => true, 'isPaid' => ($data['PAID'] == 'Y'), 'isAvailableChangeStatus' => $isActive, 'psToReturn' => $refundablePs ); $result .= self::initJsPayment($params); return $result; } private static function getShortViewTemplate($data, $index, $form) { global $USER; $lang = Main\Application::getInstance()->getContext()->getLanguage(); $paidString = ($data['PAID'] == 'Y') ? 'YES' : 'NO'; $isUserResponsible = null; $isAllowCompany = null; if (array_key_exists('IS_USER_RESPONSIBLE', $data)) { $isUserResponsible = $data['IS_USER_RESPONSIBLE']; } if (array_key_exists('IS_ALLOW_COMPANY', $data)) { $isAllowCompany = $data['IS_ALLOW_COMPANY']; } $allowedOrderStatusesPayment = OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('payment')); $isAllowPayment = in_array($data["STATUS_ID"], $allowedOrderStatusesPayment); $isActive = ($form != 'edit' && $form != 'archive') && !Order::isLocked($data['ORDER_ID']) && $isAllowPayment; $triangle = ($isActive) ? '<span class="triangle"> ▾</span>' : ''; if ($data['PAID'] == 'Y') $class = (!$isActive) ? 'class="not_active"' : ''; else $class = (!$isActive) ? 'class="notpay not_active"' : 'class="notpay"'; $paymentStatus = '<span><span id="BUTTON_PAID_'.$index.'_SHORT" '.$class.'>'.Loc::getMessage('SALE_ORDER_PAYMENT_STATUS_'.$paidString).'</span>'.$triangle.'</span>'; $checkLink = ''; if (($data['CAN_PRINT_CHECK'] == 'Y' && $form != 'archive' && $data['HAS_ENABLED_CASHBOX'] === 'Y') || !empty($data['CHECK'])) { $checkLink = '<td width="80px">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_LINK_TITLE').':</td><td>'; $checkLink .= '<div id="PAYMENT_CHECK_LIST_ID_SHORT_VIEW'.$data['ID'].'">'; if (!empty($data['CHECK'])) { $checkLink .= static::buildCheckHtml($data['CHECK']); } $checkLink .= "</div>"; if ($form != 'archive' && $data['CAN_PRINT_CHECK'] == 'Y' && $data['HAS_ENABLED_CASHBOX'] === 'Y') { $checkLink .= '<div><a href="javascript:void(0);" onclick="BX.Sale.Admin.OrderPayment.prototype.showCreateCheckWindow('.$data['ID'].');">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_ADD').'</a></div>'; } $checkLink .='</td>'; } $result = ' <div class="adm-bus-section-container-section-content" style="padding: 10px;" id="SECTION_SHORT_'.$index.'"> <table class="adm-bus-section-container-section-status" id="PAYMENT_BLOCK_STATUS_'.$index.'"> <tr> <td> <div style="background: url(\''.$data['PAY_SYSTEM_LOGOTIP_SHORT'].'\');" class="adm-shipment-block-short-logo" id="LOGOTIP_SHORT_'.$index.'"></div> </td> <td class="adm-bus-section-container-section-status-service">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAY_SYSTEM').': '.($isAllowCompany === false && $isUserResponsible === false ? Loc::getMessage('SALE_ORDER_PAYMENT_HIDDEN') : htmlspecialcharsbx($data['PAY_SYSTEM_NAME'])).'</td> <td class="adm-bus-section-container-section-status-summ">'.Loc::getMessage('SALE_ORDER_PAYMENT_PAYABLE_SUM').': '.SaleFormatCurrency($data['SUM'], $data['CURRENCY']).'</td> <td class="adm-bus-section-container-section-status-status payment-status">'.Loc::getMessage('SALE_ORDER_PAYMENT_STATUS').': '.$paymentStatus.'</td> '.$checkLink.' <td class="adm-bus-section-container-section-status-others" id="PAYMENT_CHANGE_USER_INFO_'.$index.'">'.$data['DATE_PAID'].' <a href="/bitrix/admin/user_edit.php?lang='.$lang.'&ID='.$data['EMP_PAID_ID'].'">'.htmlspecialcharsbx($data['EMP_PAID_ID_NAME']).' '.htmlspecialcharsbx($data['EMP_PAID_ID_LAST_NAME']).'</a> </td> </tr> </table> </div>'; return $result; } private static function initJsPayment($params) { return "<script> BX.ready( function(){ var obPayment_".$params['index']." = new BX.Sale.Admin.OrderPayment(".\CUtil::PhpToJSObject($params)."); }); </script>"; } /** * @param $checkList * * @return string */ public static function buildCheckHtml($checkList) { $result = ''; foreach ($checkList as $check) { $result .= '<div>'; if (strlen($check['LINK']) > 0) { $result .= '<a href="'.$check['LINK'].'" target="_blank">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_LINK', array('#CHECK_ID#' => $check['ID'])).'</a>'; } else { $result .='<tspan>'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_LINK', array('#CHECK_ID#' => $check['ID'])); if ($check['STATUS'] === 'P') { $result .= ' (<a href="javascript:void(0);" onclick="BX.Sale.Admin.OrderPayment.prototype.sendQueryCheckStatus('.$check['ID'].');">'.Loc::getMessage('SALE_ORDER_PAYMENT_CHECK_CHECK_STATUS').'</a>)'; } $result .= '</tspan>'; } $result .= '</div>'; } return $result; } /** * @param Payment $payment * @return array */ public static function getPaySystemList(Payment $payment) { $result = array(); $result[] = array( 'ID' => '0', 'NAME' => Loc::getMessage('SALE_ORDER_PAYMENT_NO_PAYSYSTEM') ); if (self::$order === null) { /** @var \Bitrix\Sale\PaymentCollection $collection */ $collection = $payment->getCollection(); /** @var \Bitrix\Sale\Order $order */ self::$order = $collection->getOrder(); } $paySystems = PaySystem\Manager::getListWithRestrictions($payment, Restrictions\Manager::MODE_MANAGER); foreach ($paySystems as $paySystem) { $params = array( 'ID' => $paySystem['ID'], 'NAME' => "[".$paySystem["ID"]."] ".$paySystem["NAME"], 'CAN_PRINT_CHECK' => $paySystem['CAN_PRINT_CHECK'] ); if (isset($paySystem['RESTRICTED'])) $params['RESTRICTED'] = $paySystem['RESTRICTED']; $result[$paySystem['ID']] = $params; } return $result; } private static function getImgPathList() { $dbRes = PaySystem\Manager::getList( array( 'select' => array('ID', 'LOGOTIP') ) ); $paySystems = $dbRes->fetchAll(); $logotypes = array('/bitrix/images/sale/nopaysystem.gif'); foreach ($paySystems as $paySystem) { if (empty($paySystem['LOGOTIP'])) { $logotypes[$paySystem['ID']] = $logotypes[0]; } else { $image = \CFile::ResizeImageGet($paySystem["LOGOTIP"], array('width' => 100, 'height' => 60)); $logotypes[$paySystem['ID']] = $image['src']; } } return $logotypes; } /** * @param $formType * @return string */ public static function createButtonAddPayment($formType) { return '<input type="button" class="adm-order-block-add-button" value="'.Loc::getMessage('SALE_ORDER_PAYMENT_BUTTON_ADD').'" onclick="BX.Sale.Admin.GeneralPayment.addNewPayment(this, \''.$formType.'\')">'; } /** * @param Order $order * @param $payments * @param bool $canSetPaid * @return Result * @throws Main\ArgumentOutOfRangeException * @throws Main\ObjectNotFoundException * @throws UserMessageException */ public static function updateData(Order &$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 \Bitrix\Sale\Payment $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 = PaySystem\Manager::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'], '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 (Main\ObjectException $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 (Main\ObjectException $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()); } if (!$canSetPaid) { $setResult = $paymentItem->setPaid($payment['PAID']); if (!$setResult->isSuccess()) $result->addErrors($setResult->getErrors()); } if ($payment['ORDER_STATUS_ID']) $order->setField('STATUS_ID', $payment['ORDER_STATUS_ID']); } $data['PAYMENT'][] = $paymentItem; } $result->setData($data); return $result; } }