...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_external_sale_import.php
- Класс: \CCrmExternalSaleImport
- Вызов: CCrmExternalSaleImport::SaveOrderDataContact
private function SaveOrderDataContact($arOrder) { if (!isset($arOrder["CONTRACTOR"]) || !is_array($arOrder["CONTRACTOR"])) return false; self::AddTrace('SAVE_ORDER_CONTACT_DATA:START'); $contactId = 0; $contactXmlId = $arOrder["CONTRACTOR"]["ID"]; if (isset($arOrder["CONTRACTOR"]["FIRST_NAME"]) && $arOrder["CONTRACTOR"]["FIRST_NAME"] != "") $contactXmlId .= "|".$arOrder["CONTRACTOR"]["FIRST_NAME"]; if (isset($arOrder["CONTRACTOR"]["LAST_NAME"]) && $arOrder["CONTRACTOR"]["LAST_NAME"] != "") $contactXmlId .= "|".$arOrder["CONTRACTOR"]["LAST_NAME"]; $dbContact = CCrmContact::GetListEx( array(), array("ORIGINATOR_ID" => $this->externalSaleId, "ORIGIN_ID" => $contactXmlId, "CHECK_PERMISSIONS" => "N") ); if ($arContact = $dbContact->Fetch()) $contactId = $arContact["ID"]; $arFields = array( 'ORIGINATOR_ID' => $this->externalSaleId, 'ORIGIN_ID' => $contactXmlId, 'TYPE_ID' => 'CLIENT', 'OPENED' => 'Y' ); $sources = CCrmStatus::GetStatusList('SOURCE'); if(isset($sources['WEB'])) { $arFields['SOURCE_ID'] = 'WEB'; } if (isset($arOrder["CONTRACTOR"]["FIRST_NAME"]) && $arOrder["CONTRACTOR"]["FIRST_NAME"] != "") $arFields['NAME'] = $arOrder["CONTRACTOR"]["FIRST_NAME"]; if (isset($arOrder["CONTRACTOR"]["LAST_NAME"]) && $arOrder["CONTRACTOR"]["LAST_NAME"] != "") $arFields['LAST_NAME'] = $arOrder["CONTRACTOR"]["LAST_NAME"]; if (isset($arOrder["CONTRACTOR"]["SECOND_NAME"]) && $arOrder["CONTRACTOR"]["SECOND_NAME"] != "") $arFields['SECOND_NAME'] = $arOrder["CONTRACTOR"]["SECOND_NAME"]; if (isset($arOrder["CONTRACTOR"]["BIRTHDAY"]) && $arOrder["CONTRACTOR"]["BIRTHDAY"] != "") $arFields['BIRTHDATE'] = $arOrder["CONTRACTOR"]["BIRTHDAY"]; if (isset($arOrder["CONTRACTOR"]["FULL_NAME"]) && $arOrder["CONTRACTOR"]["FULL_NAME"] != "") $arFields['FULL_NAME'] = $arOrder["CONTRACTOR"]["FULL_NAME"]; elseif (isset($arOrder["CONTRACTOR"]["NAME"]) && $arOrder["CONTRACTOR"]["NAME"] != "") $arFields['FULL_NAME'] = $arOrder["CONTRACTOR"]["NAME"]; if (is_array($arOrder["CONTRACTOR"]["ADDRESS"])) { if (isset($arOrder["CONTRACTOR"]["ADDRESS"]["VIEW"]) && $arOrder["CONTRACTOR"]["ADDRESS"]["VIEW"] != '') { if (!empty($arFields["ADDRESS"])) $arFields["ADDRESS"] .= "\n"; $arFields["ADDRESS"] .= $arOrder["CONTRACTOR"]["ADDRESS"]["VIEW"]; } else { foreach ($arOrder["CONTRACTOR"]["ADDRESS"] as $key => $val) { if ($key == "VIEW") { continue; } if (!empty($arFields["ADDRESS"])) { $arFields["ADDRESS"] .= ", "; } $arFields["ADDRESS"] .= $val; } } } if (is_array($arOrder["CONTRACTOR"]["CONTACTS"])) { $arFields["FM"] = array(); if ($contactId > 0) { $dbCrmFieldMulti = CCrmFieldMulti::GetList(array(), array('ENTITY_ID' => 'CONTACT', 'ELEMENT_ID' => $contactId, "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"]); } } } $newContact = ($contactId == 0); if ($this->arExternalSale == null) $this->arExternalSale = CCrmExternalSale::GetDefaultSettings($this->externalSaleId); $obj = new CCrmContact(false); if ($contactId == 0) { if ( (!isset($arFields['NAME']) || ($arFields['NAME'] == '')) && (!isset($arFields['LAST_NAME']) || ($arFields['LAST_NAME'] == '')) ) $arFields['LAST_NAME'] = $contactXmlId; $assignedById = $this->arExternalSale["RESPONSIBLE"]; if ($assignedById > 0) $arFields["ASSIGNED_BY_ID"] = $assignedById; self::AddTrace(array('ADD CONTACT' => $arFields)); $res = $obj->Add($arFields, true, array('DISABLE_USER_FIELD_CHECK' => true)); if($res > 0) { $contactId = (int)$res; $this->arImportResult->numberOfCreatedContacts++; } } else { self::AddTrace(array("UPDATE CONTACT: {$contactId}" => $arFields)); $res = $obj->Update($contactId, $arFields, true, true, array('DISABLE_USER_FIELD_CHECK' => true)); if($res) { $this->arImportResult->numberOfUpdatedContacts++; } } if (!$res) { if (($ex = $GLOBALS["APPLICATION"]->GetException()) !== false) $this->AddError($ex->GetID(), $ex->GetString()); else $this->AddError("CCA", "Contact creation error"); if (!empty($obj->LAST_ERROR)) $this->AddError("CCA", $obj->LAST_ERROR); self::AddTrace('SAVE_ORDER_CONTACT_DATA:FAILED'); return false; } self::AddTrace("SAVE_ORDER_CONTACT_DATA:FINISHED:{$contactId}"); return array($contactId, $newContact); }