• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/integration/salemanager.php
  • Класс: Bitrix\Crm\Integration\SaleManager
  • Вызов: SaleManager::ensureQuotePaySystemsCreated
static function ensureQuotePaySystemsCreated()
{
	if(!Loader::includeModule('sale'))
	{
		return;
	}

	$siteID = '';
	$languageID = '';

	$dbSites = \CSite::GetList('sort', '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();

	$newPSContactParams = $newPSCompanyParams = false;
	if (EntityPreset::isUTFMode())
		$rqCountryId = \CCrmPaySystem::getPresetCountryIdByPS('quote', $languageID);
	else
		$rqCountryId = EntityPreset::getCurrentCountryId();
	if ($rqCountryId > 0 && in_array($rqCountryId, EntityRequisite::getAllowedRqFieldCountries(), true))
	{
		/*$newPSContactParams = (Main\Config\Option::get('crm', '~CRM_TRANSFER_REQUISITES_TO_CONTACT', 'N') !== 'Y');
		$newPSCompanyParams = (Main\Config\Option::get('crm', '~CRM_TRANSFER_REQUISITES_TO_COMPANY', 'N') !== 'Y');*/
		$newPSContactParams = $newPSCompanyParams = true;
	}

	$customPaySystemPath = \COption::GetOptionString('sale', 'path2user_ps_files', '');
	if($customPaySystemPath === '')
	{
		$customPaySystemPath = BX_ROOT.'/php_interface/include/sale_payment/';
	}

	$personTypeIDs = \CCrmPaySystem::getPersonTypeIDs();
	if(isset($personTypeIDs['COMPANY']))
	{
		$psParams = array(
			'DATE_INSERT' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_BILL_DATE'),
			'DATE_PAY_BEFORE' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_PAY_BEFORE'),
			'BUYER_NAME' => array(
				'TYPE' => $newPSCompanyParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSCompanyParams ? 'RQ_COMPANY_NAME|'.$rqCountryId : 'COMPANY'
			),
			'BUYER_INN' => array(
				'TYPE' => $newPSCompanyParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSCompanyParams ? 'RQ_INN|'.$rqCountryId : 'INN'
			),
			'BUYER_ADDRESS' => array(
				'TYPE' => $newPSCompanyParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSCompanyParams ?
					'RQ_ADDR_'.RequisiteAddress::Registered.'|'.$rqCountryId : 'COMPANY_ADR'
			),
			'BUYER_PHONE' => array(
				'TYPE' => $newPSCompanyParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSCompanyParams ? 'RQ_PHONE|'.$rqCountryId : 'PHONE'
			),
			'BUYER_FAX' => array(
				'TYPE' => $newPSCompanyParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSCompanyParams ? 'RQ_FAX|'.$rqCountryId : 'FAX'
			),
			'BUYER_PAYER_NAME' => array(
				'TYPE' => $newPSCompanyParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSCompanyParams ? 'RQ_CONTACT|'.$rqCountryId : 'CONTACT_PERSON'
			)
		);
		foreach (\CCrmPaySystem::getDefaultBuyerParams('CRM_COMPANY', 'quote', $rqCountryId)
					as $paramName => $paramValue)
		{
			$psParams[$paramName] = $paramValue;
		}
		foreach (\CCrmPaySystem::getDefaultMyCompanyParams('quote', $rqCountryId) as $paramName => $paramValue)
			$psParams[$paramName] = $paramValue;
		$psParams['COMMENT1'] = array('TYPE' => 'ORDER', 'VALUE' => 'USER_DESCRIPTION');
		$paySystems[] = array(
			'NAME' => Loc::getMessage('CRM_PS_QUOTE_COMPANY', null, $languageID),
			'SORT' => 200,
			'DESCRIPTION' => '',
			'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($psParams),
					'HAVE_PAYMENT' => 'Y',
					'HAVE_ACTION' => 'N',
					'HAVE_RESULT' => 'N',
					'HAVE_PREPAY' => 'N',
					'HAVE_RESULT_RECEIVE' => 'N'
				)
			)
		);
	}

	if(isset($personTypeIDs['CONTACT']))
	{
		$psParams = array(
			'DATE_INSERT' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_BILL_DATE'),
			'DATE_PAY_BEFORE' => array('TYPE' => 'ORDER', 'VALUE' => 'DATE_PAY_BEFORE'),
			'BUYER_NAME' => array(
				'TYPE' => $newPSContactParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSContactParams ? 'RQ_NAME|'.$rqCountryId : 'FIO'
			),
			'BUYER_INN' => array(
				'TYPE' => $newPSContactParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSContactParams ? 'RQ_INN|'.$rqCountryId : 'INN'
			),
			'BUYER_ADDRESS' => array(
				'TYPE' => $newPSContactParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSContactParams ?
					'RQ_ADDR_'.RequisiteAddress::Primary.'|'.$rqCountryId : 'ADDRESS'
			),
			'BUYER_PHONE' => array(
				'TYPE' => $newPSContactParams ? 'REQUISITE' : 'PROPERTY',
				'VALUE' => $newPSContactParams ? 'RQ_PHONE|'.$rqCountryId : 'PHONE'
			),
			'BUYER_FAX' => array('TYPE' => '', 'VALUE' => ''),
			'BUYER_PAYER_NAME' => array('TYPE' => '', 'VALUE' => '')
		);
		foreach (
			\CCrmPaySystem::getDefaultBuyerParams('CRM_CONTACT', 'quote', $rqCountryId)
			as $paramName => $paramValue
		)
		{
			$psParams[$paramName] = $paramValue;
		}
		foreach (\CCrmPaySystem::getDefaultMyCompanyParams('quote', $rqCountryId) as $paramName => $paramValue)
			$psParams[$paramName] = $paramValue;
		$psParams['COMMENT1'] = array('TYPE' => 'ORDER', 'VALUE' => 'USER_DESCRIPTION');
		$paySystems[] = array(
			'NAME' => Loc::getMessage('CRM_PS_QUOTE_CONTACT', null, $languageID),
			'SORT' => 300,
			'DESCRIPTION' => '',
			'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($psParams),
					'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);
}