%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sale/handlers/discountpreset/ |
| Current File : //home/bitrix/www/bitrix/modules/sale/handlers/discountpreset/delivery.php |
<?php
namespace Sale\Handlers\DiscountPreset;
use Bitrix\Main;
use Bitrix\Main\Error;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\Discount\Preset\ArrayHelper;
use Bitrix\Sale\Discount\Preset\HtmlHelper;
use Bitrix\Sale\Discount\Preset\Manager;
use Bitrix\Sale\Discount\Preset\SelectProductPreset;
use Bitrix\Sale\Discount\Preset\State;
use Bitrix\Sale\Internals;
use Bitrix\Sale\Helpers\Admin\Blocks;
Loc::loadMessages(__FILE__);
class Delivery extends SelectProductPreset
{
public function getTitle()
{
return Loc::getMessage('SALE_HANDLERS_DISCOUNTPRESET_DELIVERY_NAME');
}
public function getDescription()
{
return '';
}
/**
* @return int
*/
public function getCategory()
{
return Manager::CATEGORY_DELIVERY;
}
public function getFirstStepName()
{
return 'InputName';
}
public function processShowInputName(State $state)
{
return $this->processShowInputNameInternal($state);
}
public function processSaveInputName(State $state)
{
return $this->processSaveInputNameInternal($state, 'InputAmount');
}
/**
* @param $siteId
*
* @return \Bitrix\Sale\Delivery\Services\Base[]
*/
protected function getDeliverySystems($siteId)
{
$parameters = array(
'select' => array(
'*',
'SITES' => 'RESTRICTION_BY_SITE.PARAMS',
),
'filter' => array(
'=ACTIVE' => 'Y',
'!=CLASS_NAME' => array(
'\Bitrix\Sale\Delivery\Services\Group',
'\Bitrix\Sale\Delivery\Services\EmptyDeliveryService',
),
),
'runtime' => array(
'RESTRICTION_BY_SITE' => array(
'data_type' => 'Bitrix\Sale\Internals\ServiceRestrictionTable',
'reference' => array(
'ref.SERVICE_ID' => 'this.ID',
'ref.SERVICE_TYPE' => array(
'?',
\Bitrix\Sale\Delivery\Restrictions\Manager::SERVICE_TYPE_SHIPMENT,
),
'ref.CLASS_NAME' => array('?', '\Bitrix\Sale\Delivery\Restrictions\BySite'),
),
'join_type' => 'left',
),
),
);
$result = array();
$dbResultList = \Bitrix\Sale\Delivery\Services\Table::getList($parameters);
while($service = $dbResultList->fetch())
{
if(!empty($service['SITES']) && is_array($service['SITES']['SITE_ID']))
{
if(!in_array($siteId, $service['SITES']['SITE_ID']))
{
continue;
}
}
unset($service['SITES']);
$deliveryService = \Bitrix\Sale\Delivery\Services\Manager::createObject($service);
if (!$deliveryService || $deliveryService->canHasProfiles() || $deliveryService->canHasChildren())
{
continue;
}
$result[$service['ID']] = $deliveryService;
}
return $result;
}
protected function getLabelDiscountValue()
{
return Loc::getMessage('SALE_HANDLERS_DISCOUNTPRESET_DELIVERY_DELIVERY_DISCOUNT_VALUE');
}
public function processShowInputAmount(State $state)
{
$lid = $state->get('discount_lid');
$currency = \CSaleLang::getLangCurrency($lid);
$deliverySystems = $this->getDeliverySystems($lid);
$forSelectData = array();
foreach($deliverySystems as $id => $deliverySystem)
{
$forSelectData[$id] = $deliverySystem->getNameWithParent();
}
Main\Type\Collection::sortByColumn($forSelectData, 'NAME', '', null, true);
return '
<table width="100%" border="0" cellspacing="7" cellpadding="0">
<tbody>
<tr>
<td class="adm-detail-content-cell-l" style="width:40%;"><strong>' . Loc::getMessage('SALE_HANDLERS_DISCOUNTPRESET_SHIPMENT_DELIVERY_ORDER_AMOUNT') . ':</strong></td>
<td class="adm-detail-content-cell-r" style="width:60%;">
<input type="text" name="discount_order_amount" value="' . htmlspecialcharsbx($state->get('discount_order_amount')) . '" size="39" maxlength="100" style="width: 100px;"> <span>' . $currency . '</span>
</td>
</tr>' . $this->renderDiscountValue($state, $currency) . '
<tr>
<td class="adm-detail-content-cell-l" style="width:40%;"><strong>' . Loc::getMessage('SALE_HANDLERS_DISCOUNTPRESET_SHIPMENT_DELIVERY_LABEL') . ':</strong></td>
<td class="adm-detail-content-cell-r">
' . HtmlHelper::generateSelect('discount_delivery', $forSelectData, $state->get('discount_delivery')) . '
</td>
</tr>
</tbody>
</table>
';
}
protected function renderDiscountValue(State $state, $currency)
{
return '
<tr>
<td class="adm-detail-content-cell-l" style="width:40%;"><strong>' . $this->getLabelDiscountValue() . ':</strong></td>
<td class="adm-detail-content-cell-r" style="width:60%;">
<input type="text" name="discount_value" value="' . htmlspecialcharsbx($state->get('discount_value')) . '" maxlength="100" style="width: 100px;"> '
. HtmlHelper::generateSelect('discount_type', array(
'Perc' => Loc::getMessage('SHD_BT_SALE_ACT_GROUP_BASKET_SELECT_PERCENT'),
'Cur' => $currency,
), $state->get('discount_type')) . '
</td>
</tr>
';
}
public function processSaveInputAmount(State $state)
{
if(!trim($state->get('discount_value')))
{
$this->errorCollection[] = new Error(Loc::getMessage('SALE_HANDLERS_DISCOUNTPRESET_ERROR_EMPTY_VALUE'));
}
if(!trim($state->get('discount_order_amount')))
{
$this->errorCollection[] = new Error(Loc::getMessage('SALE_HANDLERS_DISCOUNTPRESET_ERROR_EMPTY_VALUE'));
}
if((int)$state->get('discount_delivery') < 0)
{
$this->errorCollection[] = new Error(Loc::getMessage('SALE_HANDLERS_DISCOUNTPRESET_ERROR_EMPTY_DELIVERY'));
}
if(!$this->errorCollection->isEmpty())
{
return array($state, 'InputAmount');
}
return array($state, 'CommonSettings');
}
public function processShowCommonSettings(State $state)
{
return $this->processShowCommonSettingsInternal($state);
}
public function processSaveCommonSettings(State $state)
{
return $this->processSaveCommonSettingsInternal($state);
}
public function generateState(array $discountFields)
{
$discountFields = $this->normalizeDiscountFields($discountFields);
$stateFields = array(
'discount_lid' => $discountFields['LID'],
'discount_name' => $discountFields['NAME'],
'discount_groups' => $this->getUserGroupsByDiscount($discountFields['ID']),
'discount_value' => ArrayHelper::getByPath($discountFields, 'ACTIONS.CHILDREN.0.DATA.Value'),
'discount_type' => ArrayHelper::getByPath($discountFields, 'ACTIONS.CHILDREN.0.DATA.Unit'),
'discount_order_amount' => ArrayHelper::getByPath($discountFields, 'CONDITIONS.CHILDREN.0.DATA.Value'),
'discount_delivery' => ArrayHelper::getByPath($discountFields, 'CONDITIONS.CHILDREN.1.DATA.value.0'),
);
return parent::generateState($discountFields)->append($stateFields);
}
public function generateDiscount(State $state)
{
return array_merge(parent::generateDiscount($state), array(
'CONDITIONS' => array(
'CLASS_ID' => 'CondGroup',
'DATA' => array(
'All' => 'AND',
'True' => 'True',
),
'CHILDREN' => array(
array(
'CLASS_ID' => 'CondBsktAmtGroup',
'DATA' => array(
'logic' => 'EqGr',
'Value' => $state->get('discount_order_amount'),
'All' => 'AND',
),
'CHILDREN' => array(),
),
array(
'CLASS_ID' => 'CondSaleDelivery',
'DATA' => array(
'logic' => 'Equal',
'value' => array((int)$state->get('discount_delivery')),
),
),
),
),
'ACTIONS' => array(
'CLASS_ID' => 'CondGroup',
'DATA' => array(
'All' => 'AND',
),
'CHILDREN' => array(
array(
'CLASS_ID' => 'ActSaleDelivery',
'DATA' => array(
'Type' => $this->getTypeOfDiscount(),
'Value' => $state->get('discount_value'),
'Unit' => $state->get('discount_type', 'Cur'),
),
),
),
),
));
}
}