bitrix изменить стоимость доставки

Расчет стоимости доставки курьером по своей формуле, кратко и по шагам

Идем в настройки модуля интернет-магазин (/bitrix/admin/settings.php) и меняем путь к обработчикам

Создаем файл delivery_courier.php в /local/php_interface/include/sale_delivery/. Название должно содержать id доставки после нижнего подчеркивания, не знаю для чего, видимо тут так заведено 🙂 Пишем в файл необходимый минимум:

Переходим в список служб доставки (/bitrix/admin/sale_delivery_service_list.php) и добавляем новую автоматизированную доставку, обработчиком в которой будет созданная нами доставка (в delivery_courier.php)

Получим то, что на скриншоте в шапке статьи

Добавляем расчет доставки по формуле в метод Calculate. Я буду считать так: к заказу будет прибавляться такая сумма, что бы стоимость заказа была кратна 50 рублей, но минимум +20р.

В итоге сумма заказа всегда «круглая»

На этом можно было бы закончить, но правильнее вынести значения «50» и «20» в настройки, а так же вынести текстовые фразы в lang файлы.

Начиная с 16 версии используется новая версия ядра магазина Битрикс, являющаяся частью ядра Битрикс D7. Многое описанное здесь может работать и в переходной версии 15.5. Все классы для работы с магазином собраны в модуле sale, поэтому для работы примером используем use для пространства модуля интернет-магазина.

Заказ (SaleOrder)

Заказ представляет собой объект класса BitrixSaleOrder. Нужно запомнить, что пока не вызван метод save() этот объект необязательно связан с сохранённым заказом. Также пока вы не вызовете save(), изменения в заказе не будут сохранены в базе данных.

Существующий заказ можно получить следующим образом:

Поля заказа можно получить короткими вызовами:

Также любое поле по имени можно получить так:

Список доступных полей можно получить, вызвав $order->getAvailableFields().

Заказ имеет связь один-ко-многим с несколькими объектами в виде коллекций — коллекция товаров в корзине (SaleBasket), коллекция отгрузок (SaleShipmentCollection), коллекция оплат (SalePaymentCollection) и коллекция свойств заказа (SalePropertyValueCollection).

Самый простой способ получить список способов доставки и оплаты — короткие вызовы:

Чтобы получить список примененных к заказу скидок, нужно вызвать:

В массиве $discountData[‘DISCOUNT_LIST’] содержится список скидок, в $discountData[‘COUPON_LIST’] содержится список купонов. Т.к. скидки можно отключать в админке, следует проверять поле APPLY: если Y — скидка/купон применёны, если N — были отключены менеджером.

Корзина заказа (SaleBasket)

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

Свойства заказа (SalePropertyValueCollection)

Свойства заказа — объекты BitrixSalePropertyValue — собраны в коллекции propertyCollection

Получить значения всех свойств и группы свойств можно так:

У многих свойств заказа есть определенное встроенное назначение (атрибуты IS_EMAIL, IS_PAYER, IS_LOCATION, IS_LOCATION4TAX, IS_PROFILE_NAME, IS_ZIP, IS_PHONE, IS_ADDRESS). Такие свойства можно получить следующими методами:

Получить значение свойства по ID:

В любом случае получаем значение свойства — экземпляр класса BitrixSalePropertyValue. Из него мы можем получить значение свойства:

И информацию о самом свойстве:

Чтобы изменить значение свойства следует вызвать метод setValue и сохранить сущность

Оплаты заказа (SalePaymentCollection)

Из коллекции оплат также можно получить информацию об оплате, что и из объекта заказа. Оплата с внутреннего счета также считается одной из оплат:

Коллекция содержит объекты оплаты SalePayment с информацией об оплатах:

Оплатить или вернуть оплату можно методами setPaid(), setReturn():

Инициировать оплату (вывести шаблон оплаты: форму, кнопку и т.п.) можно следующим образом:

Пример оформления заказа в D7

Для примера приведу простейший код оформления заказа с комментариями

Описание 1) изменить стоимость доставки.
Сейчас в корзине сделано так, при заказе меньше 5000, пишетcя доставка 1200, при заказе от 5000 до 20000 пишется – 400 рублей. при стоимости заказа больше или равно 20 000 пишется 0. Аналогично цена доставки меняется и в форме оформления заказа.
Надо в корзине поставить 2 цены: 1200 рублей и Самовывозом со склада – 0 рублей.
— Важно, при добавлении или изменении количества товара, в корзине идет перерасчет стоимости доставки, надо чтобы было 1200 и 0.

2) Добавить в форму оформления заказа, доставка курьером 1200 и Самовывоз со склада – Бесплатно!
– Важно чтобы при этом не вылетело все остальное, в форме оформления доставки, в частности доставки в пригород, которые идут как прибавка к существующей стоимости и стоимость подъема, она также добавляется к стоимости доставки

3) В карточках товаров, где стоимость товара от 5000 до 20 000 стоить надпись, стоимость доставки всего 400 рублей, свыше 20 000 стоит БЕСПЛАТНАЯ ДОСТАВКА – их надо убрать. Поставить: Самовывоз со склада: БЕСПЛАТНО

Оцените статью