Расчет стоимости доставки курьером по своей формуле, кратко и по шагам
Идем в настройки модуля интернет-магазин (/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)
- Корзина заказа (SaleBasket)
- Свойства заказа (SalePropertyValueCollection)
- Оплаты заказа (SalePaymentCollection)
- Пример оформления заказа в D7
Заказ (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 стоит БЕСПЛАТНАЯ ДОСТАВКА их надо убрать. Поставить: Самовывоз со склада: БЕСПЛАТНО
Источник: