function ReserveOrder($ID, $val, $recurringID = 0) { global $DB, $USER; $ID = IntVal($ID); $val = $val != "Y" ? "N" : "Y"; $recurringID = IntVal($recurringID); if ($ID <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGO_NO_ORDER_ID"), "NO_ORDER_ID"); return false; } $arOrder = CSaleOrder::GetByID($ID); if (!$arOrder) { $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $ID, GetMessage("SKGO_NO_ORDER")), "NO_ORDER"); return false; //TODO - UnsetMark? } if ($arOrder["RESERVED"] == $val) { $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $ID, GetMessage("SKGO_DUB_RESERVATION")), "ALREADY_FLAG"); return false; } foreach (GetModuleEvents("sale", "OnSaleBeforeReserveOrder", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, $val, $recurringID, $arAdditionalFields)) === false) { return false; } } unset($GLOBALS["SALE_ORDER"]["SALE_ORDER_CACHE_" . $ID]); if ($recurringID <= 0) { if (IntVal($arOrder["RECURRING_ID"]) > 0) { $recurringID = IntVal($arOrder["RECURRING_ID"]); } } //TODO - recurring? $res = CSaleOrder::Update($ID, array("RESERVED" => $val)); $arRes = CSaleBasket::OrderReservation($ID, $val == "N" ? true : false, $recurringID); if (array_key_exists("ERROR", $arRes)) { foreach ($arRes["ERROR"] as $productId => $arError) { $errorMessage .= " " . $arError["MESSAGE"]; } CSaleOrder::SetMark($ID, GetMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $errorMessage))); $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $errorMessage)), "RESERVATION_ERROR"); return false; } else { //don't unset if not set yet CSaleOrder::UnsetMark($ID); } foreach (GetModuleEvents("sale", "OnSaleReserveOrder", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $val)); } return $res; }
if (strlen($errorMessageTmp) <= 0) { $MARKED = trim($_REQUEST["MARKED"]); $REASON_MARKED = trim($_REQUEST["REASON_MARKED"]); if ($MARKED != "Y") $MARKED = "N"; if ($MARKED != "Y" && $MARKED != "N") $errorMessageTmp .= GetMessage("SOD_WRONG_MARK_FLAG").". "; } if (strlen($errorMessageTmp) <= 0 && !CSaleOrder::IsLocked($ID, $lockedBY, $dateLock)) { if ($MARKED == "Y") $rs = CSaleOrder::SetMark($ID, $REASON_MARKED, (0 < $intUserID ? $intUserID : 0)); else $rs = CSaleOrder::UnsetMark($ID, (0 < $intUserID ? $intUserID : 0)); if (!$rs) { if ($ex = $APPLICATION->GetException()) { if ($ex->GetID() != "ALREADY_FLAG") $errorMessageTmp .= $ex->GetString(); } else $errorMessageTmp .= GetMessage("ERROR_MARK_ORDER").". "; } }
$MARKED = "N"; if (($arOldOrder["MARKED"] != $MARKED) || ($arOldOrder["MARKED"] == "Y" && $arOldOrder["REASON_MARKED"] != $REASON_MARKED)) { $bUserCanMarkOrder = CSaleOrder::CanUserMarkOrder($ID, $arUserGroups, $intUserID); $errorMessageTmp = ""; if (!$bUserCanMarkOrder) { $errorMessageTmp .= GetMessage("SOD_NO_PERMS2MARK").". "; } else { if ($MARKED == "Y") $rs = CSaleOrder::SetMark($ID, $REASON_MARKED, $intUserID); else $rs = CSaleOrder::UnsetMark($ID, $intUserID); if (!$rs) { if ($ex = $APPLICATION->GetException()) { if ($ex->GetID() != "ALREADY_FLAG") $errorMessageTmp .= $ex->GetString(); } else $errorMessageTmp .= GetMessage("ERROR_MARK_ORDER").". "; } }
/** * Changes product quantity in the catalog. * Used in the DoSaveOrderBasket to actualize basket items quantity * after some operations with the order are made in the order_new form * * Depending on the state of the order (reserved/deducted) * and the state of the product (reserved/deducted) calls appropriate provider methods * * If the quantity is 0 and CHECK_QUANTITY is N, this method is used only to call OrderProduct method to actualize coupon data * * @param array $arBasketItem - basket item data array * @param int $deltaQuantity - quantity to be changed. Can be zero, in this case CHECK_QUANTITY should be N * @param bool $isOrderReserved - order reservation flag * @param bool $isOrderDeducted - order deduction flag * @param array $arStoreBarcodeOrderFormData - array of barcode and stores from order_new form to be used for deduction * @param array $arAdditionalParams - user id, site id, check_quantity flag * @return bool */ public static function DoChangeProductQuantity($arBasketItem, $deltaQuantity, $isOrderReserved = false, $isOrderDeducted = false, $arStoreBarcodeOrderFormData = array(), $arAdditionalParams = array()) { global $APPLICATION; if (!array_key_exists("CHECK_QUANTITY", $arAdditionalParams) || $arAdditionalParams["CHECK_QUANTITY"] != "N") { $arAdditionalParams["CHECK_QUANTITY"] = "Y"; } if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("DoChangeProductQuantity - Started", array("arBasketItem" => $arBasketItem, "deltaQuantity" => $deltaQuantity, "isOrderReserved" => intval($isOrderReserved), "isOrderDeducted" => intval($isOrderDeducted), "arStoreBarcodeOrderFormData" => $arStoreBarcodeOrderFormData, "checkQuantity" => $arAdditionalParams["CHECK_QUANTITY"]), "DCPQ1"); } /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($arBasketItem)) { $productProvider::OrderProduct(array("PRODUCT_ID" => $arBasketItem["PRODUCT_ID"], "QUANTITY" => $deltaQuantity <= 0 ? $arBasketItem['QUANTITY'] : $deltaQuantity, "RENEWAL" => "N", "USER_ID" => $arAdditionalParams["USER_ID"], "SITE_ID" => $arAdditionalParams["SITE_ID"], "CHECK_QUANTITY" => $arAdditionalParams["CHECK_QUANTITY"], "BASKET_ID" => $arBasketItem['ID'])); if ($deltaQuantity == 0 && $arAdditionalParams["CHECK_QUANTITY"] == 'N') { return true; } if ($isOrderDeducted) { $quantityPreviouslyLeftToReserve = $arBasketItem["RESERVED"] == "Y" ? floatval($arBasketItem["RESERVE_QUANTITY"]) : 0; if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::ReserveBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity, "quantityPreviouslyLeftToReserve" => $quantityPreviouslyLeftToReserve, "isOrderDeducted" => $isOrderDeducted), "DCPQ2"); } $arRes = CSaleBasket::ReserveBasketProduct($arBasketItem["ID"], $deltaQuantity + $quantityPreviouslyLeftToReserve, $isOrderDeducted); if (array_key_exists("ERROR", $arRes)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], Loc::getMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $arRes["ERROR"]["MESSAGE"]))); return false; } if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::DeductBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity, "arStoreBarcodeOrderFormData" => $arStoreBarcodeOrderFormData), "DCPQ3"); } $arDeductResult = CSaleBasket::DeductBasketProduct($arBasketItem["ID"], $deltaQuantity, $arStoreBarcodeOrderFormData); if (array_key_exists("ERROR", $arDeductResult)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], Loc::getMessage("SKGB_DEDUCT_ERROR", array("#MESSAGE#" => $arDeductResult["ERROR"]["MESSAGE"]))); $APPLICATION->ThrowException(Loc::getMessage("SKGB_DEDUCT_ERROR", array("#MESSAGE#" => $arDeductResult["ERROR"]["MESSAGE"])), "DEDUCTION_ERROR"); return false; } } else { if ($isOrderReserved && !$isOrderDeducted) { if ($arBasketItem["RESERVED"] == "Y") { $quantityPreviouslyLeftToReserve = floatval($arBasketItem["RESERVE_QUANTITY"]); if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::ReserveBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity, "quantityPreviouslyLeftToReserve" => $quantityPreviouslyLeftToReserve), "DCPQ4"); } $arRes = CSaleBasket::ReserveBasketProduct($arBasketItem["ID"], $deltaQuantity + $quantityPreviouslyLeftToReserve); if (array_key_exists("ERROR", $arRes)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], Loc::getMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $arRes["ERROR"]["MESSAGE"]))); return false; } } else { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::ReserveBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity), "DCPQ5"); } $arRes = CSaleBasket::ReserveBasketProduct($arBasketItem["ID"], $deltaQuantity); if (array_key_exists("ERROR", $arRes)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], Loc::getMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $arRes["ERROR"]["MESSAGE"]))); return false; } } } else { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::ReserveBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity), "DCPQ6"); } if ($arBasketItem["RESERVED"] == "Y") { $quantityPreviouslyLeftToReserve = floatval($arBasketItem["RESERVE_QUANTITY"]); $arRes = CSaleBasket::ReserveBasketProduct($arBasketItem["ID"], $deltaQuantity + $quantityPreviouslyLeftToReserve); if (array_key_exists("ERROR", $arRes)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], Loc::getMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $arRes["ERROR"]["MESSAGE"]))); return false; } } } } } else { if ($deltaQuantity < 0) { CSaleBasket::ExecuteCallbackFunction($arBasketItem["CANCEL_CALLBACK_FUNC"], $arBasketItem["MODULE"], $arBasketItem["PRODUCT_ID"], abs($deltaQuantity), true); } else { if ($deltaQuantity > 0) { CSaleBasket::ExecuteCallbackFunction($arBasketItem["ORDER_CALLBACK_FUNC"], $arBasketItem["MODULE"], $arBasketItem["PRODUCT_ID"], $deltaQuantity, "N", $arAdditionalParams["USER_ID"], $arAdditionalParams["SITE_ID"]); } else { if ($deltaQuantity == 0) { CSaleBasket::ExecuteCallbackFunction($arBasketItem["ORDER_CALLBACK_FUNC"], $arBasketItem["MODULE"], $arBasketItem["PRODUCT_ID"], $arBasketItem['QUANTITY'], "N", $arAdditionalParams["USER_ID"], $arAdditionalParams["SITE_ID"]); } } } } return true; }
function ReserveOrder($ID, $val) { global $APPLICATION; $ID = IntVal($ID); $val = $val != "Y" ? "N" : "Y"; $errorMessage = ""; $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N'); if ($ID <= 0) { $APPLICATION->ThrowException(Loc::getMessage("SKGO_NO_ORDER_ID"), "NO_ORDER_ID"); return false; } $arOrder = CSaleOrder::GetByID($ID); if (!$arOrder) { $APPLICATION->ThrowException(str_replace("#ID#", $ID, Loc::getMessage("SKGO_NO_ORDER")), "NO_ORDER"); return false; } if ($arOrder["RESERVED"] == $val) { $APPLICATION->ThrowException(str_replace("#ID#", $ID, Loc::getMessage("SKGO_DUB_RESERVATION")), "ALREADY_FLAG"); return false; } foreach (GetModuleEvents("sale", "OnSaleBeforeReserveOrder", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, $val)) === false) { return false; } } unset($GLOBALS["SALE_ORDER"]["SALE_ORDER_CACHE_" . $ID]); if ($isOrderConverted == "Y") { /** @var \Bitrix\Sale\Result $r */ $r = \Bitrix\Sale\Compatible\OrderCompatibility::reserve($ID, $val); if (!$r->isSuccess(true)) { foreach ($r->getErrorMessages() as $error) { $errorMessage .= " " . $error; } $APPLICATION->ThrowException(Loc::getMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $errorMessage)), "RESERVATION_ERROR"); return false; } $res = true; } else { $res = CSaleOrder::Update($ID, array("RESERVED" => $val), false); $arRes = CSaleBasket::OrderReservation($ID, $val == "N" ? true : false); if (array_key_exists("ERROR", $arRes)) { foreach ($arRes["ERROR"] as $arError) { $errorMessage .= " " . $arError["MESSAGE"]; } CSaleOrder::SetMark($ID, Loc::getMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $errorMessage))); $APPLICATION->ThrowException(Loc::getMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $errorMessage)), "RESERVATION_ERROR"); return false; } else { if ($arOrder["MARKED"] == "Y") { CSaleOrder::UnsetMark($ID); } } } foreach (GetModuleEvents("sale", "OnSaleReserveOrder", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $val)); } return $res; }
/** * The agent function. Moves reserved quantity back to the quantity field for each product * for orders which were placed earlier than specific date * * @return agent name string */ public static function ClearProductReservedQuantity() { global $DB, $USER; if (!is_object($USER)) $USER = new CUser; $days_ago = COption::GetOptionString("sale", "product_reserve_clear_period", "0"); if (intval($days_ago) > 0) { $date = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time() - intval($days_ago)*24*60*60); $arFilter = array( "<=DATE_INSERT" => $date, "RESERVED" => "Y", "DEDUCTED" => "N", "PAYED" => "N", "ALLOW_DELIVERY" => "N", "CANCELED" => "N" ); $dbRes = CSaleOrder::GetList( array(), $arFilter, false, false, array("ID", "RESERVED", "DATE_INSERT", "DEDUCTED", "PAYED", "CANCELED", "MARKED") ); while ($arRes = $dbRes->GetNext()) { foreach(GetModuleEvents("sale", "OnSaleBeforeReserveOrder", true) as $arEvent) if (ExecuteModuleEventEx($arEvent, array($arRes["ID"], "N", $arAdditionalFields))===false) return false; // undoing reservation $res = CSaleBasket::OrderReservation($arRes["ID"], true); if (array_key_exists("ERROR", $res)) { foreach ($res["ERROR"] as $productId => $arError) $errorMessage .= " ".$arError["MESSAGE"]; CSaleOrder::SetMark($arRes["ID"], GetMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $errorMessage))); } else { if ($arOrder["MARKED"] == "Y") CSaleOrder::UnsetMark($arRes["ID"]); } $res = CSaleOrder::Update($arRes["ID"], array("RESERVED" => "N"), false); foreach(GetModuleEvents("sale", "OnSaleReserveOrder", true) as $arEvent) ExecuteModuleEventEx($arEvent, Array($arRes["ID"], "N")); } } return "CSaleOrder::ClearProductReservedQuantity();"; }
if ($ID > 0 and count($arErrors) <= 0) { $MARKED = trim($_POST["MARKED"]); $REASON_MARKED = trim($_POST["REASON_MARKED"]); if ($MARKED != "Y") { $MARKED = "N"; } $arOrder2Update = array(); if ($arOldOrder["MARKED"] != $MARKED || $arOldOrder["MARKED"] == "Y" && $arOldOrder["REASON_MARKED"] != $REASON_MARKED) { $bUserCanMarkOrder = CSaleOrder::CanUserMarkOrder($ID, $GLOBALS["USER"]->GetUserGroupArray(), $GLOBALS["USER"]->GetID()); $errorMessageTmp = ""; if (!$bUserCanMarkOrder) { $errorMessageTmp .= GetMessage("SOD_NO_PERMS2MARK") . ". "; } if (strlen($errorMessageTmp) <= 0) { if ($MARKED == "Y") { $rs = CSaleOrder::SetMark($ID, $REASON_MARKED, intval($GLOBALS["USER"]->GetID()) > 0 ? IntVal($GLOBALS["USER"]->GetID()) : 0); } else { $rs = CSaleOrder::UnsetMark($ID, intval($GLOBALS["USER"]->GetID()) > 0 ? IntVal($GLOBALS["USER"]->GetID()) : 0); } if (!$rs) { if ($ex = $APPLICATION->GetException()) { if ($ex->GetID() != "ALREADY_FLAG") { $errorMessageTmp .= $ex->GetString(); } } else { $errorMessageTmp .= GetMessage("ERROR_MARK_ORDER") . ". "; } } } if ($errorMessageTmp != "") { $arErrors[] = $errorMessageTmp;
public function SetStatus($ID, $statusID, $statusParams = false, $options = array()) { global $USER; if (!CModule::IncludeModule('sale')) { return false; } $currentUserId = 0; if (isset($USER) && (get_class($USER) === 'CUser' || $USER instanceof CUser)) { $currentUserId = $USER->GetID(); } $result = true; if (!self::$INVOICE_STATUSES) { self::$INVOICE_STATUSES = CCrmStatus::GetStatus('INVOICE_STATUS'); } if (!is_array(self::$INVOICE_STATUSES) || count(self::$INVOICE_STATUSES) <= 2 || !array_key_exists('P', self::$INVOICE_STATUSES) || !array_key_exists('D', self::$INVOICE_STATUSES) || self::$INVOICE_STATUSES['P']['SORT'] >= self::$INVOICE_STATUSES['D']['SORT']) { $result = false; } if ($result) { $CSaleOrder = new CSaleOrder(); // get current state if (!($arOrder = CSaleOrder::GetByID($ID))) { $result = false; } if ($result) { $curPay = $arOrder['PAYED']; $curCancel = $arOrder['CANCELED']; $curMarked = $arOrder['MARKED']; $curStatusID = $arOrder['STATUS_ID']; $pay = $cancel = 'N'; $marked = isset($statusParams['REASON_MARKED']) || isset($statusParams['DATE_MARKED']) ? 'Y' : 'N'; if (self::$INVOICE_STATUSES[$statusID]['SORT'] >= self::$INVOICE_STATUSES['P']['SORT']) { $pay = 'Y'; } if (self::$INVOICE_STATUSES[$statusID]['SORT'] >= self::$INVOICE_STATUSES['D']['SORT']) { $pay = 'N'; $cancel = 'Y'; } if ($curPay != $pay) { $result = $CSaleOrder->PayOrder($ID, $pay, true, true, 0, array('NOT_CHANGE_STATUS' => 'Y')); } if ($result && $curCancel != $cancel) { $result = $CSaleOrder->CancelOrder($ID, $cancel); } if ($result && $marked === 'Y') { $result = $CSaleOrder->SetMark($ID, isset($statusParams['REASON_MARKED']) ? $statusParams['REASON_MARKED'] : '', $currentUserId); } if ($result) { $arUpdate = array(); if (isset($statusParams['DATE_MARKED'])) { $arUpdate['DATE_MARKED'] = $statusParams['DATE_MARKED']; } if ($pay === 'Y') { if (isset($statusParams['PAY_VOUCHER_NUM'])) { $arUpdate['PAY_VOUCHER_NUM'] = $statusParams['PAY_VOUCHER_NUM']; } if (isset($statusParams['PAY_VOUCHER_DATE'])) { $arUpdate['PAY_VOUCHER_DATE'] = $statusParams['PAY_VOUCHER_DATE']; } } if (count($arUpdate) > 0) { $result = self::Update($ID, $arUpdate); } unset($arUpdate); } if ($result && $curStatusID != $statusID) { $result = $CSaleOrder->StatusOrder($ID, $statusID) === $ID; } } } if ($result && is_array($options) && isset($options['SYNCHRONIZE_LIVE_FEED']) && $options['SYNCHRONIZE_LIVE_FEED']) { self::SynchronizeLiveFeedEvent($ID, array('PROCESS_PARENTS' => false, 'REFRESH_DATE' => true)); } return $result; }
public static function DoChangeProductQuantity($arBasketItem, $deltaQuantity, $isOrderReserved = false, $isOrderDeducted = false, $arStoreBarcodeOrderFormData = array(), $arAdditionalParams = array()) { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("DoChangeProductQuantity - Started", array("arBasketItem" => $arBasketItem, "deltaQuantity" => $deltaQuantity, "isOrderReserved" => intval($isOrderReserved), "isOrderDeducted" => intval($isOrderDeducted), "arStoreBarcodeOrderFormData" => $arStoreBarcodeOrderFormData), "DCPQ1"); } /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($arBasketItem)) { if ($isOrderReserved && $isOrderDeducted) { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::DeductBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity, "arStoreBarcodeOrderFormData" => $arStoreBarcodeOrderFormData), "DCPQ2"); } $arDeductResult = CSaleBasket::DeductBasketProduct($arBasketItem["ID"], $deltaQuantity, $arStoreBarcodeOrderFormData); if (array_key_exists("ERROR", $arDeductResult)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], GetMessage("SKGB_DEDUCT_ERROR", array("#MESSAGE#" => $arDeductResult["ERROR"]["MESSAGE"]))); $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGB_DEDUCT_ERROR", array("#MESSAGE#" => $arDeductResult["ERROR"]["MESSAGE"])), "DEDUCTION_ERROR"); return false; } } else { if (!$isOrderReserved && $isOrderDeducted) { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::DeductBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity, "arStoreBarcodeOrderFormData" => $arStoreBarcodeOrderFormData), "DCPQ3"); } $arDeductResult = CSaleBasket::DeductBasketProduct($arBasketItem["ID"], $deltaQuantity, $arStoreBarcodeOrderFormData); if (array_key_exists("ERROR", $arDeductResult)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], GetMessage("SKGB_DEDUCT_ERROR", array("#MESSAGE#" => $arDeductResult["ERROR"]["MESSAGE"]))); $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGB_DEDUCT_ERROR", array("#MESSAGE#" => $arDeductResult["ERROR"]["MESSAGE"])), "DEDUCTION_ERROR"); return false; } } else { if ($isOrderReserved && !$isOrderDeducted) { if ($arBasketItem["RESERVED"] == "Y") { $quantityPreviouslyLeftToReserve = DoubleVal($arBasketItem["RESERVE_QUANTITY"]); if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::ReserveBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity, "quantityPreviouslyLeftToReserve" => $quantityPreviouslyLeftToReserve), "DCPQ4"); } $arRes = CSaleBasket::ReserveBasketProduct($arBasketItem["ID"], $deltaQuantity + $quantityPreviouslyLeftToReserve); if (array_key_exists("ERROR", $arRes)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], GetMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $arRes["ERROR"]["MESSAGE"]))); return false; } } else { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::ReserveBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity), "DCPQ5"); } $arRes = CSaleBasket::ReserveBasketProduct($arBasketItem["ID"], $deltaQuantity); if (array_key_exists("ERROR", $arRes)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], GetMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $arRes["ERROR"]["MESSAGE"]))); return false; } } } else { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("Call ::ReserveBasketProduct", array("arBasketItemID" => $arBasketItem["ID"], "deltaQuantity" => $deltaQuantity), "DCPQ6"); } if ($arBasketItem["RESERVED"] == "Y") { $quantityPreviouslyLeftToReserve = DoubleVal($arBasketItem["RESERVE_QUANTITY"]); $arRes = CSaleBasket::ReserveBasketProduct($arBasketItem["ID"], $deltaQuantity + $quantityPreviouslyLeftToReserve); if (array_key_exists("ERROR", $arRes)) { CSaleOrder::SetMark($arAdditionalParams["ORDER_ID"], GetMessage("SKGB_RESERVE_ERROR", array("#MESSAGE#" => $arRes["ERROR"]["MESSAGE"]))); return false; } } } } } } else { if ($deltaQuantity < 0) { CSaleBasket::ExecuteCallbackFunction($arBasketItem["CANCEL_CALLBACK_FUNC"], $arBasketItem["MODULE"], $arBasketItem["PRODUCT_ID"], $deltaQuantity, true); } else { if ($deltaQuantity > 0) { CSaleBasket::ExecuteCallbackFunction($arBasketItem["ORDER_CALLBACK_FUNC"], $arBasketItem["MODULE"], $arBasketItem["PRODUCT_ID"], $deltaQuantity, "N", $arAdditionalParams["USER_ID"], $arAdditionalParams["SITE_ID"]); } } } }
public function formAndSendDataToGP($type, $options = array(), $arFields) { $ID = intVal($options['ID']); if ($ID) { CModule::IncludeModule('sale'); $order = CSaleOrder::GetList(array(), array("ID" => $ID), false, false, array("MARKED", "PERSON_TYPE_ID"))->Fetch(); if ($order['MARKED'] == 'Y') { $order_is_marked = true; } else { $order_is_marked = false; } if ($arFields['PERSON_TYPE_ID'] > 0) { $person_type_id = $arFields['PERSON_TYPE_ID']; } elseif ($order['PERSON_TYPE_ID'] > 0) { $person_type_id = $order['PERSON_TYPE_ID']; } if ($person_type_id) { // get $_POST keys for needed parameters from module options /*$keys_list = array( 'customer_name', 'customer_phone', 'customer_email', 'delivery_address', 'location', 'city', 'GP_PHONE_ADDITIONAL', 'GP_FLOOR', 'GP_ENTRY', 'GP_INTERCOM_CODE', 'GP_ORDER_ID' );*/ $keys_list = array( 'customer_name', 'customer_email', 'customer_phone', 'delivery_city', 'delivery_alt_city', 'delivery_address', 'delivery_address_street', 'delivery_address_house', 'delivery_address_building', 'delivery_address_housing', 'delivery_address_apartment', 'customer_second_phone', 'floor', 'porch', 'intercom_code', 'comments', //'system_choosen', 'gp_order_id_0' ); foreach ($keys_list as $key) { $post_key[$key] = COption::GetOptionString(self::$MODULE_ID, 'match_id_'.$person_type_id.'_'.$key); } $filename = $_SERVER['DOCUMENT_ROOT'] . '/templog.log'; file_put_contents($filename, var_export($post_key, true), FILE_APPEND | LOCK_EX); file_put_contents($filename, var_export($_POST, true), FILE_APPEND | LOCK_EX); $arOrder = CSaleOrder::GetByID($ID); if($options["ACTION"] == "ORDER"){ //var_dump($arOrder["ACCOUNT_NUMBER"]);die(); $db_props = CSaleOrderPropsValue::GetOrderProps($ID); $arFields_props = array(); while ($arProps = $db_props->Fetch()) { $_POST["ORDER_PROP_".$arProps["ORDER_PROPS_ID"]]=$arProps["VALUE"]; } $_POST['PAY_SYSTEM_ID'] = $arOrder["PAY_SYSTEM_ID"]; $_POST[$post_key['comments']] = $arOrder["USER_DESCRIPTION"]; } // get city for delivery_address /*if ($_POST[$post_key['delivery_city']]) { $city_name = $_POST[$post_key['delivery_city']] . ' '; } else*/ if ($_POST[$post_key['delivery_city']] || $_POST['CITY_'.$post_key['delivery_city']]) { if ($_POST[$post_key['delivery_city']]) { $city_id = $_POST[$post_key['delivery_city']]; } else { $city_id = $_POST['CITY_'.$post_key['delivery_city']]; } $cityRes = CSaleLocation::GetList( array(), array("LID" => LANGUAGE_ID, "ID" => $city_id), false, array("nTopCount" => 1), array('CITY_NAME') ); if ($cityAr = $cityRes->Fetch()) { $city_name = $cityAr['CITY_NAME'] . ' '; } else { $city_name = ''; } } if($_POST[$post_key['delivery_alt_city']]){ $city_name = $_POST[$post_key['delivery_alt_city']]; } // set parameters if($_POST[$post_key['customer_name']]){ $post_data['order']['customer_name'] = $_POST[$post_key['customer_name']]; } if($_POST[$post_key['customer_email']]){ $post_data['order']['customer_email'] = $_POST[$post_key['customer_email']]; }elseif($_POST["NEW_BUYER_EMAIL"]){ $post_data['order']['customer_email'] = $_POST["NEW_BUYER_EMAIL"]; }else{ //get email from id if($_POST["user_id"]){ $user_id = $_POST["user_id"]; }else{ $user_id = $arOrder["USER_ID"]; } $rsUser = CUser::GetByID($user_id); $arUser = $rsUser->Fetch(); if($arUser["EMAIL"]){ $post_data['order']['customer_email'] = $arUser["EMAIL"]; } } //var_dump($_POST);die(); if($_POST[$post_key['customer_phone']]){ $post_data['order']['customer_phone'] = $_POST[$post_key['customer_phone']]; } if($city_name){ $post_data['order']['delivery_city'] = $city_name; } if($_POST[$post_key['delivery_address']] && $_POST[$post_key['delivery_address_street']]){ $post_data['order']['delivery_address'] = $_POST[$post_key['delivery_address']].", ".$_POST[$post_key['delivery_address_street']]; } if($_POST[$post_key['delivery_address']] && !$_POST[$post_key['delivery_address_street']]){ $post_data['order']['delivery_address'] = $_POST[$post_key['delivery_address']]; } if(!$_POST[$post_key['delivery_address']] && $_POST[$post_key['delivery_address_street']]){ $post_data['order']['delivery_address'] = $_POST[$post_key['delivery_address_street']]; } if($_POST[$post_key['delivery_address_house']]){ $post_data['order']['delivery_address_house'] = $_POST[$post_key['delivery_address_house']]; } if($_POST[$post_key['delivery_address_building']]){ $post_data['order']['delivery_address_building'] = $_POST[$post_key['delivery_address_building']]; } if($_POST[$post_key['delivery_address_housing']]){ $post_data['order']['delivery_address_housing'] = $_POST[$post_key['delivery_address_housing']]; } if($_POST[$post_key['delivery_address_apartment']]){ $post_data['order']['delivery_address_apartment'] = $_POST[$post_key['delivery_address_apartment']]; } if($_POST[$post_key['customer_second_phone']]){ $post_data['order']['customer_second_phone'] = $_POST[$post_key['customer_second_phone']]; } if($_POST[$post_key['floor']]){ $post_data['order']['floor'] = $_POST[$post_key['floor']]; } if($_POST[$post_key['porch']]){ $post_data['order']['porch'] = $_POST[$post_key['porch']]; } if($_POST[$post_key['intercom_code']]){ $post_data['order']['intercom_code'] = $_POST[$post_key['intercom_code']]; } if($_POST[$post_key['comments']]){ $post_data['order']['comments'] = $_POST[$post_key['comments']]; } //$post_data['order']['comments'] = $_POST['USER_DESCRIPTION']; $post_data['api_auth_token'] = COption::GetOptionString(self::$MODULE_ID, 'secret_key'); if (isset($options['widget_token']) && $options['widget_token']) { $post_data['order']['widget_token'] = $options['widget_token']; } $post_data['order']['widget_token'] = $_POST['widget_token']; //$post_data['order']['shop_order_code'] = $ID; $post_data['order']['shop_order_code'] = $arOrder["ACCOUNT_NUMBER"]; //$post_data['order']['customer_name'] = $_POST[$post_key['customer_name']] ? $_POST[$post_key['customer_name']] : ($arFields['ORDER_USER'] ? $arFields['ORDER_USER'] : ''); //$post_data['order']['customer_phone'] = $_POST[$post_key['customer_phone']]; //$post_data['order']['customer_email'] = $_POST[$post_key['customer_email']]; //$post_data['order']['delivery_address'] = $city_name . $_POST[$post_key['delivery_address']]; //if ($_POST[$post_key['GP_PHONE_ADDITIONAL']]) { $post_data['order']['customer_second_phone'] = $_POST[$post_key['GP_PHONE_ADDITIONAL']]; } //if (intVal($_POST[$post_key['GP_FLOOR']])) { $post_data['order']['floor'] = intVal($_POST[$post_key['GP_FLOOR']]); } //if ($_POST[$post_key['GP_ENTRY']]) { $post_data['order']['porch'] = $_POST[$post_key['GP_ENTRY']]; } //if ($_POST[$post_key['GP_INTERCOM_CODE']]) { $post_data['order']['intercom_code'] = $_POST[$post_key['GP_INTERCOM_CODE']]; } $post_data['order']['payment_type'] = COption::GetOptionString(self::$MODULE_ID, 'paysystem_match_'.intVal($_POST['PAY_SYSTEM_ID'])); // set products list for parameters if (!isset($_POST['PRODUCT']) || empty($_POST['PRODUCT'])) { $products = array(); $productRes = CSaleBasket::GetList( array(), array("ORDER_ID" => $ID), false, false, array('PRODUCT_ID', 'PRICE_DEFAULT', 'PRICE', 'QUANTITY', 'WEIGHT', 'NAME') ); while ($productAr = $productRes->Fetch()) { $products[] = $productAr; } } else { $products = $_POST['PRODUCT']; } // set products list parameters $cell = 0; foreach ($products as $arProduct) { // $post_data['order']['good_attributes'][$cell]['size'] = 'medium'; $post_data['order']['good_attributes'][$cell]['shop_good_code'] = $arProduct['PRODUCT_ID']; $post_data['order']['good_attributes'][$cell]['estimated_price'] = $arProduct['PRICE_DEFAULT']; $post_data['order']['good_attributes'][$cell]['price'] = $arProduct['PRICE']; $post_data['order']['good_attributes'][$cell]['count'] = $arProduct['QUANTITY']; $post_data['order']['good_attributes'][$cell]['weight'] = $arProduct['WEIGHT']; $post_data['order']['good_attributes'][$cell]['name'] = $arProduct['NAME']; $cell++; } } } // send data to GP server if ($options["URL"]) { $arConfig = self::$CONFIG; $stop_send = false; $ch = curl_init(); if (intVal($_POST[$post_key['gp_order_id']]) == 0) { $type = "POST"; //$options["URL"] = COption::GetOptionString(self::$MODULE_ID, 'POST_url'); $options["URL"] = COption::GetOptionString(self::$MODULE_ID, 'gp_script_url') . $arConfig["POST_URL"]; } if ($type == "POST" && !empty($post_data['widget_token'])) { $post_data['with_draft'] = true; }elseif($type == "POST" && empty($post_data['widget_token'])){ $post_data['with_draft'] = false; } // set data for sending to GP server $send_data = json_encode($post_data); if ($type == "POST") { curl_setopt($ch, CURLOPT_POST, true); } elseif ($type == "PATCH") { curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH'); } else { $stop_send = true; } curl_setopt($ch, CURLOPT_URL, $options["URL"]); curl_setopt($ch, CURLOPT_POSTFIELDS, $send_data); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if (!$stop_send) { $result = json_decode(curl_exec($ch), true); } curl_close($ch); if (is_array($result['error_message']) && count($result['error_message']) == 1) { $comment = implode("\r\n", $result['error_message']); $comment = CGPWidget::Translate($comment); CSaleOrder::SetMark($ID, $comment); } elseif (is_array($result['error_message']) && count($result['error_message']) > 1) { $comment = $result['error_message']; $ar_comment = ""; foreach($comment as $com){ $ar_comment .= CGPWidget::Translate($com).". "; } CSaleOrder::SetMark($ID, $ar_comment); } elseif ($result) { if ($order_is_marked) { CSaleOrder::UnsetMark($ID); } if (intVal($_POST[$post_key['gp_order_id_0']]) == 0 && $result['id']/* && intVal($_POST[$post_key['gp_order_id']]) != $result['id']*/) { // $_POST[$post_key['gp_order_id']] = $result['id']; if ($gp_order_id_prop_id = intVal(str_replace("ORDER_PROP_", "", $post_key['gp_order_id_0']))) { $gp_order_id_res = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $ID, "ORDER_PROPS_ID" => $gp_order_id_prop_id)); if ($gp_order_id_ar = $gp_order_id_res->Fetch()) { $gp_order_id_prop_value_id = $gp_order_id_ar['ID']; if ($gp_order_id_prop_value_id) { $gp_order_id_add_result = CSaleOrderPropsValue::Update($gp_order_id_prop_value_id, array("ORDER_ID" => $ID, "VALUE" => $result['id'])); } } else { $gp_order_id_prop_res = CSaleOrderProps::GetList(array(), array("ID" => $gp_order_id_prop_id)); if ($gp_order_id_prop_ar = $gp_order_id_prop_res->Fetch()) { $gp_order_id_add_result = CSaleOrderPropsValue::Add(array("ORDER_ID" => $ID, "ORDER_PROPS_ID" => $gp_order_id_prop_id, "VALUE" => $result['id'], "NAME" => $gp_order_id_prop_ar['NAME'], "CODE" => $gp_order_id_prop_ar['CODE'])); } } } } } /* echo "<pre>"; var_dump($_POST); var_dump($post_data); var_dump($result); echo "</pre>"; die();*/ } // log everything $filename = $_SERVER['DOCUMENT_ROOT'] . '/templog.log'; $data = array($type, date('d.m.Y h:i:s'), "ORDER" => $ID, "URL" => $options["URL"], "SEND" => $send_data, "RESULT" => $result, "ARFIELDS" => $arFields); // $data = array($type, date('d.m.Y h:i:s'), "ORDER" => $ID, "URL" => $options["URL"], "SEND" => $send_data, "gpid" => array('add' => $m, 'res' => $gp_order_id_add_result, '1' => array($gp_order_id_prop_value_id, array("ORDER_ID" => $ID, "VALUE" => $result['id'])), 'ar' => $gp_order_id_ar, 'val' => $gp_order_id_prop_value_id, 'post_gpoid' => $result['id'], "ORDER_ID" => $ID, 'ORDER_PROPS_ID' => str_replace("ORDER_PROP_", "", $post_key['gp_order_id'])), array($_POST[$post_key['gp_order_id']], $post_key['gp_order_id']), "RESULT" => $result); // $data = array($type, date('d.m.Y h:i:s'), $ID, $send_data, $result, $city_name, $city_id, $post_key, $_POST); file_put_contents($filename, var_export($data, true), FILE_APPEND | LOCK_EX); }