예제 #1
0
 function Add($arFields)
 {
     global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER, $APPLICATION;
     $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N');
     $arFields1 = array();
     foreach ($arFields as $key => $value) {
         if (substr($key, 0, 1) == "=") {
             $arFields1[substr($key, 1)] = $value;
             unset($arFields[$key]);
         }
     }
     if (!empty($arFields['TAX_LIST']) && is_array($arFields['TAX_LIST'])) {
         $arFields1['TAX_LIST'] = $arFields['TAX_LIST'];
     }
     if (!empty($arFields['ORDER_PROP']) && is_array($arFields['TAX_LIST'])) {
         $arFields1['ORDER_PROP'] = $arFields['ORDER_PROP'];
     }
     if (!empty($arFields['DELIVERY_PRICE']) && floatval($arFields['DELIVERY_PRICE']) > 0) {
         $arFields1['DELIVERY_PRICE'] = $arFields['DELIVERY_PRICE'];
     }
     if (array_key_exists('ONLY_FULL_PAY_FROM_ACCOUNT', $arFields)) {
         $arFields1['ONLY_FULL_PAY_FROM_ACCOUNT'] = $arFields['ONLY_FULL_PAY_FROM_ACCOUNT'];
     }
     unset($arFields['DELIVERY_PRICE']);
     unset($arFields['TAX_LIST']);
     if (!CSaleOrder::CheckFields("ADD", $arFields)) {
         return false;
     }
     foreach (GetModuleEvents("sale", "OnBeforeOrderAdd", true) as $arEvent) {
         if (ExecuteModuleEventEx($arEvent, array(&$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::add(array_merge($arFields, $arFields1));
         if ($result->isSuccess(true)) {
             $ID = $result->getId();
         } else {
             foreach ($result->getErrorMessages() as $error) {
                 $APPLICATION->ThrowException($error);
             }
             return false;
         }
     } else {
         $arInsert = $DB->PrepareInsert("b_sale_order", $arFields);
         if (!array_key_exists("DATE_STATUS", $arFields)) {
             $arInsert[0] .= ", DATE_STATUS";
             $arInsert[1] .= ", " . $DB->GetNowFunction();
         }
         if (!array_key_exists("DATE_INSERT", $arFields)) {
             $arInsert[0] .= ", DATE_INSERT";
             $arInsert[1] .= ", " . $DB->GetNowFunction();
         }
         if (!array_key_exists("DATE_UPDATE", $arFields)) {
             $arInsert[0] .= ", DATE_UPDATE";
             $arInsert[1] .= ", " . $DB->GetNowFunction();
         }
         foreach ($arFields1 as $key => $value) {
             if (strlen($arInsert[0]) > 0) {
                 $arInsert[0] .= ", ";
                 $arInsert[1] .= ", ";
             }
             $arInsert[0] .= $key;
             $arInsert[1] .= $value;
         }
         $strSql = "INSERT INTO b_sale_order(" . $arInsert[0] . ") " . "VALUES(" . $arInsert[1] . ")";
         $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         $ID = IntVal($DB->LastID());
         CSaleOrder::SetAccountNumber($ID);
     }
     CSaleOrderChange::AddRecord($ID, "ORDER_ADDED");
     $USER_FIELD_MANAGER->Update("ORDER", $ID, $arFields);
     if ($isOrderConverted != 'Y') {
         foreach (GetModuleEvents("sale", "OnOrderAdd", true) as $arEvent) {
             ExecuteModuleEventEx($arEvent, array($ID, $arFields));
         }
     }
     if (defined("CACHED_b_sale_order")) {
         $CACHE_MANAGER->Read(CACHED_b_sale_order, "sale_orders");
         $CACHE_MANAGER->SetImmediate("sale_orders", true);
     }
     return $ID;
 }