%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/handlers/delivery/spsr/ |
Current File : /home/bitrix/www/bitrix/modules/sale/handlers/delivery/spsr/profile.php |
<? namespace Sale\Handlers\Delivery; use Bitrix\Main\Error; use Bitrix\Sale\Shipment; use Bitrix\Main\Localization\Loc; use Bitrix\Main\ArgumentNullException; use Bitrix\Sale\Delivery\Services\Manager; use Bitrix\Sale\Delivery\CalculationResult; Loc::loadMessages(__FILE__); class SpsrProfile extends \Bitrix\Sale\Delivery\Services\Base { /** @var SpsrHandler Parent service. */ protected $spsrHandler = null; /** @var int Service type */ protected $serviceType = 0; protected static $whetherAdminExtraServicesShow = true; /** @var bool This handler is profile */ protected static $isProfile = true; /** * @param array $initParams * @throws ArgumentNullException * @throws \Bitrix\Main\ArgumentTypeException */ public function __construct(array $initParams) { if(empty($initParams["PARENT_ID"])) throw new ArgumentNullException('initParams[PARENT_ID]'); parent::__construct($initParams); $this->spsrHandler = Manager::getObjectById($this->parentId); if(!($this->spsrHandler instanceof SpsrHandler)) throw new ArgumentNullException('this->spsrHandler is not instance of SpsrHandler'); if(isset($initParams['PROFILE_ID']) && intval($initParams['PROFILE_ID']) > 0) $this->serviceType = intval($initParams['PROFILE_ID']); elseif(isset($this->config['MAIN']['SERVICE_TYPE']) && intval($this->config['MAIN']['SERVICE_TYPE']) > 0) $this->serviceType = $this->config['MAIN']['SERVICE_TYPE']; if($this->id <= 0 && $this->serviceType > 0) { $srvRes = $this->spsrHandler->getServiceTypes(); $srvTypes = $srvRes->getData(); if(!empty($srvTypes[$this->serviceType])) { $this->name = $srvTypes[$this->serviceType]['Name']; $this->description = $srvTypes[$this->serviceType]['ShortDescription']; } } $this->inheritParams(); } /** * @return string */ public static function getClassTitle() { return Loc::getMessage("SALE_DLV_SRV_SPSR_PROFILE_TITLE"); } /** * @return string */ public static function getClassDescription() { return Loc::getMessage("SALE_DLV_SRV_SPSR_PROFILE_DESCRIPTION"); } /** * Defines inheritance behavior. * @throws ArgumentNullException * @throws \Bitrix\Main\SystemException */ protected function inheritParams() { if(strlen($this->name) <= 0) $this->name = $this->spsrHandler->getName(); if(intval($this->logotip) <= 0) $this->logotip = $this->spsrHandler->getLogotip(); if(strlen($this->description) <= 0) $this->description = $this->spsrHandler->getDescription(); if(empty($this->trackingParams)) $this->trackingParams = $this->spsrHandler->getTrackingParams(); if(strlen($this->trackingClass) <= 0) $this->trackingClass = $this->spsrHandler->getTrackingClass(); $parentES = \Bitrix\Sale\Delivery\ExtraServices\Manager::getExtraServicesList($this->parentId); $allowEsCodes = self::getProfileES($this->serviceType); if(!empty($parentES)) { foreach($parentES as $esFields) { if( strlen($esFields['CODE']) > 0 && !$this->extraServices->getItemByCode($esFields['CODE']) && in_array($esFields['CODE'], $allowEsCodes) ) { $this->extraServices->addItem($esFields, $this->currency); } } } } /** * Calculates price * @param Shipment $shipment * @return CalculationResult */ protected function calculateConcrete(Shipment $shipment) { $srvRes = $this->spsrHandler->getServiceTypes($shipment); $srvList = $srvRes->getData(); if(empty($srvList[$this->serviceType]['Name'])) { $result = new CalculationResult(); $result->addError(new Error(Loc::getMessage('SALE_DLV_SRV_SPSR_ERROR_HTTP_PUBLIC'))); $eventLog = new \CEventLog; $eventLog->Add(array( "SEVERITY" => $eventLog::SEVERITY_ERROR, "AUDIT_TYPE_ID" => "SALE_DELIVERY_HANDLER_SPSR_PROFILE_CONF_TYPE_ERROR", "MODULE_ID" => "sale", "ITEM_ID" => $this->getId(), "DESCRIPTION" => Loc::getMessage('SALE_DLV_SRV_SPSR_ERROR_CONFIG_SRV_TYPE'), )); return $result; } return $this->spsrHandler->calculateTariff($shipment, $srvList[$this->serviceType]['Name']); } public function isCalculatePriceImmediately() { return $this->spsrHandler->isCalculatePriceImmediately(); } /** * @return array Handler's configuration */ protected function getConfigStructure() { $srvRes = $this->spsrHandler->getServiceTypes(); $srvList = $srvRes->getData(); $result = array( "MAIN" => array( "TITLE" => Loc::getMessage("SALE_DLV_SRV_SPSR_PROFILE_MAIN_TITLE"), "DESCRIPTION" => Loc::getMessage("SALE_DLV_SRV_SPSR_PROFILE_MAIN_DSCR"), "ITEMS" => array( "SERVICE_TYPE_NAME" => array( "TYPE" => "STRING", "NAME" => Loc::getMessage("SALE_DLV_SRV_SPSR_PROFILE_ST"), "READONLY" => true, "DEFAULT" => $srvList[$this->serviceType]['Name'] ), "SERVICE_TYPE" => array( "TYPE" => "STRING", "NAME" =>"SERVICE_TYPE", "HIDDEN" => true, "DEFAULT" => $this->serviceType ), "DESCRIPTION_INNER" => array( "TYPE" => "DELIVERY_READ_ONLY", "NAME" => Loc::getMessage("SALE_DLV_SRV_SPSR_INNER_DESCR"), "ID" => "adm-sale-delivery-spsr-description_inner", "DEFAULT" => $srvList[$this->serviceType]['Description'] ) ) ) ); return $result; } /** * @return \Bitrix\Sale\Delivery\Services\Base|\Sale\Handlers\Delivery\SpsrHandler Parent sevice. */ public function getParentService() { return $this->spsrHandler; } /** * @return array */ public function getEmbeddedExtraServicesList() { $result = array(); $allowEsCodes = self::getProfileES($this->serviceType); foreach($this->spsrHandler->getEmbeddedExtraServicesList() as $code => $params) if(in_array($code, $allowEsCodes)) $result[$code] = $params; return $result; } /** * @param Shipment $shipment * @return bool */ public function isCompatible(Shipment $shipment) { return in_array( $this->serviceType, $this->spsrHandler->getCompatibleProfiles($shipment) ); } /** * @param $profileId * @return array */ public static function getProfileES($profileId) { $extraServices = array( 20 => array('SMS_RECV', 'SMS', 'TO_BE_CALLED_FOR'), //colibri 21 => array('BY_HAND', 'SMS', 'SMS_RECV'), //gepard-express 13 22 => array('BY_HAND', 'SMS', 'SMS_RECV'), //gepard-express 18 23 => array('BY_HAND', 'SMS', 'SMS_RECV', 'TO_BE_CALLED_FOR'), //gepard-express 24 => array('BY_HAND', 'SMS', 'SMS_RECV', 'TO_BE_CALLED_FOR', 'PLAT_TYPE', 'ICD'), //pelican-standart 25 => array('BY_HAND', 'SMS', 'SMS_RECV', 'TO_BE_CALLED_FOR', 'PLAT_TYPE', 'ICD'), //pelican-econom 26 => array('SMS', 'SMS_RECV', 'TO_BE_CALLED_FOR', 'PLAT_TYPE', 'ICD'), //bizon-cargo 27 => array('TO_BE_CALLED_FOR'), //fraxt 28 => array('BY_HAND', 'SMS', 'SMS_RECV', 'TO_BE_CALLED_FOR', 'ICD', 'TO_BE_CALLED_FOR'), //pelican-online 35 => array('BY_HAND', 'SMS', 'SMS_RECV', 'TO_BE_CALLED_FOR', 'ICD', 'TO_BE_CALLED_FOR'), //gepard-online 36 => array('BY_HAND', 'SMS', 'SMS_RECV', 'TO_BE_CALLED_FOR', 'ICD', 'TO_BE_CALLED_FOR'), //zebra-online ); return isset($extraServices[$profileId]) ? $extraServices[$profileId] : array(); } public static function install() { SpsrHandler::install(); } public static function unInstall() { SpsrHandler::unInstall(); } public static function isInstalled() { SpsrHandler::isInstalled(); } public static function isProfile() { return self::$isProfile; } public static function whetherAdminExtraServicesShow() { return self::$whetherAdminExtraServicesShow; } }