Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Автоматическая калькуляция аффилиатов

00 голосов
1

Всем привет!

Наткнулся на топик на форуме там выложили код, который при смене статуса заказа запускает авто калькуляцию афилиатов от пользователя с админ правами, но калькуляцию не проходит...

Мб кто подскажет что не так? 

AddEventHandler("sale", "OnSaleStatusOrder", "StatusUpdate"); // смена статуса, автоматическая калькуляция аффилиатов
AddEventHandler("sale", "OnSaleComponentOrderOneStepComplete", "StatusUpdate") ; // смена статуса, автоматическая калькуляция аффилиатов
AddEventHandler("sale", "OnSalePayOrder", "StatusUpdate"); // оплачен 

function StatusUpdate($ID, $val) // смена статуса
   {
  $user = 1; // код менеджера магазина или админа
   if($val['STATUS_ID']=="F" || $val['STATUS_ID']=="P") { // тут казать ваши коды статусов заказ при оплате или отгрузки
      CSaleOrder::Update($ID,  array("ALLOW_DELIVERY" => "Y", "DATE_ALLOW_DELIVERY" => Date(CDatabase::ateFormatToPHP(CLang::GetDateFormat("FULL", LANG))), "EMP_ALLOW_DELIVERY_ID" => $user));
}
      
   // автоматическая калькуляция аффилиатов
    if ($val["PAYED"] == "Y" || $val == "Y"  ) {
            // без кода из трех строк ниже не работает калькуляция!
      require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");   
      CModule::IncludeModule("sale" ) ;
      $arOrder = CSaleOrder::GetByID($ID);
            //-! фикс калькуляции 
      CSaleAffiliate::CalculateAffiliate($arOrder["AFFILIATE_ID"], false, false, false, false);
    }
  
   }
спросил 03 Июнь, 16 от loony (540 баллов)

1 Ответ

+11 голос
 
Лучший ответ

Обработчик событий для каждого из нужных вам типов событий должен быть разным, с разными параметрами. При смене статуса в событии OnSaleStatusOrder параметром придёт буква статуса, а не массив.

OnSaleStatusOrder Вызывается после изменения статуса заказа. 
Параметры
ID Идентификатор заказа
val Идентификатор статуса

 

ответил 03 Июнь, 16 от root (25,590 баллов)
выбран 06 Июнь, 16 от loony
AddEventHandler("sale", "OnSaleStatusOrder"); // смена статуса, автоматическая калькуляция аффилиатов
function StatusUpdate($ID, $val) // смена статуса
   {
  $user = 1; // код менеджера магазина или админа
   if($val['STATUS_ID']=="F") { // тут казать ваши коды статусов заказ при оплате или отгрузки
      CSaleOrder::Update($ID,  array("ALLOW_DELIVERY" => "Y", "DATE_ALLOW_DELIVERY" => Date(CDatabase::ateFormatToPHP(CLang::GetDateFormat("FULL", LANG))), "EMP_ALLOW_DELIVERY_ID" => $user));
    }
  // автоматическая калькуляция аффилиатов
    if ($val == "Y") {
            // без кода из трех строк ниже не работает калькуляция!
      require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");   
      CModule::IncludeModule("sale" ) ;
      $arOrder = CSaleOrder::GetByID($ID);
            //-! фикс калькуляции
      CSaleAffiliate::CalculateAffiliate($arOrder["AFFILIATE_ID"], false, false, false, false);
    }
  
   }

Я правильно понимаю?
AddEventHandler("sale", "OnSaleStatusOrder"); // смена статуса, автоматическая калькуляция аффилиатов
function StatusUpdate($ID, $val) // смена статуса
   {
  $user = 1; // код менеджера магазина или админа
   if($val == "F") { // !!! тут казать ваши коды статусов заказ при оплате или отгрузки
      CSaleOrder::Update($ID,  array("ALLOW_DELIVERY" => "Y", "DATE_ALLOW_DELIVERY" => Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))), "EMP_ALLOW_DELIVERY_ID" => $user));
    }
  // автоматическая калькуляция аффилиатов
    if ($val == "Y") { // !!! статус - "Y" ???
            // без кода из трех строк ниже не работает калькуляция!
      require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");   
      CModule::IncludeModule("sale" ) ;
      $arOrder = CSaleOrder::GetByID($ID);
            //-! фикс калькуляции
      CSaleAffiliate::CalculateAffiliate($arOrder["AFFILIATE_ID"], false, false, false, false);
    }
  
   }
AddEventHandler("sale", "OnSaleStatusOrder"); // смена статуса, автоматическая калькуляция аффилиатов
function StatusUpdate($ID, $val) // смена статуса
   {
  $user = 1; // код менеджера магазина или админа
   if($val == "N" || $val == "DN") { // !!! тут казать ваши коды статусов заказ при оплате или отгрузки
      CSaleOrder::Update($ID,  array("ALLOW_DELIVERY" => "Y", "DATE_ALLOW_DELIVERY" => Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))), "EMP_ALLOW_DELIVERY_ID" => $user));
    }
  // автоматическая калькуляция аффилиатов
    if ($val == "F") { // !!! статус - "Y" ???
            // без кода из трех строк ниже не работает калькуляция!
      require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");   
      CModule::IncludeModule("sale" ) ;
      $arOrder = CSaleOrder::GetByID($ID);
            //-! фикс калькуляции
      CSaleAffiliate::CalculateAffiliate($arOrder["AFFILIATE_ID"], false, false, false, false);
    }
  
   }

Указал что при статусе Статус отгрузки: Ожидает обработки[DN]
И если статус Выполнен[F]
То сделать калькуляцию, но она не проходит, я опять чего то напутал?
Я правильно понимаю в этом фрагменте кода
if ($val == "Y") { // !!! статус - "Y" ???
говорится - если код статуса, например F , то провести калькуляцию?
ну вроде бы да
здравствуйте!
Я тут перекопал все что только можно и пришел к тому, мне маленько подругому надо, написал обработчик, если у заказа стоит флаг доставка разрешена, то выполнить калькуляцию, но что то я не до конца проработал, вы не могли бы подсказать в каком месте у меня ошибка?


AddEventHandler("sale", "OnSaleDeliveryOrder", "StatusUpdate");
function StatusUpdate($ID, $val)
{
    if($val=="Y"){
        require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
        CModule::IncludeModule("sale" ) ;
        $arOrder = CSaleOrder::GetByID($ID);
        //-! фикс калькуляции
        $dateFrom = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), mktime(0, 0, 0, 1, 1, 1990));
        $dateTo = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()+CTimeZone::GetOffset());
        CSaleAffiliate::CalculateAffiliate($arOrder["AFFILIATE_ID"], $dateFrom, $dateTo, false, false);
    }
}
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");  -- это подключение ядра битрикса, точно нужно убрать

Так с виду ошибок нет. Но могут быть - надо проверять корректность дат, наличие AFFILIATE_ID в arOrder. Вплоть до print_r($dateFrom);die(); и смотреть.
даты вот в таком виде 16.06.2016 21:46:10
$arOrder["AFFILIATE_ID"] тут тоже присутствует id
подключения ядра убрал, но все равно калькуляция не проходит.
Мб еще чтонибудь где проверить надо?

Похожие вопросы

0 голосов
4 ответов
спросил 27 Ноя, 13 от maxdj (480 баллов)
0 голосов
0 ответов
спросил 26 Март, 14 от Monemir (120 баллов)
0 голосов
1 ответ
0 голосов
5 ответов
спросил 27 Ноя, 13 от Monemir (120 баллов)
0 голосов
4 ответов
спросил 30 Июнь, 13 от SPARTAK (220 баллов)