function CCrmProductResult($res, $arFields = array(), $arAdditionalFilter = array(), $arAdditionalSelect = array(), $arOptions = array()) { parent::CDBResult($res); $fields = $arFields; foreach ($fields as $k => $v) { $str = strval($v); if (trim($str) === '') { unset($fields[$k]); } } $this->arFieldAssoc = array_flip($fields); $this->arAdditionalFilter = $arAdditionalFilter; $this->arAdditionalSelect = $arAdditionalSelect; $this->bRealPrice = false; if (is_array($arOptions) && count($arOptions) > 0) { if (isset($arOptions['REAL_PRICE']) && $arOptions['REAL_PRICE'] === true) { $this->bRealPrice = true; } } self::$bVatMode = CCrmTax::isVatMode(); if (self::$bVatMode) { self::$arVatRates = CCrmVat::GetAll(); } }
public static function GetVatRateInfos() { if (self::$VAT_RATES !== null) { return self::$VAT_RATES; } if (!CModule::IncludeModule('catalog')) { return array(); } self::$VAT_RATES = array(); $dbResult = CCatalogVat::GetListEx(array('C_SORT' => 'ASC'), array('ACTIVE' => 'Y'), false, false, array('ID', 'NAME', 'RATE')); if (is_object($dbResult)) { while ($fields = $dbResult->Fetch()) { $ID = intval($fields['ID']); self::$VAT_RATES[] = array('ID' => $ID, 'NAME' => isset($fields['NAME']) ? $fields['NAME'] : "[{$ID}]", 'VALUE' => isset($fields['RATE']) ? round(doubleval($fields['RATE']), 2) : 0.0); } } return self::$VAT_RATES; }
<?php $defaultMeasure = \Bitrix\Crm\Measure::getDefaultMeasure(); $defaultTax = CCrmTax::GetDefaultVatRateInfo(); $measures = \Bitrix\Crm\Measure::getMeasures(100); $productTotalContainerID = $arResult['PREFIX'] . '_product_sum_total_container'; $rowIdPrefix = $arResult['PREFIX'] . '_product_row_'; $productEditorCfg = array('sessid' => bitrix_sessid(), 'serviceUrl' => '/bitrix/components/bitrix/crm.product_row.list/ajax.php?' . bitrix_sessid_get(), 'productSearchUrl' => '/bitrix/components/bitrix/crm.product.list/list.ajax.php?' . bitrix_sessid_get(), 'pathToProductShow' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_PRODUCT_SHOW']), 'pathToProductEdit' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_PRODUCT_EDIT']), 'ownerType' => $arResult['OWNER_TYPE'], 'invoiceMode' => $arResult['INVOICE_MODE'], 'ownerID' => $arResult['OWNER_ID'], 'currencyID' => $arResult['CURRENCY_ID'], 'locationID' => $arResult['LOCATION_ID'], 'currencyFormat' => $arResult['CURRENCY_FORMAT'], 'formID' => $arResult['FORM_ID'], 'productRowsTabID' => $arResult['TAB_ID'], 'containerID' => $containerID, 'productContainerID' => $productContainerID, 'productTotalContainerID' => $productTotalContainerID, 'choiceBtnID' => $choiceProductBtnID, 'addBtnID' => $addProductBtnID, 'productCreateDialogSettings' => isset($arResult['PRODUCT_CREATE_DLG_SETTINGS']) ? $arResult['PRODUCT_CREATE_DLG_SETTINGS'] : null, 'modeBtnID' => $modeBtnID, 'addRowBtnID' => $addRowBtnID, 'canAddProduct' => $bCanAddProduct, 'taxValueID' => $arResult['PREFIX'] . '_tax_value', 'hideModeButton' => $bHideModeButton, 'dataFieldName' => $arResult['PRODUCT_DATA_FIELD_NAME'], 'readOnly' => $readOnly, 'initEditable' => $bInitEditable, 'enableRawCatalogPricing' => $arResult['ENABLE_RAW_CATALOG_PRICING'], 'defaultMeasure' => $defaultMeasure, 'measures' => $measures, 'priceTitleId' => $priceTitleId, 'discountTypeText' => array(\Bitrix\Crm\Discount::UNDEFINED => '-', \Bitrix\Crm\Discount::PERCENTAGE => '%', \Bitrix\Crm\Discount::MONETARY => $currencyText), 'siteId' => $arResult['SITE_ID'], 'clientTypeName' => $arResult['CLIENT_TYPE_NAME'], 'productFields' => array('PRODUCT_NAME', 'PRICE', 'QUANTITY', 'MEASURE', 'DISCOUNT', 'DISCOUNT_SUBTOTAL', 'TAX_RATE', 'TAX_INCLUDED', 'TAX_SUM', 'SUM'), 'rowIdPrefix' => $rowIdPrefix, 'items' => array(), 'jsEventsManagerId' => $jsEventsManagerId); $productEditorCfg['hideTaxIncludedColumn'] = $arResult['HIDE_TAX_INCLUDED_COLUMN']; $productEditorCfg['hideAllTaxes'] = $arResult['HIDE_ALL_TAXES']; $productEditorCfg['allowTax'] = $arResult['ALLOW_TAX']; $productEditorCfg['taxUniform'] = $arResult['PRODUCT_ROW_TAX_UNIFORM']; $productEditorCfg['defaultTax'] = $defaultTax; $productEditorCfg['allowLDTax'] = $arResult['ALLOW_LD_TAX']; $taxes = array(); if ($arResult['ALLOW_TAX']) { $productEditorCfg['taxes'] = $taxes = CCrmTax::GetVatRateInfos(); } $taxRatesOrig = array(); foreach ($taxes as $tax) { $taxRatesOrig[] = $tax['VALUE']; } $productEditorCfg['enableTax'] = $arResult['ENABLE_TAX']; $productEditorCfg['enableDiscount'] = $arResult['ENABLE_DISCOUNT']; for ($i = 0; $i < $nProductRows; $i++) { $row = $arResult['PRODUCT_ROWS'][$i]; $rowID = $rowIdPrefix . strval($i); $productID = intval($row['PRODUCT_ID']); $productName = isset($row['PRODUCT_NAME']) ? $row['PRODUCT_NAME'] : ''; if ($productName === '') { $productName = $productID > 0 && isset($row['ORIGINAL_PRODUCT_NAME']) ? $row['ORIGINAL_PRODUCT_NAME'] : "[{$productID}]"; }
unset($totalSum, $totalTax); $arResult['FORM_ID'] = isset($arParams['FORM_ID']) ? $arParams['FORM_ID'] : ''; $arResult['TAB_ID'] = isset($arParams['TAB_ID']) ? $arParams['TAB_ID'] : ''; $arResult['PREFIX'] = isset($arParams['PREFIX']) ? $arParams['PREFIX'] : ''; if ($arResult['PREFIX'] === '') { $arResult['PREFIX'] = htmlspecialcharsbx($ownerID > 0 ? strtolower($ownerName) . '_' . strval($ownerID) : 'new_' . strtolower($ownerName)); } $arResult['ID'] = isset($arParams['ID']) ? $arParams['ID'] : ''; if ($arResult['ID'] === '') { $arResult['ID'] = $arResult['PREFIX'] . '_product_editor'; } //$arResult['CONTAINER_CLASS'] = htmlspecialcharsbx(strtolower($ownerName).'-product-rows'); $arResult['PRODUCT_DATA_FIELD_NAME'] = isset($arParams['PRODUCT_DATA_FIELD_NAME']) ? $arParams['PRODUCT_DATA_FIELD_NAME'] : 'PRODUCT_ROW_DATA'; $arResult['ENABLE_CUSTOM_PRODUCTS'] = isset($arParams['ENABLE_CUSTOM_PRODUCTS']) ? strtoupper($arParams['ENABLE_CUSTOM_PRODUCTS']) === 'Y' : true; $arResult['ENABLE_RAW_CATALOG_PRICING'] = !isset($arParams['ENABLE_RAW_CATALOG_PRICING']) || strtoupper($arParams['ENABLE_RAW_CATALOG_PRICING']) === 'Y'; $arResult['TAX_INFOS'] = $arResult['ALLOW_TAX'] ? CCrmTax::GetVatRateInfos() : array(); $arResult['ENABLE_TAX'] = isset($arParams['ENABLE_TAX']) ? $arParams['ENABLE_TAX'] === 'Y' : false; $arResult['ENABLE_DISCOUNT'] = isset($arParams['ENABLE_DISCOUNT']) ? $arParams['ENABLE_DISCOUNT'] === 'Y' : false; $settings = array(); if ($ownerID > 0) { $settings = CCrmProductRow::LoadSettings($ownerType, $ownerID); if (isset($settings['ENABLE_TAX'])) { $arResult['ENABLE_TAX'] = (bool) $settings['ENABLE_TAX']; } if (isset($settings['ENABLE_DISCOUNT'])) { $arResult['ENABLE_DISCOUNT'] = (bool) $settings['ENABLE_DISCOUNT']; } } $arResult['SITE_ID'] = SITE_ID; $arResult['CAN_ADD_PRODUCT'] = $perms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE'); // measure list items
//<-- COMMENTS & USER_DESCRIPTION $responsibleID = max(isset($data['RESPONSIBLE_ID']) ? intval($data['RESPONSIBLE_ID']) : 0, 0); if ($responsibleID == 0) { $responsibleID = CCrmSecurityHelper::GetCurrentUserID(); } $arFields = array('ID' => $ID, 'ORDER_TOPIC' => $topic, 'STATUS_ID' => $statusID, 'CURRENCY' => $currencyID, 'PAY_SYSTEM_ID' => $resolvedPaySystemID, 'PERSON_TYPE_ID' => $resolvedPersonTypeID, 'RESPONSIBLE_ID' => $responsibleID, 'UF_DEAL_ID' => $dealID, 'UF_COMPANY_ID' => $companyID, 'UF_CONTACT_ID' => $contactID, 'COMMENTS' => $comments, 'USER_DESCRIPTION' => $userDescription, 'PRODUCT_ROWS' => $productRows); // DATE_INSERT & DATE_BILL & DATE_PAY_BEFORE --> $arFields['DATE_INSERT'] = ConvertTimeStamp($now, 'SHORT', SITE_ID); $ts = isset($data['DATE_BILL']) ? intval($data['DATE_BILL']) : 0; $arFields['DATE_BILL'] = ConvertTimeStamp($ts > 0 ? $ts : $now, 'SHORT', SITE_ID); $ts = isset($data['DATE_PAY_BEFORE']) ? intval($data['DATE_PAY_BEFORE']) : 0; if ($ts > 0) { $arFields['DATE_PAY_BEFORE'] = ConvertTimeStamp($ts, 'SHORT', SITE_ID); } //<-- DATE_INSERT & DATE_BILL & DATE_PAY_BEFORE $taxMode = CCrmTax::isVatMode() ? 'VAT' : (CCrmTax::isTaxMode() ? 'EXT' : ''); if ($taxMode === 'EXT') { $arFields['PR_LOCATION'] = isset($data['LOCATION_ID']) ? intval($data['LOCATION_ID']) : 0; } $isSuccessfull = CCrmStatusInvoice::isStatusSuccess($statusID); $isFailed = !$isSuccessfull && CCrmStatusInvoice::isStatusFailed($statusID); if ($isSuccessfull) { $timestamp = isset($data['PAYMENT_TIME_STAMP']) ? max(intval($data['PAYMENT_TIME_STAMP']), 0) : 0; $arFields['PAY_VOUCHER_DATE'] = $timestamp > 0 ? ConvertTimeStamp($timestamp, 'SHORT', SITE_ID) : null; $arFields['PAY_VOUCHER_NUM'] = isset($data['PAYMENT_DOC']) ? substr(trim($data['PAYMENT_DOC']), 0, 20) : ''; $arFields['REASON_MARKED'] = isset($data['PAYMENT_COMMENT']) ? substr(trim($data['PAYMENT_COMMENT']), 0, 255) : ''; } elseif ($isFailed) { $timestamp = isset($data['CANCEL_TIME_STAMP']) ? max(intval($data['CANCEL_TIME_STAMP']), 0) : 0; $arFields['DATE_MARKED'] = $timestamp > 0 ? ConvertTimeStamp($timestamp, 'SHORT', SITE_ID) : null; $arFields['REASON_MARKED'] = isset($data['CANCEL_REASON']) ? substr(trim($data['CANCEL_REASON']), 0, 255) : ''; }
$arResult['TITLE'] = ''; $arResult['CURRENCY_ID'] = CCrmCurrency::GetBaseCurrencyID(); $arResult['SUM'] = 0.0; $arResult['TAX_SUM'] = 0.0; } $rows = CCrmInvoice::GetProductRows($entityID); foreach ($rows as &$row) { $item = array('PRODUCT_NAME' => isset($row['PRODUCT_NAME']) ? $row['PRODUCT_NAME'] : '', 'PRICE' => isset($row['PRICE']) ? round(doubleval($row['PRICE']), 2) : 0.0, 'VAT_RATE' => isset($row['VAT_RATE']) ? round(doubleval($row['VAT_RATE']) * 100, 2) : 0.0, 'QUANTITY' => isset($row['QUANTITY']) ? intval($row['QUANTITY']) : 0); $item['FORMATTED_PRICE'] = CCrmCurrency::MoneyToString($item['PRICE'], $arResult['CURRENCY_ID']); $arResult['ITEMS'][] =& $item; unset($item); } unset($row); // VAT - VAT ONLY // EXT - EXTENDED MODE WITH CUSTOM TAXES $arResult['TAX_MODE'] = CCrmTax::isVatMode() ? 'VAT' : 'EXT'; if ($arResult['TAX_MODE'] === 'VAT') { $arResult['VAT_SUM'] = isset($arResult['TAX_SUM']) ? $arResult['TAX_SUM'] : 0.0; $arResult['FORMATTED_VAT_SUM'] = CCrmCurrency::MoneyToString($arResult['VAT_SUM'], $arResult['CURRENCY_ID']); $arResult['FORMATTED_SUM_BRUTTO'] = CCrmCurrency::MoneyToString($arResult['SUM'], $arResult['CURRENCY_ID']); } else { $arResult['TAX_LIST'] = CCrmInvoice::getTaxList($entityID); foreach ($arResult['TAX_LIST'] as &$taxInfo) { $taxInfo['FORMATTED_SUM'] = CCrmCurrency::MoneyToString($taxInfo['VALUE_MONEY'], $arResult['CURRENCY_ID']); } unset($taxInfo); $arResult['TAX_LIST_PERCENT_PRECISION'] = SALE_VALUE_PRECISION; } $arResult['FORMATTED_SUM_BRUTTO'] = CCrmCurrency::MoneyToString($arResult['SUM'], $arResult['CURRENCY_ID']); $arResult['FORMATTED_SUM_NETTO'] = CCrmCurrency::MoneyToString($arResult['SUM'] - $arResult['TAX_SUM'], $arResult['CURRENCY_ID']); } else {
die; } if (!CModule::IncludeModule('crm')) { ShowError(GetMessage('CRM_MODULE_NOT_INSTALLED')); return; } global $USER, $APPLICATION; $CrmPerms = new CCrmPerms($USER->GetID()); if (!$CrmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'READ')) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } $arParams['PATH_TO_PRODUCT_LIST'] = CrmCheckPath('PATH_TO_PRODUCT_LIST', $arParams['PATH_TO_PRODUCT_LIST'], ''); $arParams['PATH_TO_PRODUCT_FILE'] = CrmCheckPath('PATH_TO_PRODUCT_FILE', $arParams['PATH_TO_PRODUCT_FILE'], $APPLICATION->GetCurPage() . '?product_id=#product_id#&field_id=#field_id#&file_id=#file_id#&file'); //CUtil::InitJSCore(array('ajax', 'tooltip')); $bVatMode = CCrmTax::isVatMode(); $vatRateListItems = array(); if ($bVatMode) { $vatRateListItems = CCrmVat::GetVatRatesListItems(); } // measure list items $measureListItems = array('' => GetMessage('CRM_MEASURE_NOT_SELECTED')); $measures = \Bitrix\Crm\Measure::getMeasures(100); if (is_array($measures)) { foreach ($measures as $measure) { $measureListItems[$measure['ID']] = $measure['SYMBOL']; } unset($measure); } unset($measures); $productID = isset($arParams['PRODUCT_ID']) ? intval($arParams['PRODUCT_ID']) : 0;
} if (!isset($_GET['AJAX_CALL'])) { LocalRedirect($bInternal ? '?' . $arParams['FORM_ID'] . '_active_tab=tab_product' : ''); } } $gridOptions = new CCrmGridOptions($arResult['GRID_ID']); $gridSorting = $gridOptions->GetSorting(array('sort' => array('NAME' => 'asc'), 'vars' => array('by' => 'by', 'order' => 'order'))); $sort = $arResult['SORT'] = $gridSorting['sort']; $arResult['SORT_VARS'] = $gridSorting['vars']; $arLangs = array(); $dbLangsList = CSite::GetList($b = "sort", $o = "asc"); while ($arLang = $dbLangsList->Fetch()) { $arLangs[$arLang["LID"]] = "[" . $arLang["LID"] . "] " . $arLang["NAME"]; } $taxies = array(); $allTaxies = CCrmTax::GetAll(); foreach ($allTaxies as $k => $v) { $tax = array(); $tax['ID'] = $tax['~ID'] = $k; // Key is Currency ID $tax['TIMESTAMP_X'] = $tax['~TIMESTAMP_X'] = CCrmComponentHelper::TrimDateTimeString(FormatDate('FULL', MakeTimeStamp($v['TIMESTAMP_X']))); $tax['LID'] = $arLangs[$v['LID']]; $tax['NAME'] = $v['NAME']; $tax['CODE'] = $v['CODE']; $tax['PATH_TO_TAX_SHOW'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_SHOW'], array('tax_id' => $k)); $tax['PATH_TO_TAX_EDIT'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_EDIT'], array('tax_id' => $k)); $tax['PATH_TO_TAX_SHOW_RATES'] = CHTTP::urlAddParams($tax['PATH_TO_TAX_EDIT'], array("FORM_ID" => $arResult['EDIT_FORM_ID'], $arResult['EDIT_FORM_ID'] . "_active_tab" => 'tab_rateslist')); $tax['PATH_TO_TAX_DELETE'] = CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_LIST'], array('tax_id' => $k)), array('action_' . $arResult['GRID_ID'] => 'delete', 'ID' => $k, 'sessid' => bitrix_sessid())); $rateNum = 0; $dbRes = CSaleTaxRate::GetList(array(), array("TAX_ID" => $tax['ID'])); while ($dbRes->Fetch()) {
// CONTEXT_ID --> $contextID = isset($arParams['CONTEXT_ID']) ? $arParams['CONTEXT_ID'] : ''; if ($contextID === '' && isset($_REQUEST['context_id'])) { $contextID = $_REQUEST['context_id']; } if ($contextID === '') { $contextID = "{$uid}_{$entityID}"; } $arResult['CONTEXT_ID'] = $arParams['CONTEXT_ID'] = $contextID; //<-- CONTEXT_ID $arResult['STATUS_LIST'] = CCrmStatus::GetStatus('INVOICE_STATUS'); $personTypes = $arResult['PERSON_TYPES'] = CCrmPaySystem::getPersonTypeIDs(); // '' - NO TAXES // 'VAT' - VAT ONLY // 'EXT' - EXTENDED MODE WITH CUSTOM TAXES $taxMode = $arResult['TAX_MODE'] = CCrmTax::isVatMode() ? 'VAT' : (CCrmTax::isTaxMode() ? 'EXT' : ''); $companyID = 0; $contactID = 0; $dealID = 0; $dealCurrencyID = ''; $personTypeID = 0; $paySystemID = 0; $properties = array(); $currencyID = CCrmInvoice::GetCurrencyID(); $arFields = null; if ($entityID === 0) { $arResult['MODE'] = 'CREATE'; $now = time() + CTimeZone::GetOffset(); $nowDate = ConvertTimeStamp($now, 'SHORT', SITE_ID); $arFields = array('~CURRENCY' => $currencyID, 'CURRENCY' => htmlspecialcharsbx($currencyID)); $arFields['~STATUS_ID'] = !empty($arResult['STATUS_LIST']) ? array_shift(array_keys($arResult['STATUS_LIST'])) : '';
public static function ParsePropertiesValuesFromPost($personTypeId, $post, &$arInvoiceProps) { if (!is_array($arInvoiceProps) || count($arInvoiceProps) <= 0) { return false; } $result = false; $bTaxMode = CCrmTax::isTaxMode(); $arPropsValues = array(); $arPropsIndexes = array(); $error = 0; foreach ($arInvoiceProps as $propertyKey => $property) { if (!isset($property['VALUE']) && $property['VALUE'] !== null || !isset($property['FIELDS']) || !is_array($property['FIELDS']) || count($property['FIELDS']) <= 0) { $error = 1; break; } $arPropertyFields =& $property['FIELDS']; if ($arPropertyFields["CODE"] === "LOCATION" && isset($post['LOC_CITY']) && $bTaxMode) { // location $locationId = trim($post['LOC_CITY']); if ($locationId > 0) { $arInvoiceProps['PR_LOCATION']['VALUE'] = $locationId; } elseif (isset($arInvoiceProps['PR_LOCATION'])) { $locationId = $arInvoiceProps['PR_LOCATION']['VALUE']; } if ($locationId > 0 && ($personTypeId === 0 || $arPropertyFields["PERSON_TYPE_ID"] == $personTypeId)) { $arPropsValues[$arPropertyFields["ID"]] = $locationId; $arPropsIndexes['PR_LOCATION'] = $arPropertyFields["ID"]; //rewrite invoice property $arInvoiceProps['PR_LOCATION']['VALUE'] = $locationId; } unset($locationId); } if (!is_array(${"PR_INVOICE_" . $arPropertyFields["ID"]})) { $curVal = trim($post["PR_INVOICE_" . $arPropertyFields["ID"]]); } else { $curVal = trim($post["PR_INVOICE_" . $arPropertyFields["ID"]]); } if ($arPropertyFields["TYPE"] == "MULTISELECT") { $curVal = ""; $countOrderProp = count($post["PR_INVOICE_" . $arPropertyFields["ID"]]); for ($i = 0; $i < $countOrderProp; $i++) { if ($i > 0) { $curVal .= ","; } $curVal .= $post["PR_INVOICE_" . $arPropertyFields["ID"]][$i]; } } if ($arPropertyFields["TYPE"] == "CHECKBOX" && strlen($curVal) <= 0 && $arPropertyFields["REQUIED"] != "Y") { $curVal = "N"; } if (!isset($arPropsValues[$arPropertyFields["ID"]]) && ($personTypeId === 0 || $arPropertyFields["PERSON_TYPE_ID"] == $personTypeId)) { $arPropsValues[$arPropertyFields["ID"]] = $curVal; //rewrite invoice property $arInvoiceProps['PR_INVOICE_' . $arPropertyFields["ID"]]['VALUE'] = $curVal; } if (!isset($arPropsIndexes['PR_INVOICE_' . $arPropertyFields["ID"]])) { $arPropsIndexes['PR_INVOICE_' . $arPropertyFields["ID"]] = $arPropertyFields["ID"]; } } if ($error > 0) { return false; } if (count($arPropsValues) > 0) { $result = array('PROPS_VALUES' => $arPropsValues, 'PROPS_INDEXES' => $arPropsIndexes); } return $result; }
private static function PrepareShoppingCartItems(&$productRows, $currencyID, $siteId) { $items = array(); foreach ($productRows as $k => &$v) { $item = array(); $item['PRODUCT_ID'] = isset($v['PRODUCT_ID']) ? intval($v['PRODUCT_ID']) : 0; $isCustomized = isset($v['CUSTOMIZED']) && $v['CUSTOMIZED'] === 'Y'; if ($item['PRODUCT_ID'] > 0 && !$isCustomized) { $item['MODULE'] = 'catalog'; $item['PRODUCT_PROVIDER_CLASS'] = 'CCatalogProductProvider'; } else { $item['MODULE'] = $item['PRODUCT_PROVIDER_CLASS'] = ''; } if ($isCustomized) { $item['CUSTOM_PRICE'] = 'Y'; } $item['TABLE_ROW_ID'] = $k; $item['QUANTITY'] = isset($v['QUANTITY']) ? doubleval($v['QUANTITY']) : 0; $item['QUANTITY_DEFAULT'] = $item['QUANTITY']; $item['PRICE'] = isset($v['PRICE']) ? doubleval($v['PRICE']) : 0.0; $item['PRICE_DEFAULT'] = $item['PRICE']; $item['CURRENCY'] = $currencyID; // discount info $item['CRM_PR_FIELDS'] = array(); $item['CRM_PR_FIELDS']['DISCOUNT_TYPE_ID'] = isset($v['DISCOUNT_TYPE_ID']) ? intval($v['DISCOUNT_TYPE_ID']) : \Bitrix\Crm\Discount::PERCENTAGE; $item['CRM_PR_FIELDS']['DISCOUNT_RATE'] = isset($v['DISCOUNT_RATE']) ? round(doubleval($v['DISCOUNT_RATE']), 2) : 0.0; $item['CRM_PR_FIELDS']['DISCOUNT_SUM'] = isset($v['DISCOUNT_SUM']) ? round(doubleval($v['DISCOUNT_SUM']), 2) : 0.0; // tax info $taxRate = isset($v['TAX_RATE']) ? round(doubleval($v['TAX_RATE']), 2) : 0.0; $allowLDTax = CCrmTax::isTaxMode(); if ($allowLDTax) { $item['CRM_PR_FIELDS']['TAX_RATE'] = 0.0; $item['CRM_PR_FIELDS']['TAX_INCLUDED'] = 'N'; } else { $item['CRM_PR_FIELDS']['TAX_RATE'] = $taxRate; $item['CRM_PR_FIELDS']['TAX_INCLUDED'] = isset($v['TAX_INCLUDED']) && $v['TAX_INCLUDED'] === 'Y' ? 'Y' : 'N'; } // price netto, price brutto $exclusivePrice = $taxRate !== 0.0 ? CCrmProductRow::CalculateExclusivePrice($item['PRICE'], $taxRate) : $item['PRICE']; if ($item['CRM_PR_FIELDS']['DISCOUNT_TYPE_ID'] === \Bitrix\Crm\Discount::MONETARY) { $priceNetto = $exclusivePrice + $item['CRM_PR_FIELDS']['DISCOUNT_SUM']; $item['CRM_PR_FIELDS']['PRICE_NETTO'] = round($priceNetto, 2); } else { $discoutRate = $item['CRM_PR_FIELDS']['DISCOUNT_RATE']; $discoutSum = $discoutRate < 100 ? \Bitrix\Crm\Discount::calculateDiscountByDiscountPrice($exclusivePrice, $discoutRate) : $item['CRM_PR_FIELDS']['DISCOUNT_SUM']; $priceNetto = $exclusivePrice + $discoutSum; $item['CRM_PR_FIELDS']['PRICE_NETTO'] = round($priceNetto, 2); } if ($item['CRM_PR_FIELDS']['DISCOUNT_SUM'] === 0.0) { $item['CRM_PR_FIELDS']['PRICE_BRUTTO'] = $item['PRICE']; } else { $item['CRM_PR_FIELDS']['PRICE_BRUTTO'] = round(CCrmProductRow::CalculateInclusivePrice($priceNetto, $item['CRM_PR_FIELDS']['TAX_RATE']), 2); } if (isset($v['VAT_RATE'])) { $item['VAT_RATE'] = $v['VAT_RATE']; } elseif (isset($v['TAX_RATE'])) { $item['VAT_RATE'] = $v['TAX_RATE'] / 100; } if (isset($v['MEASURE_CODE'])) { $item['MEASURE_CODE'] = $v['MEASURE_CODE']; } if (isset($v['MEASURE_NAME'])) { $item['MEASURE_NAME'] = $v['MEASURE_NAME']; } $item['NAME'] = isset($v['NAME']) ? $v['NAME'] : (isset($v['PRODUCT_NAME']) ? $v['PRODUCT_NAME'] : ''); $item['LID'] = $siteId; $item['CAN_BUY'] = 'Y'; $items[] =& $item; unset($item); } unset($v); return $items; }
public static function CalculateTotalInfo($ownerType, $ownerID, $checkPerms = true, $params = null, $rows = null, $totalInfo = array()) { if (!is_array($totalInfo)) { $totalInfo = array(); } $result = false; if (isset($totalInfo['OPPORTUNITY']) && isset($totalInfo['TAX_VALUE'])) { $result = array('OPPORTUNITY' => round(doubleval($totalInfo['OPPORTUNITY']), 2), 'TAX_VALUE' => round(doubleval($totalInfo['TAX_VALUE']), 2)); } else { $arParams = null; if ($ownerID <= 0) { $arParams = $params; } else { if ($ownerType === 'L') { $arParams = CCrmLead::GetByID($ownerID, $checkPerms); } elseif ($ownerType === 'D') { $arParams = CCrmDeal::GetByID($ownerID, $checkPerms); } elseif ($ownerType === CCrmQuote::OWNER_TYPE) { $arParams = CCrmQuote::GetByID($ownerID, $checkPerms); } } if (!is_array($arParams)) { return $result; } $arRows = null; if (is_array($rows)) { $arRows = $rows; } elseif ($ownerID > 0) { $arRows = CCrmProductRow::LoadRows($ownerType, $ownerID); } if (!is_array($arRows)) { return $result; } $currencyID = isset($params['CURRENCY_ID']) ? $params['CURRENCY_ID'] : ''; if ($currencyID === '') { $currencyID = CCrmCurrency::GetBaseCurrencyID(); } $companyID = isset($params['COMPANY_ID']) ? intval($params['COMPANY_ID']) : 0; $contactID = isset($params['CONTACT_ID']) ? intval($params['CONTACT_ID']) : 0; // Determine person type $personTypeId = 0; $arPersonTypes = CCrmPaySystem::getPersonTypeIDs(); if ($companyID > 0 && isset($arPersonTypes['COMPANY'])) { $personTypeId = $arPersonTypes['COMPANY']; } elseif ($contactID > 0 && isset($arPersonTypes['CONTACT'])) { $personTypeId = $arPersonTypes['CONTACT']; } $enableSaleDiscount = false; $siteID = ''; if (defined('SITE_ID')) { $siteID = SITE_ID; } else { $obSite = CSite::GetList($by = 'def', $order = 'desc', array('ACTIVE' => 'Y')); if ($obSite && ($arSite = $obSite->Fetch())) { $siteID = $arSite["LID"]; } unset($obSite, $arSite); } $calculateOptions = array(); if (CCrmTax::isTaxMode()) { $calculateOptions['LOCATION_ID'] = isset($arParams['LOCATION_ID']) ? $arParams['LOCATION_ID'] : ''; } $calculated = CCrmSaleHelper::Calculate($arRows, $currencyID, $personTypeId, $enableSaleDiscount, $siteID, $calculateOptions); $result = array('OPPORTUNITY' => isset($calculated['PRICE']) ? round(doubleval($calculated['PRICE']), 2) : 1.0, 'TAX_VALUE' => isset($calculated['TAX_VALUE']) ? round(doubleval($calculated['TAX_VALUE']), 2) : 0.0); } return $result; }
$tax = CCrmTax::GetByID($taxID); if (is_array($tax)) { if (!CSaleTax::Update($taxID, $fields)) { ShowError(GetMessage('CRM_TAX_UPDATE_UNKNOWN_ERROR')); } } else { $fields['TAX'] = $taxID; $taxID = CSaleTax::Add($fields); if (intval($taxID) <= 0) { ShowError(GetMessage('CRM_TAX_ADD_UNKNOWN_ERROR')); } } LocalRedirect(isset($_POST['apply']) ? CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_EDIT'], array('tax_id' => $taxID)) : CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_LIST'], array('tax_id' => $taxID))); } elseif ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['delete'])) { $taxID = isset($arParams['TAX_ID']) ? intval($arParams['TAX_ID']) : 0; $tax = $taxID > 0 ? CCrmTax::GetByID($taxID) : null; if ($tax) { if (!CSaleTax::Delete($taxID)) { ShowError(GetMessage('CRM_TAX_DELETE_UNKNOWN_ERROR')); } } LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_LIST'], array())); } } $arResult['FIELDS'] = array(); /* $arResult['FIELDS']['tab_props'][] = array( 'id' => 'tax_info', 'name' => GetMessage('CRM_TAX_SECTION_MAIN'), 'type' => 'section' );
$arParams['PATH_TO_PRODUCT_LIST'] = CrmCheckPath('PATH_TO_PRODUCT_LIST', $arParams['PATH_TO_PRODUCT_LIST'], $APPLICATION->GetCurPage() . '?section_id=#section_id#'); $arParams['PATH_TO_PRODUCT_SHOW'] = CrmCheckPath('PATH_TO_PRODUCT_SHOW', $arParams['PATH_TO_PRODUCT_SHOW'], $APPLICATION->GetCurPage() . '?product_id=#product_id#&show'); $arParams['PATH_TO_PRODUCT_EDIT'] = CrmCheckPath('PATH_TO_PRODUCT_EDIT', $arParams['PATH_TO_PRODUCT_EDIT'], $APPLICATION->GetCurPage() . '?product_id=#product_id#&edit'); $arParams['PATH_TO_PRODUCT_FILE'] = CrmCheckPath('PATH_TO_PRODUCT_FILE', $arParams['PATH_TO_PRODUCT_FILE'], $APPLICATION->GetCurPage() . '?product_id=#product_id#&field_id=#field_id#&file_id=#file_id#&file'); // prepare URI template $curParam = $APPLICATION->GetCurParam(); $curParam = preg_replace('/(^|[^\\w])bxajaxid=[\\d\\w]*([^\\d\\w]|$)/', '', $curParam); $curParam = preg_replace('/(?<!\\w)list_section_id=\\d*(?=([^\\d]|$))/', 'list_section_id=#section_id#', $curParam); $curParam = preg_replace('/(^|&)tree=\\w*(?=(&|$))/', '', $curParam); $arResult['PAGE_URI_TEMPLATE'] = $arParams['PATH_TO_PRODUCT_LIST'] . (strlen($curParam) > 0 ? '?' . $curParam . '&tree=Y' : '?tree=Y'); unset($curParam); $arFilter = $arSort = array(); $bInternal = false; $arResult['FORM_ID'] = isset($arParams['FORM_ID']) ? $arParams['FORM_ID'] : ''; $arResult['TAB_ID'] = isset($arParams['TAB_ID']) ? $arParams['TAB_ID'] : ''; $bVatMode = $arResult['VAT_MODE'] = CCrmTax::isVatMode(); $arResult['VAT_RATE_LIST_ITEMS'] = array(); if ($bVatMode) { $arResult['VAT_RATE_LIST_ITEMS'] = CCrmVat::GetVatRatesListItems(); } // measure list items $arResult['MEASURE_LIST_ITEMS'] = array('' => GetMessage('CRM_MEASURE_NOT_SELECTED')); $measures = \Bitrix\Crm\Measure::getMeasures(100); if (is_array($measures)) { foreach ($measures as $measure) { $arResult['MEASURE_LIST_ITEMS'][$measure['ID']] = $measure['SYMBOL']; } unset($measure); } unset($measures); if (isset($arResult['PRODUCT_ID'])) {
public static function RecalculatePriceVat($price, $bVatIncluded, $vatId) { $result = $price; if (self::$bVatMode === null) { self::$bVatMode = CCrmTax::isVatMode(); if (self::$bVatMode) { self::$arVatRates = CCrmVat::GetAll(); } } if (self::$bVatMode) { if ($bVatIncluded !== 'Y') { if (isset(self::$arVatRates[$vatId])) { $vatRate = self::$arVatRates[$vatId]['RATE']; $result = (doubleval($vatRate) / 100 + 1) * doubleval($price); } } } return $result; }
} } else { $arResult['ID'] = isset($arParams['ID']) ? intval($arParams['ID']) : 0; $arResult['TAX_ID'] = isset($arParams['TAX_ID']) ? intval($arParams['TAX_ID']) : 0; $arResult['FORM_ID'] = isset($arParams['FORM_ID']) ? strval($arParams['FORM_ID']) : ''; $arTaxRate = array(); if ($arResult['ID'] > 0) { $dbTaxRate = CSaleTaxRate::GetList(array(), array("ID" => $arResult['ID'])); $arTaxRate = $dbTaxRate->Fetch(); } $arResult['ACTIVE'] = isset($arTaxRate['ACTIVE']) && $arTaxRate['ACTIVE'] == 'Y' || $arResult['ID'] <= 0 ? true : false; $arResult['PERSON_TYPE_ID'] = isset($arTaxRate['PERSON_TYPE_ID']) ? intval($arTaxRate['PERSON_TYPE_ID']) : 0; $arResult['VALUE'] = isset($arTaxRate['VALUE']) ? strval($arTaxRate['VALUE']) : ''; $arResult['IS_IN_PRICE'] = isset($arTaxRate['IS_IN_PRICE']) && $arTaxRate['IS_IN_PRICE'] == 'Y' ? true : false; $arResult['APPLY_ORDER'] = isset($arTaxRate['APPLY_ORDER']) ? intval($arTaxRate['APPLY_ORDER']) : 100; $arTax = CCrmTax::GetById($arResult['TAX_ID']); $arResult['TAX_NAME'] = htmlspecialcharsbx($arTax['NAME']); $arLOCATION1 = array(); if ($lpEnabled) { $arResult['LOCATION1'] = array(); $arResult['LOCATION1_LIST'] = array(); if (isset($_POST['LOCATION1']) || isset($_POST['LOCATION2'])) { $arResult['LOCATION_QUERY'] = array('L' => isset($LOCATION1) ? $LOCATION1 : array(), 'G' => isset($LOCATION2) ? $LOCATION2 : array()); } else { $arResult['LOCATION_QUERY'] = false; } } else { $db_location = CSaleTaxRate::GetLocationList(array("TAX_RATE_ID" => $arResult['ID'], "LOCATION_TYPE" => "L")); while ($arLocation = $db_location->Fetch()) { $arLOCATION1[] = $arLocation["LOCATION_ID"]; }
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('crm')) { return; } if (!CModule::IncludeModule('sale')) { return; } global $USER; $CCrmPerms = new CCrmPerms($USER->GetID()); if ($CCrmPerms->HavePerm('CONFIG', BX_CRM_PERM_NONE, 'WRITE')) { return; } CUtil::InitJSCore(); if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (check_bitrix_sessid()) { $arResult['BACK_URL'] = isset($_POST['BACK_URL']) ? $_POST['BACK_URL'] : ''; $arResult['TAX_TYPE'] = isset($_POST['TAX_TYPE']) ? $_POST['TAX_TYPE'] : ''; if (strlen($arResult['TAX_TYPE']) > 0) { if ($arResult['TAX_TYPE'] == 'tax') { CCrmTax::unSetVatMode(); } elseif ($arResult['TAX_TYPE'] == 'vat') { CCrmTax::setVatMode(); } } } } else { $arResult['IS_VAT_MODE'] = CCrmTax::isVatMode(); } $this->IncludeComponentTemplate();
} unset($productRow); $currencyID = isset($_POST['CURRENCY_ID']) && $_POST['CURRENCY_ID'] !== '' ? $_POST['CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $clientTypeName = isset($_POST['CLIENT_TYPE_NAME']) && $_POST['CLIENT_TYPE_NAME'] !== '' ? strtoupper($_POST['CLIENT_TYPE_NAME']) : 'CONTACT'; $personTypeIDs = CCrmPaySystem::getPersonTypeIDs(); if (empty($personTypeIDs)) { echo CUtil::PhpToJSObject(array('ERROR' => 'PERSON_TYPES_NOT_DEFINED')); } $personTypeID = isset($personTypeIDs[$clientTypeName]) ? intval($personTypeIDs[$clientTypeName]) : 0; if ($personTypeID <= 0) { echo CUtil::PhpToJSObject(array('ERROR' => 'COULD_NOT_FIND_PERSON_TYPE')); die; } $enableSaleDiscount = isset($_POST['ENABLE_ADDITIONAL_DISCOUNT']) && strtoupper($_POST['ENABLE_ADDITIONAL_DISCOUNT']) === 'Y'; $calculateOptions = array(); $isLDTaxAllowed = isset($_POST['ALLOW_LD_TAX']) ? $_POST['ALLOW_LD_TAX'] === 'Y' : CCrmTax::isTaxMode(); if ($isLDTaxAllowed && isset($_POST['LOCATION_ID'])) { $calculateOptions['LOCATION_ID'] = $_POST['LOCATION_ID']; } $result = CCrmSaleHelper::Calculate($productRows, $currencyID, $personTypeID, $enableSaleDiscount, $siteID, $calculateOptions); if (!is_array($result)) { $result = array(); } $totalSum = isset($result['PRICE']) ? round(doubleval($result['PRICE']), 2) : 0.0; $totalTax = isset($result['TAX_VALUE']) ? round(doubleval($result['TAX_VALUE']), 2) : 0.0; $totalBeforeTax = round($totalSum - $totalTax, 2); $totalBeforeDiscount = round($totalBeforeTax + $totalDiscount, 2); $arResponse = array('TOTALS' => array('TOTAL_SUM' => $totalSum, 'TOTAL_TAX' => $totalTax, 'TOTAL_BEFORE_TAX' => $totalBeforeTax, 'TOTAL_DISCOUNT' => $totalDiscount, 'TOTAL_BEFORE_DISCOUNT' => $totalBeforeDiscount, 'TOTAL_SUM_FORMATTED' => CCrmCurrency::MoneyToString($totalSum, $currencyID), 'TOTAL_TAX_FORMATTED' => CCrmCurrency::MoneyToString($totalTax, $currencyID), 'TOTAL_BEFORE_TAX_FORMATTED' => CCrmCurrency::MoneyToString($totalBeforeTax, $currencyID), 'TOTAL_DISCOUNT_FORMATTED' => CCrmCurrency::MoneyToString($totalDiscount, $currencyID), 'TOTAL_BEFORE_DISCOUNT_FORMATTED' => CCrmCurrency::MoneyToString($totalBeforeDiscount, $currencyID))); if ($isLDTaxAllowed) { $taxes = is_array($result['TAX_LIST']) ? $result['TAX_LIST'] : null; if (!is_array($taxes) || count($taxes) === 0) {
return; } global $USER, $APPLICATION; $arParams['PATH_TO_TAX_LIST'] = CrmCheckPath('PATH_TO_TAX_LIST', $arParams['PATH_TO_TAX_LIST'], ''); $arParams['PATH_TO_TAX_SHOW'] = CrmCheckPath('PATH_TO_TAX_SHOW', $arParams['PATH_TO_TAX_SHOW'], '?tax_id=#tax_id#&show'); $arParams['PATH_TO_TAX_ADD'] = CrmCheckPath('PATH_TO_TAX_ADD', $arParams['PATH_TO_TAX_ADD'], '?add'); $arParams['PATH_TO_TAX_EDIT'] = CrmCheckPath('PATH_TO_TAX_EDIT', $arParams['PATH_TO_TAX_EDIT'], '?tax_id=#tax_id#&edit'); if (!isset($arParams['TYPE'])) { $arParams['TYPE'] = 'list'; } $arResult['BUTTONS'] = array(); $taxID = isset($arParams['TAX_ID']) ? strval($arParams['TAX_ID']) : ''; $CrmPerms = new CCrmPerms($USER->GetID()); $taxAdd = $taxEdit = $taxDelete = $CrmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE'); $taxShow = $CrmPerms->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'READ'); $exists = intval($taxID > 0) && is_array(CCrmTax::GetByID($taxID)); if ($arParams['TYPE'] !== 'list') { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('CRM_TAX_LIST'), 'TITLE' => GetMessage('CRM_TAX_LIST_TITLE'), 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_LIST'], array()), 'ICON' => 'btn-list'); } if ($taxAdd) { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('CRM_TAX_ADD'), 'TITLE' => GetMessage('CRM_TAX_ADD_TITLE'), 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_ADD'], array()), 'ICON' => 'btn-new'); } if ($arParams['TYPE'] == 'list') { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('CRM_TAX_SETTINGS'), 'TITLE' => GetMessage('CRM_TAX_SETTINGS_TITLE'), 'LINK' => "javascript:(new BX.CDialog({\n\t\t\t\t\t\t\t'content_url':'/bitrix/components/bitrix/crm.config.tax.settings/box.php',\n\t\t\t\t\t\t\t'width':'498',\n\t\t\t\t\t\t\t'height':'275',\n\t\t\t\t\t\t\t'resizable':false })).Show();", 'ICON' => 'btn-settings'); } if ($taxEdit && $arParams['TYPE'] == 'show' && $exists) { $arResult['BUTTONS'][] = array('TEXT' => GetMessage('CRM_TAX_EDIT'), 'TITLE' => GetMessage('CRM_TAX_EDIT_TITLE'), 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_EDIT'], array('tax_id' => $taxID)), 'ICON' => 'btn-edit'); } /* if ($taxShow && $arParams['TYPE'] == 'edit' && $exists) {
public function executePhase() { if ($this->currentPhase === DealConversionPhase::INVOICE_CREATION || $this->currentPhase === DealConversionPhase::QUOTE_CREATION) { if ($this->currentPhase === DealConversionPhase::INVOICE_CREATION) { $entityTypeID = \CCrmOwnerType::Invoice; } else { $entityTypeID = \CCrmOwnerType::Quote; } $entityTypeName = \CCrmOwnerType::ResolveName($entityTypeID); $config = $this->config->getItem($entityTypeID); if (!$config->isActive()) { return false; } /** @var \CCrmPerms $permissions */ $permissions = $this->getUserPermissions(); $entityID = isset($this->contextData[$entityTypeName]) ? $this->contextData[$entityTypeName] : 0; if ($entityID > 0) { if ($entityTypeID === \CCrmOwnerType::Invoice) { if (!\CCrmInvoice::Exists($entityID)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::NOT_FOUND); } if (!\CCrmInvoice::CheckUpdatePermission($entityID, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::UPDATE_DENIED); } $entity = new \CCrmInvoice(false); $fields = array('UF_DEAL_ID' => $this->entityID); try { $entity->Update($entityID, $fields); } catch (Main\DB\SqlQueryException $e) { } $this->resultData[$entityTypeName] = $entityID; } else { if (!\CCrmQuote::Exists($entityID)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::NOT_FOUND); } if (!\CCrmQuote::CheckUpdatePermission($entityID, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::UPDATE_DENIED); } $entity = new \CCrmQuote(false); $fields = array('DEAL_ID' => $this->entityID); $entity->Update($entityID, $fields); $this->resultData[$entityTypeName] = $entityID; } return true; } if (!\CCrmAuthorizationHelper::CheckCreatePermission($entityTypeName, $permissions)) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::CREATE_DENIED); } if (UserFieldSynchronizer::needForSynchronization(\CCrmOwnerType::Deal, $entityTypeID)) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::NOT_SYNCHRONIZED); } if (!ConversionSettings::getCurrent()->isAutocreationEnabled()) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::AUTOCREATION_DISABLED); } /** @var DealConversionMapper $mapper */ $mapper = $this->getMapper(); $map = self::prepareMap($entityTypeID); $fields = $mapper->map($map); if (empty($fields)) { throw new EntityConversionException(\CCrmOwnerType::Deal, $entityTypeID, EntityConversionException::TARG_DST, EntityConversionException::EMPTY_FIELDS); } if ($entityTypeID === \CCrmOwnerType::Invoice) { $entity = new \CCrmInvoice(false); if (!$entity->CheckFields($fields)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::INVALID_FIELDS, $entity->LAST_ERROR); } $entityID = $entity->Add($fields); if ($entityID <= 0) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Invoice, EntityConversionException::TARG_DST, EntityConversionException::CREATE_FAILED, $entity->LAST_ERROR); } $this->resultData[\CCrmOwnerType::InvoiceName] = $entityID; } else { $entity = new \CCrmQuote(false); if (!$entity->CheckFields($fields)) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::INVALID_FIELDS, $entity->LAST_ERROR); } $productRows = isset($fields['PRODUCT_ROWS']) && is_array($fields['PRODUCT_ROWS']) ? $fields['PRODUCT_ROWS'] : array(); if (!empty($productRows)) { $currencyID = isset($fields['CURRENCY_ID']) ? $fields['CURRENCY_ID'] : ''; $personTypes = \CCrmPaySystem::getPersonTypeIDs(); $personTypeID = 0; if (isset($personTypes['COMPANY']) && isset($personTypes['CONTACT'])) { if (isset($fields['COMPANY_ID']) && $fields['COMPANY_ID'] > 0) { $personTypeID = $personTypes['COMPANY']; } elseif (isset($fields['CONTACT_ID']) && $fields['CONTACT_ID'] > 0) { $personTypeID = $personTypes['CONTACT']; } } if ($currencyID !== '' && $personTypeID > 0) { $calculationOptions = array(); if (\CCrmTax::isTaxMode() && isset($fields['LOCATION_ID'])) { $calculationOptions['LOCATION_ID'] = $fields['LOCATION_ID']; } $result = \CCrmSaleHelper::Calculate($productRows, $currencyID, $personTypeID, false, SITE_ID, $calculationOptions); $arFields['OPPORTUNITY'] = isset($result['PRICE']) ? round(doubleval($result['PRICE']), 2) : 1.0; $arFields['TAX_VALUE'] = isset($result['TAX_VALUE']) ? round(doubleval($result['TAX_VALUE']), 2) : 0.0; } } $entityID = $entity->Add($fields); if ($entityID <= 0) { throw new EntityConversionException(\CCrmOwnerType::Deal, \CCrmOwnerType::Quote, EntityConversionException::TARG_DST, EntityConversionException::CREATE_FAILED, $entity->LAST_ERROR); } $this->resultData[\CCrmOwnerType::QuoteName] = $entityID; } return true; } elseif ($this->currentPhase === DealConversionPhase::FINALIZATION) { return true; } return false; }
global $USER_FIELD_MANAGER, $DB, $USER; $CCrmUserType = new CCrmUserType($USER_FIELD_MANAGER, CCrmQuote::$sUFEntityID); $bEdit = false; $bCopy = false; $bVarsFromForm = false; $arParams['ELEMENT_ID'] = (int) $arParams['ELEMENT_ID']; if (!empty($arParams['ELEMENT_ID'])) { $bEdit = true; } if (!empty($_REQUEST['copy'])) { $bCopy = true; $bEdit = false; } /*$bConvert = isset($arParams['CONVERT']) && $arParams['CONVERT'];*/ $arPersonTypes = $arResult['PERSON_TYPE_IDS'] = CCrmPaySystem::getPersonTypeIDs(); $bTaxMode = CCrmTax::isTaxMode(); $arResult['TAX_MODE'] = $bTaxMode ? 'Y' : 'N'; $arFields = null; if ($bEdit || $bCopy) { $arFilter = array('ID' => $arParams['ELEMENT_ID'], 'PERMISSION' => 'WRITE'); $obFields = CCrmQuote::GetList(array(), $arFilter); $arFields = $obFields->GetNext(); if ($arFields === false) { $bEdit = false; $bCopy = false; } else { $arEntityAttr = $CCrmQuote->cPerms->GetEntityAttr('QUOTE', array($arParams['ELEMENT_ID'])); } if ($bCopy) { if (isset($arFields['QUOTE_NUMBER'])) { unset($arFields['QUOTE_NUMBER']);
// otherwise the filter will work } if (!isset($_GET['AJAX_CALL'])) { LocalRedirect($bInternal ? '?' . $arParams['TAX_FORM_ID'] . '_active_tab=tab_props' : ''); } } $gridOptions = new CCrmGridOptions($arResult['GRID_ID']); $gridSorting = $gridOptions->GetSorting(array('sort' => array('ID' => 'asc'), 'vars' => array('by' => 'by', 'order' => 'order'))); $sort = $arResult['SORT'] = $gridSorting['sort']; $arResult['SORT_VARS'] = $gridSorting['vars']; $dbPersonType = CSalePersonType::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array()); while ($arPersonType = $dbPersonType->Fetch()) { $arPersonTypeList[$arPersonType["ID"]] = array("ID" => $arPersonType["ID"], "NAME" => htmlspecialcharsEx($arPersonType["NAME"]), "LID" => implode(", ", $arPersonType["LIDS"])); } $arRates = array(); $arRates = CCrmTax::GetRatesById($arResult['TAX_ID']); foreach ($arRates as $k => $v) { $rate = array(); $rate['ID'] = $rate['~ID'] = $k; $rate['ACTIVE'] = $rate['~ACTIVE'] = $v['ACTIVE']; $rate['TIMESTAMP_X'] = $rate['~TIMESTAMP_X'] = CCrmComponentHelper::TrimDateTimeString(FormatDate('FULL', MakeTimeStamp($v['TIMESTAMP_X']))); $rate['NAME'] = $v['NAME']; if (intval($v['PERSON_TYPE_ID']) > 0) { $arPerType = $arPersonTypeList[$v['PERSON_TYPE_ID']]; $rate['PERSON_TYPE_ID'] = GetMessage($arPerType["NAME"] . '_PT'); } else { $rate['PERSON_TYPE_ID'] = $rate['~PERSON_TYPE_ID'] = ' '; } $rate['VALUE'] = intval($v['VALUE']); $rate['IS_IN_PRICE'] = $rate['~IS_IN_PRICE'] = $v['IS_IN_PRICE']; $rate['APPLY_ORDER'] = intval($v['APPLY_ORDER']);
if ($taxID <= 0 || !($tax = CCrmTax::GetByID($taxID))) { ShowError(GetMessage('CRM_TAX_NOT_FOUND')); @define('ERROR_404', 'Y'); if ($arParams['SET_STATUS_404'] === 'Y') { CHTTP::SetStatus("404 Not Found"); } return; } $arResult['TAX_ID'] = $taxID; $arResult['TAX'] = $tax; $isEditMode = $taxID > 0; $arResult['FORM_ID'] = isset($arParams['FORM_ID']) && strlen($arParams['FORM_ID']) > 0 ? $arParams['FORM_ID'] : 'CRM_TAX_EDIT_FORM'; $arResult['GRID_ID'] = 'CRM_TAX_EDIT_GRID'; $arResult['BACK_URL'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_LIST'], array()); $arResult['FIELDS'] = array(); $arResult['FIELDS']['tab_props'][] = array('id' => 'tax_info', 'name' => GetMessage('CRM_TAX_SECTION_MAIN'), 'type' => 'section'); $arResult['FIELDS']['tab_props'][] = array('id' => 'ID', 'name' => GetMessage('CRM_TAX_FIELD_ID'), 'value' => $taxID, 'type' => 'label'); $arResult['FIELDS']['tab_props'][] = array('id' => 'TIMESTAMP_X', 'name' => GetMessage('CRM_TAX_FIELD_TIMESTAMP_X'), 'value' => $tax['TIMESTAMP_X'], 'type' => 'label'); $sitesList = CCrmTax::getSitesList(); $arResult['FIELDS']['tab_props'][] = array('id' => 'LID', 'name' => GetMessage('CRM_TAX_FIELD_LID'), 'value' => $sitesList[$tax['LID']], 'type' => 'label'); $arResult['FIELDS']['tab_props'][] = array('id' => 'NAME', 'name' => GetMessage('CRM_TAX_FIELD_NAME'), 'value' => $tax['NAME'], 'type' => 'label'); $arResult['FIELDS']['tab_props'][] = array('id' => 'CODE', 'name' => GetMessage('CRM_TAX_FIELD_CODE'), 'value' => $tax['CODE'], 'type' => 'label'); $arResult['FIELDS']['tab_props'][] = array('id' => 'DESCRIPTION', 'name' => GetMessage('CRM_TAX_FIELD_DESCRIPTION'), 'value' => $tax['DESCRIPTION'], 'type' => 'label'); $toolbarID = "CRM_TAX_RATE_TB"; ob_start(); $APPLICATION->IncludeComponent('bitrix:crm.config.tax.rate.list', '', array('PATH_TO_TAXRATE_LIST' => $arResult['PATH_TO_TAXRATE_LIST'], 'PATH_TO_TAXRATE_SHOW' => $arResult['PATH_TO_TAXRATE_SHOW'], 'PATH_TO_TAXRATE_ADD' => $arResult['PATH_TO_TAXRATE_ADD'], 'PATH_TO_TAXRATE_EDIT' => $arResult['PATH_TO_TAXRATE_EDIT'], 'TAX_FORM_ID' => $arResult['FORM_ID'], 'TAX_ID' => $arResult['TAX_ID'], 'EDIT_MODE' => 'N'), ''); $sVal = ob_get_contents(); ob_end_clean(); $arResult['FIELDS']['tab_rateslist'][] = array('id' => 'section_rates_grid', 'name' => GetMessage('CRM_TAX_RATE_LIST') . ' "' . $tax['NAME'] . '"', 'type' => 'section'); $arResult['FIELDS']['tab_rateslist'][] = array('id' => 'TAX_RATES', 'value' => $sVal, 'type' => 'custom', 'colspan' => true); $this->IncludeComponentTemplate();
private static function filterFields($fields, $method) { $result = array(); if (!is_array($fields) || count($fields) === 0) { return $result; } if (!in_array($method, array('get', 'add', 'update', 'list'), true)) { return $result; } $bTaxMode = CCrmTax::isTaxMode(); $fieldsInfo = self::getFieldsInfo(); $allowedFields = array(); foreach ($fieldsInfo as $fName => $fInfo) { if ($fInfo[$method] === true) { if ($fName !== 'PR_LOCATION') { $allowedFields[] = $fName; } else { if ($bTaxMode) { $allowedFields[] = $fName; } } } } unset($fName, $fInfo); foreach ($fields as $fName => $fValue) { if ($fName !== 'INVOICE_PROPERTIES' && $fName !== 'PRODUCT_ROWS' && in_array($fName, $allowedFields)) { $result[$fName] = CCrmInvoiceRestUtil::convertValue($method, $fieldsInfo[$fName]['type'], $fValue); } } if (isset($fields['INVOICE_PROPERTIES']) && is_array($fields['INVOICE_PROPERTIES']) && in_array('INVOICE_PROPERTIES', $allowedFields, true)) { $props = array(); foreach ($fields['INVOICE_PROPERTIES'] as $k => $v) { if (!is_array($v)) { $props[$k] = $v; } } if (count($props) > 0) { $result['INVOICE_PROPERTIES'] = $props; } unset($props, $k, $v); } if (isset($fields['PRODUCT_ROWS']) && is_array($fields['PRODUCT_ROWS']) && in_array('PRODUCT_ROWS', $allowedFields)) { $products = array(); foreach ($fields['PRODUCT_ROWS'] as $productRow) { $row = array(); foreach ($productRow as $k => $v) { if (in_array('PRODUCT_ROWS.[].' . $k, $allowedFields, true)) { $row[$k] = CCrmInvoiceRestUtil::convertValue($method, $fieldsInfo['PRODUCT_ROWS.[].' . $k]['type'], $v); } } if (count($row) > 0) { $row['CUSTOMIZED'] = 'Y'; // don't update price from catalog $products[] = $row; } } if (count($products) > 0) { $result['PRODUCT_ROWS'] = $products; } unset($products, $productRow, $k, $v, $row); } unset($fieldsInfo); return $result; }