%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/converterdocumentprofile.php |
<?php namespace Bitrix\Sale\Exchange\OneC; use Bitrix\Main\ArgumentException; use Bitrix\Sale\Exchange\ISettings; /** * Class ConverterDocumentProfile * @package Bitrix\Sale\Exchange\OneC * @deprecated */ class ConverterDocumentProfile extends Converter { /** * @return array */ protected function getFieldsInfo() { return UserProfileDocument::getFieldsInfo(); } /** * @param $documentImport * @return array * @throws ArgumentException */ public function resolveParams($documentImport) { if(!($documentImport instanceof DocumentBase)) throw new ArgumentException("Document must be instanceof DocumentBase"); $result = array(); $params = $documentImport->getFieldValues(); foreach($params as $k=>$v) { switch($k) { case 'VERSION': if(!empty($v)) $profile['VERSION_1C'] = $v; break; case 'XML_ID': case 'OFICIAL_NAME': case 'FULL_NAME': case 'INN': case 'KPP': case 'OKPO_CODE': case 'EGRPO': case 'OKVED': case 'OKDP': case 'OKOPF': case 'OKFC': //case 'OKPO': if(!empty($v)) $profile[$k] = $v; break; case 'ITEM_NAME': if(!empty($v)) { $profile[$k] = $v; $profile['AGENT_NAME'] = $v; } break; case 'REGISTRATION_ADDRESS': case 'UR_ADDRESS': case 'ADDRESS': foreach($params[$k] as $name=>$values) { if($name == 'ADDRESS_FIELD') { foreach($values as $nameAddres=>$valuesAddres) { $profile[$k][$nameAddres] = $valuesAddres['VALUE']; } } else { $profile[$k][$name] = $values; } } break; case 'CONTACTS': foreach($params[$k]['CONTACT'] as $name=>$values) { $profile['CONTACT'][$name] = $values['VALUE']; } $profile['CONTACT']['EMAIL'] = !empty($profile['CONTACT']['MAIL_NEW'])? $profile['CONTACT']['MAIL_NEW']:null; $profile['CONTACT']['PHONE'] = !empty($profile['CONTACT']['WORK_PHONE_NEW'])? $profile['CONTACT']['WORK_PHONE_NEW']:null; break; case 'REPRESENTATIVES': foreach($params[$k]['REPRESENTATIVE'] as $name=>$values) { if($name == 'CONTACT_PERSON') { $profile['CONTACT'][$name] = $values['ITEM_NAME']; } } break; } } if(!empty($profile["OKPO_CODE"])) $profile["OKPO"] = $profile["OKPO_CODE"]; if(strlen($profile["OFICIAL_NAME"]) > 0 && strlen($profile["INN"]) > 0) $profile["TYPE"] = "UR"; elseif(strlen($profile["INN"]) > 0) $profile["TYPE"] = "IP"; else $profile["TYPE"] = "FIZ"; if(!empty($profile)) { $property = array(); foreach($profile as $name => $value) { switch($name) { case 'ID': case 'VERSION': case 'ITEM_NAME': case 'OFICIAL_NAME': case 'FULL_NAME': case 'INN': case 'KPP': case 'OKPO_CODE': case 'EGRPO': case 'OKVED': case 'OKDP': case 'OKOPF': case 'OKFC': case 'OKPO': $property[$name] = $value; break; case 'CONTACT': $property["EMAIL"] = $value["MAIL_NEW"]; $property["PHONE"] = $value["WORK_PHONE_NEW"]; break; case 'REPRESENTATIVE': $property["CONTACT_PERSON"] = $value["CONTACT_PERSON"]; break; case 'REGISTRATION_ADDRESS': case 'UR_ADDRESS': foreach($value as $nameProperty => $valueProperty) { if(strlen($valueProperty) > 0 && empty($property[$nameProperty])) $property[$nameProperty] = $valueProperty; } $property["ADDRESS_FULL"] = $value["PRESENTATION"]; $property["INDEX"] = $value["POST_CODE"]; break; case 'ADDRESS': foreach($value as $nameProperty => $valueProperty) { if(strlen($valueProperty) > 0 && empty($property["F_".$nameProperty])) $property["F_".$nameProperty] = $valueProperty; } $property["F_ADDRESS_FULL"] = $value["PRESENTATION"]; $property["F_INDEX"] = $value["POST_CODE"]; break; } } } $result['TRAITS'] = isset($profile)? $profile:array(); $result['ORDER_PROPS'] = isset($property)? $property:array(); return $result; } /** * @param null $entity * @param array $fields */ static public function sanitizeFields($entity = null, array &$fields, ISettings $settings) { // TODO: Implement sanitizeFields() method. } public function externalize(array $fields) { $result = array(); $traits = $fields['TRAITS']; $businessValue = $fields['BUSINESS_VALUE']; $availableFields = $this->getFieldsInfo(); foreach ($availableFields as $k=>$v) { $value=''; $replacedFields = $businessValue; switch ($k) { case 'XML_ID': $value = $this->getXmlId($traits); break; case 'ITEM_NAME': $value = $businessValue['AGENT_NAME']; break; case 'INN': $value = $businessValue['INN']; break; case 'KPP': $value = $businessValue['KPP']; break; case 'ADDRESS': $replaceNameFields = array( 'PRESENTATION' => 'F_ADDRESS_FULL', 'POST_CODE' => 'F_INDEX', 'COUNTRY' => 'F_COUNTRY', 'REGION' => 'F_REGION', 'STATE' => 'F_STATE', 'SMALL_CITY' => 'F_TOWN', 'CITY' => 'F_CITY', 'STREET' => 'F_STREET', 'HOUSE' => 'F_HOUSE', 'BUILDING' => 'F_BUILDING', 'FLAT' => 'F_FLAT'); $this->replaceNameFields($replacedFields, $replaceNameFields); $value = $this->externalizeArrayFields($replacedFields, $v); break; case 'CONTACTS': $replaceNameFields = array( 'WORK_PHONE_NEW' => 'PHONE', 'MAIL_NEW' => 'EMAIL' ); $this->replaceNameFields($replacedFields, $replaceNameFields); $value = $this->externalizeArrayFields($replacedFields, $v); break; case 'REPRESENTATIVES': $replaceNameFields = array( 'RELATION' => 'CONTACT_PERSON', 'ID' => 'CONTACT_PERSON', 'ITEM_NAME' => 'CONTACT_PERSON', ); $this->replaceNameFields($replacedFields, $replaceNameFields); $value = $this->externalizeArrayFields($replacedFields, $v); break; case 'ROLE': $value = DocumentBase::getLangByCodeField('BUYER'); break; } $result[$k] = $value; } if($this->isFiz($businessValue)) { foreach ($availableFields as $k=>$v) { if(in_array($k, array('XML_ID','ITEM_NAME', 'INN', 'KPP', 'ADDRESS', 'CONTACTS', 'REPRESENTATIVES', 'ROLE'))) continue; $value=''; $replacedFields = $businessValue; switch ($k) { case 'FULL_NAME': $value = $businessValue['FULL_NAME']; break; case 'SURNAME': $value = $businessValue['SURNAME']; break; case 'NAME': $value = $businessValue['NAME']; break; case 'MIDDLE_NAME': $value = $businessValue['SECOND_NAME']; break; case 'BIRTHDAY': $value = $businessValue['BIRTHDAY']; break; case 'SEX': $value = $businessValue['MALE']; break; case 'REGISTRATION_ADDRESS': $replaceNameFields = array( 'PRESENTATION'=>'ADDRESS_FULL', 'POST_CODE'=>'INDEX', ); $this->replaceNameFields($replacedFields, $replaceNameFields); $value = $this->externalizeArrayFields($replacedFields, $v); break; } if(!is_array($value)) $this->externalizeField($value, $v); $result[$k] = $value; } } else { foreach ($availableFields as $k=>$v) { if(in_array($k, array('XML_ID','ITEM_NAME', 'INN', 'KPP', 'ADDRESS', 'CONTACTS', 'REPRESENTATIVES', 'ROLE'))) continue; $value=''; $replacedFields = $businessValue; switch ($k) { case 'UR_ADDRESS': $replaceNameFields = array( 'PRESENTATION'=>'ADDRESS_FULL', 'POST_CODE'=>'INDEX', ); $this->replaceNameFields($replacedFields, $replaceNameFields); $value = $this->externalizeArrayFields($replacedFields, $v); break; case 'OFICIAL_NAME': $value = $businessValue['FULL_NAME']; break; case 'EGRPO': $value = $businessValue['EGRPO']; break; case 'OKVED': $value = $businessValue['OKVED']; break; case 'OKDP': $value = $businessValue['OKDP']; break; case 'OKOPF': $value = $businessValue['OKOPF']; break; case 'OKFC': $value = $businessValue['OKFC']; break; case 'OKPO': case 'OKPO_CODE': $value = $businessValue['OKPO']; break; case 'MONEY_ACCOUNTS': $replaceNameFields = array( 'ITEM_NAME'=>'B_NAME', 'PRESENTATION'=>'B_ADDRESS_FULL', 'POST_CODE'=>'B_INDEX', 'COUNTRY'=>'B_COUNTRY', 'REGION'=>'B_REGION', 'STATE'=>'B_STATE', 'SMALL_CITY'=>'B_TOWN', 'CITY'=>'B_CITY', 'STREET'=>'B_STREET', 'HOUSE'=>'B_HOUSE', 'BUILDING'=>'B_BUILDING', 'FLAT'=>'B_FLAT', ); $this->replaceNameFields($replacedFields, $replaceNameFields); $value = $this->externalizeArrayFields($replacedFields, $v); break; } if(!is_array($value)) $this->externalizeField($value, $v); $result[$k] = $value; } } foreach ($availableFields as $k=>$v) { if($k <> 'REK_VALUES') continue; $value=''; switch ($k) { case 'REK_VALUES': $value=array(); foreach($v['FIELDS'] as $name=>$fieldInfo) { $valueRV=''; switch($name) { case 'DELIVERY_ADDRESS': $valueRV = isset($result['ADDRESS']['PRESENTATION']) ? $result['ADDRESS']['PRESENTATION']:''; if($valueRV === '') $valueRV = $result[($this->isFiz($businessValue) ? 'REGISTRATION_ADDRESS':'UR_ADDRESS')]['PRESENTATION']; break; } $value[] = $this->externalizeRekvValue($name, $valueRV, $fieldInfo); } break; } $result[$k] = $value; } $result = $this->modifyTrim($result); return $result; } /** * @param array $fields * @return bool */ protected function isFiz(array $fields) { return ($fields["IS_FIZ"]=="Y"); } /** * @param $fields * @param null $fieldsInfo * @return array */ public function externalizeArrayFields($fields, $fieldsInfo, $key=null) { $result = array(); foreach ($fieldsInfo['FIELDS'] as $name=>$fieldInfo) { if($fieldInfo['TYPE'] == 'array') { switch ($name) { case 'ADDRESS_FIELD': case 'CONTACT': case 'REPRESENTATIVE': $value = $this->externalizeArrayFields($fields, $fieldInfo); break; default: $value = $this->externalizeArrayFields($fields, $fieldInfo, $name); } } else { switch ($name) { case 'RELATION': case 'TYPE': $value = DocumentBase::getLangByCodeField($key); break; case 'VALUE': $value = $fields[$key]; break; default: $value = $fields[$name]; } } if(!is_array($value)) $this->externalizeField($value, $fieldInfo); $result[$name] = $value; } return $result; } /** * @param array $original * @param array $replace */ private function replaceNameFields(array &$original, array $replace) { foreach ($original as $k=>$v) { $replaceNameField = array_search($k, $replace); if($replaceNameField !== false) { $original[$replaceNameField] = $v; unset($original[$k]); } } } /** * @param array $fields * @return string */ private function getXmlId(array $fields) { if(strlen($fields['XML_ID'])>0) { $result = $fields['XML_ID']; } else { $result = htmlspecialcharsbx(substr($fields["ID"]."#".$fields["LOGIN"]."#".$fields["LAST_NAME"]." ".$fields["NAME"]." ".$fields["SECOND_NAME"], 0, 40)); \Bitrix\Sale\Exchange\Entity\UserImportBase::updateEmptyXmlId($fields["ID"], $result); } return $result; } }