%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/lib/services/company/restrictions/ |
| Current File : /home/bitrix/www/bitrix/modules/sale/lib/services/company/restrictions/paysystem.php |
<?php
namespace Bitrix\Sale\Services\Company\Restrictions;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\Internals\CollectableEntity;
use Bitrix\Sale\Internals\CompanyServiceTable;
use Bitrix\Sale;
use Bitrix\Sale\Services\Base;
Loc::loadMessages(__FILE__);
class PaySystem extends Base\Restriction
{
public static $easeSort = 200;
/**
* @return string
*/
public static function getClassTitle()
{
return Loc::getMessage("SALE_COMPANY_RULES_BY_PS_TITLE");
}
/**
* @return string
*/
public static function getClassDescription()
{
return Loc::getMessage("SALE_COMPANY_RULES_BY_PS_DESC");
}
/**
* @param $params
* @param array $restrictionParams
* @param int $serviceId
* @return bool
*/
public static function check($params, array $restrictionParams, $serviceId = 0)
{
if ((int)$serviceId <= 0)
return true;
if (!$params)
return true;
$paySystemIds = self::getPaySystemsByCompanyId($serviceId);
if (empty($paySystemIds))
return true;
$diff = array_diff($params, $paySystemIds);
return empty($diff);
}
/**
* @param Sale\Internals\Entity $entity
*
* @return array
*/
protected static function extractParams(Sale\Internals\Entity $entity)
{
$result = array();
/** @var Sale\PaymentCollection|null $paymentCollection */
$paymentCollection = null;
if ($entity instanceof Sale\Payment)
{
$paymentCollection = $entity->getCollection();
}
elseif ($entity instanceof Sale\Shipment)
{
/** @var \Bitrix\Sale\ShipmentCollection $shipmentCollection */
$shipmentCollection = $entity->getCollection();
if ($shipmentCollection)
{
/** @var \Bitrix\Sale\Order $order */
$order = $shipmentCollection->getOrder();
if ($order)
$paymentCollection = $order->getPaymentCollection();
}
}
elseif ($entity instanceOf Sale\Order)
{
$paymentCollection = $entity->getPaymentCollection();
}
if ($paymentCollection !== null)
{
/** @var \Bitrix\Sale\Payment $payment */
foreach ($paymentCollection as $payment)
{
$paySystemId = $payment->getPaymentSystemId();
if ($paySystemId)
$result[] = $paySystemId;
}
}
return $result;
}
/**
* @return array
*/
protected static function getPaySystemList()
{
$result = array();
$dbRes = Sale\PaySystem\Manager::getList(array('select' => array('ID', 'NAME')));
while ($paySystem = $dbRes->fetch())
$result[$paySystem['ID']] = $paySystem['NAME'].' ['.$paySystem['ID'].']';
return $result;
}
/**
* @param int $entityId
* @return array
*/
public static function getParamsStructure($entityId = 0)
{
$result = array(
"PAYSYSTEM" => array(
"TYPE" => "ENUM",
'MULTIPLE' => 'Y',
"LABEL" => Loc::getMessage("SALE_COMPANY_RULES_BY_PS"),
"OPTIONS" => self::getPaySystemList()
)
);
return $result;
}
/**
* @param int $companyId
* @return array
* @throws \Bitrix\Main\ArgumentOutOfRangeException
*/
protected static function getPaySystemsByCompanyId($companyId = 0)
{
$result = array();
if ($companyId == 0)
return $result;
$dbRes = CompanyServiceTable::getList(
array(
'select' => array('SERVICE_ID'),
'filter' => array(
'COMPANY_ID' => $companyId,
'SERVICE_TYPE' => Sale\Services\Company\Restrictions\Manager::SERVICE_TYPE_PAYMENT)
)
);
while ($data = $dbRes->fetch())
$result[] = $data['SERVICE_ID'];
return $result;
}
/**
* @param array $fields
* @param int $restrictionId
* @return \Bitrix\Main\Entity\AddResult|\Bitrix\Main\Entity\UpdateResult
*/
public static function save(array $fields, $restrictionId = 0)
{
$serviceIds = $fields["PARAMS"];
$fields["PARAMS"] = array();
if ($restrictionId > 0)
{
$dbRes = CompanyServiceTable::getList(
array(
'select' => array('SERVICE_ID'),
'filter' => array(
'SERVICE_TYPE' => Sale\Services\Company\Restrictions\Manager::SERVICE_TYPE_PAYMENT,
'COMPANY_ID' => $fields['SERVICE_ID']
)
)
);
while($data = $dbRes->fetch())
{
$key = array_search($data['SERVICE_ID'], $serviceIds['PAYSYSTEM']);
if (!$key)
{
CompanyServiceTable::delete(array('COMPANY_ID' => $fields['SERVICE_ID'], 'SERVICE_ID' => $data['SERVICE_ID'], 'SERVICE_TYPE' => Sale\Services\Company\Restrictions\Manager::SERVICE_TYPE_PAYMENT));
}
else
{
unset($serviceIds['PAYSYSTEM'][$key]);
}
}
}
$result = parent::save($fields, $restrictionId);
$addFields = array('COMPANY_ID' => $fields['SERVICE_ID'], 'SERVICE_TYPE' => Sale\Services\Company\Restrictions\Manager::SERVICE_TYPE_PAYMENT);
foreach ($serviceIds['PAYSYSTEM'] as $id)
{
$addFields['SERVICE_ID'] = $id;
CompanyServiceTable::add($addFields);
}
return $result;
}
/**
* @param array $paramsValues
* @param int $entityId
* @return array
*/
public static function prepareParamsValues(array $paramsValues, $entityId = 0)
{
return array("PAYSYSTEM" => self::getPaySystemsByCompanyId($entityId));
}
/**
* @param $restrictionId
* @param int $entityId
* @return \Bitrix\Main\Entity\DeleteResult
* @throws \Bitrix\Main\ArgumentException
*/
public static function delete($restrictionId, $entityId = 0)
{
$dbRes = CompanyServiceTable::getList(
array(
'select' => array('SERVICE_ID'),
'filter' => array(
'SERVICE_TYPE' => Sale\Services\Company\Restrictions\Manager::SERVICE_TYPE_PAYMENT,
'COMPANY_ID' => $entityId
)
)
);
while ($data = $dbRes->fetch())
{
CompanyServiceTable::delete(array('COMPANY_ID' => $entityId, 'SERVICE_ID' => $data['SERVICE_ID'], 'SERVICE_TYPE' => Sale\Services\Company\Restrictions\Manager::SERVICE_TYPE_PAYMENT));
}
return parent::delete($restrictionId);
}
}