Доброго времени суток!Есть такая задача:
Дано:5 типов цен - розничная, спецпредложение, распродажа, склад, заказ
каталог в 170+ тысяч позиций
несколько групп пользователей, на которые забиты определённые скидки от розничной цены
Найти:для некоторых групп дать наценки на цены склад и заказ на весь каталог.
Пока использую следующее:
catalog.section с шаблоном
listнеобходимо выводить в 1-ом столбце розничную цену (для всех пользователей); во 2-ом столбце (в зависимости от типа пользователя) - цену с учётом скидки, спецпредложение или распродажу (если меньше скидочной), наценку на заказ и склад (если пользователю прописана наценка); в 3-ем столбце прописывается фактическая экономия клиента (в %) или же пометка о спец или распродаже.Со скидками разобрался стандартными средствами, а вот с наценками загвоздка: не хватило мозгов осилить. Так как "отрицательная" скидка не считается Битриксом, сделал следующее - в каталог вывожу вручную посчитанное значение, полученное из формулы - ВЫВОДИМАЯ ЦЕНА = ЦЕНА + ЗНАЧЕНИЕ СКИДКИ. Естественно пришлось прописывать эту абракадабру во все компоненты, до которых смог дотянуться - детальная информация, корзина, оформление заказа...
И вот проблема, с которой столкнулся - в админке в просмотре заказа, в почтовых шаблонах макрос #ORDER_LIST# в случаях заказа по наценке получаю кривые значения (падает цена с объявленной на неё скидкой).
Код вывода цен в
catalog.section:
Код |
---|
<?$sklad_mark = - ($arElement["PRICES"]["sklad"]["DISCOUNT_VALUE"] - $arElement["PRICES"]["sklad"]["VALUE"]);?>
<?$zakaz_mark = - ($arElement["PRICES"]["zakaz"]["DISCOUNT_VALUE"] - $arElement["PRICES"]["zakaz"]["VALUE"]);?>
<?$sklad = ($arElement["PRICES"]["sklad"]["VALUE"] + $sklad_mark);?>
<?$zakaz = ($arElement["PRICES"]["zakaz"]["VALUE"] + $zakaz_mark);?>
<td>
<?if ( ($arElement["PRICES"]["sklad"]["VALUE"]) > 0):?>
<?echo ($arElement["PRICES"]["roznich"]["PRINT_VALUE"]);?>
<td>
<?if (($arElement["PRICES"]["sklad"]["VALUE"]) > ($arElement["PRICES"]["sale"]["VALUE"])):?>
<?echo ($arElement["PRICES"]["sale"]["PRINT_VALUE"]);?>
<td>
<b><?=GetMessage("SALE");?></b>
</td>
<?else:?>
<?if (($arElement["PRICES"]["sklad"]["VALUE"]) > ($arElement["PRICES"]["special"]["VALUE"])):?>
<b><?echo ($arElement["PRICES"]["special"]["PRINT_VALUE"]);?></b>
<td>
<?=GetMessage("SPECIAL");?>
</td>
<?else:?>
<?echo number_format($sklad, 2, ',', ' ');?><?=GetMessage("RUB");?>
<td>
<?echo round(($arElement["PRICES"]["roznich"]["VALUE"]-$sklad)/($arElement["PRICES"]["roznich"]["VALUE"]/100));?><?print_r("%");?>
</td>
<?endif;?>
<?endif;?>
</td>
<?else:?>
<?if (($arElement["PRICES"]["zakaz"]["VALUE"]) > 0):?>
<?echo ($arElement["PRICES"]["roznich"]["PRINT_VALUE"]);?>
<td>
<?if (($arElement["PRICES"]["zakaz"]["VALUE"]) > ($arElement["PRICES"]["sale"]["VALUE"])):?>
<?echo ($arElement["PRICES"]["sale"]["PRINT_VALUE"]);?>
<td>
<?=GetMessage("SALE");?>
</td>
<?else:?>
<?if (($arElement["PRICES"]["zakaz"]["VALUE"]) > ($arElement["PRICES"]["special"]["VALUE"])):?>
<?echo ($arElement["PRICES"]["special"]["PRINT_VALUE"]);?>
<td>
<?=GetMessage("SPECIAL");?>
</td>
<?else:?>
<?echo number_format($zakaz, 2, ',', ' ');?></b><?=GetMessage("RUB");?><
<td>
<?echo round(($arElement["PRICES"]["roznich"]["VALUE"]-$zakaz)/($arElement["PRICES"]["roznich"]["VALUE"]/100));?><?print_r("%");?>
</td>
<?endif;?>
<?endif;?>
</td>
<?else:?>
<?echo ($arElement["PRICES"]["roznich"]["PRINT_VALUE"]);?>
<td>
<?if (($arElement["PRICES"]["roznich"]["VALUE"]) > ($arElement["PRICES"]["sale"]["VALUE"])):?>
<?echo ($arElement["PRICES"]["sale"]["PRINT_VALUE"]);?>
<td>
<?=GetMessage("SALE");?>
</td>
<?else:?>
<?if (($arElement["PRICES"]["roznich"]["VALUE"]) > ($arElement["PRICES"]["special"]["VALUE"])):?>
<?echo ($arElement["PRICES"]["special"]["PRINT_VALUE"]);?>
<td>
<?=GetMessage("SPECIAL");?>
</td>
<?else:?>
<?$discount_value = ($arElement["PRICES"]["roznich"]["DISCOUNT_VALUE"]);?>
<?echo number_format($discount_value, 2, ',', ' ');?><?=GetMessage("RUB");?>
<td>
<?echo round(($arElement["PRICES"]["roznich"]["VALUE"]-$arElement["PRICES"]["roznich"]["DISCOUNT_VALUE"])/($arElement["PRICES"]["roznich"]["VALUE"]/100));?><?print_r("%");?>
</td>
<?endif;?>
<?endif;?>
</td>
<?endif;?>
<?endif;?>
</td> |
Подскажите - как можно уйти от этой белиберды? А то придётся сейчас ковырять #ORDER_LIST# и пр.