Многоценность битрикса или как я ушибся еще раз

Было принято решение ввести новую систему поощрения постоянных покупателей в виде клубных карт и клубной цены.
Для реализации перехода нам нужна редакция Бизнес и несколько видов цен в 1С.
В полном ожидании, хочется, чтобы на сайте все покупатели могли видеть обычную цену и цену для клубней, но покупать по клубной могли бы только клубни.
Это очень ясно и понятно реализовано через группы покупателей. Т.е., когда клубень зарегистрирует свою карту клиента, то он попадет группу клубней….

Все просто! как два байта переслать. Если бы это был не Битрикс.

[PRICES] => Array
        (
            [Интернет-цена] => Array
                (
                    [PRICE_ID] => 1
                    [ID] => 8201
                    [CAN_ACCESS] => Y
                    [CAN_BUY] => Y
                    [MIN_PRICE] => N
                    [VALUE_NOVAT] => 50
                    [VALUE_VAT] => 50
                    [VATRATE_VALUE] => 0
                    [DISCOUNT_VALUE_NOVAT] => 50
                    [DISCOUNT_VALUE_VAT] => 50
                    [DISCOUNT_VATRATE_VALUE] => 0
                    [CURRENCY] => RUB
                    [ROUND_VALUE_VAT] => 50
                    [ROUND_VALUE_NOVAT] => 50
                    [ROUND_VATRATE_VALUE] => 0
                    [VALUE] => 50
                    [UNROUND_DISCOUNT_VALUE] => 50
                    [DISCOUNT_VALUE] => 50
                    [DISCOUNT_DIFF] => 0
                    [DISCOUNT_DIFF_PERCENT] => 0
                    [PRINT_VALUE_NOVAT] => 50 руб.
                    [PRINT_VALUE_VAT] => 50 руб.
                    [PRINT_VATRATE_VALUE] => 0 руб.
                    [PRINT_DISCOUNT_VALUE_NOVAT] => 50 руб.
                    [PRINT_DISCOUNT_VALUE_VAT] => 50 руб.
                    [PRINT_DISCOUNT_VATRATE_VALUE] => 0 руб.
                    [PRINT_VALUE] => 50 руб.
                    [PRINT_DISCOUNT_VALUE] => 50 руб.
                    [PRINT_DISCOUNT_DIFF] => 0 руб.
                )

            [Клубная цена] => Array
                (
                    [PRICE_ID] => 2
                    [ID] => 192850
                    [CAN_ACCESS] => Y
                    [CAN_BUY] => N
                    [MIN_PRICE] => Y
                    [VALUE_NOVAT] => 40
                    [VALUE_VAT] => 40
                    [VATRATE_VALUE] => 0
                    [DISCOUNT_VALUE_NOVAT] => 40
                    [DISCOUNT_VALUE_VAT] => 40
                    [DISCOUNT_VATRATE_VALUE] => 0
                    [CURRENCY] => RUB
                    [ROUND_VALUE_VAT] => 40
                    [ROUND_VALUE_NOVAT] => 40
                    [ROUND_VATRATE_VALUE] => 0
                    [VALUE] => 40
                    [UNROUND_DISCOUNT_VALUE] => 40
                    [DISCOUNT_VALUE] => 40
                    [DISCOUNT_DIFF] => 0
                    [DISCOUNT_DIFF_PERCENT] => 0
                    [PRINT_VALUE_NOVAT] => 40 руб.
                    [PRINT_VALUE_VAT] => 40 руб.
                    [PRINT_VATRATE_VALUE] => 0 руб.
                    [PRINT_DISCOUNT_VALUE_NOVAT] => 40 руб.
                    [PRINT_DISCOUNT_VALUE_VAT] => 40 руб.
                    [PRINT_DISCOUNT_VATRATE_VALUE] => 0 руб.
                    [PRINT_VALUE] => 40 руб.
                    [PRINT_DISCOUNT_VALUE] => 40 руб.
                    [PRINT_DISCOUNT_DIFF] => 0 руб.
                )

        )

Казалось бы, а что выходит?

