public static function PrepareInvoiceData(&$fields) { $statusID = $fields['~STATUS_ID']; $success = CCrmStatusInvoice::isStatusSuccess($statusID); $failed = CCrmStatusInvoice::isStatusFailed($statusID); $paymentTimeStamp = 0; $paymentDate = ''; $paymentDoc = ''; $paymentComment = ''; $cancelTimeStamp = 0; $cancelDate = ''; $cancelReason = ''; if ($success) { $paymentTimeStamp = MakeTimeStamp($fields['~PAY_VOUCHER_DATE']); $paymentDate = isset($fields['~PAY_VOUCHER_DATE']) ? ConvertTimeStamp($paymentTimeStamp, 'SHORT', SITE_ID) : ''; $paymentDoc = isset($fields['~PAY_VOUCHER_NUM']) ? $fields['~PAY_VOUCHER_NUM'] : ''; $paymentComment = isset($fields['~REASON_MARKED']) ? $fields['~REASON_MARKED'] : ''; } else { $cancelTimeStamp = MakeTimeStamp($fields['~DATE_MARKED']); $cancelDate = isset($fields['~DATE_MARKED']) ? ConvertTimeStamp($cancelTimeStamp, 'SHORT', SITE_ID) : ''; $cancelReason = isset($fields['~REASON_MARKED']) ? $fields['~REASON_MARKED'] : ''; } return array('ID' => $fields['~ID'], 'SHOW_URL' => $fields['SHOW_URL'], 'EDIT_URL' => isset($fields['EDIT_URL']) ? $fields['EDIT_URL'] : '', 'ACCOUNT_NUMBER' => $fields['~ACCOUNT_NUMBER'], 'ORDER_TOPIC' => $fields['~ORDER_TOPIC'], 'STATUS_ID' => $statusID, 'STATUS_TEXT' => $fields['~STATUS_TEXT'], 'PRICE' => $fields['~PRICE'], 'CURRENCY' => $fields['~CURRENCY'], 'FORMATTED_PRICE' => $fields['~FORMATTED_PRICE'], 'DEAL_ID' => $fields['~DEAL_ID'], 'DEAL_TITLE' => $fields['~DEAL_TITLE'], 'CONTACT_ID' => $fields['~CONTACT_ID'], 'CONTACT_FULL_NAME' => $fields['~CONTACT_FULL_NAME'], 'COMPANY_ID' => $fields['~COMPANY_ID'], 'COMPANY_TITLE' => $fields['~COMPANY_TITLE'], 'PAYMENT_TIME_STAMP' => $paymentTimeStamp, 'PAYMENT_DATE' => $paymentDate, 'PAYMENT_DOC' => $paymentDoc, 'PAYMENT_COMMENT' => $paymentComment, 'CANCEL_TIME_STAMP' => $cancelTimeStamp, 'CANCEL_DATE' => $cancelDate, 'CANCEL_REASON' => $cancelReason, 'IS_FINISHED' => $success || $failed, 'IS_SUCCESSED' => $success); }
$arFields['STATUS_TEXT'] = isset($arFields['STATUS_ID']) && isset($arResult['STATUS_LIST'][$arFields['STATUS_ID']]) ? $arResult['STATUS_LIST'][$arFields['STATUS_ID']] : ''; } $arResult['ELEMENT'] = $arFields; unset($arFields); if (empty($arResult['ELEMENT']['ID'])) { LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_INVOICE_LIST'], array())); } $bTaxMode = CCrmTax::isTaxMode(); $bStatusSuccess = false; $bStatusFailed = false; if (isset($arResult['ELEMENT']['STATUS_ID']) && $arResult['ELEMENT']['STATUS_ID'] !== '') { $bStatusSuccess = CCrmStatusInvoice::isStatusSuccess($arResult['ELEMENT']['STATUS_ID']); if ($bStatusSuccess) { $bStatusFailed = false; } else { $bStatusFailed = CCrmStatusInvoice::isStatusFailed($arResult['ELEMENT']['STATUS_ID']); } } $arResult['STATUS_SUCCESS'] = $arResult['ELEMENT']['STATUS_SUCCESS'] = $bStatusSuccess ? 'Y' : 'N'; $arResult['STATUS_FAILED'] = $arResult['ELEMENT']['STATUS_FAILED'] = $bStatusFailed ? 'Y' : 'N'; $arResult['ELEMENT']['REASON_MARKED_SUCCESS'] = $bStatusSuccess ? $arResult['ELEMENT']['REASON_MARKED'] : ''; if (!$bStatusFailed) { $arResult['ELEMENT']['REASON_MARKED'] = ''; } $currencyID = isset($arResult['ELEMENT']['CURRENCY']) ? $arResult['ELEMENT']['CURRENCY'] : CCrmInvoice::GetCurrencyID(); $dealID = isset($arResult['ELEMENT']['UF_DEAL_ID']) ? $arResult['ELEMENT']['UF_DEAL_ID'] : 0; $arResult['PATH_TO_DEAL_SHOW'] = $arResult['ELEMENT']['UF_DEAL_SHOW_URL'] = $dealID > 0 ? CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_DEAL_SHOW'], array('deal_id' => $dealID)) : ''; if ($dealID > 0) { $arResult['ELEMENT']['UF_DEAL_TITLE'] = CCrmOwnerType::GetCaption(CCrmOwnerType::Deal, $dealID, false); } $quoteID = isset($arResult['ELEMENT']['UF_QUOTE_ID']) ? $arResult['ELEMENT']['UF_QUOTE_ID'] : 0;
$arResult['FIELDS']['tab_1'][] = array('id' => 'section_invoice_info', 'name' => GetMessage('CRM_SECTION_INVOICE_INFO'), 'type' => 'section'); $arResult['FIELDS']['tab_1'][] = array('id' => 'ACCOUNT_NUMBER', 'name' => GetMessage('CRM_FIELD_ACCOUNT_NUMBER'), 'params' => array('size' => 100), 'value' => isset($arResult['ELEMENT']['~ACCOUNT_NUMBER']) ? $arResult['ELEMENT']['~ACCOUNT_NUMBER'] : '', 'type' => 'text', 'required' => $bEdit, 'visible' => $bEdit); $arResult['FIELDS']['tab_1'][] = array('id' => 'ORDER_TOPIC', 'name' => GetMessage('CRM_FIELD_ORDER_TOPIC'), 'params' => array('size' => 255), 'value' => isset($arResult['ELEMENT']['~ORDER_TOPIC']) ? $arResult['ELEMENT']['~ORDER_TOPIC'] : '', 'type' => 'text', 'required' => true); $arResult['FIELDS']['tab_1'][] = array('id' => 'STATUS_ID', 'name' => GetMessage('CRM_FIELD_STATUS_ID'), 'items' => $arResult['STATUS_LIST'], 'params' => array('sale_order_marker' => 'Y'), 'type' => 'list', 'value' => isset($arResult['ELEMENT']['STATUS_ID']) ? $arResult['ELEMENT']['STATUS_ID'] : '', 'required' => true); // status dependent fields // <editor-fold defaultstate="collapsed" desc="status dependent fields ..."> $arResult['FIELDS']['tab_1'][] = array('id' => 'PAY_VOUCHER_DATE', 'name' => GetMessage('CRM_FIELD_PAY_VOUCHER_DATE'), 'params' => array('class' => 'bx-crm-dialog-input bx-crm-dialog-input-date', 'sale_order_marker' => 'Y'), 'type' => 'date_short', 'value' => !empty($arResult['ELEMENT']['PAY_VOUCHER_DATE']) ? ConvertTimeStamp(MakeTimeStamp($arResult['ELEMENT']['PAY_VOUCHER_DATE']), 'SHORT', SITE_ID) : ''); $arResult['FIELDS']['tab_1'][] = array('id' => 'PAY_VOUCHER_NUM', 'name' => GetMessage('CRM_FIELD_PAY_VOUCHER_NUM'), 'params' => array('size' => 20), 'value' => isset($arResult['ELEMENT']['~PAY_VOUCHER_NUM']) ? $arResult['ELEMENT']['~PAY_VOUCHER_NUM'] : '', 'type' => 'text'); $arResult['ELEMENT']['REASON_MARKED_SUCCESS'] = $arResult['ELEMENT']['~REASON_MARKED_SUCCESS'] = ''; if ($arResult['ELEMENT']['~STATUS_ID'] != '' && CCrmStatusInvoice::isStatusSuccess($arResult['ELEMENT']['~STATUS_ID'])) { $arResult['ELEMENT']['~REASON_MARKED_SUCCESS'] = $arResult['ELEMENT']['~REASON_MARKED']; $arResult['ELEMENT']['REASON_MARKED_SUCCESS'] = htmlspecialcharsbx($arResult['ELEMENT']['~REASON_MARKED']); } $arResult['FIELDS']['tab_1'][] = array('id' => 'REASON_MARKED_SUCCESS', 'name' => GetMessage('CRM_FIELD_REASON_MARKED_SUCCESS'), 'value' => isset($arResult['ELEMENT']['~REASON_MARKED_SUCCESS']) ? $arResult['ELEMENT']['~REASON_MARKED_SUCCESS'] : '', 'type' => 'textarea'); $arResult['FIELDS']['tab_1'][] = array('id' => 'DATE_MARKED', 'name' => GetMessage('CRM_FIELD_DATE_MARKED'), 'params' => array('class' => 'bx-crm-dialog-input bx-crm-dialog-input-date', 'sale_order_marker' => 'Y'), 'type' => 'date_short', 'value' => !empty($arResult['ELEMENT']['DATE_MARKED']) ? ConvertTimeStamp(MakeTimeStamp($arResult['ELEMENT']['DATE_MARKED']), 'SHORT', SITE_ID) : ''); if ($arResult['ELEMENT']['~STATUS_ID'] != '' && !CCrmStatusInvoice::isStatusFailed($arResult['ELEMENT']['~STATUS_ID'])) { $arResult['ELEMENT']['REASON_MARKED'] = $arResult['ELEMENT']['~REASON_MARKED'] = ''; } $arResult['FIELDS']['tab_1'][] = array('id' => 'REASON_MARKED', 'name' => GetMessage('CRM_FIELD_REASON_MARKED'), 'value' => isset($arResult['ELEMENT']['~REASON_MARKED']) ? $arResult['ELEMENT']['~REASON_MARKED'] : '', 'type' => 'textarea'); // </editor-fold> // if ($bEdit) // { // $arResult['FIELDS']['tab_1'][] = array( // 'id' => 'PAYED', // 'name' => GetMessage('CRM_FIELD_PAYED'), // 'type' => 'checkbox', // 'value' => ((isset($arResult['ELEMENT']['PAYED']) && $arResult['ELEMENT']['PAYED'] === 'Y') ? 'Y' : 'N') // ); // } $arResult['FIELDS']['tab_1'][] = array('id' => 'DATE_BILL', 'name' => GetMessage('CRM_FIELD_DATE_BILL'), 'params' => array('sale_order_marker' => 'Y'), 'type' => 'date_link', 'value' => !empty($arResult['ELEMENT']['DATE_BILL']) ? ConvertTimeStamp(MakeTimeStamp($arResult['ELEMENT']['DATE_BILL']), 'SHORT', SITE_ID) : ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'SHORT', SITE_ID)); $arResult['FIELDS']['tab_1'][] = array('id' => 'DATE_PAY_BEFORE', 'name' => GetMessage('CRM_FIELD_DATE_PAY_BEFORE'), 'params' => array('class' => 'bx-crm-dialog-input bx-crm-dialog-input-date', 'sale_order_marker' => 'Y'), 'type' => 'date_short', 'value' => !empty($arResult['ELEMENT']['DATE_PAY_BEFORE']) ? ConvertTimeStamp(MakeTimeStamp($arResult['ELEMENT']['DATE_PAY_BEFORE']), 'SHORT', SITE_ID) : '');
__CrmMobileInvoiceEditEndResonse(array('ERROR' => GetMessage('CRM_ENTITY_DATA_NOT_FOUND'))); } $ID = isset($data['ID']) ? intval($data['ID']) : 0; if ($ID <= 0) { __CrmMobileInvoiceEditEndResonse(array('ERROR' => GetMessage('CRM_ENTITY_ID_NOT_FOUND'))); } if (!CCrmAuthorizationHelper::CheckUpdatePermission(CCrmOwnerType::InvoiceName, $ID, $curUserPrems)) { __CrmMobileInvoiceEditEndResonse(array('ERROR' => GetMessage('CRM_ACCESS_DENIED'))); } $statusID = isset($data['STATUS_ID']) ? $data['STATUS_ID'] : ''; if ($statusID === '') { __CrmMobileInvoiceEditEndResonse(array('ERROR' => GetMessage('CRM_INVOICE_STATUS_NOT_FOUND'))); } $additionalData = isset($data['ADDITIONAL_DATA']) && is_array($data['ADDITIONAL_DATA']) ? $data['ADDITIONAL_DATA'] : null; $isSuccess = CCrmStatusInvoice::isStatusSuccess($statusID); $isFail = CCrmStatusInvoice::isStatusFailed($statusID); $statusParams = array('STATE_SUCCESS' => $isSuccess, 'STATE_FAILED' => $isFail); if ($isSuccess) { $timestamp = isset($additionalData['PAYMENT_TIME_STAMP']) ? max(intval($additionalData['PAYMENT_TIME_STAMP']), 0) : 0; $statusParams['PAY_VOUCHER_DATE'] = $timestamp > 0 ? ConvertTimeStamp($timestamp, 'SHORT', SITE_ID) : null; $statusParams['PAY_VOUCHER_NUM'] = isset($additionalData['PAYMENT_DOC']) ? substr(trim($additionalData['PAYMENT_DOC']), 0, 20) : ''; $statusParams['REASON_MARKED'] = isset($additionalData['PAYMENT_COMMENT']) ? substr(trim($additionalData['PAYMENT_COMMENT']), 0, 255) : ''; } elseif ($isFail) { $timestamp = isset($additionalData['CANCEL_TIME_STAMP']) ? max(intval($additionalData['CANCEL_TIME_STAMP']), 0) : 0; $statusParams['DATE_MARKED'] = $timestamp > 0 ? ConvertTimeStamp($timestamp, 'SHORT', SITE_ID) : null; $statusParams['REASON_MARKED'] = isset($additionalData['CANCEL_REASON']) ? substr(trim($additionalData['CANCEL_REASON']), 0, 255) : ''; } //$DB->StartTransaction(); $CCrmInvoice = new CCrmInvoice(false); $successed = $CCrmInvoice->SetStatus($ID, $statusID, $statusParams); if ($successed) {
public static function update($params) { global $DB; $ID = CCrmInvoiceRestUtil::getParamScalar($params, 'id', 0); if ($ID <= 0) { throw new RestException('Invalid identifier.'); } $invoice = new CCrmInvoice(); if (!CCrmInvoice::CheckUpdatePermission($ID)) { throw new RestException('Access denied.'); } $fields = CCrmInvoiceRestUtil::getParamArray($params, 'fields'); $fields = self::filterFields($fields, 'update'); // sanitize $updateComments = isset($fields['COMMENTS']); $updateUserDescription = isset($fields['USER_DESCRIPTION']); $comments = $updateComments ? trim($fields['COMMENTS']) : ''; $userDescription = $updateUserDescription ? trim($fields['USER_DESCRIPTION']) : ''; $bSanitizeComments = $comments !== '' && strpos($comments, '<'); $bSanitizeUserDescription = $userDescription !== '' && strpos($userDescription, '<'); if ($bSanitizeComments || $bSanitizeUserDescription) { $sanitizer = new CBXSanitizer(); $sanitizer->ApplyDoubleEncode(false); $sanitizer->SetLevel(CBXSanitizer::SECURE_LEVEL_MIDDLE); //Crutch for for Chrome line break behaviour in HTML editor. $sanitizer->AddTags(array('div' => array())); if ($bSanitizeComments) { $fields['COMMENTS'] = $sanitizer->SanitizeHtml($fields['COMMENTS']); } if ($bSanitizeUserDescription) { $fields['USER_DESCRIPTION'] = $sanitizer->SanitizeHtml($fields['USER_DESCRIPTION']); } unset($sanitizer); } unset($bSanitizeComments, $bSanitizeUserDescription); if ($updateComments) { $fields['COMMENTS'] = $comments; } if ($updateUserDescription) { $fields['USER_DESCRIPTION'] = $userDescription; } unset($updateComments, $updateUserDescription, $comments, $userDescription); if (!is_array($fields) || count($fields) === 0) { throw new RestException('Invalid parameters.'); } $origFields = self::getInvoiceDataByID($ID); $origFields = self::filterFields($origFields, 'update'); foreach ($origFields as $fName => $fValue) { if (!array_key_exists($fName, $fields)) { $fields[$fName] = $fValue; } } $bStatusSuccess = CCrmStatusInvoice::isStatusSuccess($fields['STATUS_ID']); if ($bStatusSuccess) { $bStatusFailed = false; } else { $bStatusFailed = CCrmStatusInvoice::isStatusFailed($fields['STATUS_ID']); } if (!$invoice->CheckFields($fields, false, $bStatusSuccess, $bStatusFailed)) { if (!empty($invoice->LAST_ERROR)) { throw new RestException($invoice->LAST_ERROR); } else { throw new RestException('Error on check fields.'); } } $propsInfo = CCrmInvoice::GetPropertiesInfo($fields['PERSON_TYPE_ID']); $propsInfo = is_array($propsInfo[$fields['PERSON_TYPE_ID']]) ? $propsInfo[$fields['PERSON_TYPE_ID']] : array(); $invoiceProperties = array(); foreach ($propsInfo as $propCode => $arProp) { if (array_key_exists($propCode, $fields['INVOICE_PROPERTIES'])) { $invoiceProperties[$arProp['ID']] = $fields['INVOICE_PROPERTIES'][$propCode]; } else { if ($propCode === 'COMPANY_NAME' && array_key_exists('COMPANY', $fields['INVOICE_PROPERTIES'])) { $invoiceProperties[$arProp['ID']] = $fields['INVOICE_PROPERTIES']['COMPANY']; } else { if (is_array($origFields['INVOICE_PROPERTIES'])) { if (array_key_exists($propCode, $origFields['INVOICE_PROPERTIES'])) { $invoiceProperties[$arProp['ID']] = $origFields['INVOICE_PROPERTIES'][$propCode]; } else { if ($propCode === 'COMPANY_NAME' && array_key_exists('COMPANY', $fields['INVOICE_PROPERTIES'])) { $invoiceProperties[$arProp['ID']] = $origFields['INVOICE_PROPERTIES']['COMPANY']; } } } } } } $fields['INVOICE_PROPERTIES'] = $invoiceProperties; unset($propsInfo, $invoiceProperties, $propCode, $arProp); $DB->StartTransaction(); $ID = $invoice->Update($ID, $fields, array('UPDATE_SEARCH' => true)); if (!is_int($ID) || $ID <= 0) { $DB->Rollback(); if (!empty($invoice->LAST_ERROR)) { throw new RestException($invoice->LAST_ERROR); } else { throw new RestException('Error on updating invoice.'); } } else { $DB->Commit(); } return $ID; }