Сайт берёт товары только из 1С, не из админки. И имеет специфичный алгоритм расчёта скидки.
1C формирует выгрузку базы товаров в формате .xml и помещает её в определённой директории на Windows Server’е (контролируемым бизнесом). Выгрузка скачивается по ftp.
Примечание: в случае проблем с ftp или Windows Server’ом обращайтесь к Хелхи.
Чтобы выгрузка из 1С оказалась в своей базе, запустите на сервере команду "dcp exec app python manage.py update_catalog".
Примечания:
- Команда "update_catalog" запускается по крону (crone) раз в 2 часа.
- Из базы достаём только товары. Структура категорий на сайте своя. Из-за этого неприятное следствие: когда в 1С добавляют товары, в базу сайта они заезжают без родительской категории. Контентщикам приходится добавлять их руками.
- Обновление прайс-листов для Яндекс.Маркета и в формате Excel обычно происходит так же по крону сразу после обновления каталога.
- Сценарий использования прайс-листа в формате Excel: оптовый покупатель по линку “Скачать прайс” на Главной странице скачивает прайс, проставляет в нём нужное количество единиц товара и высылает его нам на почту.
Всего есть 5 видов цен:
- Закупочная цена (R). Вносится в базу 1С вручную.
- Розничная цена (S). Вносится в базу 1С вручную.
- Оптовые цены:
- мелкий опт: S1 = S х k1;
- средний опт: S2 = S х k2;
- крупный опт: S3 = S х k3,
где k1, k2, k3 - коэффициенты оптовой цены.
Примечание: определение значений S1, S2, S3 происходит на стороне 1С.
Также есть пороговые значения для оптовых цен, при превышении которых применяется оптовая скидка:
- мелкий опт (B1), руб: 20000;
- средний опт (B2), руб: 50000;
- крупный опт (B3), руб: 100000.
У каждой корзины есть:
- 4 цены:
- 1 розничная (S);
- 3 оптовых (S1, S2, S3);
- 3 пороговых значения цены (B1, B2, B3).
Алгоритм определения итоговой цены заказа такой:
- если S3 > B3, значит в корзине крупный опт. Назначаем каждому товару цену крупного опта и завершаем алгоритм;
- если S2 > B2 - средний опт, аналогично;
- если S1 > B1 - мелкий опт, аналогично;
иначе - оставляем розничные цены S.
Пример 1
Пользователь указал количество: 500 шт. Расчёт по розничной цене: 500 х 1111 = 555500 руб. 555500 > 100000, поэтому расчёт идёт по цене 666,16 руб за единицу. Итоговая цена: 500 х 666,16 = 333080 руб.
Пример 2
Возьмём товар - блок питания: https://www.shopelectro.ru/catalog/products/2805/. Закажем 26 шт. Видим в корзине это: 1111 руб х 26 шт. = 28886 руб. Очистим корзину. Закажем 27 шт. Видим в корзине это: 767 руб х 27 шт. = 20717 руб. Получается, мы можем купить 27 одних и тех же блоков дешевле, чем 26.