%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/converterdocumentshipment.php |
<?php
namespace Bitrix\Sale\Exchange\OneC;
use Bitrix\Main\ArgumentException;
use Bitrix\Sale\Exchange\EntityType;
use Bitrix\Sale\Exchange\ImportBase;
use Bitrix\Sale\Exchange\ImportOneCBase;
use Bitrix\Sale\Exchange\ISettings;
use Bitrix\Sale\Exchange\ISettingsExport;
use Bitrix\Sale\Exchange\ISettingsImport;
use Bitrix\Sale\Shipment;
/**
* Class ConverterDocumentShipment
* @package Bitrix\Sale\Exchange\OneC
* @deprecated
*/
class ConverterDocumentShipment extends Converter
{
/**
* @return array
*/
protected function getFieldsInfo()
{
return ShipmentDocument::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();
$availableFields = Shipment::getAvailableFields();
foreach ($availableFields as $k)
{
switch($k)
{
case 'ID_1C':
case 'VERSION_1C':
if(isset($params[$k]))
$fields[$k] = $params[$k];
break;
case 'COMMENTS':
if(isset($params['COMMENT']))
$fields[$k] = $params['COMMENT'];
break;
case 'DELIVERY_DOC_DATE':
if(isset($params['1C_DATE']))
$fields[$k] = $params['1C_DATE'];
break;
case 'DELIVERY_DOC_NUM':
if(isset($params['REK_VALUES']['1C_DELIVERY_NUM']))
$fields[$k] = $params['REK_VALUES']['1C_DELIVERY_NUM'];
break;
case 'DEDUCTED':
$deducted='';
$cancel='';
if(isset($params['REK_VALUES']['DEDUCTED']))
$deducted = $params['REK_VALUES']['DEDUCTED'];
if(isset($params['REK_VALUES']['CANCEL']))
$cancel = $params['REK_VALUES']['CANCEL'];
if($deducted == 'Y')
$fields[$k] = 'Y';
elseif($cancel == 'Y')
$fields[$k] = 'N';
break;
case 'ALLOW_DELIVERY':
$value='';
if(isset($params['REK_VALUES']['DEDUCTED']))
$value = $params['REK_VALUES']['DEDUCTED'];
if($value == 'Y')
$fields[$k] = 'Y';
break;
case 'TRACKING_NUMBER':
if(isset($params['REK_VALUES']['1C_TRACKING_NUMBER']))
$fields[$k] = $params['REK_VALUES']['1C_TRACKING_NUMBER'];
break;
case 'BASE_PRICE_DELIVERY':
$fields["BASE_PRICE_DELIVERY"] = $this->getBasePriceDelivery($params['ITEMS']);
break;
case 'DELIVERY_ID':
$deliverySystemId = 0;
if(isset($params['REK_VALUES']['DELIVERY_SYSTEM_ID']))
{
$deliverySystemId = $params['REK_VALUES']['DELIVERY_SYSTEM_ID'];
}
if($deliverySystemId<=0)
{
if(isset($params['REK_VALUES']['DELIVERY_SYSTEM_ID_DEFAULT']))
{
$deliverySystemId = $params['REK_VALUES']['DELIVERY_SYSTEM_ID_DEFAULT'];
}
}
/** @var ImportSettings $settings */
$settings = $this->getSettings();
if($deliverySystemId<=0)
{
$deliverySystemId = $settings->shipmentServiceFor($this->getEntityTypeId());
}
if($deliverySystemId<=0)
{
$deliverySystemId = $settings->shipmentServiceDefaultFor($this->getEntityTypeId());
}
$fields[$k] = $deliverySystemId;
break;
}
}
$result['TRAITS'] = isset($fields)? $fields:array();
$result['ITEMS'] = isset($params['ITEMS'])? $params['ITEMS']:array();
$result['TAXES'] = isset($params['TAXES'])? $params['TAXES']:array();
return $result;
}
/**
* @param Shipment|null $shipment
* @param array $fields
* @throws ArgumentException
*/
static public function sanitizeFields($shipment=null, array &$fields, ISettings $settings)
{
if(!empty($shipment) && !($shipment instanceof Shipment))
throw new ArgumentException("Entity must be instanceof Shipment");
foreach($fields as $k=>$v)
{
switch($k)
{
case 'BASE_PRICE_DELIVERY':
if((!empty($shipment)? $shipment->getPrice():'') != $v)
{
/** @var ISettingsImport $settings */
$fields['CURRENCY'] = $settings->getCurrency();
$fields['CUSTOM_PRICE_DELIVERY'] = "Y";
}
else
{
unset($fields['BASE_PRICE_DELIVERY']);
}
break;
case 'DELIVERY_ID':
if(!empty($shipment))
{
unset($fields['DELIVERY_ID']);
}
break;
}
}
unset($fields['ID']);
}
public function externalize(array $fields)
{
$result = array();
$traits = $fields['TRAITS'];
$items = $fields['ITEMS'];
$stories = isset($fields['STORIES']) ? $fields['STORIES']: array();
$taxes = $fields['TAXES'];
$businessValue = $fields['BUSINESS_VALUE'];
$availableFields = $this->getFieldsInfo();
/** @var ISettingsExport $settings */
$settings = $this->getSettings();
foreach ($availableFields as $k=>$v)
{
$value='';
switch ($k)
{
case 'ID':
$value = ($traits['ID_1C']<>'' ? $traits['ID_1C']:$traits['ID']);
break;
case 'NUMBER':
$value = $traits['ID'];
break;
case 'DATE':
$value = $traits['DATE_INSERT'];
break;
case 'OPERATION':
$value = DocumentBase::resolveDocumentTypeName($this->getDocmentTypeId());
break;
case 'ROLE':
$value = DocumentBase::getLangByCodeField('SELLER');
break;
case 'CURRENCY':
$replaceCurrency = $settings->getReplaceCurrency();
$value = substr($replaceCurrency<>'' ? $replaceCurrency:$traits[$k], 0, 3);
break;
case 'CURRENCY_RATE':
$value = self::CURRENCY_RATE_DEFAULT;;
break;
case 'AMOUNT':
$price = 0;
foreach ($items as $item)
{
if($item['PRODUCT_XML_ID'] !== ImportOneCBase::DELIVERY_SERVICE_XMLID)
$price = $price + $item['PRICE'] * $item['QUANTITY'];
}
$value = $price + $traits['PRICE_DELIVERY'];
break;
case 'VERSION':
$value = $traits['VERSION'];
break;
case 'NUMBER_BASE':// ?????
$value = $traits['ORDER_ID'];
break;
case 'TAXES':
if(count($taxes)>0)
$value = $this->externalizeTaxes($taxes, $v);
break;
case 'STORIES':
if(count($stories)>0)
$value = $this->externalizeStories($stories, $v);
break;
case 'TIME':
$value = $traits['DATE_INSERT'];
break;
case 'COMMENT':
$value = $traits['COMMENTS'];
break;
case 'ITEMS':
if(count($items)>0)
$value = $this->externalizeItems($items, $v);
break;
case 'REK_VALUES':
$value=array();
foreach($v['FIELDS'] as $name=>$fieldInfo)
{
$valueRV='';
switch($name)
{
case 'PRICE_DELIVERY':
$valueRV = (strlen($traits['PRICE_DELIVERY'])>0? $traits['PRICE_DELIVERY']:"0.0000");
break;
case 'DATE_ALLOW_DELIVERY':
case 'DELIVERY_LOCATION':
case 'DATE_DEDUCTED':
case 'REASON_UNDO_DEDUCTED':
case 'RESERVED':
case 'REASON_MARKED':
case 'TRACKING_NUMBER':
$valueRV = $traits[$name];
break;
case 'CANCEL':
$valueRV = $traits['CANCELED'];
break;
case 'DELIVERY_SYSTEM_ID':
$valueRV = $traits['DELIVERY_ID'];
break;
case 'DELIVERY_STATUS':
$valueRV = $traits['STATUS_ID'];
break;
case 'DELIVERY_DEDUCTED':
$valueRV = $traits['DEDUCTED'];
break;
case 'DELIVERY':
$valueRV = $traits['DELIVERY_NAME'];
break;
case 'DELIVERY_DATE_CANCEL':
$valueRV = $traits['DATE_CANCELED'];
break;
case 'CANCEL_REASON':
$valueRV = $traits['REASON_CANCELED'];
break;
case 'SITE_NAME':
$valueRV = '['.$traits['LID'].'] '.static::getSiteNameByLid($traits['LID']);
break;
case 'REKV':
$value = array_merge($value, $this->externalizeRekv($businessValue[$name], $fieldInfo));
break;
}
if(!in_array($name, array('REKV')))
{
$value[] = $this->externalizeRekvValue($name, $valueRV, $fieldInfo);
}
}
break;
}
if(!in_array($k, array('TAXES', 'STORES', 'ITEMS', 'REK_VALUES')))
{
$this->externalizeField($value, $v);
}
$result[$k] = $value;
}
$result = $this->modifyTrim($result);
return $result;
}
public function externalizeItems(array $taxes, array $info)
{
/** @var ConverterDocumentOrder $converter */
$converter = ConverterFactory::create(EntityType::ORDER);
return $converter->externalizeItems($taxes, $info);
}
public function externalizeStories(array $stories, array $info)
{
/** @var ConverterDocumentOrder $converter */
$converter = ConverterFactory::create(EntityType::ORDER);
return $converter->externalizeStories($stories, $info);
}
public function externalizeTaxes(array $items, array $info)
{
/** @var ConverterDocumentOrder $converter */
$converter = ConverterFactory::create(EntityType::ORDER);
return $converter->externalizeTaxes($items, $info);
}
protected function getBasePriceDelivery($list=[])
{
if(is_array($list) && count($list)>0)
{
foreach($list as $item)
{
foreach($item as $fields)
{
if($fields['TYPE'] == ImportBase::ITEM_SERVICE)
{
//if((!empty($shipment)? $shipment->getPrice():'') != $item["PRICE"])
//{
//$fields["CUSTOM_PRICE_DELIVERY"] = "Y";
return $fields["PRICE"];
//$fields["CURRENCY"] = $settings->getCurrency();
//}
//break 2;
}
}
}
}
return 0;
}
}