По условиям акции предоставить покупателю цену назначенную для другой группы пользователей


#1

Добрый день!

Подскажите, пожалуйста, как можно реализовать такую акцию:
Нужно чтобы зарегистрированный покупатель мог приобрести товар по цене заданной для другой группы пользователей(там цены ниже, выгружаются цены из 1С).

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

Понятно что в коробке такое не предусмотрено, но может можно какими-то минимальными усилиями приладить, при соблюдении условий акции в каталоге установить цену товара от другой группы пользователей?


#2

Из коробки, наверное, только экспортом/ импортом

Администрирование -> Экспорт данных -> Товары -> Оптовые скидки


#3

Но в акциях для каталога нет таких вариантов бонусов, только вот такие:

Может, можно добавить в код подтягивание цены для другой группы пользователей, не подскажите где это добавляться?


#4

Вижу что бонусы задаются в схеме /app/schemas/promotions/schema.php

Вариант там только один:
‘bonuses’ => array(
‘product_discount’ => array (
‘function’ => array(‘fn_promotion_apply_catalog_rule’, ‘#this’, ‘@product’, ‘@auth’),
‘discount_bonuses’ => array(‘to_percentage’, ‘by_percentage’, ‘to_fixed’, ‘by_fixed’),
‘zones’ => array(‘catalog’),
),
)

Исходя из этого предполагаю что надо дополнить модулем МоиИзменения эту схему, файлом /schemas/promotions/schema.post.php

И добавить соответствующую функцию, где в качестве цены будет задаваться цена для другой группы пользователей. Но решение пока не осилил, что-то в качестве примера в видео нашел только задание новых условий, но не самих бонусов. Буду копать дальше.


#5

Я вам предложил вариант без модификации кода. Экспортируете файл, меняете цену для группы А на цену для группы Б. Делаете импорт. После завершения акции импортируете изначальный файл

А так да, можно сделать и модуль


#6

Не вариант, слишком сложно, цены обновляются из 1С несколько раз в день, это и без того длительный процесс, экспорт-импорт не подходит.


#7

В общем, помогли мне и победил :slight_smile:

В файле /app/schemas/promotions/schema.php

Добавил ‘usergroup_price’

Было:
‘product_discount’ => array (
‘function’ => array(‘fn_promotion_apply_catalog_rule’, ‘#this’, ‘@product’, ‘@auth’),
‘discount_bonuses’ => array(‘to_percentage’, ‘by_percentage’, ‘to_fixed’, ‘by_fixed’),
‘zones’ => array(‘catalog’),
),

Стало:
‘product_discount’ => array (
‘function’ => array(‘fn_promotion_apply_catalog_rule’, ‘#this’, ‘@product’, ‘@auth’),
‘discount_bonuses’ => array(‘to_percentage’, ‘by_percentage’, ‘to_fixed’, ‘by_fixed’, ‘usergroup_price’),
‘zones’ => array(‘catalog’),
),

В файле:
/app/functions/fn.promotions.php

Примерно 1838 строчка, изменена функция function fn_promotions_calculate_discount на вот такую:

function fn_promotions_calculate_discount($type, $price, $value, $product_id, $current_price = 0)
{
$discount = 0;

if ($value === '') {
    return 0;
}

if ($type == 'to_percentage') {
    $discount = $price * (100 - $value) / 100;

} elseif ($type == 'by_percentage') {
    $discount = $price * $value / 100;

} elseif ($type == 'to_fixed') {
    $discount = (!empty($current_price) ? $current_price : $price) - $value;

} elseif ($type == 'by_fixed') {
    $discount = $value;
} elseif ($type == 'usergroup_price') {
    $discount = $price - db_get_field('SELECT price from ?:product_prices WHERE product_id=?i and usergroup_id=?i',$product_id, $value);
}

if ($discount < 0) {
    $discount = 0;
}

return $discount;

}

И в этом же файле примерно 414 строка добавлено:

В результате в акциях для каталога появился новый вариант, в качестве его значения вбивается id группы пользователей, цены которых хочу использовать

И всё, теперь на странице товара и в каталоге отображается нужная мне цена, от другой группы пользователей, а в качестве базовой, от которой рассчитывается скидка отображается цена группы пользователей под которым авторизованы :slight_smile:
image


#8

Молодцы! Возможно, ваше решение еще кому-нибудь будет полезно