예제 #1
0
 function Update($ID, $arFields, $bDateUpdate = true)
 {
     global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER, $APPLICATION;
     $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N');
     $ID = IntVal($ID);
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!CSaleOrder::CheckFields("UPDATE", $arFields, $ID)) {
         return false;
     }
     foreach (GetModuleEvents("sale", "OnBeforeOrderUpdate", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) {
             return false;
         }
     }
     if ($isOrderConverted == "Y") {
         if (!empty($arFields1)) {
             $arFields1 = \Bitrix\Sale\Compatible\OrderCompatibility::backRawField(\Bitrix\Sale\Compatible\OrderCompatibility::ENTITY_ORDER, $arFields1);
         }
         $result = \Bitrix\Sale\Compatible\OrderCompatibility::update($ID, array_merge($arFields, $arFields1), $bDateUpdate);
         if (!$result->isSuccess()) {
             foreach ($result->getErrorMessages() as $error) {
                 $APPLICATION->ThrowException($error);
             }
             return false;
         } else {
             $arOrderOldFields = array();
             $resultFields = $result->getData();
             if (!empty($resultFields['OLD_FIELDS']) && is_array($resultFields['OLD_FIELDS'])) {
                 $arOrderOldFields = $resultFields['OLD_FIELDS'];
             }
             $updated = true;
         }
     } else {
         $strUpdate = $DB->PrepareUpdate("b_sale_order", $arFields);
         foreach ($arFields1 as $key => $value) {
             if (strlen($strUpdate) > 0) {
                 $strUpdate .= ", ";
             }
             $strUpdate .= $key . "=" . $value . " ";
         }
         //get old fields
         $arOrderOldFields = CSaleOrder::GetByID($ID);
         $strSql = "UPDATE b_sale_order SET " . "\t" . $strUpdate . " ";
         if ($bDateUpdate) {
             $strSql .= ",\tDATE_UPDATE = " . $DB->GetNowFunction() . " ";
         }
         $strSql .= "WHERE ID = " . $ID . " ";
         $updated = $DB->Query($strSql, true, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         if (!$updated) {
             return false;
         }
     }
     $USER_FIELD_MANAGER->Update("ORDER", $ID, $arFields);
     if ($updated) {
         CSaleOrderChange::AddRecordsByFields($ID, $arOrderOldFields, $arFields);
     }
     unset($GLOBALS["SALE_ORDER"]["SALE_ORDER_CACHE_" . $ID]);
     foreach (GetModuleEvents("sale", "OnOrderUpdate", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($ID, $arFields));
     }
     if (isset($arFields["TRACKING_NUMBER"])) {
         foreach (GetModuleEvents("sale", "OnTrackingNumberChange", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($ID, $arFields["TRACKING_NUMBER"]));
         }
         if (strlen($arFields["TRACKING_NUMBER"]) > 0 && $arOrderOldFields["TRACKING_NUMBER"] != $arFields["TRACKING_NUMBER"]) {
             $accountNumber = isset($arFields["ACCOUNT_NUMBER"]) ? $arFields["ACCOUNT_NUMBER"] : $arOrderOldFields["ACCOUNT_NUMBER"];
             $userId = isset($arFields["USER_ID"]) ? $arFields["USER_ID"] : $arOrderOldFields["USER_ID"];
             $payerName = "";
             $payerEMail = '';
             $dbUser = CUser::GetByID($userId);
             if ($arUser = $dbUser->Fetch()) {
                 if (strlen($payerName) <= 0) {
                     $payerName = $arUser["NAME"] . (strlen($arUser["NAME"]) <= 0 || strlen($arUser["LAST_NAME"]) <= 0 ? "" : " ") . $arUser["LAST_NAME"];
                 }
                 if (strlen($payerEMail) <= 0) {
                     $payerEMail = $arUser["EMAIL"];
                 }
             }
             $arEmailFields = array("ORDER_ID" => $accountNumber, "ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $arOrderOldFields["LID"]))), "ORDER_USER" => $payerName, "ORDER_TRACKING_NUMBER" => $arFields["TRACKING_NUMBER"], "BCC" => COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']), "EMAIL" => $payerEMail, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@" . $_SERVER['SERVER_NAME']));
             $event = new CEvent();
             $event->Send("SALE_ORDER_TRACKING_NUMBER", $arOrderOldFields["LID"], $arEmailFields, "N");
         }
     }
     if (defined("CACHED_b_sale_order") && $bDateUpdate && $arFields["UPDATED_1C"] != "Y") {
         $CACHE_MANAGER->Read(CACHED_b_sale_order, "sale_orders");
         $CACHE_MANAGER->SetImmediate("sale_orders", true);
     }
     return $ID;
 }