%PDF- %PDF- 403WebShell
403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/esol.allimportexport/lib/entity/sale_order_table.php
<?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;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit