- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_external_sale_import.php
- Класс: \CCrmExternalSaleImport
- Вызов: CCrmExternalSaleImport::SaveOrderDataCompany
private function SaveOrderDataCompany($arOrder)
{
if (!isset($arOrder["CONTRACTOR"]) || !is_array($arOrder["CONTRACTOR"]))
return false;
self::AddTrace('SAVE_ORDER_COMPANY_DATA:START');
$companyId = 0;
$companyXmlId = $arOrder["CONTRACTOR"]["ID"];
if (isset($arOrder["CONTRACTOR"]["INN"]) && $arOrder["CONTRACTOR"]["INN"] != "")
$companyXmlId .= "|".$arOrder["CONTRACTOR"]["INN"];
$dbCompany = CCrmCompany::GetList(array(), array("ORIGINATOR_ID" => $this->externalSaleId, "ORIGIN_ID" => $companyXmlId, "CHECK_PERMISSIONS" => "N"));
if ($arCompany = $dbCompany->Fetch())
$companyId = $arCompany["ID"];
$arFields = array(
'ORIGINATOR_ID' => $this->externalSaleId,
'ORIGIN_ID' => $companyXmlId,
'COMPANY_TYPE' => 'CUSTOMER',
);
if (isset($arOrder["CONTRACTOR"]["OFFICIAL_NAME"]) && $arOrder["CONTRACTOR"]["OFFICIAL_NAME"] != "")
$arFields['TITLE'] = $arOrder["CONTRACTOR"]["OFFICIAL_NAME"];
elseif (isset($arOrder["CONTRACTOR"]["NAME"]) && $arOrder["CONTRACTOR"]["NAME"] != "")
$arFields['TITLE'] = $arOrder["CONTRACTOR"]["NAME"];
if (is_array($arOrder["CONTRACTOR"]["ADDRESS"]))
{
foreach ($arOrder["CONTRACTOR"]["ADDRESS"] as $key => $val)
{
if ($key == "VIEW")
continue;
if (!empty($arFields["ADDRESS"]))
$arFields["ADDRESS"] .= ", ";
$arFields["ADDRESS"] .= $val;
}
if (isset($arOrder["CONTRACTOR"]["ADDRESS"]["VIEW"]))
{
if (!empty($arFields["ADDRESS"]))
$arFields["ADDRESS"] .= "\n";
$arFields["ADDRESS"] .= $arOrder["CONTRACTOR"]["ADDRESS"]["VIEW"];
}
}
if (is_array($arOrder["CONTRACTOR"]["LEGAL_ADDRESS"]))
{
foreach ($arOrder["CONTRACTOR"]["LEGAL_ADDRESS"] as $key => $val)
{
if ($key == "VIEW")
continue;
if (!empty($arFields["ADDRESS_LEGAL"]))
$arFields["ADDRESS_LEGAL"] .= ", ";
$arFields["ADDRESS_LEGAL"] .= $val;
}
if (isset($arOrder["CONTRACTOR"]["LEGAL_ADDRESS"]["VIEW"]))
{
if (!empty($arFields["ADDRESS_LEGAL"]))
$arFields["ADDRESS_LEGAL"] .= "\n";
$arFields["ADDRESS_LEGAL"] .= $arOrder["CONTRACTOR"]["LEGAL_ADDRESS"]["VIEW"];
}
}
if (is_array($arOrder["CONTRACTOR"]["CONTACTS"]))
{
$arFields["FM"] = array();
if ($companyId > 0)
{
$dbCrmFieldMulti = CCrmFieldMulti::GetList(array(), array('ENTITY_ID' => 'COMPANY', 'ELEMENT_ID' => $companyId, "CHECK_PERMISSIONS" => "N"));
while ($arCrmFieldMulti = $dbCrmFieldMulti->Fetch())
$arFields["FM"][$arCrmFieldMulti["TYPE_ID"]][$arCrmFieldMulti["ID"]] = array("VALUE_TYPE" => $arCrmFieldMulti["VALUE_TYPE"], "VALUE" => $arCrmFieldMulti["VALUE"]);
}
$arMapTmp = array(
"MAIL" => "EMAIL", "E-MAIL" => "EMAIL", "WORKPHONE" => "PHONE"
);
$arInc = array();
foreach ($arOrder["CONTRACTOR"]["CONTACTS"] as $val)
{
$t = mb_strtoupper(preg_replace("/\s/", "", $val["TYPE"]));
if (!isset($arMapTmp[$t]))
{
continue;
}
$bFound = false;
$tNew = $arMapTmp[$t];
if (isset($arFields["FM"][$tNew]) && is_array($arFields["FM"][$tNew]))
{
if(count($arFields["FM"][$tNew]) >= 50)
{
//Disable adding new communication after threshold is exceeded
$bFound = true;
}
else
{
foreach ($arFields["FM"][$tNew] as $k => $v)
{
if ($v["VALUE"] == $val["VALUE"])
{
$bFound = true;
break;
}
}
}
}
if (!$bFound)
{
$arInc[$tNew]++;
$arFields["FM"][$tNew]["n".$arInc[$tNew]] = array("VALUE_TYPE" => "WORK", "VALUE" => $val["VALUE"]);
}
}
}
$arMapTmp = array("INN", "KPP", "EGRPO", "OKVED", "OKDP", "OKOPF", "OKFC", "OKPO");
foreach ($arMapTmp as $m)
{
if (isset($arOrder["CONTRACTOR"][$m]))
$arFields["BANKING_DETAILS"] .= $m.": ".$arOrder["CONTRACTOR"][$m]."\n";
}
if (is_array($arOrder["CONTRACTOR"]["BANK_ADDRESS"]))
{
foreach ($arOrder["CONTRACTOR"]["BANK_ADDRESS"] as $key => $val)
{
if (!empty($arFields["BANKING_DETAILS"]))
$arFields["BANKING_DETAILS"] .= ", ";
$arFields["BANKING_DETAILS"] .= $val;
}
}
$newCompany = ($companyId == 0);
if ($this->arExternalSale == null)
$this->arExternalSale = CCrmExternalSale::GetDefaultSettings($this->externalSaleId);
$obj = new CCrmCompany(false);
if ($companyId == 0)
{
if (!isset($arFields['TITLE']) || ($arFields['TITLE'] == ''))
$arFields['TITLE'] = $companyXmlId;
$assignedById = $this->arExternalSale["RESPONSIBLE"];
if ($assignedById > 0)
$arFields["ASSIGNED_BY_ID"] = $assignedById;
self::AddTrace(array('ADD COMPANY' => $arFields));
$res = $obj->Add($arFields, true, array('DISABLE_USER_FIELD_CHECK' => true));
if($res > 0)
{
$companyId = (int)$res;
$this->arImportResult->numberOfCreatedCompanies++;
}
}
else
{
self::AddTrace(array("UPDATE COMPANY: {$companyId}" => $arFields));
$res = $obj->Update($companyId, $arFields, true, true, array('DISABLE_USER_FIELD_CHECK' => true));
if($res)
{
$this->arImportResult->numberOfUpdatedCompanies++;
}
}
if (!$res)
{
if (($ex = $GLOBALS["APPLICATION"]->GetException()) !== false)
$this->AddError($ex->GetID(), $ex->GetString());
else
$this->AddError("CCA", "Company creation error");
if (!empty($obj->LAST_ERROR))
$this->AddError("CCA", $obj->LAST_ERROR);
self::AddTrace('SAVE_ORDER_COMPANY_DATA:FAILED');
return false;
}
self::AddTrace("SAVE_ORDER_COMPANY_DATA:FINISHED:{$companyId}");
return array($companyId, $newCompany);
}