Автор Тема: Исключение скидки по группе клиентов для товаров со скидкой  (Прочитано 302 раз)

15 Апреля 2016, 20:13:16
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте!
Коллеги, помогите разобраться.
 
Ситуация следующая. Есть несколько групп клиентов с установленными скидками.
 
И есть товары со скидками (например, 20%). Скидки действуют для всех групп.
 
По умолчанию цена считается так: начальная цена – (минус) скидка по группе – скидка по товару.
И клиенту, находящемуся в группе со скидкой 5% плюсуется еще и скидка по товару. Получается этим клиентам скидка 25%.
 
Стандартными средствами Престы можно исключить группу клиентов из скидки по товару (в карточке товара, в специальных ценах выбрать группу, для которой действует скидка по товару).
 
Но это не подходит.
 
Нужно сделать так, чтобы для клиентов, находящимися в группе со скидкой, для товаров со скидкой не действовала их скидка по группе.
 
Пример.
Товар1 – 100 дол;
Товар 2 – 200 дол;
Группа клиентов – скидка 5%;
Скидка на товар1 – 20%.
 
Для неавторизованного пользователя (или вгруппе без скидки) действуют цены:
Товар1 – 80 дол. (100-20%);
Товар2 – 200 дол. (скидок нет).
 
Для клиента в группе:
Товар1 – 75 дол (100-5%-20%)
Товар2 – 190 дол (200-5%)
 
А нужно так:
Для клиента в группе:
Товар1 – 80 дол (100-20%) – исключить для «скидочного» товара его скидку по группе
Товар2 – 190 дол (200-5%)
 
Вроде понимаю, что это не сложно, но никак не пойму где в коде это меняется.
16 Апреля 2016, 09:45:23
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 2149
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
В скидках можно указать складывать их или нет, также приоритет.
16 Апреля 2016, 11:44:09
Ответ #2
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 1100
  • Репутация: +336/-0
  • Job-Freelance - работа для специалистов PrestaShop
    • Просмотр профиля
    • Job Freelance - удаленная работа программистам, веб-мастерам и дизайнерам
Создаете новое правило корзины, указывете размер скидки, приоритет.
Скидка в 20%, должна быть выше приоритетом, чем скидка 5%.
В таблице “Условия” , в "Совместимость с другими правилами корзины", указываете, что правила 5% и 20% не совместимы, т.е. нужно использовать скидку с более высоким приоритетом.
Job Freelance - предложения от европейских работодателей для  программистов, веб-мастеров и дизайнеров - специалистам по Magento и PrestaShop.
17 Апреля 2016, 15:52:47
Ответ #3
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В скидках можно указать складывать их или нет, также приоритет.
Создаете новое правило корзины, указывете размер скидки, приоритет.
Скидка в 20%, должна быть выше приоритетом, чем скидка 5%.
В таблице “Условия” , в "Совместимость с другими правилами корзины", указываете, что правила 5% и 20% не совместимы, т.е. нужно использовать скидку с более высоким приоритетом.
Спасибо за ответы! Но этот вариант не подходит.
Я наверное в топике не совсем корректно отобразил ситуацию...
Товар импортируется из 1С.
Скидки на конкретный товар тоже устанавливаются в 1С, а потом выгружаются в престу. Выгружаются скидки в карточку товара - спец. цена (не в правила корзины).
Переделывать логику связки Преста-1С будет очень сложно (чтобы для скидок на товары создавались правила корзины).
Скидки для групп клиентов установлены через группы клиентов.

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

Но где именно это сделать, никак не могу найти.

Сориентируйте, пожалуйста, хоть в каком направлении "копать"?

И еще раз спасибо всем за ответы!
17 Апреля 2016, 17:03:33
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 32988
  • Репутация: +26759/-0
    • Просмотр профиля
Менять не меньше чем в модуле импорта с 1С.
В этих классах расчет скидок и цен
/classes/SpecificPrice.php
/classes/SpecificPriceRule.php
17 Апреля 2016, 17:18:53
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 2149
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Какая разница спец. цена или правило корзины? В обоих вариантах можно установить приоритет.
18 Апреля 2016, 11:15:27
Ответ #6
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Какая разница спец. цена или правило корзины? В обоих вариантах можно установить приоритет.
Есть несколько товаров с разными скидками (5%, 3%, 10% и т.д.). Скидки установлены через спец. цены в карточке товара.
Есть клиентская группа с установленной скидкой именно в группе (Клиенты-группы-скидка).
Как в данном случае можно установить приоритет?
Приоритет устанавливается только в правилах корзины.
Если для клиентских групп еще можно создать правила корзины, то для товара это не вариант (так как придется под каждый размер скидки делать свое правило корзины, и из 9 тыс наменований товара выбирать вручную товар с определенной скидкой, при этом размеры скидки и количество товара со скидкой могут менять несколько раз в неделю).
Может я что-то попустил в настройках спец цен. (хотя врядли), приоритетность там не выставляется.
Если поможете буду безгранично благодарен!!
18 Апреля 2016, 11:40:20
Ответ #7
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 1100
  • Репутация: +336/-0
  • Job-Freelance - работа для специалистов PrestaShop
    • Просмотр профиля
    • Job Freelance - удаленная работа программистам, веб-мастерам и дизайнерам
Вам нужно создавать 2 спец. цены для товара.
1-я - для всех групп 20%
2-я - для группы, у которой должна быть скидка,  5%.
У самой группы в настройках скидка 0.

Цитировать
Пример.
Товар1 – 100 дол;
Товар 2 – 200 дол;
Группа клиентов – скидка 5%;
Скидка на товар1 – 20%.

Товар1 – 100 дол - спец цена, скидка для всех групп 20%.
Товар 2 – 200 дол - спец цена, скидка для 1-ой группы 5%.
Job Freelance - предложения от европейских работодателей для  программистов, веб-мастеров и дизайнеров - специалистам по Magento и PrestaShop.
18 Апреля 2016, 12:31:47
Ответ #8
  • Новичок
  • *
  • Сообщений: 4
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем большое спасибо за ответы.

Проблему решил. Как и предполагал, это оказалось не сложно)

В classes/Product.php

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

<?php
// Group reduction
if ($use_group_reduction)
{
$reduction_from_category GroupReduction::getValueForProduct($id_product$id_group);
if ($reduction_from_category !== false )
$group_reduction $price * (float)$reduction_from_category;
else // apply group reduction if there is no group reduction for this category
$group_reduction = (($reduc Group::getReductionByIdGroup($id_group)) != 0) ? ($price $reduc 100) : 0;
}
else
$group_reduction 0;

if ($only_reduc)
return Tools::ps_round($group_reduction $specific_price_reduction$decimals);

if ($use_reduc)
$price -= $group_reduction;

условие

<?php
// Group reduction
if ($use_group_reduction)

передалал на

<?php
// Group reduction
if ($use_group_reduction && !$specific_price)

если есть скидка по группе И НЕ установлена спец. цена, тогда применяется скидка для группы.