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']);
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; }
$perms = new CCrmPerms($USER->GetID()); if ($perms->HavePerm($ownerName, BX_CRM_PERM_NONE, $permissionType)) { ShowError(GetMessage('CRM_PERMISSION_DENIED')); return; } /** @var \CBitrixComponent $this */ $arResult['COMPONENT_ID'] = $this->randString(); $arResult['OWNER_TYPE'] = $ownerType; $arResult['OWNER_ID'] = $ownerID; $arResult['READ_ONLY'] = $permissionType == 'READ'; $arResult['INIT_EDITABLE'] = isset($arParams['INIT_EDITABLE']) ? $arParams['INIT_EDITABLE'] === 'Y' : false; $arResult['HIDE_MODE_BUTTON'] = isset($arParams['HIDE_MODE_BUTTON']) ? $arParams['HIDE_MODE_BUTTON'] === 'Y' : false; $arResult['HIDE_ALL_TAXES'] = isset($arParams['HIDE_ALL_TAXES']) ? $arParams['HIDE_ALL_TAXES'] === 'Y' : false; $arResult['ALLOW_TAX'] = isset($arParams['ALLOW_TAX']) ? $arParams['ALLOW_TAX'] === 'Y' : CCrmTax::isVatMode(); $arResult['ALLOW_TAX'] = $arResult['ALLOW_TAX'] && !$arResult['HIDE_ALL_TAXES']; $arResult['ALLOW_LD_TAX'] = isset($arParams['ALLOW_LD_TAX']) ? $arParams['ALLOW_LD_TAX'] === 'Y' : CCrmTax::isTaxMode(); $arResult['ALLOW_LD_TAX'] = $arResult['ALLOW_LD_TAX'] || $arResult['HIDE_ALL_TAXES']; $arResult['LOCATION_ID'] = isset($arParams['LOCATION_ID']) ? $arParams['LOCATION_ID'] : ''; $arResult['PRODUCT_ROW_TAX_UNIFORM'] = COption::GetOptionString('crm', 'product_row_tax_uniform', 'Y') === 'Y'; $arResult['INVOICE_MODE'] = $ownerType === 'I'; $arResult['HIDE_TAX_INCLUDED_COLUMN'] = $arResult['INVOICE_MODE']; $arResult['CATALOG_TYPE_ID'] = CCrmCatalog::GetCatalogTypeID(); // copy flag $bCopy = $arParams['COPY_FLAG'] === 'Y' ? true : false; // Check currency (national currency by default) $currencyID = $arResult['CURRENCY_ID'] = isset($arParams['CURRENCY_ID']) ? (string) $arParams['CURRENCY_ID'] : CCrmCurrency::GetBaseCurrencyID(); $currency = CCrmCurrency::GetByID($currencyID); if (!$currency) { ShowError(GetMessage('CRM_CURRENCY_IS_NOT_FOUND', array('#CURRENCY_ID#' => $currencyID))); return; }
// 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'])) : '';
} 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) {
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; }
//<-- 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) : ''; }
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; }