• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/conversion/psrequisiteconverter.php
  • Класс: Bitrix\Crm\Requisite\Conversion\PSRequisiteConverter
  • Вызов: PSRequisiteConverter::saveRequisiteBankDetail
static function saveRequisiteBankDetail(&$info)
{
	if (self::$psEntityTreeMap === null)
		self::$psEntityTreeMap = array();

	$presetCountryId = isset($info['PRESET_COUNTRY_ID']) ? (int)$info['PRESET_COUNTRY_ID'] : 0;
	if (isset($info['ID']) && $info['ID'] > 0
		&& isset($info['CO_ID']) && $info['CO_ID'] > 0
		&& $presetCountryId > 0
		&& is_array($info['BD']) && is_array($info['BD']) && !empty($info['BD'])
		&& is_array(self::$convFieldSets['BD'][$presetCountryId])
		&& !empty(self::$convFieldSets['BD'][$presetCountryId]))
	{
		// prepare hashes of existing bank details
		$bdHashList = array();
		if (isset($info['IS_NEW']) && $info['IS_NEW'] === 'N')
		{
			$bankDetail = new EntityBankDetail();
			$rqFieldsByCountry = $bankDetail->getRqFieldByCountry();
			$rqFieldsByCountry = isset($rqFieldsByCountry[$presetCountryId]) ?
				$rqFieldsByCountry[$presetCountryId] : array();
			$res = $bankDetail->getList(
				array(
					'order' => array('SORT' => 'ASC', 'ID' => 'ASC'),
					'filter' => array(
						'=ENTITY_TYPE_ID' => \CCrmOwnerType::Requisite,
						'=ENTITY_ID' => (int)$info['ID'],
						'=COUNTRY_ID' => $presetCountryId
					),
					'select' => array_merge(array('ID'), $rqFieldsByCountry)
				)
			);
			while ($row = $res->fetch())
			{
				$bankDetailId = isset($row['ID']) ? (int)$row['ID'] : 0;
				if ($bankDetailId > 0 && $presetCountryId > 0)
				{
					$hashData = '|'.$presetCountryId;
					foreach (array_keys(self::$convFieldSets['BD'][$presetCountryId]) as $fieldName)
					{
						$value = isset($row[$fieldName]) ? trim(strval($row[$fieldName])) : '';
						$hashData .= '|'.$value;
					}
					$bdHashList[md5($hashData)] = $bankDetailId;
				}
			}
			unset($res, $row, $hashData, $value, $bankDetailId);
		}

		// add bank details
		foreach ($info['BD'] as $bdHash => &$bdInfo)
		{
			$bdInfo['CO_ID'] = (int)$info['CO_ID'];
			$bdInfo['RQ_ID'] = (int)$info['ID'];
			$bdInfo['COUNTRY_ID'] = $presetCountryId;
			$bankDetailId = isset($bdHashList[$bdHash]) ?
				(int)$bdHashList[$bdHash] : 0;
			if ($bankDetailId > 0)
			{
				$bdInfo['IS_NEW'] = 'N';
			}
			else
			{
				$bankDetailId = self::addBankDetail($bdInfo);
				$bdInfo['IS_NEW'] = 'Y';
			}
			$bdInfo['ID'] = $bankDetailId;
			if ($bankDetailId > 0 && is_array($info['PS']))
			{
				if (is_array($bdInfo['PS']))
				{
					foreach ($bdInfo['PS'] as $psId)
					{
						self::$psEntityTreeMap[$psId] = array(
							'CO' => $bdInfo['CO_ID'],
							'RQ' => $bdInfo['RQ_ID'],
							'BD' => $bankDetailId
						);
					}
				}
			}
		}
		unset($rqInfo);
	}
}