%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/delivery/services/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/delivery/services/configurable.php |
<?php namespace Bitrix\Sale\Delivery\Services; use Bitrix\Main\Loader; use Bitrix\Main\SystemException; use Bitrix\Main\Localization\Loc; use Bitrix\Sale\Delivery\CalculationResult; use Bitrix\Currency; Loc::loadMessages(__FILE__); /** * Class Configurable * Simple class for delivery service. * Old configurable type converted to this type. * @package Bitrix\Sale\Delivery\Services */ class Configurable extends Base { protected static $isCalculatePriceImmediately = true; protected static $whetherAdminExtraServicesShow = true; /** * @param array $initParams Initial data params from table record. * @throws \Bitrix\Main\ArgumentNullException * @throws \Bitrix\Main\ArgumentTypeException */ public function __construct(array $initParams) { parent::__construct($initParams); if(!isset($this->config["MAIN"]["PRICE"])) $this->config["MAIN"]["PRICE"] = "0"; if(!isset($initParams["CURRENCY"])) $initParams["CURRENCY"] = "RUB"; if(!isset($this->config["MAIN"]["PERIOD"]) || !is_array($this->config["MAIN"]["PERIOD"])) { $this->config["MAIN"]["PERIOD"] = array(); $this->config["MAIN"]["PERIOD"]["FROM"] = "0"; $this->config["MAIN"]["PERIOD"]["TO"] = "0"; $this->config["MAIN"]["PERIOD"]["TYPE"] = "D"; } } /** * @return string Class title. */ public static function getClassTitle() { return Loc::getMessage("SALE_DLVR_HANDL_NAME"); } /** * @return string Class, service description. */ public static function getClassDescription() { return Loc::getMessage("SALE_DLVR_HANDL_DESCRIPTION"); } /** * @return string Period text. */ protected function getPeriodText() { $result = ""; if (IntVal($this->config["MAIN"]["PERIOD"]["FROM"]) > 0 || IntVal($this->config["MAIN"]["PERIOD"]["TO"]) > 0) { $result = ""; if(IntVal($this->config["MAIN"]["PERIOD"]["FROM"]) > 0) $result .= " ".Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_FROM")." ".IntVal($this->config["MAIN"]["PERIOD"]["FROM"]); if(IntVal($this->config["MAIN"]["PERIOD"]["TO"]) > 0) $result .= " ".Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_TO")." ".IntVal($this->config["MAIN"]["PERIOD"]["TO"]); if($this->config["MAIN"]["PERIOD"]["TYPE"] == "MIN") $result .= " ".Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_MIN")." "; elseif($this->config["MAIN"]["PERIOD"]["TYPE"] == "H") $result .= " ".Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_HOUR")." "; elseif($this->config["MAIN"]["PERIOD"]["TYPE"] == "M") $result .= " ".Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_MONTH")." "; else $result .= " ".Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_DAY")." "; } return $result; } protected function calculateConcrete(\Bitrix\Sale\Shipment $shipment = null) { $result = new CalculationResult; $price = $this->config["MAIN"]["PRICE"]; if($shipment && \Bitrix\Main\Loader::includeModule('currency')) { $rates = new \CCurrencyRates; $currency = $this->currency; $shipmentCurrency = $shipment->getCollection()->getOrder()->getCurrency(); $price = $rates->convertCurrency( $price, $currency, $shipmentCurrency); } $result->setDeliveryPrice( roundEx( $price, SALE_VALUE_PRECISION ) ); $result->setPeriodDescription($this->getPeriodText()); $result->setPeriodFrom($this->config["MAIN"]["PERIOD"]["FROM"]); $result->setPeriodTo($this->config["MAIN"]["PERIOD"]["TO"]); $result->setPeriodType($this->config["MAIN"]["PERIOD"]["TYPE"]); return $result; } /** * @return array * @throws \Exception */ protected function getConfigStructure() { $currency = $this->currency; if(Loader::includeModule('currency')) { $currencyList = Currency\CurrencyManager::getCurrencyList(); if (isset($currencyList[$this->currency])) $currency = $currencyList[$this->currency]; unset($currencyList); } return array( "MAIN" => array( "TITLE" => Loc::getMessage("SALE_DLVR_HANDL_CONF_TITLE"), "DESCRIPTION" => Loc::getMessage("SALE_DLVR_HANDL_CONF_DESCRIPTION"), "ITEMS" => array( "CURRENCY" => array( "TYPE" => "DELIVERY_READ_ONLY", "NAME" => Loc::getMessage("SALE_DLVR_HANDL_CONF_CURRENCY"), "VALUE" => $this->currency, "VALUE_VIEW" => htmlspecialcharsbx($currency) ), "PRICE" => array( "TYPE" => "NUMBER", "MIN" => 0, "NAME" => Loc::getMessage("SALE_DLVR_HANDL_CONF_PRICE") ), "PERIOD" => array( "TYPE" => "DELIVERY_PERIOD", "NAME" => Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_DLV"), "ITEMS" => array( "FROM" => array( "TYPE" => "NUMBER", "MIN" => 0, "NAME" => "" //Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_FROM"), ), "TO" => array( "TYPE" => "NUMBER", "MIN" => 0, "NAME" => " - " //Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_TO"), ), "TYPE" => array( "TYPE" => "ENUM", "OPTIONS" => array( "MIN" => Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_MIN"), "H" => Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_HOUR"), "D" => Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_DAY"), "M" => Loc::getMessage("SALE_DLVR_HANDL_CONF_PERIOD_MONTH") ) ) ) ) ) ) ); } public static function getAdminFieldsList() { $result = parent::getAdminFieldsList(); $result["STORES"] = true; return $result; } public function prepareFieldsForSaving(array $fields) { if((!isset($fields["CODE"]) || intval($fields["CODE"]) < 0) && isset($fields["ID"]) && intval($fields["ID"]) > 0) $fields["CODE"] = $fields["ID"]; return parent::prepareFieldsForSaving($fields); } public static function onAfterAdd($serviceId, array $fields = array()) { if($serviceId <= 0) return false; $res = Manager::update($serviceId, array('CODE' => $serviceId)); return $res->isSuccess(); } public function isCalculatePriceImmediately() { return self::$isCalculatePriceImmediately; } public static function whetherAdminExtraServicesShow() { return self::$whetherAdminExtraServicesShow; } public static function isHandlerCompatible() { return true; } }