Your IP : 18.118.161.96


Current Path : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/crm.event.add/
Upload File :
Current File : /home/bitrix/ext_www/crm.klimatlend.ua/bitrix/components/bitrix/crm.event.add/component.php

<?if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();

if (!CModule::IncludeModule('crm'))
	return;

global $USER;


$CCrmPerms = \CCrmAuthorizationHelper::GetUserPermissions();

$entityTypeName = isset($arParams['ENTITY_TYPE']) ? $arParams['ENTITY_TYPE'] : '';
$entityTypeID = CCrmOwnerType::ResolveID($entityTypeName);
$entityID = isset($arParams['ENTITY_ID']) ? (int)$arParams['ENTITY_ID'] : 0;

if($entityTypeID === CCrmOwnerType::Undefined
	|| !\Bitrix\Crm\Security\EntityAuthorization::checkUpdatePermission($entityTypeID, $entityID, $CCrmPerms)
)
{
	ShowError(GetMessage('CRM_PERMISSION_DENIED'));
	return;
}

if(!function_exists('__CrmEventGetPhones'))
{
	function __CrmEventGetPhones($entityID, $elementID)
	{
		$result = array();
		$arFields = CCrmFieldMulti::GetEntityFields($entityID, $elementID, 'PHONE', true, false);
		foreach($arFields as $arField)
		{
			$result[] = array(
				'TITLE' => $arField['ENTITY_NAME'],
				'NUMBER' => $arField['VALUE']
			);
		}
		return $result;
	}
}

