%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/delivery/restrictions/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/delivery/restrictions/bypaysystem.php |
<?php namespace Bitrix\Sale\Delivery\Restrictions; use Bitrix\Main\Localization\Loc; use Bitrix\Sale\Internals\CollectableEntity; use Bitrix\Sale\Internals\DeliveryPaySystemTable; use Bitrix\Sale\Internals\Entity; use Bitrix\Sale\Internals\PaySystemInner; use Bitrix\Sale\Order; use Bitrix\Sale\PaySystem; Loc::loadMessages(__FILE__); /** * Class ByPaySystem * @package Bitrix\Sale\Delivery\Restrictions */ class ByPaySystem extends Base { public static $easeSort = 200; protected static $preparedData = array(); public static function getClassTitle() { return Loc::getMessage("SALE_DLVR_RSTR_BY_PAYSYSTEM_NAME"); } public static function getClassDescription() { return Loc::getMessage("SALE_DLVR_RSTR_BY_PAYSYSTEM_DESCRIPT"); } public static function check($paySystemIds, array $restrictionParams, $deliveryId = 0) { if(intval($deliveryId) <= 0) return true; if(empty($paySystemIds)) return true; $paySystems = self::getPaySystemsByDeliveryId($deliveryId); if(empty($paySystems)) return true; $diff = array_diff($paySystemIds, $paySystems); return empty($diff); } protected static function extractParams(Entity $entity) { $result = array(); if ($entity instanceof CollectableEntity) { /** @var \Bitrix\Sale\ShipmentCollection $collection */ $collection = $entity->getCollection(); /** @var \Bitrix\Sale\Order $order */ $order = $collection->getOrder(); } elseif ($entity instanceof Order) { /** @var \Bitrix\Sale\Order $order */ $order = $entity; } if (!$order) return $result; /** @var \Bitrix\Sale\Payment $payment */ foreach($order->getPaymentCollection() as $payment) { $paySystemId = $payment->getPaymentSystemId(); if ($paySystemId) $result[] = $paySystemId; } return $result; } protected static function getPaySystemsList() { static $result = null; if($result !== null) return $result; $result = array(); $dbResultList = \CSalePaySystem::GetList( array("SORT"=>"ASC", "NAME"=>"ASC"), array("ACTIVE" => "Y"), false, false, array("ID", "NAME", "ACTIVE", "SORT", "LID") ); while ($arPayType = $dbResultList->Fetch()) { $name = (strlen($arPayType["LID"]) > 0) ? htmlspecialcharsbx($arPayType["NAME"]). " (".$arPayType["LID"].")" : htmlspecialcharsbx($arPayType["NAME"]); $result[$arPayType["ID"]] = $name; } return $result; } public static function getParamsStructure($entityId = 0) { $result = array( "PAY_SYSTEMS" => array( "TYPE" => "ENUM", 'MULTIPLE' => 'Y', "LABEL" => Loc::getMessage("SALE_DLVR_RSTR_BY_PAYSYSTEM_PRM_PS"), "OPTIONS" => self::getPaySystemsList() ) ); return $result; } protected static function getPaySystemsByDeliveryId($deliveryId = 0) { if($deliveryId == 0) return array(); $result = DeliveryPaySystemTable::getLinks($deliveryId, DeliveryPaySystemTable::ENTITY_TYPE_DELIVERY, self::$preparedData); return $result; } protected static function prepareParamsForSaving(array $params = array(), $deliveryId = 0) { if(intval($deliveryId) <= 0) return $params; if(isset($params["PAY_SYSTEMS"]) && is_array($params["PAY_SYSTEMS"])) { DeliveryPaySystemTable::setLinks( $deliveryId, DeliveryPaySystemTable::ENTITY_TYPE_DELIVERY, $params["PAY_SYSTEMS"], true ); unset($params["PAY_SYSTEMS"]); } return $params; } public static function save(array $fields, $restrictionId = 0) { $params = $fields["PARAMS"]; $fields["PARAMS"] = array(); $result = parent::save($fields, $restrictionId); self::prepareParamsForSaving($params, $fields["SERVICE_ID"]); return $result; } public static function prepareParamsValues(array $paramsValues, $deliveryId = 0) { $result = array(); if(intval($deliveryId > 0)) $result = DeliveryPaySystemTable::getLinks($deliveryId, DeliveryPaySystemTable::ENTITY_TYPE_DELIVERY, array()); return array("PAY_SYSTEMS" => $result); } public static function delete($restrictionId, $deliveryId = 0) { DeliveryPaySystemTable::setLinks( $deliveryId, DeliveryPaySystemTable::ENTITY_TYPE_DELIVERY, array(), true ); return parent::delete($restrictionId); } public static function prepareData(array $deliveryIds) { if(empty($deliveryIds)) return; self::$preparedData = \Bitrix\Sale\Internals\DeliveryPaySystemTable::prepareData($deliveryIds, DeliveryPaySystemTable::ENTITY_TYPE_DELIVERY); } }