Тема: вопрос по купонам модуля Магазин

Здравствуйте, коллеги!
Заметил, что купоны можно настроить только со скидкой в %. Как правильно расширить функционал модуля и ввести скидку на сумму?
Я посмотрел в код. В нем есть вычисление скидки как суммы, так и процента:

 function getDiscountValue($price, $use_currency)
    {
        //Определяем сколько вычитать.
        if ($this['discount_type'] == '%') {
            $delta = ($price * $this['discount']/100);
        } else {
            $delta = $this['discount'];
            if ($use_currency) {
                $delta = \Catalog\Model\CurrencyApi::applyCurrency($delta);
            }
        }
        if ($this['round']) {
            $delta = round($delta);
        }
        
        return $delta;
    } 

Но при настройке скидки невозможно ничего выбрать, кроме "%":

 'discount_type' => new Type\Enum(array('', '%'), array(
                'description' => t('Скидка указана в процентах или в базовой валюте?'),
                'listFromArray' => array(array(
                    '%' => '%'
                )),
                'visible' => false
            )),

2

Re: вопрос по купонам модуля Магазин

Мы давно закладывали такую потенциальную возможность, но в купонах мы её не реализовывали полностью. Эта функциональность должна подхватываться остальными подсистемами - корзиной, заказом. (именно здесь должна быть основная логика)

С фиксированной скидкой на весь заказ есть определенные сложности.

Так например, в online чеках и в CommerceML(1C) нет понятия скидка на заказ,
поэтому скидку на заказ нужно распределять на товары. Также есть неоднозначности с расчетом сложных случаев налогов, когда в корзине есть товары с разной ставкой налогов (такое бывает).
Эти задачи решаются, правда нетривиально.

В одном из недавних обновлений мы добавили техническую возможность добавления независимой фиксированной скидки на заказ. Например, из админки можно добавлять скидку на весь заказ. Это делается добавлением специального типа элемента в корзину заказа.

Но в случае с купонами - нужно делать независимую реализацию, расширяя логику метода \Shop\Model\Cart::addDiscountData(). Двумя-тремя строчками думаю тут не обойдется.

Повысить оценку Понизить оценку

Re: вопрос по купонам модуля Магазин

Спасибо за расширенный ответ!
Действительно, из за 54-ФЗ теперь надо быть чеки на все и вся. Если скидка на товар в % можно прописать в общем чеке, то скидка суммой по факту является аналогом подарочного сертификата и необходимо бить отдельный чек для оплаты сертификатом.
А вот для оптовых интернет-магазинов, когда расчеты ведутся между юридическими лицами, такой проблемы нет.

Идея была в использовании купонов как подарочных сертификатов. Т.е. при продаже товара определенного типа формируется купон, отправляется пользователю.