CUtil::InitJSCore();
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
	$eventPage = isset($_POST['EVENT_PAGE']) ? $_POST['EVENT_PAGE'] : '';
	if($eventPage === '' || !CCrmUrlUtil::IsSecureUrl($eventPage))
	{
		$eventPage = $GLOBALS['APPLICATION']->GetCurPage();
	}

	$formID = isset($_POST['FORM_ID']) ? $_POST['FORM_ID'] : '';
	if($formID === '')
	{
		$formID = 'CRM_'.trim($_POST['ENTITY_TYPE']).'_'.trim($_POST['FORM_TYPE']).'_V12';
	}

	$arResult['EVENT_PAGE'] = CHTTP::urlAddParams(
		$eventPage,
		array($formID.'_active_tab' => (!empty($_POST['TAB_ID']) ? $_POST['TAB_ID'] : 'tab_event'))
	);

	if (check_bitrix_sessid())
	{
		$entityTypeID = isset($_POST['ENTITY_TYPE']) ? trim($_POST['ENTITY_TYPE']) : '';
		$entityID = isset($_POST['ENTITY_ID']) ? intval($_POST['ENTITY_ID']) : 0;
		$eventID = isset($_POST['EVENT_ID']) ? trim($_POST['EVENT_ID']) : '';
		$eventDesc = isset($_POST['EVENT_DESC']) ? trim($_POST['EVENT_DESC']) : '';
		$eventDate = isset($_POST['EVENT_DATE']) ? trim($_POST['EVENT_DATE']) : '';
		$postFiles = isset($_FILES['ATTACH'])? $_FILES['ATTACH'] : array();
		$attachedFiles = array();
		if(!empty($postFiles))
		{
			CAllFile::ConvertFilesToPost($postFiles, $attachedFiles);
		}

		$CCrmEvent = new CCrmEvent();

		$eventFiles = array();
		foreach($attachedFiles as &$arFile)
		{
			if(isset($arFile['tmp_name']) && is_uploaded_file($arFile['tmp_name']))
			{
				$eventFiles[] = $arFile;
			}
		}
		unset($arFile);

		if($eventDate !== '')
		{
			if(!CheckDateTime($eventDate, FORMAT_DATETIME))
			{
				$eventDate = '';
			}
			else
			{
				// Check for max database datetime
				$eventTimestamp = MakeTimeStamp($eventDate, FORMAT_DATETIME);
				if(!is_int($eventTimestamp))
				{
					$eventDate = '';
				}
				else
				{
					$maxDataTime = new DateTime('9999-12-31T23:59:59');
					$maxTimestamp = $maxDataTime->format('U');

					if($maxTimestamp < $eventTimestamp)
					{
						$eventDate = '';
					}
				}
			}
		}

		if(!($eventDate !== '' && CheckDateTime($eventDate, FORMAT_DATETIME)))
		{
			$eventDate = ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL', SITE_ID);
		}

		$CCrmEvent->Add(
			array(
				'ENTITY_TYPE'=> $entityTypeID,
				'ENTITY_ID' => $entityID,
				'EVENT_ID' => $eventID,
				'EVENT_TEXT_1' => $eventDesc,
				'DATE_CREATE' => $eventDate,
				'FILES' => $eventFiles
			)
		);

		switch ($entityTypeID)
		{
			case 'LEAD':
			{
				if (isset($_POST['STATUS_ID']))
				{
					$statusID = $_POST['STATUS_ID'];

					$dbResult = CCrmLead::GetListEx(
						array(),
						array('=ID' => $entityID),
						false,
						false,
						array('STATUS_ID')
					);

					$arPrevious = $dbResult ? $dbResult->Fetch() : null;
					if(is_array($arPrevious)
						&& isset($arPrevious['STATUS_ID'])
						&& $arPrevious['STATUS_ID'] !== $statusID)
					{
						$CCrmLead = new CCrmLead();
						$arField = array('STATUS_ID' => $statusID);
						if($CCrmLead->Update($entityID, $arField))
						{
							$arErrors = array();
							CCrmBizProcHelper::AutoStartWorkflows(
								CCrmOwnerType::Lead,
								$entityID,
								CCrmBizProcEventType::Edit,
								$arErrors
							);
						}
						//Region automation
						$starter = new \Bitrix\Crm\Automation\Starter(\CCrmOwnerType::Lead, $entityID);
						$starter->setUserIdFromCurrent()->runOnUpdate($arField, []);
						//end region
					}
				}

				$dbRes = CCrmLead::GetListEx(
					array(),
					array('ID' => $entityID, 'CHECK_PERMISSIONS' => 'N'),
					false,
					false,
					array('ID', 'STATUS_ID', 'CONTACT_ID', 'COMPANY_ID')
				);

				$arLead = $dbRes->Fetch();
				if(is_array($arLead))
				{
					$statusID = isset($arLead['STATUS_ID']) ? $arLead['STATUS_ID'] : '';

					$contactID = isset($arLead['CONTACT_ID']) ? intval($arLead['CONTACT_ID']) : 0;
					if($contactID > 0 && !CCrmContact::Exists($contactID))
					{
						$contactID = 0;
					}

					$companyID = isset($arLead['COMPANY_ID']) ? intval($arLead['COMPANY_ID']) : 0;
					if($companyID > 0 && !CCrmCompany::Exists($companyID))
					{
						$companyID = 0;
					}

					if($statusID === 'CONVERTED')
					{
						if($contactID !== 0)
						{
							$CCrmEvent->Add(
								array(
									'ENTITY_TYPE'=> 'CONTACT',
									'ENTITY_ID' => $contactID,
									'EVENT_ID' => $eventID,
									'EVENT_TEXT_1' => $eventDesc,
									'DATE_CREATE' => $eventDate,
									'FILES' => $eventFiles
								)
							);
						}
						if($companyID !== 0)
						{
							$CCrmEvent->Add(
								array(
									'ENTITY_TYPE'=> 'COMPANY',
									'ENTITY_ID' => $companyID,
									'EVENT_ID' => $eventID,
									'EVENT_TEXT_1' => $eventDesc,
									'DATE_CREATE' => $eventDate,
									'FILES' => $eventFiles
								)
							);
						}
					}
				}
			}
			break;
			case 'CONTACT':
				$CCrmContact = new CCrmContact();
				$CCrmContact->Update($_POST['ENTITY_ID'], $arField = array(), false);
			break;
			case 'COMPANY':
				$CCrmCompany = new CCrmCompany();
				$CCrmCompany->Update($_POST['ENTITY_ID'], $arField = array(), false);
			break;
			case 'DEAL':
				if (isset($_POST['STAGE_ID']))
				{
					$stageID = $_POST['STAGE_ID'];

					$dbResult = CCrmDeal::GetListEx(
						array(),
						array('=ID' => $entityID),
						false,
						false,
						array('STAGE_ID')
					);

					$arPrevious = $dbResult ? $dbResult->Fetch() : null;
					if(is_array($arPrevious)
						&& isset($arPrevious['STAGE_ID'])
						&& $arPrevious['STAGE_ID'] !== $stageID)
					{
						$CCrmDeal = new CCrmDeal();
						$arField = array('STAGE_ID' => $stageID);
						if($CCrmDeal->Update($entityID, $arField))
						{
							$arErrors = array();
							CCrmBizProcHelper::AutoStartWorkflows(
								CCrmOwnerType::Deal,
								$entityID,
								CCrmBizProcEventType::Edit,
								$arErrors
							);
						}
						//Region automation
						$starter = new \Bitrix\Crm\Automation\Starter(\CCrmOwnerType::Deal, $entityID);
						$starter->setUserIdFromCurrent()->runOnUpdate($arField, []);
						//end region
					}
				}
			break;
			case 'QUOTE':
				if (isset($_POST['STATUS_ID']))
				{
					$statusID = $_POST['STATUS_ID'];

					$dbResult = CCrmQuote::GetList(
						array(),
						array('=ID' => $entityID),
						false,
						false,
						array('STATUS_ID')
					);

					$arPrevious = $dbResult ? $dbResult->Fetch() : null;
					if(is_array($arPrevious)
						&& isset($arPrevious['STATUS_ID'])
						&& $arPrevious['STATUS_ID'] !== $statusID)
					{
						$CCrmDeal = new CCrmQuote();
						$arField = array('STATUS_ID' => $statusID);
						if($CCrmDeal->Update($entityID, $arField))
						{
							$arErrors = array();
							CCrmBizProcHelper::AutoStartWorkflows(
								CCrmOwnerType::Quote,
								$entityID,
								CCrmBizProcEventType::Edit,
								$arErrors
							);
						}
					}
				}
			break;
		case 'ORDER':
			$arErrors = array();
			CCrmBizProcHelper::AutoStartWorkflows(
				CCrmOwnerType::Order,
				$entityID,
				CCrmBizProcEventType::Edit,
				$arErrors
			);
			break;
		}
	}
}
else
{
	$arResult['FORM_ID'] = isset($arParams['FORM_ID']) ? $arParams['FORM_ID'] : '';
	$arResult['FORM_TYPE'] = $arParams['FORM_TYPE'];
	$arResult['ENTITY_TYPE'] = $arParams['ENTITY_TYPE'];
	$arResult['ENTITY_ID'] 	= intval($arParams['ENTITY_ID']);
	$arResult['ENTITY_TITLE'] = GetMessage('CRM_EVENT_DEFAULT_TITLE');
	$arResult['EVENT_TYPE'] = $arParams['EVENT_TYPE'];

	$arResult['FREEZE_EVENT_ID'] = isset($arParams['FREEZE_EVENT_ID'])? mb_strtoupper($arParams['FREEZE_EVENT_ID']) : '';

	if($arParams['EVENT_TYPE'] === 'PHONE')
	{
		$arResult['PHONE_GROUPS'] = array();
	}

	switch ($arParams['ENTITY_TYPE'])
	{
		case 'LEAD':
			$dbRes = CCrmLead::GetListEx(
				array('TITLE'=>'ASC', 'LAST_NAME'=>'ASC', 'NAME' => 'ASC'),
				array('ID' => $arResult['ENTITY_ID'])
			);
			if ($arRes = $dbRes->Fetch())
			{
				$arResult['ENTITY_TITLE'] = $arRes['TITLE'];
				$arResult['STATUS_ID'] = $arRes['STATUS_ID'];
				$arResult['ENTITY_CONVERTED'] = $arRes['STATUS_ID'] == 'CONVERTED'? 'Y': 'N';
			}
			$arEntityAttr = $CCrmPerms->GetEntityAttr('LEAD', $arResult['ENTITY_ID']);
			if ($CCrmPerms->CheckEnityAccess('LEAD', 'WRITE', $arEntityAttr[$arResult['ENTITY_ID']]))
			{
				$arResult['STATUS_LIST'] = array();
				$arResult['STATUS_LIST_EX'] = CCrmStatus::GetStatusList('STATUS');
				foreach($arResult['STATUS_LIST_EX'] as $key => $value)
				{
					if ($key == 'CONVERTED')
						continue;
					if ($CCrmPerms->GetPermType('LEAD', 'WRITE', array('STATUS_ID'.$key)) > BX_CRM_PERM_NONE)
					{
						$arResult['STATUS_LIST']['REFERENCE'][] = $value;
						$arResult['STATUS_LIST']['REFERENCE_ID'][] = $key;
					}
				}

				$arResult['PHONE_GROUPS'][] = array(
					'PHONES' => __CrmEventGetPhones('LEAD', $arResult['ENTITY_ID'])
				);
			}
		break;
		case 'CONTACT':

			$dbRes = CCrmContact::GetListEx(
				array('LAST_NAME'=>'ASC', 'NAME' => 'ASC'),
				array('ID' => $arResult['ENTITY_ID'])
			);
			if ($arRes = $dbRes->Fetch())
				$arResult['ENTITY_TITLE'] = $arRes['LAST_NAME'].' '.$arRes['NAME'];

		break;
		case 'COMPANY':

			$dbRes = CCrmCompany::GetListEx(
				array('TITLE'=>'ASC'),
				array('ID' => $arResult['ENTITY_ID'])
			);
			if ($arRes = $dbRes->Fetch())
				$arResult['ENTITY_TITLE'] = $arRes['TITLE'];

		break;
		case 'DEAL':
			$categoryID = CCrmDeal::GetCategoryID($arResult['ENTITY_ID']);
			$arEntityAttr = CCrmDeal::GetPermissionAttributes(array($arResult['ENTITY_ID']), $categoryID);
			if (CCrmDeal::CheckUpdatePermission($arResult['ENTITY_ID'], $CCrmPerms, $categoryID, array('ENTITY_ATTRS' => $arEntityAttr)))
			{
				$dbRes = CCrmDeal::GetListEx(
					array('TITLE'=>'ASC'),
					array('ID' => $arResult['ENTITY_ID'])
				);
				if ($arRes = $dbRes->Fetch())
				{
					$arResult['ENTITY_TITLE'] = $arRes['TITLE'];
					$arResult['STAGE_ID'] = $arRes['STAGE_ID'];
				}
				$arResult['STAGE_LIST'] = Array();
				$arEventType = CCrmDeal::GetStageNames($categoryID);
				foreach($arEventType as $key => $value)
				{
					if(CCrmDeal::GetStageUpdatePermissionType($key, $CCrmPerms, $categoryID) > BX_CRM_PERM_NONE)
					{
						$arResult['STAGE_LIST']['REFERENCE'][] = $value;
						$arResult['STAGE_LIST']['REFERENCE_ID'][] = $key;
					}
				}

				if($arParams['EVENT_TYPE'] === 'PHONE')
				{
					$contactID = isset($arRes['CONTACT_ID']) ? intval($arRes['CONTACT_ID']) : 0;
					if($contactID > 0)
					{
						$rsContacts = CCrmContact::GetListEx(
							array(),
							array('ID' => $contactID),
							false,
							false,
							array('FULL_NAME')
						);
						$arContact = $rsContacts->Fetch();
						if($arContact)
						{
							$arResult['PHONE_GROUPS'][] = array(
								'TITLE' => $arContact['FULL_NAME'],
								'PHONES' => __CrmEventGetPhones('CONTACT', $contactID)
							);
						}
					}

					$companyID = isset($arRes['COMPANY_ID']) ? intval($arRes['COMPANY_ID']) : 0;
					if($companyID > 0)
					{
						$rsCompanies = CCrmCompany::GetListEx(
							array(),
							array('ID' => $companyID),
							false,
							false,
							array('TITLE')
						);
						$arCompany = $rsCompanies->Fetch();
						if($arCompany)
						{
							$arResult['PHONE_GROUPS'][] = array(
								'TITLE' => $arCompany['TITLE'],
								'PHONES' => __CrmEventGetPhones('COMPANY', $companyID)
							);
						}
					}
				}
			}
		break;
		case 'QUOTE':
			$arEntityAttr = $CCrmPerms->GetEntityAttr('QUOTE', $arResult['ENTITY_ID']);
			if ($CCrmPerms->CheckEnityAccess('QUOTE', 'WRITE', $arEntityAttr[$arResult['ENTITY_ID']]))
			{
				$dbRes = CCrmQuote::GetList(Array('TITLE'=>'ASC'), array('ID' => $arResult['ENTITY_ID']));
				if ($arRes = $dbRes->Fetch())
				{
					$arResult['ENTITY_TITLE'] = $arRes['TITLE'];
					$arResult['STATUS_ID'] = $arRes['STATUS_ID'];
				}
				$arResult['STATUS_LIST'] = Array();
				$arEventType = CCrmStatus::GetStatusList('QUOTE_STATUS');
				foreach($arEventType as $key => $value)
				{
					if ($CCrmPerms->GetPermType('QUOTE', 'WRITE', array('QUOTE_STATUS'.$key)) > BX_CRM_PERM_NONE)
					{
						$arResult['STATUS_LIST']['REFERENCE'][] = $value;
						$arResult['STATUS_LIST']['REFERENCE_ID'][] = $key;
					}
				}

				if($arParams['EVENT_TYPE'] === 'PHONE')
				{
					$contactID = isset($arRes['CONTACT_ID']) ? intval($arRes['CONTACT_ID']) : 0;
					if($contactID > 0)
					{
						$rsContacts = CCrmContact::GetListEx(
							array(),
							array('ID' => $contactID),
							false,
							false,
							array('FULL_NAME'));
						$arContact = $rsContacts->Fetch();
						if($arContact)
						{
							$arResult['PHONE_GROUPS'][] = array(
								'TITLE' => $arContact['FULL_NAME'],
								'PHONES' => __CrmEventGetPhones('CONTACT', $contactID)
							);
						}
					}

					$companyID = isset($arRes['COMPANY_ID']) ? intval($arRes['COMPANY_ID']) : 0;
					if($companyID > 0)
					{
						$rsCompanies = CCrmCompany::GetList(array(), array('ID' => $companyID), array('TITLE'), 1);
						$arCompany = $rsCompanies->Fetch();
						if($arCompany)
						{
							$arResult['PHONE_GROUPS'][] = array(
								'TITLE' => $arCompany['TITLE'],
								'PHONES' => __CrmEventGetPhones('COMPANY', $companyID)
							);
						}
					}
				}
			}
		break;
	case 'ORDER':
		$arEntityAttr = $CCrmPerms->GetEntityAttr('ORDER', $arResult['ENTITY_ID']);
		if ($CCrmPerms->CheckEnityAccess('ORDER', 'WRITE', $arEntityAttr[$arResult['ENTITY_ID']]))
		{
			$dbRes = Bitrix\Crm\Order\Order::getList(array(
				'filter' => array('=ID' => $arResult['ENTITY_ID']),
				'order' => array('ACCOUNT_NUMBER' => 'ASC', 'ORDER_TOPIC'=>'ASC')
			));

			if ($arRes = $dbRes->Fetch())
			{
				$arResult['ENTITY_TITLE'] = 'N '.$arRes['ACCOUNT_NUMBER'].(!empty($arRes['ORDER_TOPIC']) ? ' ('.$arRes['ORDER_TOPIC'].')' : '');
				$arResult['STATUS_ID'] = $arRes['STATUS_ID'];
			}

			$arResult['STATUS_LIST'] = Array();
			$statusList = \Bitrix\Crm\Order\OrderStatus::getListInCrmFormat();
			foreach ($statusList as $status)
			{
				$arEventType[$status['STATUS_ID']] = $status['NAME'];
			}

			foreach($arEventType as $key => $value)
			{
				if ($CCrmPerms->GetPermType('ORDER', 'WRITE', array('ORDER_STATUS'.$key)) > BX_CRM_PERM_NONE)
				{
					$arResult['STATUS_LIST']['REFERENCE'][] = $value;
					$arResult['STATUS_LIST']['REFERENCE_ID'][] = $key;
				}
			}

			if($arParams['EVENT_TYPE'] === 'PHONE')
			{
				$contactID = isset($arRes['CONTACT_ID']) ? intval($arRes['CONTACT_ID']) : 0;
				if($contactID > 0)
				{
					$rsContacts = CCrmContact::GetListEx(
						array(),
						array('ID' => $contactID),
						false,
						false,
						array('FULL_NAME'));
					$arContact = $rsContacts->Fetch();
					if($arContact)
					{
						$arResult['PHONE_GROUPS'][] = array(
							'TITLE' => $arContact['FULL_NAME'],
							'PHONES' => __CrmEventGetPhones('CONTACT', $contactID)
						);
					}
				}

				$companyID = isset($arRes['COMPANY_ID']) ? intval($arRes['COMPANY_ID']) : 0;
				if($companyID > 0)
				{
					$rsCompanies = CCrmCompany::GetList(array(), array('ID' => $companyID), array('TITLE'), 1);
					$arCompany = $rsCompanies->Fetch();
					if($arCompany)
					{
						$arResult['PHONE_GROUPS'][] = array(
							'TITLE' => $arCompany['TITLE'],
							'PHONES' => __CrmEventGetPhones('COMPANY', $companyID)
						);
					}
				}
			}
		}
		break;
	}

	$arResult['EVENT_TYPE'] = Array();
	$arEventType = CCrmStatus::GetStatusList('EVENT_TYPE');
	foreach($arEventType as $key => $value)
	{
		if ($arResult['ENTITY_TYPE'] !== 'QUOTE' || !($key === 'PHONE' || $key === 'MESSAGE'))
		{
			$arResult['EVENT_TYPE']['REFERENCE'][] = $value;
			$arResult['EVENT_TYPE']['REFERENCE_ID'][] = $key;
		}
	}
}

if($arParams['EVENT_TYPE'] === 'PHONE')
{
	$this->__templateName = 'phone';
}
$this->IncludeComponentTemplate();
?>