Несмотря на то, что CAN_BUY у клубной колонки N, эта цена встает в стоимость товара в карточке, т.к. все, кто CAN_ACCESS=Y видят клубную цену, как предложение покупки, но в корзине, хоть тут счастье, цена стоит интернет-магазина, т.е. верная. Но покупателей мы дезинформируем и на себя накличем вал гневных сообщений и звонков!

Надо решать.
За конечное предложение покупки выступает группа MIN_PRICE, давайте ее и будем трогать.

В result_modifier.php моего шаблона, кстати, он еще версии 1.6 или како-то древней, возможно, что в последней версии шаблона от битры все уже решено, но мы берем и шкодим:

$arResult["MIN_PRICE"]["REAL"]=CCatalogProduct::GetOptimalPrice($arResult["ID"], 1, $USER->GetUserGroupArray(), false);
if ($arResult["MIN_PRICE"]["PRICE_ID"]!==$arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["PRICE_TYPE_ID"] && isset($arResult["MIN_PRICE"]["REAL"])){
   $arResult["MIN_PRICE"]["PRICE_ID"]=$arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["PRICE_TYPE_ID"];
   $arResult["MIN_PRICE"]["VALUE_NOVAT"]=$arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["BASE_PRICE"];
   $arResult["MIN_PRICE"]["VALUE_VAT"]=$arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["BASE_PRICE"];
   $arResult["MIN_PRICE"]["DISCOUNT_VALUE_NOVAT"]=$arResult["MIN_PRICE"]["REAL"]["DISCOUNT_PRICE"];
   $arResult["MIN_PRICE"]["DISCOUNT_VALUE_VAT"]=$arResult["MIN_PRICE"]["REAL"]["DISCOUNT_PRICE"];
   $arResult["MIN_PRICE"]["ROUND_VALUE_VAT"]=$arResult["MIN_PRICE"]["REAL"]["DISCOUNT_PRICE"];
   $arResult["MIN_PRICE"]["ROUND_VALUE_NOVAT"]=$arResult["MIN_PRICE"]["REAL"]["DISCOUNT_PRICE"];
   $arResult["MIN_PRICE"]["VALUE"]=$arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["BASE_PRICE"];
   $arResult["MIN_PRICE"]["PRINT_VALUE_NOVAT"]=CCurrencyLang::CurrencyFormat($arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["BASE_PRICE"],$arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["CURRENCY"] ,true);
   $arResult["MIN_PRICE"]["PRINT_VALUE_VAT"]=CCurrencyLang::CurrencyFormat($arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["BASE_PRICE"], $arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["CURRENCY"],true);
   $arResult["MIN_PRICE"]["PRINT_VALUE"]=CCurrencyLang::CurrencyFormat($arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["BASE_PRICE"], $arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["CURRENCY"],true);
   $arResult["MIN_PRICE"]["PRINT_DISCOUNT_VALUE_NOVAT"]=CCurrencyLang::CurrencyFormat($arResult["MIN_PRICE"]["REAL"]["DISCOUNT_PRICE"], $arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["CURRENCY"],true);
   $arResult["MIN_PRICE"]["PRINT_DISCOUNT_VALUE_VAT"]=CCurrencyLang::CurrencyFormat($arResult["MIN_PRICE"]["REAL"]["DISCOUNT_PRICE"], $arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["CURRENCY"],true);
   $arResult["MIN_PRICE"]["PRINT_DISCOUNT_VALUE"]=CCurrencyLang::CurrencyFormat($arResult["MIN_PRICE"]["REAL"]["DISCOUNT_PRICE"], $arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["CURRENCY"],true);
   $arResult["MIN_PRICE"]["UNROUND_DISCOUNT_VALUE"]=$arResult["MIN_PRICE"]["REAL"]["RESULT_PRICE"]["UNROUND_DISCOUNT_PRICE"];
...
}

Где просто перезаполняем раздел MIN_PRICE нужными верными значениями.
Теперь в предложении идет верная цена, минимальная и доступная пользователю цена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *