- Модуль: 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;
}