CAllCrmDeal::SynchronizeCustomerData

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. CAllCrmDeal
  4. SynchronizeCustomerData
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_deal.php
  • Класс: \CAllCrmDeal
  • Вызов: CAllCrmDeal::SynchronizeCustomerData
protected function SynchronizeCustomerData($sourceID, array $fields, array $options = null)
{
	if(!is_array($options))
	{
		$options = array();
	}

	$companyID = isset($fields['COMPANY_ID']) ? (int)$fields['COMPANY_ID'] : 0;
	$contactID = isset($fields['CONTACT_ID']) ? (int)$fields['CONTACT_ID'] : 0;

	$enableSource = !isset($options['ENABLE_SOURCE']) || $options['ENABLE_SOURCE'] === true;
	$connection = \Bitrix\Main\Application::getInstance()->getConnection();

	//region REPEATED APPROACH
	if($enableSource)
	{
		$isRepeatedApproach = false;
		if(isset($fields['LEAD_ID'])
			&& $fields['LEAD_ID'] > 0
			&& \CCrmLead::GetCustomerType($fields['LEAD_ID']) === CustomerType::RETURNING
			&& ($companyID > 0 || $contactID > 0)
		)
		{
			if($companyID > 0)
			{
				$dbResult = $connection->query("SELECT MIN(ID) AS ID FROM b_crm_deal WHERE COMPANY_ID = {$companyID} AND STAGE_SEMANTIC_ID = 'S'");
			}
			else//if($contactID > 0)
			{
				$dbResult = $connection->query("SELECT MIN(ID) AS ID FROM b_crm_deal WHERE CONTACT_ID = {$contactID} AND COMPANY_ID <= 0 AND STAGE_SEMANTIC_ID = 'S'");
			}

			$resultData = $dbResult->fetch();
			$primaryID = is_array($resultData) && isset($resultData['ID']) ? (int)$resultData['ID'] : 0;
			$isRepeatedApproach = ($primaryID === 0);
		}

		$flag = $isRepeatedApproach ? 'Y' : 'N';
		$connection->queryExecute("UPDATE b_crm_deal SET IS_REPEATED_APPROACH = '{$flag}' WHERE ID = {$sourceID}");
	}
	//endregion

	//region RETURN CUSTOMER
	if($companyID > 0 || $contactID > 0)
	{
		if($companyID > 0)
		{
			$dbResult = $connection->query("SELECT MIN(ID) AS ID FROM b_crm_deal WHERE COMPANY_ID = {$companyID} AND STAGE_SEMANTIC_ID = 'S'");
		}
		else//if($contactID > 0)
		{
			$dbResult = $connection->query("SELECT MIN(ID) AS ID FROM b_crm_deal WHERE CONTACT_ID = {$contactID} AND COMPANY_ID <= 0 AND STAGE_SEMANTIC_ID = 'S'");
		}

		$resultData = $dbResult->fetch();
		$primaryID = is_array($resultData) && isset($resultData['ID']) ? (int)$resultData['ID'] : 0;
		if($primaryID > 0)
		{
			if($companyID > 0)
			{
				$connection->queryExecute(
					"UPDATE b_crm_deal SET IS_RETURN_CUSTOMER = 'Y', IS_REPEATED_APPROACH = 'N' WHERE IS_RETURN_CUSTOMER = 'N' AND COMPANY_ID = {$companyID}"
				);
			}
			elseif($contactID > 0)
			{
				$connection->queryExecute(
					"UPDATE b_crm_deal SET IS_RETURN_CUSTOMER = 'Y', IS_REPEATED_APPROACH = 'N' WHERE IS_RETURN_CUSTOMER = 'N' AND CONTACT_ID = {$contactID} AND IFNULL(COMPANY_ID, 0) = 0"
				);
			}
			$connection->queryExecute("UPDATE b_crm_deal SET IS_RETURN_CUSTOMER = 'N' WHERE ID = {$primaryID}");
		}
	}
	elseif($enableSource)
	{
		$connection->queryExecute("UPDATE b_crm_deal SET IS_RETURN_CUSTOMER = 'N' WHERE ID = {$sourceID}");
	}
	//endregion
}

Добавить комментарий