%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/lib/delivery/services/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/lib/delivery/services/new_to_automatic.php |
<?
namespace Bitrix\Sale\Delivery\Services;
use Bitrix\Sale\Delivery\Restrictions;
/**
* Class NewToAutomatic
* Proxy for using new delivery services with old API for back compatibility.
* Desn't support updating, saving etc. via admin pages.
* Just show details & calculate for public components.
* @package Bitrix\Sale\Delivery\Services
*/
class NewToAutomatic
{
/** @var Base $service Real service, we want to wrap.*/
protected $service = null;
const HANDLER = __FILE__;
/**
* @param Base $service
*/
public function __construct(Base $service)
{
$this->service = $service;
}
/**
* @return array
*/
public function Init()
{
return array(
"SID" => 'new'.$this->service->getId(),
"NAME" => $this->service->getName(),
"DESCRIPTION" => $this->service->getDescription(),
"DESCRIPTION_INNER" => "DESCRIPTION_INNER",
"BASE_CURRENCY" => $this->service->getCurrency(),
"HANDLER" => self::HANDLER,
// Handler methods
"COMPABILITY" => array($this, "compatibility"),
"CALCULATOR" => array($this, "calculate"),
// Fake profile
"PROFILES" => array(
"profile" => array(
"TITLE" => ".",
"DESCRIPTION" => ""
)
)
);
}
/**
* Check if this service is compatible.
* @param array $arOrder Order details.
* @param array $arConfig Useless.
* @return array with profile.
*/
public function compatibility($arOrder, $arConfig)
{
$result = array();
$shipment = \CSaleDelivery::convertOrderOldToNew($arOrder);
if($this->service->isCompatible($shipment))
$result = array('profile');
return $result;
}
/**
* @param string $profile Useless.
* @param array $arConfig Useless.
* @param array $arOrder Order details.
* @param int $STEP Useless.
* @param bool|false $TEMP Useless.
* @return array Delivery price.
*/
public function calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false)
{
$res = $this->service->calculate(
\CSaleDelivery::convertOrderOldToNew($arOrder)
);
return array(
"VALUE" => $res->getPrice(),
"TRANSIT" => $res->getPeriodDescription(),
"RESULT" => $res->isSuccess() ? "OK" : "ERROR",
);
}
/**
* Converts new service fields to old.
* @param array $service Delivery service fields from new table.
* @return array Service fields as it was in old API.
* @throws \Bitrix\Main\ArgumentNullException
*/
public static function convertNewServiceToOld($service)
{
if(intval($service["ID"]) <= 0)
return array();
$service["SID"] = 'new'.$service["ID"];
$service["TAX_RATE"] = 0;
$service["INSTALLED"] = 'Y';
$service["BASE_CURRENCY"] = $service["CURRENCY"];
$service["SETTINGS"] = array();
$service["HANDLER"] = self::HANDLER;
if (intval($service["LOGOTIP"]) > 0)
$service["LOGOTIP"] = \CFile::getFileArray($service["LOGOTIP"]);
$service["CONFIG"] = array(
"CONFIG_GROUPS" => array(),
"CONFIG" => array(),
);
$service["PROFILES"] = array();
$profileParams = array(
"TITLE" => "",
"DESCRIPTION" => $service["DESCRIPTION"],
"TAX_RATE" => 0,
"ACTIVE" => $service["ACTIVE"]
);
$restrictions = Restrictions\Manager::getRestrictionsList($service["ID"]);
foreach($restrictions as $restriction)
{
switch($restriction["CLASS_NAME"])
{
case '\Bitrix\Sale\Delivery\Restrictions\ByWeight':
$profileParams["RESTRICTIONS_WEIGHT"] = array($restriction["PARAMS"]["MIN_WEIGHT"], $restriction["PARAMS"]["MAX_WEIGHT"]);
break;
case '\Bitrix\Sale\Delivery\Restrictions\ByPrice':
$profileParams["RESTRICTIONS_SUM"] = array($restriction["PARAMS"]["MIN_PRICE"], $restriction["PARAMS"]["MAX_PRICE"]);
break;
case '\Bitrix\Sale\Delivery\Restrictions\ByDimensions':
$profileParams["RESTRICTIONS_DIMENSIONS"] = array(
$restriction["PARAMS"]["LENGTH"],
$restriction["PARAMS"]["WIDTH"],
$restriction["PARAMS"]["HEIGHT"]
);
$profileParams["RESTRICTIONS_MAX_SIZE"] = $restriction["PARAMS"]["MAX_DIMENSION"];
$profileParams["RESTRICTIONS_DIMENSIONS_SUM"] = $restriction["PARAMS"]["MAX_DIMENSIONS_SUM"];
break;
default:
break;
}
}
$service["PROFILES"]['profile'] = $profileParams;
$newService = Manager::getObjectById($service["ID"]);
$newToAutomatic = new self($newService);
$service = array_merge($newToAutomatic->init(), $service);
return $service;
}
}