public static function ensureQuotePaySystemsCreated() { if (!Loader::includeModule('sale')) { return; } $siteID = ''; $languageID = ''; $dbSites = \CSite::GetList($by = 'sort', $order = 'desc', array('DEFAULT' => 'Y', 'ACTIVE' => 'Y')); $defaultSite = is_object($dbSites) ? $dbSites->Fetch() : null; if (is_array($defaultSite)) { $siteID = $defaultSite['LID']; $languageID = $defaultSite['LANGUAGE_ID']; } if ($siteID === '') { $siteID = 's1'; } if ($languageID === '') { $languageID = 'ru'; } $paySysName = "quote_{$languageID}"; $paySystems = array(); $customPaySystemPath = \COption::GetOptionString('sale', 'path2user_ps_files', ''); if ($customPaySystemPath === '') { $customPaySystemPath = BX_ROOT . '/php_interface/include/sale_payment/'; } $personTypeIDs = \CCrmPaySystem::getPersonTypeIDs(); if (isset($personTypeIDs['COMPANY'])) { $paySystems[] = array('NAME' => Loc::getMessage('CRM_PS_QUOTE_COMPANY', null, $languageID), 'SORT' => 200, 'DESCRIPTION' => '', 'CODE_TEMP' => $paySysName, 'ACTION' => array(array('PERSON_TYPE_ID' => $personTypeIDs['COMPANY'], 'NAME' => Loc::getMessage('CRM_PS_QUOTE_COMPANY', null, $languageID), 'ACTION_FILE' => "{$customPaySystemPath}{$paySysName}", 'RESULT_FILE' => '', 'NEW_WINDOW' => 'Y', 'PARAMS' => serialize(array('DATE_INSERT' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_BILL_DATE'), 'DATE_PAY_BEFORE' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_PAY_BEFORE'), 'BUYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'COMPANY'), 'BUYER_INN' => array('TYPE' => 'PROPERTY', 'VALUE' => 'INN'), 'BUYER_ADDRESS' => array('TYPE' => 'PROPERTY', 'VALUE' => 'COMPANY_ADR'), 'BUYER_PHONE' => array('TYPE' => 'PROPERTY', 'VALUE' => 'PHONE'), 'BUYER_FAX' => array('TYPE' => 'PROPERTY', 'VALUE' => 'FAX'), 'BUYER_PAYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'CONTACT_PERSON'), 'COMMENT1' => array('TYPE' => 'ORDER', 'VALUE' => 'USER_DESCRIPTION'))), 'HAVE_PAYMENT' => 'Y', 'HAVE_ACTION' => 'N', 'HAVE_RESULT' => 'N', 'HAVE_PREPAY' => 'N', 'HAVE_RESULT_RECEIVE' => 'N'))); } if (isset($personTypeIDs['CONTACT'])) { $paySystems[] = array('NAME' => Loc::getMessage('CRM_PS_QUOTE_CONTACT', null, $languageID), 'SORT' => 300, 'DESCRIPTION' => '', 'CODE_TEMP' => $paySysName, 'ACTION' => array(array('PERSON_TYPE_ID' => $personTypeIDs['CONTACT'], 'NAME' => Loc::getMessage('CRM_PS_QUOTE_CONTACT', null, $languageID), 'ACTION_FILE' => "{$customPaySystemPath}{$paySysName}", 'RESULT_FILE' => '', 'NEW_WINDOW' => 'Y', 'PARAMS' => serialize(array('DATE_INSERT' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_BILL_DATE'), 'DATE_PAY_BEFORE' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_PAY_BEFORE'), 'BUYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'FIO'), 'BUYER_INN' => array('TYPE' => 'PROPERTY', 'VALUE' => 'INN'), 'BUYER_ADDRESS' => array('TYPE' => 'PROPERTY', 'VALUE' => 'ADDRESS'), 'BUYER_PHONE' => array('TYPE' => 'PROPERTY', 'VALUE' => 'PHONE'), 'BUYER_FAX' => array('TYPE' => '', 'VALUE' => ''), 'BUYER_PAYER_NAME' => array('TYPE' => 'PROPERTY', 'VALUE' => 'FIO'), 'COMMENT1' => array('TYPE' => 'ORDER', 'VALUE' => 'USER_DESCRIPTION'))), 'HAVE_PAYMENT' => 'Y', 'HAVE_ACTION' => 'N', 'HAVE_RESULT' => 'N', 'HAVE_PREPAY' => 'N', 'HAVE_RESULT_RECEIVE' => 'N'))); } $currencyID = \CCrmCurrency::GetBaseCurrencyID(); foreach ($paySystems as $paySystem) { $dbSalePaySystem = \CSalePaySystem::GetList(array(), array('LID' => $siteID, 'NAME' => $paySystem['NAME']), false, false, array('ID')); if (!$dbSalePaySystem->Fetch()) { $paySystemID = \CSalePaySystem::Add(array('NAME' => $paySystem['NAME'], 'DESCRIPTION' => $paySystem['DESCRIPTION'], 'SORT' => $paySystem['SORT'], 'LID' => $siteID, 'CURRENCY' => $currencyID, 'ACTIVE' => 'Y')); if ($paySystemID > 0) { foreach ($paySystem['ACTION'] as &$action) { $action['PAY_SYSTEM_ID'] = $paySystemID; \CSalePaySystemAction::Add($action); } unset($action); } } } unset($paySystem); }
$arResult['INTERNAL'] = $bInternal; 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'])) {
public function map(EntityConversionMap $map, array $options = null) { $srcFields = $this->getSourceFields(); if (empty($srcFields)) { return array(); } $dstFields = array(); $dstEntityTypeID = $map->getDestinationEntityTypeID(); foreach ($map->getItems() as $item) { $dstFieldID = $item->getDestinationField(); //Skip empty binding if ($dstFieldID === '-') { continue; } $srcFieldID = $item->getSourceField(); if ((!isset($srcFields[$srcFieldID]) || $srcFields[$srcFieldID] === '') && $srcFieldID !== 'PRODUCT_ROWS') { $altSrcFieldID = ''; foreach ($item->getAlternativeSourceFields() as $fieldID) { if (isset($srcFields[$fieldID])) { $altSrcFieldID = $fieldID; break; } } if ($altSrcFieldID !== '') { $srcFieldID = $altSrcFieldID; } } if ($dstFieldID === '') { $dstFieldID = $srcFieldID; } if (strpos($srcFieldID, 'UF_') === 0 && strpos($dstFieldID, 'UF_') === 0) { self::mapUserField(\CCrmOwnerType::Deal, $srcFieldID, $srcFields, $dstEntityTypeID, $dstFieldID, $dstFields, $options); } elseif ($srcFieldID === 'PRODUCT_ROWS') { $productRows = \CCrmDeal::LoadProductRows($this->srcEntityID); if (count($productRows) > 0) { if ($dstEntityTypeID === \CCrmOwnerType::Invoice) { $currencyID = isset($srcFields['CURRENCY_ID']) ? $srcFields['CURRENCY_ID'] : ''; if ($currencyID === '' || !\CCrmCurrency::IsExists($currencyID)) { $currencyID = \CCrmCurrency::GetBaseCurrencyID(); } $actualRows = \CCrmInvoice::ProductRows2BasketItems($productRows, $currencyID, \CCrmInvoice::GetCurrencyID()); if (count($actualRows) > 0) { foreach ($actualRows as &$productRow) { unset($productRow['ID']); } unset($productRow); $dstFields[$dstFieldID] = $actualRows; } } else { foreach ($productRows as &$productRow) { unset($productRow['ID']); } unset($productRow); $dstFields[$dstFieldID] = $productRows; } } } elseif (isset($srcFields[$srcFieldID])) { $dstFields[$dstFieldID] = $srcFields[$srcFieldID]; } } if (!empty($dstFields)) { if ($dstEntityTypeID === \CCrmOwnerType::Invoice) { $dstFields['UF_DEAL_ID'] = $this->srcEntityID; //region Prepare Invoice Properties $dstFields['INVOICE_PROPERTIES'] = array(); $invoiceEntity = new \CCrmInvoice(false); $companyID = isset($dstFields['UF_COMPANY_ID']) ? (int) $dstFields['UF_COMPANY_ID'] : 0; $contactID = isset($dstFields['UF_CONTACT_ID']) ? (int) $dstFields['UF_CONTACT_ID'] : 0; $personTypeID = 0; $personTypes = \CCrmPaySystem::getPersonTypeIDs(); if ($companyID > 0 && isset($personTypes['COMPANY'])) { $personTypeID = $personTypes['COMPANY']; } elseif (isset($personTypes['CONTACT'])) { $personTypeID = $personTypes['CONTACT']; } $properties = $invoiceEntity->GetProperties(0, $personTypeID); if (is_array($properties)) { \CCrmInvoice::__RewritePayerInfo($companyID, $contactID, $invoiceProperties); foreach ($properties as $property) { $dstFields['INVOICE_PROPERTIES'][$property['FIELDS']['ID']] = $property['VALUE']; } } //endregion } elseif ($dstEntityTypeID === \CCrmOwnerType::Quote) { $dstFields['DEAL_ID'] = $this->srcEntityID; } } return $dstFields; }
protected static function ensurePersonTypesLoaded() { if (is_null(self::$PERSON_TYPES)) { self::$PERSON_TYPES = array_flip(CCrmPaySystem::getPersonTypeIDs()); } }
public static function PrepareSalePaymentData(array &$arQuote) { $ID = isset($arQuote['ID']) ? intval($arQuote['ID']) : 0; if ($ID <= 0) { return null; } $fieldMap = self::GetSaleOrderMap(); $order = array(); foreach ($fieldMap as $orderFileldID => $fileldID) { if (!is_array($fileldID)) { $order[$orderFileldID] = isset($arQuote[$fileldID]) ? $arQuote[$fileldID] : ''; } else { $v = ''; foreach ($fileldID as $item) { $s = isset($arQuote[$item]) ? trim($arQuote[$item]) : ''; if ($s === '') { continue; } if (preg_match('/<br(\\/)?>$/i', $v) !== 1) { $v .= '<br/>'; } $v .= $s; } $order[$orderFileldID] = $v; } } $personTypeIDs = CCrmPaySystem::getPersonTypeIDs(); $personTypeID = isset($arQuote['PERSON_TYPE_ID']) ? intval($arQuote['PERSON_TYPE_ID']) : 0; $propertyMap = isset($personTypeIDs['COMPANY']) && intval($personTypeIDs['COMPANY']) === $personTypeID ? self::GetCompanyPersonTypeMap() : self::GetContactPersonTypeMap(); $properties = array(); foreach ($propertyMap as $propertyFileldID => $fileldID) { $properties[$propertyFileldID] = isset($arQuote[$fileldID]) ? $arQuote[$fileldID] : ''; } $userFields = $GLOBALS['USER_FIELD_MANAGER']->GetUserFields(self::$sUFEntityID, 0, LANGUAGE_ID); $supportedUserTypeIDs = array('string', 'double', 'integer', 'boolean', 'datetime'); foreach ($userFields as $name => &$userField) { $fieldType = $userField['USER_TYPE_ID']; if (!isset($arQuote[$name]) || !in_array($fieldType, $supportedUserTypeIDs, true)) { continue; } $fieldValue = $arQuote[$name]; if ($fieldType === 'boolean') { $fieldValue = GetMessage(intval($fieldValue) > 0 ? 'MAIN_YES' : 'MAIN_NO'); } $properties[$name] = $userField['EDIT_FORM_LABEL'] . ': ' . $fieldValue; } unset($userField); $productRows = self::LoadProductRows($ID); $currencyID = isset($arQuote['CURRENCY_ID']) ? $arQuote['CURRENCY_ID'] : ''; $calculatedOrder = CCrmSaleHelper::Calculate($productRows, $currencyID, $personTypeID, false, SITE_ID, array('LOCATION_ID' => isset($arQuote['LOCATION_ID']) ? $arQuote['LOCATION_ID'] : '')); $taxList = isset($calculatedOrder['TAX_LIST']) ? $calculatedOrder['TAX_LIST'] : array(); foreach ($taxList as &$taxInfo) { $taxInfo['TAX_NAME'] = isset($taxInfo['NAME']) ? $taxInfo['NAME'] : ''; } unset($taxInfo); return array('ORDER' => $order, 'PROPERTIES' => $properties, 'CART_ITEMS' => $calculatedOrder['BASKET_ITEMS'], 'TAX_LIST' => $taxList); }
$ib = new CIBlock(); $ib->Update($catalogId, array('XML_ID' => 'FUTURE-1C-CATALOG')); unset($ib); $arExch1cOptions = array(array('catalog', '1CE_ELEMENTS_PER_STEP', '100'), array('catalog', '1CE_GROUP_PERMISSIONS', ''), array('catalog', '1CE_IBLOCK_ID', $catalogId), array('catalog', '1CE_INTERVAL', '30'), array('catalog', '1CE_USE_ZIP', 'Y'), array('catalog', '1C_DETAIL_HEIGHT', '300'), array('catalog', '1C_DETAIL_RESIZE', 'N'), array('catalog', '1C_DETAIL_WIDTH', '300'), array('catalog', '1C_ELEMENT_ACTION', 'D'), array('catalog', '1C_FILE_SIZE_LIMIT', '204800'), array('catalog', '1C_FORCE_OFFERS', 'N'), array('catalog', '1C_GENERATE_PREVIEW', 'N'), array('catalog', '1C_GROUP_PERMISSIONS', ''), array('catalog', '1C_IBLOCK_TYPE', $iblockType), array('catalog', '1C_INTERVAL', '30'), array('catalog', '1C_PREVIEW_HEIGHT', '100'), array('catalog', '1C_PREVIEW_WIDTH', '100'), array('catalog', '1C_SECTION_ACTION', 'D'), array('catalog', '1C_SITE_LIST', $currentSiteID), array('catalog', '1C_SKIP_ROOT_SECTION', 'N'), array('catalog', '1C_TRANSLIT_ON_ADD', 'N'), array('catalog', '1C_TRANSLIT_ON_UPDATE', 'N'), array('catalog', '1C_USE_CRC', 'Y'), array('catalog', '1C_USE_IBLOCK_PICTURE_SETTINGS', 'N'), array('catalog', '1C_USE_IBLOCK_TYPE_ID', 'N'), array('catalog', '1C_USE_OFFERS', 'N'), array('catalog', '1C_USE_ZIP', 'Y'), array('sale', '1C_EXPORT_ALLOW_DELIVERY_ORDERS', 'N'), array('sale', '1C_EXPORT_FINAL_ORDERS', ''), array('sale', '1C_EXPORT_PAYED_ORDERS', 'N'), array('sale', '1C_FINAL_STATUS_ON_DELIVERY', ''), array('sale', '1C_REPLACE_CURRENCY', $currentLocalization === 'ru' ? GetMessage('CRM_EXCH1C_UPDATE_PS_BILL_RUB') : ' '), array('sale', '1C_SALE_ACCOUNT_NUMBER_SHOP_PREFIX', 'CRM_'), array('sale', '1C_SALE_GROUP_PERMISSIONS', ''), array('sale', '1C_SALE_SITE_LIST', $currentSiteID), array('sale', '1C_SALE_USE_ZIP', 'Y')); foreach ($arExch1cOptions as $optionInfo) { COption::SetOptionString($optionInfo[0], $optionInfo[1], $optionInfo[2]); } // set sale option "Upon receipt of payment, change order status to ..." COption::SetOptionString("sale", "status_on_paid", "P"); COption::SetOptionString('crm', 'crm_exch1c_enable', 'N'); $arBaseCatalogGroup = CCatalogGroup::GetBaseGroup(); $priceTypeId = intval($arBaseCatalogGroup['ID']); unset($arBaseCatalogGroup); COption::SetOptionInt('crm', 'selected_catalog_group_id', $priceTypeId); // fill invoice export profiles $arPersonTypeIds = CCrmPaySystem::getPersonTypeIDs(); if (isset($arPersonTypeIds['COMPANY']) && isset($arPersonTypeIds['CONTACT'])) { $arPersonTypeIdCode = array($arPersonTypeIds['COMPANY'] => 'COMPANY', $arPersonTypeIds['CONTACT'] => 'CONTACT'); $arProps = array(); $dbProperties = CSaleOrderProps::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('ACTIVE' => 'Y'), false, false, array('ID', 'PERSON_TYPE_ID', 'CODE')); if ($dbProperties) { while ($prop = $dbProperties->Fetch()) { if ($prop['PERSON_TYPE_ID'] == $arPersonTypeIds['COMPANY'] || $prop['PERSON_TYPE_ID'] == $arPersonTypeIds['CONTACT']) { $arProps[$arPersonTypeIdCode[$prop['PERSON_TYPE_ID']]][$prop['CODE']] = $prop['ID']; } } unset($dbProperties, $prop); } if (count($arProps) > 0 && isset($arProps['CONTACT']) && count($arProps['CONTACT']) > 0 && isset($arProps['COMPANY']) && count($arProps['COMPANY']) > 0) { // contact $dbr = CSaleExport::GetList(array('ID' => 'DESC'), array('PERSON_TYPE_ID' => $arPersonTypeIds['CONTACT']));
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die; } $arInvoices = array(); $dbProduct = CCrmProduct::GetList(array(), array(), array('*'), array('nTopCount' => 1)); if ($arProduct = $dbProduct->Fetch()) { CModule::IncludeModule("sale"); $personTypes = CCrmPaySystem::getPersonTypeIDs(); $arFields = array("ORDER_TOPIC" => GetMessage("CRM_DEMO_INVOCIE_1_SUBJ"), "STATUS_ID" => "P", "DATE_INSERT" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_BILL" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'SHORT'), "PAY_VOUCHER_DATE" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_PAY_BEFORE" => ConvertTimeStamp(time() + 8000009 + CTimeZone::GetOffset(), 'SHORT'), "RESPONSIBLE_ID" => 1, "UF_CONTACT_ID" => $arContacts["45"]['ID'], "PAY_VOUCHER_NUM" => 456, "DATE_MARKED" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "PRODUCT_ROWS" => array(array("ID" => 0, "PRODUCT_ID" => $arProduct["ID"], "PRODUCT_NAME" => $arProduct["NAME"], "QUANTITY" => 1, "PRICE" => $arProduct["PRICE"])), "PERSON_TYPE_ID" => $personTypes["CONTACT"], "INVOICE_PROPERTIES" => array()); $paySystems = CCrmPaySystem::GetPaySystems($personTypes["CONTACT"]); foreach ($paySystems as $id => $paySystem) { $arFields["PAY_SYSTEM_ID"] = $id; } $arAllProps = CCrmInvoice::GetPropertiesInfo($personTypes["CONTACT"]); foreach ($arAllProps as $arProps) { foreach ($arProps as $key => $prop) { if ($key == "FIO") { $arFields["INVOICE_PROPERTIES"][$prop["ID"]] = $arContacts["45"]["LAST_NAME"]; } } } $arInvoices[] = $arFields; $arFields = array("ORDER_TOPIC" => GetMessage("CRM_DEMO_INVOCIE_2_SUBJ"), "STATUS_ID" => "N", "DATE_INSERT" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_BILL" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'SHORT'), "PAY_VOUCHER_DATE" => ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'), "DATE_PAY_BEFORE" => ConvertTimeStamp(time() + 8000009 + CTimeZone::GetOffset(), 'SHORT'), "RESPONSIBLE_ID" => 1, "UF_COMPANY_ID" => $arCompany["38"]['ID'], "PRODUCT_ROWS" => array(array("ID" => 0, "PRODUCT_ID" => $arProduct["ID"], "PRODUCT_NAME" => $arProduct["NAME"], "QUANTITY" => 1, "PRICE" => $arProduct["PRICE"])), "PERSON_TYPE_ID" => $personTypes["COMPANY"], "INVOICE_PROPERTIES" => array()); $paySystems = CCrmPaySystem::GetPaySystems($personTypes["COMPANY"]); foreach ($paySystems as $id => $paySystem) { $arFields["PAY_SYSTEM_ID"] = $id; } $arAllProps = CCrmInvoice::GetPropertiesInfo($personTypes["COMPANY"]); foreach ($arAllProps as $arProps) {
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; }
public static function ResolvePersonTypeID($companyID, $contactID) { $companyID = intval($companyID); $contactID = intval($contactID); if (!self::$INVOICE_PAY_SYSTEM_TYPES) { self::$INVOICE_PAY_SYSTEM_TYPES = CCrmPaySystem::getPersonTypeIDs(); } if ($companyID > 0 && isset(self::$INVOICE_PAY_SYSTEM_TYPES['COMPANY'])) { return self::$INVOICE_PAY_SYSTEM_TYPES['COMPANY']; } elseif ($contactID > 0 && isset(self::$INVOICE_PAY_SYSTEM_TYPES['CONTACT'])) { return self::$INVOICE_PAY_SYSTEM_TYPES['CONTACT']; } return 0; }
public static function Calculate($productRows, $currencyID, $personTypeID, $enableSaleDiscount = false, $siteId = SITE_ID, $arOptions = array()) { if (!CModule::IncludeModule('sale')) { return array('err' => '1'); } $saleUserId = intval(CSaleUser::GetAnonymousUserID()); if ($saleUserId <= 0) { return array('err' => '2'); } if (!is_array($productRows) && empty($productRows)) { return array('err' => '3'); } $bTaxMode = CCrmTax::isTaxMode(); if ($bTaxMode) { foreach ($productRows as &$productRow) { $productRow['TAX_RATE'] = 0.0; $productRow['TAX_INCLUDED'] = 'N'; } unset($productRow); } $cartItems = self::PrepareShoppingCartItems($productRows, $currencyID, $siteId); foreach ($cartItems as &$item) { $item['ID_TMP'] = $item['ID']; unset($item['ID']); } unset($item); $errors = array(); $cartItems = CSaleBasket::DoGetUserShoppingCart($siteId, $saleUserId, $cartItems, $errors, array(), 0, true); foreach ($cartItems as &$item) { $item['ID'] = $item['ID_TMP']; unset($item['ID_TMP']); } unset($item); $personTypeID = intval($personTypeID); if ($personTypeID <= 0) { $personTypes = CCrmPaySystem::getPersonTypeIDs(); if (isset($personTypes['CONTACT'])) { $personTypeID = intval($personTypes['CONTACT']); } } if ($personTypeID <= 0) { return array('err' => '4'); } $orderPropsValues = array(); $paySystemId = 0; if (is_array($arOptions) && !empty($arOptions)) { if (isset($arOptions['LOCATION_ID']) && CCrmTax::isTaxMode()) { $locationPropertyID = self::getLocationPropertyId($personTypeID); if ($locationPropertyID !== false) { $orderPropsValues[$locationPropertyID] = $arOptions['LOCATION_ID']; } } if (isset($arOptions['PAY_SYSTEM_ID'])) { $paySystemId = intval($arOptions['PAY_SYSTEM_ID']); } } $warnings = array(); $options = array('CURRENCY' => $currencyID); if (!$enableSaleDiscount) { $options['CART_FIX'] = 'Y'; } return CSaleOrder::DoCalculateOrder($siteId, $saleUserId, $cartItems, $personTypeID, $orderPropsValues, 0, $paySystemId, $options, $errors, $warnings); }
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; }
/** * Checks if is filled company-name at least in one pay system */ public static function isNameFilled() { if (!CModule::IncludeModule('sale')) { return false; } $result = false; $arCrmPtIDs = CCrmPaySystem::getPersonTypeIDs(); $dbPaySystems = CSalePaySystem::GetList(array(), array("PERSON_TYPE_ID" => $arCrmPtIDs)); while ($arPaySys = $dbPaySystems->Fetch()) { $params = $arPaySys['PSA_PARAMS']; $params = unserialize($arPaySys['PSA_PARAMS']); if (strlen(trim($params['SELLER_NAME']['VALUE'])) > 0) { $result = true; break; } } return $result; }