%PDF- %PDF-
Server IP : 37.220.80.31 / Your IP : 3.14.134.46 Web Server : Apache/2.4.52 (Ubuntu) System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64 User : www-root ( 1010) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/esol.allimportexport/lib/entity/ |
Upload File : |
<?php namespace Bitrix\Sale\Internals; use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class EsolIEOrderTable extends \Bitrix\Sale\Internals\OrderTable { static $propFields = null; static $propFieldTitles = null; public static function getMap() { $arMap = parent::getMap(); \Bitrix\EsolAie\Entity\Utils::PrepareMap($arMap); $arMap['SUM_PURCHASING_PRICE'] = array( 'title' => Loc::getMessage('ESOL_AIE_ORDER_SUM_PURCHASE_PRICE'), 'data_type' => 'float', 'expression' => array( 'SUM(%s*%s)','BASKET.PRODUCT.PURCHASING_PRICE','BASKET.QUANTITY' ) ); $arMap['IE_DELIVERY'] = array( 'data_type' => '\Bitrix\Sale\Delivery\Services\Table', 'reference' => array( '=this.DELIVERY_ID' => 'ref.ID', ) ); $arMap['IE_PAYMENT'] = array( 'data_type' => '\Bitrix\Sale\Internals\PaySystemActionTable', 'reference' => array( '=this.PAY_SYSTEM_ID' => 'ref.ID', ) ); self::initPropertyFields(); if(is_array(self::$propFields)) { foreach(self::$propFields as $k=>$v) { $arMap[$k] = $v; } } return $arMap; } public static function getRelAllowImportFields() { $fl = \Bitrix\EsolAie\Import\FieldList::getInstance('salebasket'); $arBasketFields = $fl->GetEntityFieldsDirect(false, false); $arGroups = array('BASKET'=>array( 'PRODUCT_ID', 'NAME', 'QUANTITY', 'PRICE', 'CURRENCY' )); /*foreach($arBasketFields as $k=>$v) { if(strpos($k, '.')!==false) continue; $arGroups['BASKET'][$k] = array(); }*/ return $arGroups; } public static function getIEFields($type='export') { $arMap = self::getMap(); $arMap = array_diff_key($arMap, array_flip(preg_grep('/^IE_ORDERPROPERTY_[^\.]*$/', array_keys($arMap)))); return $arMap; } public static function getRelTitles() { self::initPropertyFields(); $arResult = self::$propFieldTitles; if(!is_array($arResult)) $arResult = array(); return $arResult; } public static function prepareDefaultFields(&$arFields) { $arFields = array_diff($arFields, preg_grep('/^IE_ORDERPROPERTY_/', $arFields)); } public static function initPropertyFields() { if(!isset(self::$propFields)) { self::$propFields = array(); self::$propFieldTitles = array(); $dbRes = \Bitrix\Sale\Internals\OrderPropsTable::getList(array('order'=>array('ID'=>'ASC'))); while($arr = $dbRes->Fetch()) { if($arr['TYPE']=='ENUM') { $className = 'EsolIEOrderPropertyID'.$arr['ID'].'Table'; $fullClassName = '\Bitrix\Sale\Internals\\'.$className; eval('namespace Bitrix\Sale\Internals;'."\r\n". 'class '.$className.' extends OrderPropsValueTable{'."\r\n". 'public static function getMap(){'."\r\n". '$arMap = parent::getMap();'."\r\n". '$arMap["VALUE_ENUM"] = new \Bitrix\Main\Entity\ReferenceField('."\r\n". '"VALUE_ENUM",'."\r\n". '"\Bitrix\Sale\Internals\OrderPropsVariantTable",'."\r\n". 'array('."\r\n". '"=ref.VALUE" => "this.VALUE",'."\r\n". '"=ref.ORDER_PROPS_ID" => "this.ORDER_PROPS_ID"'."\r\n". ')'."\r\n". ');'."\r\n". 'return $arMap;'."\r\n". '}'."\r\n". '}'); self::$propFields['IE_ORDERPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_ORDERPROPERTY_'.$arr['ID'], $fullClassName, array( '=ref.ORDER_ID' => 'this.ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); self::$propFields['IE_ORDERPROPERTY_'.$arr['ID'].'.VALUE_ENUM.NAME'] = new \Bitrix\Main\Entity\StringField( 'IE_ORDERPROPERTY_'.$arr['ID'].'.VALUE_ENUM.NAME', array( 'title' => Loc::getMessage("ESOL_AE_FL_ORDER_PROP").' '.$arr['NAME'].' ['.$arr['ID'].']' ) ); } else { self::$propFields['IE_ORDERPROPERTY_'.$arr['ID']] = new \Bitrix\Main\Entity\ReferenceField( 'IE_ORDERPROPERTY_'.$arr['ID'], 'Bitrix\Sale\Internals\OrderPropsValue', array( '=ref.ORDER_ID' => 'this.ID', '=ref.ORDER_PROPS_ID' => new \Bitrix\Main\DB\SqlExpression('?i', $arr['ID']) ) ); self::$propFields['IE_ORDERPROPERTY_'.$arr['ID'].'.VALUE'] = new \Bitrix\Main\Entity\StringField( 'IE_ORDERPROPERTY_'.$arr['ID'].'.VALUE', array( 'title' => Loc::getMessage("ESOL_AE_FL_ORDER_PROP").' '.$arr['NAME'].' ['.$arr['ID'].']' ) ); //self::$propFieldTitles['IE_ORDERPROPERTY_'.$arr['ID']] = Loc::getMessage("ESOL_AE_FL_ORDER_PROP").' '.$arr['NAME']; } } } } public static function GetExportFieldSettings($field) { $arData = array(); if($field=='DATE_STATUS') { $arStatuses = array(array('VALUE'=>'', 'TITLE'=>Loc::getMessage("ESOL_AE_FL_ORDER_NOT_CHOOSE"))); $dbRes = \Bitrix\Sale\Internals\StatusTable::getList(array('filter'=>array('STATUS_LANG.LID'=>LANGUAGE_ID), 'select'=>array('ID', 'TITLE'=>'STATUS_LANG.NAME'))); while($arr = $dbRes->Fetch()) { $arStatuses[] = array('VALUE'=>$arr['ID'], 'TITLE'=>'['.$arr['ID'].'] '.$arr['TITLE']); } /*$arData[] = array( 'NOTE' => Loc::getMessage("ESOL_AE_FL_ORDER_STATUS_FROM_NOTE"), 'TITLE' => Loc::getMessage("ESOL_AE_FL_ORDER_STATUS_FROM"), 'NAME' => 'STATUS_FROM', 'TYPE' => 'SELECT', 'OPTIONS' => $arStatuses );*/ $arData[] = array( 'NOTE' => Loc::getMessage("ESOL_AE_FL_ORDER_STATUS_FROM_NOTE"), 'TITLE' => Loc::getMessage("ESOL_AE_FL_ORDER_STATUS_TO"), 'NAME' => 'STATUS_TO', 'TYPE' => 'SELECT', 'MULTIPLE' => 'Y', 'OPTIONS' => $arStatuses ); } return $arData; } public static function PrepareExportField_DATE_STATUS($field, $val, $arSettings, $arItem) { if($arItem['ID'] && is_array($arSettings) && /*$arSettings['STATUS_FROM'] && */$arSettings['STATUS_TO']) { $val = ''; $dbRes = \Bitrix\Sale\Internals\OrderChangeTable::getList(array('filter'=>array('ORDER_ID'=>$arItem['ID'], 'TYPE'=>'ORDER_STATUS_CHANGED'), 'select'=>array('DATE_CREATE', 'DATA'), 'order'=>array('ID'=>'ASC'))); $find = false; while(!$find && ($arr = $dbRes->Fetch())) { $arRecData = unserialize($arr['DATA']); if(is_array($arRecData) && in_array($arRecData['STATUS_ID'], $arSettings['STATUS_TO'])) { $val = $arr['DATE_CREATE']; $find = true; } } } return $val; } public static function SaveRelatedEntities($ID, $arFieldsElement, $secondUpdate=false) { $arPropKeys = array_map(array(__CLASS__, 'GetOrderPropertyId'), preg_grep('/^IE_ORDERPROPERTY_\d+\.VALUE$/', array_keys($arFieldsElement))); if(!empty($arPropKeys)) { $arProps = array(); $dbRes = \Bitrix\Sale\Internals\OrderPropsTable::getList(array('order'=>array('ID'=>'ASC'), 'filter'=>array('ID'=>$arPropKeys))); while($arr = $dbRes->Fetch()) { $arProps[$arr['ID']] = $arr; } $arOrderProps = array(); $dbRes = \Bitrix\Sale\Internals\OrderPropsValueTable::getList(array('filter'=>array('ORDER_ID'=>$ID, 'ORDER_PROPS_ID'=>$arPropKeys))); while($arr = $dbRes->Fetch()) { $arOrderProps[$arr['ORDER_PROPS_ID']] = $arr; } foreach($arProps as $propKey=>$arProp) { $propVal = trim($arFieldsElement['IE_ORDERPROPERTY_'.$propKey.'.VALUE']); if($arProp['MULTIPLE']=='Y' && $secondUpdate) { $oldVal = (is_array($arOrderProps[$propKey]['VALUE']) ? $arOrderProps[$propKey]['VALUE'] : array($arOrderProps[$propKey]['VALUE'])); if(strlen($propVal) > 0) $propVal = array_merge($oldVal, array($propVal)); else $propVal = $oldVal; } if(isset($arOrderProps[$propKey])) { if(strlen($propVal) > 0 || is_array($propVal)) \Bitrix\Sale\Internals\OrderPropsValueTable::update($arOrderProps[$propKey]['ID'], array('VALUE'=>$propVal)); else \Bitrix\Sale\Internals\OrderPropsValueTable::delete($arOrderProps[$propKey]['ID']); } elseif(strlen($propVal) > 0) { \Bitrix\Sale\Internals\OrderPropsValueTable::add(array('ORDER_ID'=>$ID, 'ORDER_PROPS_ID'=>$propKey, 'NAME'=>$arProp['NAME'], 'VALUE'=>$propVal, 'CODE'=>$arProp['CODE'])); } } } } public static function GetOrderPropertyId($n) { return substr($n, 17, -6); } public static function AfterUpdate($ID, $arFields) { $order = \Bitrix\Sale\Order::load($ID); if(array_key_exists('STATUS_ID', $arFields)) $order->setField('STATUS_ID', $arFields['STATUS_ID']); if(array_key_exists('ALLOW_DELIVERY', $arFields)) { foreach ($order->getShipmentCollection() as $shipment) { if(!$shipment->isSystem()) { $shipment->setField('ALLOW_DELIVERY', $arFields['ALLOW_DELIVERY']); } } } $arBasket = array(); foreach($arFields as $k=>$v) { if(strpos($k, 'BASKET.')!==false) $arBasket[substr($k, 7)] = $v; } if(count($arBasket) > 0 && array_key_exists('PRODUCT_ID', $arBasket) && $arBasket['PRODUCT_ID'] > 0) { /*$arBasket['ORDER_ID'] = $ID; $arBasket['LID'] = $order->getField('LID'); if(!$arBasket['CURRENCY']) $arBasket['CURRENCY'] = $order->getField('CURRENCY'); if(!$arBasket['FUSER_ID']) $arBasket['FUSER_ID'] = 0; if(\Bitrix\Main\Loader::includeModule('iblock') && ($arElement = \CIblockElement::GetList(array(), array('ID'=>$arBasket['PRODUCT_ID']), false, false, array('DETAIL_PAGE_URL'))->GetNext())) { if(!array_key_exists('DETAIL_PAGE_URL', $arBasket)) $arBasket['DETAIL_PAGE_URL'] = $arElement['DETAIL_PAGE_URL']; } $basketClass = '\Bitrix\Sale\Internals\EsolIESaleBasketTable'; if($arBasketItem = $basketClass::getList(array('filter'=>array('ORDER_ID'=>$arBasket['ORDER_ID'], 'PRODUCT_ID'=>$arBasket['PRODUCT_ID']), 'select'=>array('ID')))->fetch()) { $basketClass::update($arBasketItem['ID'], $arBasket); } else { $dbRes2 = $basketClass::add($arBasket); }*/ $lid = $order->getField('LID'); $productId = $arBasket['PRODUCT_ID']; $quantity = ((float)$arBasket['QUANTITY'] > 0 ? (float)$arBasket['QUANTITY'] : 1); $basket = $order->getBasket(); $arBasketItemFields = array(); if((float)$arBasket['QUANTITY'] > 0) $arBasketItemFields['QUANTITY'] = $arBasket['QUANTITY']; if(array_key_exists('NAME', $arBasket)) $arBasketItemFields['NAME'] = $arBasket['NAME']; if(array_key_exists('CURRENCY', $arBasket)) $arBasketItemFields['CURRENCY'] = $arBasket['CURRENCY']; if(array_key_exists('PRICE', $arBasket)) { $arBasketItemFields['PRICE'] = $arBasket['PRICE']; $arBasketItemFields['CUSTOM_PRICE'] = 'Y'; } if(\Bitrix\Main\Loader::includeModule('iblock') && ($arElement = \CIblockElement::GetList(array(), array('ID'=>$arBasket['PRODUCT_ID']), false, false, array('DETAIL_PAGE_URL'))->GetNext())) { $arBasketItemFields['DETAIL_PAGE_URL'] = $arElement['DETAIL_PAGE_URL']; } if($basketItem = $basket->getExistsItem('catalog', $productId)) { $arBasketItem = $arBasketItemFields; foreach($arBasketItem as $k=>$v) { $basketItem->setField($k, $v); } if($arBasketItem['CUSTOM_PRICE']=='Y') $basketItem->markFieldCustom('PRICE'); } else { $basketItem = \Bitrix\Sale\BasketItem::create($basket, 'catalog', $productId); $arBasketItem = \Bitrix\Sale\TradingPlatform\Helper::getProductById($productId, $quantity, $lid); $arBasketItem['QUANTITY'] = $quantity; $arBasketItem['XML_ID'] = (isset($arBasket['XML_ID']) ? $arBasket['XML_ID'] : uniqid('bx_')); $arNeedFields = array('QUANTITY', 'MODULE', 'PRODUCT_PROVIDER_CLASS', 'PRODUCT_XML_ID', 'CURRENCY', 'XML_ID'); $arKeys = array_keys($arBasketItem); $countFields = 0; foreach($arKeys as $key) { if(!in_array($key, $arNeedFields)) { unset($arBasketItem[$key]); } else { $countFields++; } } if($countFields >= count($arNeedFields)) { $arBasketItem = array_merge($arBasketItem, $arBasketItemFields); $basketItem->initFields($arBasketItem); if($arBasketItem['CUSTOM_PRICE']=='Y') $basketItem->markFieldCustom('PRICE'); $basket->addItem($basketItem); } } $order->refreshData(); } $order->save(); } public static function PrepareFieldsForAddImport(&$arFields) { if(!isset($arFields['DATE_UPDATE'])) $arFields['DATE_UPDATE'] = ConvertTimeStamp(false, "FULL"); if(!isset($arFields['DATE_INSERT'])) $arFields['DATE_INSERT'] = ConvertTimeStamp(false, "FULL"); if(!isset($arFields['DATE_STATUS'])) $arFields['DATE_STATUS'] = ConvertTimeStamp(false, "FULL"); } public static function PrepareFieldsCustom(&$arFields) { $arFields = array_diff_key($arFields, array_flip(preg_grep('/^IE_ORDERPROPERTY_/', array_keys($arFields)))); if(isset($arFields['PRICE'])) $arFields['PRICE'] = \Bitrix\EsolAie\Entity\Utils::GetFloatVal($arFields['PRICE']); if(isset($arFields['PRICE_DELIVERY'])) $arFields['PRICE_DELIVERY'] = \Bitrix\EsolAie\Entity\Utils::GetFloatVal($arFields['PRICE_DELIVERY']); if(isset($arFields['SUM_PAID'])) $arFields['SUM_PAID'] = \Bitrix\EsolAie\Entity\Utils::GetFloatVal($arFields['SUM_PAID']); } public static function GetUpdatableFields($arFields) { if(isset($arFields['ALLOW_DELIVERY'])) unset($arFields['ALLOW_DELIVERY']); if(isset($arFields['STATUS_ID'])) unset($arFields['STATUS_ID']); return $arFields; } public static function CheckCntFilterFields($fieldName) { if(strpos($fieldName, 'IE_ORDERPROPERTY_')!==false) return false; return true; } public static function Add(array $arFields) { self::PrepareFieldsCustom($arFields); $result = parent::Add($arFields); if($result->isSuccess()) { $ID = $result->getId(); self::AfterUpdate($ID, $arFields); } return $result; } public static function Update($ID, array $arFields) { self::PrepareFieldsCustom($arFields); $result = parent::Update($ID, self::GetUpdatableFields($arFields)); if($result->isSuccess()) { self::AfterUpdate($ID, $arFields); } return $result; } }