Обработчик для перевода в нужный статус при оплате


У заказчика есть постоплата после доставки, а есть предоплата до поставки
Поэтому в зависимости от текущего статуса надо переводить в в 1 из 2х статусов:
  • Если предоплата, то в статус "Оплачен, формируется к отправке"
  • Если постоплата, то в статус "Выполнено"
Битрикс стандартными настройками умеет переводить только в 1 статус.
1. Отключить все изменения Битриксом:
  • В роботах-триггерах (если CRM)
  • В настройках модуля платежной системы "Статус заказа после оплаты"
  • В настройках модуля "интернет-магазин" вкладка "автоматизация процессов"  поле "При получении полной оплаты переводить заказ в статус"
2. добавляем в /bitrix/php_interface/init.php
AddEventHandler("sale", "OnSalePayOrder", "MyOnSalePayOrder");
function MyOnSalePayOrder($id,$val){   
    if($val=="Y" && CModule::IncludeModule('sale') && ($arOrder = CSaleOrder::GetByID($id))) { 
        if(in_array($arOrder['STATUS_ID'], array("N","NP"))){//если на стадии "В обработке", "Ожидает оплаты""            
            CSaleOrder::StatusOrder($id, "P"); //переводим в статус "оплачен, формируется к отправке"
        }
        elseif(in_array($arOrder['STATUS_ID'], array("S","Z"))){//если на стадии "Отправлен", "Отправлен, ожидание оплаты"            
            CSaleOrder::StatusOrder($id, "F"); //переводим в статус "выполнен"
        }
    }
}