Автоматически отгрузить и оплатить заказ, при смене статуса на "Выполнен".

Просмотров: 7462

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

Задача: так как менеджеры не хотят заходить на сайт и вручную переключать статус отгрузки, нужно делать это автоматически, при переходе статуса заказа в "Выполнен", который приходит из 1С.

Переключам статус доставки в "Разрешена" и "Отгружена"

Тут все штатно: переходим в "Настройки -> Настройки продукта -> Настройки модулей -> Интернет-магазин" и на вкладке Автоматизация процессов выставляем разрешение доставки при переводе заказа в статус "Оплачен" и смену отгрузки на "Отгружен" при отгрузке заказа.

Автоматически отгрузить заказ и сменить статус отгрузки, при выполнении заказа.

Отгружаем заказ при выполнении

А теперь, осталось только отгрузить заказ при смене статуса на "Выполнен". Для этого создаем или добавляем в /local/php_interface/init.php (если уже есть):

use Bitrix\Main\Loader;
AddEventHandler("sale", "OnSaleStatusOrder", "OrderComplete");
function OrderComplete($orderID, &$arFields)
{
    if ($arFields == 'F') {
        Loader::includeModule("sale");
        $order = \Bitrix\Sale\Order::load($orderID);
        $collection = $order->getShipmentCollection()->getNotSystemItems();
        foreach ($collection as $shipment)
        {
            $shipment->setField('DEDUCTED', 'Y');
        }
        $order->save();
    }
}  
  • С помощью события OnSaleStatusOrder отслеживаем изменение статуса заказа.
  • Если заказ перешел в статус "Выполнен" $arFields == 'F'
  • Загружаем заказ по его ID, получаем все отгрузки заказа и в цикле переключаем статус на "Отгружен" $shipment->setField('DEDUCTED', 'Y');
  • Сохраняем заказ $order->save();

Обратите внимание: у каждого заказа есть скрытая, системная отгрузка и ее нельзя изменять (в общем-то и не получится, выдаст исключение). Отгрузки получаем с помощью $order->getShipmentCollection()->getNotSystemItems(); что бы в переборе не было этой системной отгрузки. Она не влияет на смену статуса и печать чека.

Сменить статус оплаты и отгрузки при выполнении заказа

Другая задача: после при смене статуса заказа на финальный, F (обычно "F значит Выполнен") нужно пометить все оплаты как оплаченные, разрешить и отгрузить все отгрузки.

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

AddEventHandler("sale", "OnSaleStatusOrder", "OrderComplete");
function OrderComplete($orderID, &$arFields)
{
    if ($arFields == 'F') {

        Bitrix\Main\Loader::includeModule('sale');
        $order = \Bitrix\Sale\Order::load($orderID);

        // Если не оплачен - полностью оплачиваем
        if (!$order->isPaid()) {
            $paymentCollection = $order->getPaymentCollection();
            // Проходим по всем оплатам- может быть не одна
            foreach ($paymentCollection as $payment) {
                $payment->setPaid('Y');
            }
        }

        // Разрешаем и отгружаем все отгрузки - кроме системной
        $collection = $order->getShipmentCollection()->getNotSystemItems();
        foreach ($collection as $shipment) {
            // Разрешаем отгрузку
            $shipment->allowDelivery();
            // Отгружаем
            $shipment->setField('DEDUCTED', 'Y');
        }

        // И сохраняем
        $order->save();
    }
}

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

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

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 5-ти недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 300 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.