• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/classes/general/hrxml.php
  • Класс: CUserHRXMLImport
  • Вызов: CUserHRXMLImport::ImportSyncStaffingAssignment
private function ImportSyncStaffingAssignment($xml)
{
	$db_enum_list = CIBlockProperty::GetPropertyEnum(
		'STATE',
		array(),
		array('IBLOCK_ID' => $this->STATE_HISTORY_IBLOCK_ID)
	);
	$arStates = array();
	while($ar_enum_list = $db_enum_list->GetNext())
	{
		$arStates[$this->arStateMapping[$ar_enum_list['XML_ID']]] = array(
			'ID' => $ar_enum_list['ID'],
			'NAME' => $ar_enum_list['VALUE'],
		);
	}
	$obElement = &$this->__element;
	$arAssignmentID = array();
	foreach ($xml->StaffingAssignment as $assignment)
	{
		if (isset($assignment->ResourcePerson))
		{
			$personID = $this->GetPersonGUID($assignment->ResourcePerson->PersonID);
			$arUserFields = array('XML_ID' => $this->FindUserByPersonID($personID));
			if (empty($arUserFields['XML_ID']))
			{
				$this->warnings[] = str_replace('#ID#', $personID, GetMessage('IBLOCK_HR_USER_NOT_FOUND'));
				continue;
			}
			$arHistoryPROP = array(
				'STATE' => $arStates[(string)$assignment->StaffingAssignmentStatusCode]['ID'],
			);

			if (isset($assignment->ResourceDeployment->StaffingJob->JobTitle))
				$arHistoryPROP['POST'] = $arUserFields['WORK_POSITION'];

			$rsUser = CUser::GetList(
				"ID",
				"desc",
				array('XML_ID' => $arUserFields['XML_ID']),
				array('FIELDS' => array('ID', 'ACTIVE'))
			);
			if ($arUser = $rsUser->fetch())
				$arHistoryPROP['USER'] = $arUser['ID'];
			else
				continue;

			if (isset($assignment->ResourceDeployment->DeploymentOrganization->OrganizationIdentifiers->OrganizationID))
			{
				$arOrgFields = array(
					'IBLOCK_ID' => $this->DEPARTMENTS_IBLOCK_ID,
					'XML_ID' => $this->GetGUID($assignment->ResourceDeployment->DeploymentOrganization->OrganizationIdentifiers->OrganizationID),
				);
				$rsOrg = CIBlockSection::GetList(array(), $arOrgFields, false, array('ID'));
				if ($arItem = $rsOrg->Fetch())
					$arHistoryPROP['DEPARTMENT'] = $arItem['ID'];
				else
					$arHistoryPROP['DEPARTMENT'] = '';
			}
			$arHistoryRecord = array('IBLOCK_ID' => $this->STATE_HISTORY_IBLOCK_ID);
			$arRecord = false;
			if (isset($assignment->StaffingReferenceIDs->StaffingAssignmentID))
			{
				$arHistoryRecord['XML_ID'] = (string) $assignment->StaffingReferenceIDs->StaffingAssignmentID;
				if (!array_key_exists($arHistoryRecord['XML_ID'], $arAssignmentID))
				{
					$rsRecord = CIBlockElement::GetList(array(), $arHistoryRecord, false, false, array('ID'));
					while ($arRecord = $rsRecord->Fetch())
						CIBlockElement::Delete($arRecord['ID']);
				}
			}

			$arHistoryRecord['ACTIVE'] = 'Y';
			$arHistoryRecord['PROPERTY_VALUES'] = $arHistoryPROP;
			$arHistoryRecord['NAME'] = ' - '.(string) $assignment->ResourcePerson->PersonName->FormattedName;
			$arHistoryRecord['ACTIVE_FROM'] = explode('-', (string) $assignment->AssignmentAvailability->StartDate->FormattedDateTime);
			$arHistoryRecord = $this->ConvertCharset($arHistoryRecord);
			$arHistoryRecord['ACTIVE_FROM'] = $arHistoryRecord['ACTIVE_FROM'][2].'.'
				.$arHistoryRecord['ACTIVE_FROM'][1].'.'.$arHistoryRecord['ACTIVE_FROM'][0];
			$arHistoryRecord['NAME'] = $arStates[(string) $assignment->StaffingAssignmentStatusCode]['NAME']
				.$arHistoryRecord['NAME'];

			$result = $obElement->Add($arHistoryRecord);
			$arAssignmentID[$arHistoryRecord['XML_ID']] = $result;
		}
	}

	return true;
}