function OutputXmlDocumentRemove($typeDocument, $document) { global $DB; switch ($typeDocument) { case 'Shipment': if ($document['ID'] > 0) { $result = CSaleOrderChange::GetList(array("ID" => "DESC"), array('ORDER_ID' => $document['ID'], 'ENTITY' => 'SHIPMENT', 'TYPE' => 'SHIPMENT_REMOVED')); while ($resultChange = $result->Fetch()) { ?> <<?php echo CSaleExport::getTagName("SALE_EXPORT_DOCUMENT"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_ID"); ?> ><?php echo $resultChange["ENTITY_ID"]; ?> </<?php echo CSaleExport::getTagName("SALE_EXPORT_ID"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_NUMBER"); ?> ><?php echo $resultChange["ENTITY_ID"]; ?> </<?php echo CSaleExport::getTagName("SALE_EXPORT_NUMBER"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_DATE"); ?> ><?php echo $DB->FormatDate($resultChange["DATE_CREATE"], CSite::GetDateFormat("FULL"), "YYYY-MM-DD"); ?> </<?php echo CSaleExport::getTagName("SALE_EXPORT_DATE"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_HOZ_OPERATION"); ?> ><?php echo CSaleExport::getTagName("SALE_EXPORT_ITEM_SHIPMENT"); ?> </<?php echo CSaleExport::getTagName("SALE_EXPORT_HOZ_OPERATION"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_ROLE"); ?> ><?php echo CSaleExport::getTagName("SALE_EXPORT_SELLER"); ?> </<?php echo CSaleExport::getTagName("SALE_EXPORT_ROLE"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_CURRENCY"); ?> ><?php echo htmlspecialcharsbx(substr($document["CURRENCY"], 0, 3)); ?> </<?php echo CSaleExport::getTagName("SALE_EXPORT_CURRENCY"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_NUMBER_BASE"); ?> ><?php echo $resultChange['ORDER_ID']; ?> </<?php echo CSaleExport::getTagName("SALE_EXPORT_NUMBER_BASE"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_REMOVED"); ?> >true</<?php echo CSaleExport::getTagName("SALE_EXPORT_REMOVED"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_PROPERTIES_VALUES"); ?> ></<?php echo CSaleExport::getTagName("SALE_EXPORT_PROPERTIES_VALUES"); ?> > <<?php echo CSaleExport::getTagName("SALE_EXPORT_CONTRAGENTS"); ?> ></<?php echo CSaleExport::getTagName("SALE_EXPORT_CONTRAGENTS"); ?> > <<?php echo GetMessage("CC_BSC1_ITEMS"); ?> ></<?php echo GetMessage("CC_BSC1_ITEMS"); ?> > </<?php echo CSaleExport::getTagName("SALE_EXPORT_DOCUMENT"); ?> > <?php } } break; } }
function Update($ID, $arFields) { if (defined("SALE_DEBUG") && SALE_DEBUG) { CSaleHelper::WriteToLog("CSaleOrderChange - Update", array("ID" => $ID, "arFields" => $arFields), "SOCU2"); } global $DB; $ID = IntVal($ID); $arFields1 = array(); foreach ($arFields as $key => $value) { if (substr($key, 0, 1) == "=") { $arFields1[substr($key, 1)] = $value; unset($arFields[$key]); } } if (!CSaleOrderChange::CheckFields("UPDATE", $arFields)) { return false; } $strUpdate = $DB->PrepareUpdate("b_sale_order_change", $arFields); foreach ($arFields1 as $key => $value) { if (strlen($strUpdate) > 0) { $strUpdate .= ", "; } $strUpdate .= $key . "=" . $value . " "; } $strSql = "UPDATE b_sale_order_change SET " . "\t" . $strUpdate . " "; if ($bDateUpdate) { $strSql .= ",\tDATE_MODIFY = " . $DB->GetNowFunction() . " "; } $strSql .= "WHERE ID = " . $ID . " "; $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); return $ID; }
/** * @param $entity * @param $orderId * @param $type * @param null $id * @param array $data */ protected static function addRecord($entity, $orderId, $type, $id = null, array $data = array()) { \CSaleOrderChange::AddRecord($orderId, $type, $data, $entity, $id); }
function nodeHandler(CDataXML $value) { $value = $value->GetArray(); if(!empty($value[GetMessage("CC_BSC1_DOCUMENT")])) { $value = $value[GetMessage("CC_BSC1_DOCUMENT")]; $arOrder = $this->collectOrderInfo($value); if(!empty($arOrder)) { if(strlen($arOrder["ID"]) <= 0 && strlen($arOrder["ID_1C"]) > 0)//try to search order from 1C { $dbOrder = CSaleOrder::GetList(array("ID" => "DESC"), array("ID_1C" => $arOrder["ID_1C"]), false, false, array("ID", "ID_1C")); if($orderInfo = $dbOrder->Fetch()) { $arOrder["ID"] = $orderInfo["ID"]; } } if(strlen($arOrder["ID"]) > 0) // exists site order { $dbOrder = CSaleOrder::GetList(array(), array("ACCOUNT_NUMBER" => $arOrder["ID"]), false, false, array("ID", "LID", "PERSON_TYPE_ID", "PAYED", "DATE_PAYED", "CANCELED", "DATE_CANCELED", "REASON_CANCELED", "STATUS_ID", "DATE_STATUS", "PAY_VOUCHER_NUM", "PAY_VOUCHER_DATE", "PRICE_DELIVERY", "ALLOW_DELIVERY", "DATE_ALLOW_DELIVERY", "PRICE", "CURRENCY", "DISCOUNT_VALUE", "USER_ID", "PAY_SYSTEM_ID", "DELIVERY_ID", "DATE_INSERT", "DATE_INSERT_FORMAT", "DATE_UPDATE", "USER_DESCRIPTION", "ADDITIONAL_INFO", "COMMENTS", "TAX_VALUE", "DELIVERY_DOC_NUM", "DELIVERY_DOC_DATE", "STORE_ID", "ACCOUNT_NUMBER", "VERSION", "VERSION_1C", "ID_1C")); if($orderInfo = $dbOrder->Fetch()) { if($arOrder["VERSION_1C"] != $orderInfo["VERSION_1C"] || (strlen($orderInfo["VERSION_1C"]) <= 0 || strlen($arOrder["VERSION_1C"]) <= 0)) // skip update if the same version { $arOrderFields = array(); $orderId = $orderInfo["ID"]; CSaleOrderChange::AddRecord($orderId, "ORDER_1C_IMPORT"); if($arOrder["ID_1C"] != $orderInfo["ID_1C"]) $arOrderFields["ID_1C"] = $arOrder["ID_1C"]; $arOrderFields["VERSION_1C"] = $arOrder["VERSION_1C"]; if($orderInfo["PAYED"] != "Y" && $orderInfo["ALLOW_DELIVERY"] != "Y" && $orderInfo["STATUS_ID"] != "F") { $dbOrderTax = CSaleOrderTax::GetList( array(), array("ORDER_ID" => $orderId), false, false, array("ID", "TAX_NAME", "VALUE", "VALUE_MONEY", "CODE", "IS_IN_PRICE") ); $bTaxFound = false; if($arOrderTax = $dbOrderTax->Fetch()) { $bTaxFound = true; if(IntVal($arOrderTax["VALUE_MONEY"]) != IntVal($arOrder["TAX"]["VALUE_MONEY"]) || IntVal($arOrderTax["VALUE"]) != IntVal($arOrder["TAX"]["VALUE"]) || ($arOrderTax["IS_IN_PRICE"] != $arOrder["TAX"]["IS_IN_PRICE"])) { if(IntVal($arOrder["TAX"]["VALUE"])>0) { $arFields = Array( "TAX_NAME" => $arOrder["TAX"]["NAME"], "ORDER_ID" => $orderId, "VALUE" => $arOrder["TAX"]["VALUE"], "IS_PERCENT" => "Y", "IS_IN_PRICE" => $arOrder["TAX"]["IS_IN_PRICE"], "VALUE_MONEY" => $arOrder["TAX"]["VALUE_MONEY"], "CODE" => "VAT1C", "APPLY_ORDER" => "100" ); CSaleOrderTax::Update($arOrderTax["ID"], $arFields); $arOrderFields["TAX_VALUE"] = $arOrder["TAX"]["VALUE_MONEY"]; } else { CSaleOrderTax::Delete($arOrderTax["ID"]); $arOrderFields["TAX_VALUE"] = 0; } } } if(!$bTaxFound) { if(IntVal($arOrder["TAX"]["VALUE"])>0) { $arFields = Array( "TAX_NAME" => $arOrder["TAX"]["NAME"], "ORDER_ID" => $orderId, "VALUE" => $arOrder["TAX"]["VALUE"], "IS_PERCENT" => "Y", "IS_IN_PRICE" => $arOrder["TAX"]["IS_IN_PRICE"], "VALUE_MONEY" => $arOrder["TAX"]["VALUE_MONEY"] ); CSaleOrderTax::Add($arFields); $arOrderFields["TAX_VALUE"] = $arOrder["TAX"]["VALUE_MONEY"]; } } $arShoppingCart = array(); $bNeedUpdate = false; $dbBasket = CSaleBasket::GetList( array("NAME" => "ASC"), array("ORDER_ID" => $orderId), false, false, array( "ID", "QUANTITY", "CANCEL_CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "PRODUCT_PROVIDER_CLASS", "RESERVED", "RESERVE_QUANTITY", "TYPE", "SET_PARENT_ID", "PRICE", "VAT_RATE", "DISCOUNT_PRICE", "PRODUCT_XML_ID", ) ); while ($arBasket = $dbBasket->Fetch()) { $arFields = Array(); if(!empty($arOrder["items"][$arBasket["PRODUCT_XML_ID"]])) { if($arBasket["QUANTITY"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["QUANTITY"]) $arFields["QUANTITY"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["QUANTITY"]; if($arBasket["PRICE"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["PRICE"]) $arFields["PRICE"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["PRICE"]; if($arBasket["VAT_RATE"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["VAT_RATE"]) $arFields["VAT_RATE"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["VAT_RATE"]; if($arBasket["DISCOUNT_PRICE"] != $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["DISCOUNT_PRICE"]) $arFields["DISCOUNT_PRICE"] = $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["DISCOUNT_PRICE"]; if(count($arFields)>0) { $arFields["ID"] = $arBasket["ID"]; if(DoubleVal($arFields["QUANTITY"]) <= 0) $arFields["QUANTITY"] = $arBasket["QUANTITY"]; $bNeedUpdate = true; $arShoppingCart[] = $arFields; } else { $arShoppingCart[] = $arBasket; } //CSaleBasket::Update($arBasket["ID"], $arFields); $arOrder["items"][$arBasket["PRODUCT_XML_ID"]]["CHECKED"] = "Y"; } else { if($arOrder["TRAITS"][GetMessage("CC_BSC1_CANCELED")] != "true" && $orderInfo["CANCELED"] == "N") { $bNeedUpdate = true; //CSaleBasket::Delete($arBasket["ID"]); } } } if(!empty($arOrder["items"])) { foreach ($arOrder["items"] as $itemID => $arItem) { if ($arItem["CHECKED"] != "Y") { if ($arItem["TYPE"] == GetMessage("CC_BSC1_ITEM")) { if ($arBasketFields = $this->prepareProduct4Basket($itemID, $arItem, $orderId, $orderInfo)) { $arShoppingCart[] = $arBasketFields; $bNeedUpdate = true; } } elseif ($arItem["TYPE"] == GetMessage("CC_BSC1_SERVICE")) { if (IntVal($arItem["PRICE"]) != IntVal($orderInfo["PRICE_DELIVERY"])) $arOrderFields["PRICE_DELIVERY"] = $arItem["PRICE"]; } } } } if($bNeedUpdate) { $arErrors = array(); CSaleBasket::DoSaveOrderBasket($orderId, $orderInfo["LID"], $orderInfo["USER_ID"], $arShoppingCart, $arErrors); } if(DoubleVal($arOrder["AMOUNT"]) > 0 && $arOrder["AMOUNT"] != $orderInfo["PRICE"]) $arOrderFields["PRICE"] = $arOrder["AMOUNT"]; if(DoubleVal($orderInfo["DISCOUNT_VALUE"]) > 0) $arOrderFields["DISCOUNT_VALUE"] = 0; if(strlen($arOrder["COMMENT"]) > 0 && $arOrder["COMMENT"] != $orderInfo["COMMENTS"]) $arOrderFields["COMMENTS"] = $arOrder["COMMENT"]; $arOrderFields["UPDATED_1C"] = "Y"; if(!empty($arOrderFields)) CSaleOrder::Update($orderId, $arOrderFields); } else { $this->strError .= "\n".GetMessage("CC_BSC1_FINAL_NOT_EDIT", Array("#ID#" => $orderId)); } } $arAditFields = Array(); if($arOrder["TRAITS"][GetMessage("CC_BSC1_CANCELED")] == "true") { if($orderInfo["CANCELED"] == "N") CSaleOrder::CancelOrder($orderInfo["ID"], "Y", $arOrder["COMMENT"]); $arAditFields["UPDATED_1C"] = "Y"; } else { if(strlen($arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_DATE")])>1) { if($orderInfo["PAYED"]=="N") CSaleOrder::PayOrder($orderInfo["ID"], "Y"); $arAditFields["PAY_VOUCHER_DATE"] = CDatabase::FormatDate(str_replace("T", " ", $arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_DATE")]), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)); if(strlen($arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_NUM")])>0) $arAditFields["PAY_VOUCHER_NUM"] = $arOrder["TRAITS"][GetMessage("CC_BSC1_1C_PAYED_NUM")]; $arAditFields["UPDATED_1C"] = "Y"; } if(strlen($arOrder["TRAITS"][GetMessage("CC_BSC1_1C_DELIVERY_DATE")])>1) { if($orderInfo["ALLOW_DELIVERY"]=="N") CSaleOrder::DeliverOrder($orderInfo["ID"], "Y"); $arAditFields["DATE_ALLOW_DELIVERY"] = CDatabase::FormatDate(str_replace("T", " ", $arOrder["TRAITS"][GetMessage("CC_BSC1_1C_DELIVERY_DATE")]), "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)); if(strlen($this->arParams["FINAL_STATUS_ON_DELIVERY"])>0 && $orderInfo["STATUS_ID"] != "F" && $orderInfo["STATUS_ID"] != $this->arParams["FINAL_STATUS_ON_DELIVERY"]) CSaleOrder::StatusOrder($orderInfo["ID"], $this->arParams["FINAL_STATUS_ON_DELIVERY"]); $arAditFields["UPDATED_1C"] = "Y"; } } if(count($arAditFields)>0) CSaleOrder::Update($orderInfo["ID"], $arAditFields); } else $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_NOT_FOUND", Array("#ID#" => $arOrder["ID"])); } elseif($this->arParams["IMPORT_NEW_ORDERS"] == "Y") // create new order (ofline 1C) { if(!empty($arOrder["AGENT"]) && strlen($arOrder["AGENT"]["ID"]) > 0) { $arOrder["PERSON_TYPE_ID"] = 0; $arOrder["USER_ID"] = 0; $arErrors = array(); $dbUProp = CSaleOrderUserProps::GetList(array(), array("XML_ID" => $arOrder["AGENT"]["ID"]), false, false, array("ID", "NAME", "USER_ID", "PERSON_TYPE_ID", "XML_ID", "VERSION_1C")); if($arUProp = $dbUProp->Fetch()) { $arOrder["USER_ID"] = $arUProp["USER_ID"]; $arOrder["PERSON_TYPE_ID"] = $arUProp["PERSON_TYPE_ID"]; $arOrder["USER_PROFILE_ID"] = $arUProp["ID"]; $arOrder["USER_PROFILE_VERSION"] = $arUProp["VERSION_1C"]; $dbUPropValue = CSaleOrderUserPropsValue::GetList(array(), array("USER_PROPS_ID" => $arUProp["ID"])); while($arUPropValue = $dbUPropValue->Fetch()) { $arOrder["USER_PROPS"][$arUPropValue["ORDER_PROPS_ID"]] = $arUPropValue["VALUE"]; } } else { if(strlen($arOrder["AGENT"]["ID"]) > 0) { $arAI = explode("#", $arOrder["AGENT"]["ID"]); if(IntVal($arAI[0]) > 0) { $dbUser = CUser::GetByID($arAI[0]); if($arU = $dbUser->Fetch()) { if(htmlspecialcharsback(substr(htmlspecialcharsbx($arU["ID"]."#".$arU["LOGIN"]."#".$arU["LAST_NAME"]." ".$arU["NAME"]." ".$arU["SECOND_NAME"]), 0, 80)) == $arOrder["AGENT"]["ID"]) { $arOrder["USER_ID"] = $arU["ID"]; } } } } if(IntVal($arOrder["USER_ID"]) <= 0) { //create new user $arUser = array( "NAME" => $arOrder["AGENT"]["ITEM_NAME"], "EMAIL" => $arOrder["AGENT"]["CONTACT"]["MAIL_NEW"], ); if (strlen($arUser["NAME"]) <= 0) $arUser["NAME"] = $arOrder["AGENT"]["CONTACT"]["CONTACT_PERSON"]; if (strlen($arUser["EMAIL"]) <= 0) $arUser["EMAIL"] = "buyer".time().GetRandomCode(2)."@".$_SERVER["SERVER_NAME"]; $arOrder["USER_ID"] = CSaleUser::DoAutoRegisterUser($arUser["EMAIL"], $arUser["NAME"], $this->arParams["SITE_NEW_ORDERS"], $arErrors); } } if(empty($this->arPersonTypesIDs)) { $dbPT = CSalePersonType::GetList(array(), array("ACTIVE" => "Y", "LIDS" => $this->arParams["SITE_NEW_ORDERS"])); while($arPT = $dbPT->Fetch()) { $this->arPersonTypesIDs[] = $arPT["ID"]; } } if(empty($this->arExportInfo)) { $dbExport = CSaleExport::GetList(array(), array("PERSON_TYPE_ID" => $this->arPersonTypesIDs)); while($arExport = $dbExport->Fetch()) { $this->arExportInfo[$arExport["PERSON_TYPE_ID"]] = unserialize($arExport["VARS"]); } } if(IntVal($arOrder["PERSON_TYPE_ID"]) <= 0) { foreach($this->arExportInfo as $pt => $value) { if( (($value["IS_FIZ"] == "Y" && $arOrder["AGENT"]["TYPE"] == "FIZ") || ($value["IS_FIZ"] == "N" && $arOrder["AGENT"]["TYPE"] != "FIZ")) ) $arOrder["PERSON_TYPE_ID"] = $pt; } } if(IntVal($arOrder["PERSON_TYPE_ID"]) > 0) { $arAgent = $this->arExportInfo[$arOrder["PERSON_TYPE_ID"]]; foreach($arAgent as $k => $v) { if((strlen($v["VALUE"]) <= 0 || $v["TYPE"] != "PROPERTY") && (empty($arOrder["USER_PROPS"]) || empty($arOrder["USER_PROPS"][$v["VALUE"]]))) unset($arAgent[$k]); } if(IntVal($arOrder["USER_ID"]) > 0) { $orderFields = array( "SITE_ID" => $this->arParams["SITE_NEW_ORDERS"], "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "PAYED" => "N", "CANCELED" => "N", "STATUS_ID" => "N", "PRICE" => $arOrder["AMOUNT"], "CURRENCY" => CSaleLang::GetLangCurrency($this->arParams["SITE_NEW_ORDERS"]), "USER_ID" => $arOrder["USER_ID"], "TAX_VALUE" => doubleval($arOrder["TAX"]["VALUE_MONEY"]), "COMMENTS" => $arOrder["COMMENT"], "BASKET_ITEMS" => array(), "TAX_LIST" => array(), "ORDER_PROP" => array(), ); $arAditFields = array( "EXTERNAL_ORDER" => "Y", "ID_1C" => $arOrder["ID_1C"], "VERSION_1C" => $arOrder["VERSION_1C"], "UPDATED_1C" => "Y", "DATE_INSERT" => CDatabase::FormatDate($arOrder["DATE"]." ".$arOrder["TIME"], "YYYY-MM-DD HH:MI:SS", CLang::GetDateFormat("FULL", LANG)), ); foreach($arOrder["items"] as $productID => $val) { $orderFields["BASKET_ITEMS"][] = $this->prepareProduct4Basket($productID, $val, false, $orderFields); } if(!empty($arOrder["TAX"])) { $orderFields["TAX_LIST"][] = array( "NAME" => $arOrder["TAX"]["NAME"], "IS_PERCENT" => "Y", "VALUE" => $arOrder["TAX"]["VALUE"], "VALUE_MONEY" => $arOrder["TAX"]["VALUE_MONEY"], "IS_IN_PRICE" => $arOrder["TAX"]["IS_IN_PRICE"], ); } foreach($arAgent as $k => $v) { if(!empty($arOrder["ORDER_PROPS"][$k])) { $orderFields["ORDER_PROP"][$v["VALUE"]] = $arOrder["ORDER_PROPS"][$k]; } if(empty($orderFields["ORDER_PROP"][$v["VALUE"]]) && !empty($arOrder["USER_PROPS"][$v["VALUE"]])) { $orderFields["ORDER_PROP"][$v["VALUE"]] = $arOrder["USER_PROPS"][$v["VALUE"]]; } } if($arOrder["ID"] = CSaleOrder::DoSaveOrder($orderFields, $arAditFields, 0, $arErrors)) { $arAditFields = array("UPDATED_1C" => "Y"); CSaleOrder::Update($arOrder["ID"], $arAditFields); //add/update user profile if(IntVal($arOrder["USER_PROFILE_ID"]) > 0) { if($arOrder["USER_PROFILE_VERSION"] != $arOrder["AGENT"]["VERSION"]) CSaleOrderUserProps::Update($arOrder["USER_PROFILE_ID"], array("VERSION_1C" => $arOrder["AGENT"]["VERSION"], "NAME" => $arOrder["AGENT"]["AGENT_NAME"])); $dbUPV = CSaleOrderUserPropsValue::GetList(array(), array("USER_PROPS_ID" =>$arOrder["USER_PROFILE_ID"])); while($arUPV = $dbUPV->Fetch()) { $arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arUPV["ORDER_PROPS_ID"]] = array("ID" => $arUPV["ID"], "VALUE" => $arUPV["VALUE"]); } } if(IntVal($arOrder["USER_PROFILE_ID"]) <= 0 || (IntVal($arOrder["USER_PROFILE_ID"]) > 0 && $arOrder["USER_PROFILE_VERSION"] != $arOrder["AGENT"]["VERSION"])) { $dbOrderProperties = CSaleOrderProps::GetList( array("SORT" => "ASC"), array( "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "ACTIVE" => "Y", "UTIL" => "N", "USER_PROPS" => "Y", ), false, false, array("ID", "TYPE", "NAME", "CODE", "USER_PROPS", "SORT", "MULTIPLE") ); while ($arOrderProperties = $dbOrderProperties->Fetch()) { $curVal = $orderFields["ORDER_PROP"][$arOrderProperties["ID"]]; if (strlen($curVal) > 0) { if (IntVal($arOrder["USER_PROFILE_ID"]) <= 0) { $arFields = array( "NAME" => $arOrder["AGENT"]["AGENT_NAME"], "USER_ID" => $arOrder["USER_ID"], "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "XML_ID" => $arOrder["AGENT"]["ID"], "VERSION_1C" => $arOrder["AGENT"]["VERSION"], ); $arOrder["USER_PROFILE_ID"] = CSaleOrderUserProps::Add($arFields); } if(IntVal($arOrder["USER_PROFILE_ID"]) > 0) { $arFields = array( "USER_PROPS_ID" => $arOrder["USER_PROFILE_ID"], "ORDER_PROPS_ID" => $arOrderProperties["ID"], "NAME" => $arOrderProperties["NAME"], "VALUE" => $curVal ); if(empty($arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]])) { CSaleOrderUserPropsValue::Add($arFields); } elseif($arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["VALUE"] != $curVal) { CSaleOrderUserPropsValue::Update($arOrder["AGENT"]["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["ID"], $arFields); } } } } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_ADD_PROBLEM", Array("#ID#" => $arOrder["ID_1C"])); } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_USER_PROBLEM", Array("#ID#" => $arOrder["ID_1C"])); if(!empty($arErrors)) { foreach($arErrors as $v) { $this->strError .= "\n".$v["TEXT"]; } } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_PERSON_TYPE_PROBLEM", Array("#ID#" => $arOrder["ID_1C"])); } } else { $this->strError .= "\n".GetMessage("CC_BSC1_ORDER_NO_AGENT_ID", Array("#ID#" => $arOrder["ID_1C"])); } } } } elseif($this->arParams["IMPORT_NEW_ORDERS"] == "Y") { $value = $value[GetMessage("CC_BSC1_AGENT")]["#"]; $arAgentInfo = $this->collectAgentInfo($value); if(!empty($arAgentInfo["AGENT"])) { $mode = false; $arErrors = array(); $dbUProp = CSaleOrderUserProps::GetList(array(), array("XML_ID" => $arAgentInfo["AGENT"]["ID"]), false, false, array("ID", "NAME", "USER_ID", "PERSON_TYPE_ID", "XML_ID", "VERSION_1C")); if($arUProp = $dbUProp->Fetch()) { if($arUProp["VERSION_1C"] != $arAgentInfo["AGENT"]["VERSION"]) { $mode = "update"; $arAgentInfo["PROFILE_ID"] = $arUProp["ID"]; $arAgentInfo["PERSON_TYPE_ID"] = $arUProp["PERSON_TYPE_ID"]; } } else { $arUser = array( "NAME" => $arAgentInfo["AGENT"]["ITEM_NAME"], "EMAIL" => $arAgentInfo["AGENT"]["CONTACT"]["MAIL_NEW"], ); if(strlen($arUser["NAME"]) <= 0) $arUser["NAME"] = $arAgentInfo["AGENT"]["CONTACT"]["CONTACT_PERSON"]; $emServer = $_SERVER["SERVER_NAME"]; if(strpos($_SERVER["SERVER_NAME"], ".") === false) $emServer .= ".bx"; if(strlen($arUser["EMAIL"]) <= 0) $arUser["EMAIL"] = "buyer".time().GetRandomCode(2)."@".$emServer; $arAgentInfo["USER_ID"] = CSaleUser::DoAutoRegisterUser($arUser["EMAIL"], $arUser["NAME"], $this->arParams["SITE_NEW_ORDERS"], $arErrors); if(IntVal($arAgentInfo["USER_ID"]) > 0) { $mode = "add"; } else { $this->strError .= "\n".GetMessage("CC_BSC1_AGENT_USER_PROBLEM", Array("#ID#" => $arAgentInfo["AGENT"]["ID"])); if(!empty($arErrors)) { foreach($arErrors as $v) { $this->strError .= "\n".$v["TEXT"]; } } } } if($mode) { if(empty($this->arPersonTypesIDs)) { $dbPT = CSalePersonType::GetList(array(), array("ACTIVE" => "Y", "LIDS" => $this->arParams["SITE_NEW_ORDERS"])); while($arPT = $dbPT->Fetch()) { $this->arPersonTypesIDs[] = $arPT["ID"]; } } if(empty($this->arExportInfo)) { $dbExport = CSaleExport::GetList(array(), array("PERSON_TYPE_ID" => $this->arPersonTypesIDs)); while($arExport = $dbExport->Fetch()) { $this->arExportInfo[$arExport["PERSON_TYPE_ID"]] = unserialize($arExport["VARS"]); } } if(IntVal($arAgentInfo["PERSON_TYPE_ID"]) <= 0) { foreach($this->arExportInfo as $pt => $value) { if(($value["IS_FIZ"] == "Y" && $arAgentInfo["AGENT"]["TYPE"] == "FIZ") || ($value["IS_FIZ"] == "N" && $arAgentInfo["AGENT"]["TYPE"] != "FIZ") ) $arAgentInfo["PERSON_TYPE_ID"] = $pt; } } if(IntVal($arAgentInfo["PERSON_TYPE_ID"]) > 0) { $arAgentInfo["ORDER_PROPS_VALUE"] = array(); $arAgentInfo["PROFILE_PROPS_VALUE"] = array(); $arAgent = $this->arExportInfo[$arAgentInfo["PERSON_TYPE_ID"]]; foreach($arAgent as $k => $v) { if(strlen($v["VALUE"]) <= 0 || $v["TYPE"] != "PROPERTY") unset($arAgent[$k]); } foreach($arAgent as $k => $v) { if(!empty($arAgentInfo["ORDER_PROPS"][$k])) $arAgentInfo["ORDER_PROPS_VALUE"][$v["VALUE"]] = $arAgentInfo["ORDER_PROPS"][$k]; } if (IntVal($arAgentInfo["PROFILE_ID"]) > 0) { CSaleOrderUserProps::Update($arUProp["ID"], array("VERSION_1C" => $arAgentInfo["AGENT"]["VERSION"], "NAME" => $arAgentInfo["AGENT"]["AGENT_NAME"])); $dbUPV = CSaleOrderUserPropsValue::GetList(array(), array("USER_PROPS_ID" => $arAgentInfo["PROFILE_ID"])); while($arUPV = $dbUPV->Fetch()) { $arAgentInfo["PROFILE_PROPS_VALUE"][$arUPV["ORDER_PROPS_ID"]] = array("ID" => $arUPV["ID"], "VALUE" => $arUPV["VALUE"]); } } if(empty($this->arOrderProps[$arAgentInfo["PERSON_TYPE_ID"]])) { $dbOrderProperties = CSaleOrderProps::GetList( array("SORT" => "ASC"), array( "PERSON_TYPE_ID" => $arAgentInfo["PERSON_TYPE_ID"], "ACTIVE" => "Y", "UTIL" => "N", "USER_PROPS" => "Y", ), false, false, array("ID", "TYPE", "NAME", "CODE", "USER_PROPS", "SORT", "MULTIPLE") ); while ($arOrderProperties = $dbOrderProperties->Fetch()) { $this->arOrderProps[$arAgentInfo["PERSON_TYPE_ID"]][] = $arOrderProperties; } } foreach($this->arOrderProps[$arAgentInfo["PERSON_TYPE_ID"]] as $arOrderProperties) { $curVal = $arAgentInfo["ORDER_PROPS_VALUE"][$arOrderProperties["ID"]]; if (strlen($curVal) > 0) { if (IntVal($arAgentInfo["PROFILE_ID"]) <= 0) { $arFields = array( "NAME" => $arAgentInfo["AGENT"]["AGENT_NAME"], "USER_ID" => $arAgentInfo["USER_ID"], "PERSON_TYPE_ID" => $arAgentInfo["PERSON_TYPE_ID"], "XML_ID" => $arAgentInfo["AGENT"]["ID"], "VERSION_1C" => $arAgentInfo["AGENT"]["VERSION"], ); $arAgentInfo["PROFILE_ID"] = CSaleOrderUserProps::Add($arFields); } if(IntVal($arAgentInfo["PROFILE_ID"]) > 0) { $arFields = array( "USER_PROPS_ID" => $arAgentInfo["PROFILE_ID"], "ORDER_PROPS_ID" => $arOrderProperties["ID"], "NAME" => $arOrderProperties["NAME"], "VALUE" => $curVal ); if(empty($arAgentInfo["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]])) { CSaleOrderUserPropsValue::Add($arFields); } elseif($arAgentInfo["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["VALUE"] != $curVal) { CSaleOrderUserPropsValue::Update($arAgentInfo["PROFILE_PROPS_VALUE"][$arOrderProperties["ID"]]["ID"], $arFields); } } } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_AGENT_PERSON_TYPE_PROBLEM", Array("#ID#" => $arAgentInfo["AGENT"]["ID"])); } } } else { $this->strError .= "\n".GetMessage("CC_BSC1_AGENT_NO_AGENT_ID"); } } }
function _Update($ID, &$arFields) { global $DB; $ID = (int) $ID; //CSaleBasket::Init(); if (!CSaleBasket::CheckFields("UPDATE", $arFields, $ID)) { return false; } foreach (GetModuleEvents("sale", "OnBeforeBasketUpdateAfterCheck", true) as $arEvent) { if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields)) === false) { return false; } } $arOldFields = false; $updateHistory = isset($arFields["ORDER_ID"]) && (int) $arFields["ORDER_ID"] > 0; $strUpdate = $DB->PrepareUpdate("b_sale_basket", $arFields); if (!empty($strUpdate)) { if ($updateHistory) { $oldOrderIterator = CSaleBasket::GetList(array(), array('ID' => $ID), false, false, array_keys($arFields)); $arOldFields = $oldOrderIterator->Fetch(); } $strSql = "update b_sale_basket set " . $strUpdate . ", DATE_UPDATE = " . $DB->GetNowFunction() . " where ID = " . $ID; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } else { $updateHistory = false; } if (isset($arFields["PROPS"]) && !empty($arFields["PROPS"]) && is_array($arFields["PROPS"])) { $sql = "delete from b_sale_basket_props where BASKET_ID = " . $ID; $bProductXml = false; $bCatalogXml = false; foreach ($arFields["PROPS"] as $prop) { if (!isset($prop['CODE'])) { continue; } if ($prop["CODE"] == "PRODUCT.XML_ID") { $bProductXml = true; } if ($prop["CODE"] == "CATALOG.XML_ID") { $bCatalogXml = true; } if ($bProductXml && $bCatalogXml) { break; } } if (!$bProductXml) { $sql .= " and CODE <> 'PRODUCT.XML_ID'"; } if (!$bCatalogXml) { $sql .= " and CODE <> 'CATALOG.XML_ID'"; } $DB->Query($sql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); if (!$bProductXml || !$bCatalogXml) { $sql = "delete from b_sale_basket_props where BASKET_ID = " . $ID . " and CODE IS NULL"; $DB->Query($sql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } foreach ($arFields["PROPS"] as $prop) { if (!isset($prop["NAME"])) { continue; } $prop["NAME"] = (string) $prop["NAME"]; if ($prop["NAME"] != '') { $arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop); $strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, " . $arInsert[0] . ") VALUES(" . $ID . ", " . $arInsert[1] . ")"; $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); } } } if ($updateHistory) { CSaleOrderChange::AddRecordsByFields($arFields["ORDER_ID"], $arOldFields, $arFields, array('PROPS'), "BASKET"); } foreach (GetModuleEvents("sale", "OnBasketUpdate", true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } return true; }
public static function execHandlerAction($orderId, $actionId) { global $DB, $USER; $arResult = array(); $arOrder = CSaleOrder::GetById($orderId); $handlerActions = CSaleDeliveryHandler::getActionsList($arOrder["DELIVERY_ID"]); if (!array_key_exists($actionId, $handlerActions)) { $arResult = array("RESULT" => "ERROR", "TEXT" => GetMessage("SALE_DHLP_HANDLER_HAS_NO_ACTION")); } $dt = new \Bitrix\Main\Type\DateTime(); $depList = \Bitrix\Sale\Internals\OrderDeliveryReqTable::getList(array('filter' => array('=ORDER_ID' => $orderId))); $dep = $depList->fetch(); if ($dep && !is_null($dep["DATE_REQUEST"])) { $arResult = array("RESULT" => "ERROR", "TEXT" => GetMessage("SALE_DHLP_HANDLER_REQUEST_ALREADY_SENT")); } if (empty($arResult)) { $arUserGroups = $USER->GetUserGroupArray(); $arOrder["ITEMS"] = array(); $dbItemsList = CSaleBasket::GetList(array("SET_PARENT_ID" => "DESC", "TYPE" => "DESC", "NAME" => "ASC"), array("ORDER_ID" => $orderId)); while ($arItem = $dbItemsList->GetNext()) { $arItem["DIMENSIONS"] = unserialize($arItem["~DIMENSIONS"]); unset($arItem["~DIMENSIONS"]); $arOrder["ITEMS"][] = $arItem; } $arResult = CSaleDeliveryHandler::executeAction($arOrder["DELIVERY_ID"], $actionId, $arOrder); if ($actionId == "REQUEST_SELF" && isset($arResult["TRACKING_NUMBER"])) { $bUserCanEditOrder = CSaleOrder::CanUserUpdateOrder($orderId, $arUserGroups); if ($bUserCanEditOrder) { if ($dep) { \Bitrix\Sale\Internals\OrderDeliveryReqTable::update($dep["ID"], array("DATE_REQUEST" => $dt)); } else { \Bitrix\Sale\Internals\OrderDeliveryReqTable::add(array("ORDER_ID" => $orderId, "DATE_REQUEST" => $dt)); } $fields = array(); if (isset($arResult["TRACKING_NUMBER"])) { $fields["TRACKING_NUMBER"] = $arResult["TRACKING_NUMBER"]; } if (isset($arResult["DELIVERY_DOC_NUM"])) { $fields["DELIVERY_DOC_NUM"] = $arResult["DELIVERY_DOC_NUM"]; $fields["DELIVERY_DOC_DATE"] = Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $arOrder["LID"]))); } CSaleOrder::Update($orderId, $fields); } } CSaleOrderChange::AddRecord($orderId, "ORDER_DELIVERY_REQUEST_SENT", $arResult); } return $arResult; }
public static function AddRecordsByFields($orderId, $arOldFields, $arNewFields, $arDeleteFields = array(), $entity = "") { if ($orderId <= 0) { return false; } if ($entity == "") { if (isset($arNewFields["ID"])) { unset($arNewFields["ID"]); } } foreach ($arNewFields as $key => $val) { if (is_array($val)) { continue; } if (!array_key_exists($key, $arOldFields) || array_key_exists($key, $arOldFields) && strlen($val) > 0 && $val != $arOldFields[$key] && !in_array($key, $arDeleteFields)) { $arRecord = CSaleOrderChange::MakeRecordFromField($key, $arNewFields, $entity); if ($arRecord) { CSaleOrderChange::AddRecord($orderId, $arRecord["TYPE"], serialize($arRecord["DATA"])); } } } return true; }
function DeleteAll($FUSER_ID = 0, $bIncOrdered = false) { global $DB, $APPLICATION; $bIncOrdered = $bIncOrdered ? True : False; $FUSER_ID = intval($FUSER_ID); if ($FUSER_ID <= 0) { return false; } $arFilter = array("FUSER_ID" => $FUSER_ID); if (!$bIncOrdered) { $arFilter["ORDER_ID"] = "NULL"; } $dbBasket = CSaleBasket::GetList(array(), $arFilter, false, false, array('ID', 'ORDER_ID', 'PRODUCT_ID', 'NAME')); while ($arBasket = $dbBasket->Fetch()) { if (0 < intval($arBasket["ORDER_ID"])) { CSaleOrderChange::AddRecord($arBasket["ORDER_ID"], "BASKET_REMOVED", array("PRODUCT_ID" => $arBasket["PRODUCT_ID"], "NAME" => $arBasket["NAME"])); } $DB->Query("DELETE FROM b_sale_basket_props WHERE BASKET_ID = " . $arBasket["ID"], true); $DB->Query("DELETE FROM b_sale_store_barcode WHERE BASKET_ID = " . $arBasket["ID"], true); $DB->Query("DELETE FROM b_sale_basket WHERE ID = " . $arBasket["ID"], true); } $_SESSION["SALE_BASKET_NUM_PRODUCTS"][SITE_ID] = 0; return true; }
/** * @param $id * * @return bool|\CDBResult */ public static function deleteByOrderId($id) { if (intval($id) <= 0) { return false; } return \CSaleOrderChange::deleteByOrderId($id); }
/** * <p>Функция изменяет параметры заказа с кодом ID на новые параметры из массива <i> arFields</i>. Перед добавлением заказа вызываются обработчики события OnBeforeOrderUpdate модуля магазина, а после добавления - обработчики события OnOrderUpdate модуля магазина. </p> * * * * * @param int $ID Код заказа. * * * * @param array $arFields Ассоциативный массив параметров заказа, ключами в котором * являются названия параметров заказа, а значениями - новые * значения.<br> Допустимые ключи: <ul> <li> <b>LID</b> - код сайта, на котором * сделан заказ;</li> <li> <b>PERSON_TYPE_ID</b> - тип плательщика, к которому * принадлежит посетитель, сделавший заказ (заказчик);</li> <li> <b>PAYED</b> - * флаг (Y/N) оплачен ли заказ;</li> <li> <b>DATE_PAYED</b> - дата оплаты заказа;</li> * <li> <b>EMP_PAYED_ID</b> - код пользователя (сотрудника магазина), который * установил флаг оплаты;</li> <li> <b>CANCELED</b> - флаг (Y/N) отменён ли * заказ;</li> <li> <b>DATE_CANCELED</b> - дата отмены заказа;</li> <li> <b>EMP_CANCELED_ID</b> - * код пользователя, который установил флаг отмены заказа;</li> <li> * <b>REASON_CANCELED</b> - текстовое описание причины отмены заказа;</li> <li> * <b>STATUS_ID</b> - код статуса заказа;</li> <li> <b>EMP_STATUS_ID</b> - код пользователя * (сотрудника магазина), который установил текущий статус * заказа;</li> <li> <b>PRICE_DELIVERY</b> - стоимость доставки заказа;</li> <li> * <b>ALLOW_DELIVERY</b> - флаг (Y/N) разрешена ли доставка (отгрузка) заказа;</li> * <li> <b>DATE_ALLOW_DELIVERY</b> - дата, когда была разрешена доставка заказа;</li> * <li> <b>EMP_ALLOW_DELIVERY_ID</b> - код пользователя (сотрудника магазина), * который разрешил доставку заказа; </li> <li> <b>PRICE</b> - общая стоимость * заказа;</li> <li> <b>CURRENCY</b> - валюта стоимости заказа;</li> <li> <b>DISCOUNT_VALUE</b> * - общая величина скидки;</li> <li> <b>USER_ID</b> - код пользователя * заказчика;</li> <li> <b>PAY_SYSTEM_ID</b> - платежная система, которой (будет) * оплачен заказа;</li> <li> <b>DELIVERY_ID</b> - способ (служба) доставки * заказа;</li> <li> <b>USER_DESCRIPTION</b> - описание заказа заказчиком;</li> <li> * <b>ADDITIONAL_INFO</b> - дополнительная информация по заказу;</li> <li> <b>COMMENTS</b> * - произвольные комментарии;</li> <li> <b>TAX_VALUE</b> - общая сумма * налогов;</li> <li> <b>STAT_GID</b> - параметр события в статистике; </li> <li> * <b>PS_STATUS</b> - флаг (Y/N) статуса платежной системы - успешно ли оплачен * заказ (для платежных систем, которые позволяют автоматически * получать данные по проведенным через них заказам);</li> <li> * <b>PS_STATUS_CODE</b> - код статуса платежной системы (значение зависит от * системы);</li> <li> <b>PS_STATUS_DESCRIPTION</b> - описание результата работы * платежной системы;</li> <li> <b>PS_STATUS_MESSAGE</b> - сообщение от платежной * системы;</li> <li> <b>PS_SUM</b> - сумма, которая была реально оплачена через * платежную систему;</li> <li> <b>PS_CURRENCY</b> - валюта суммы;</li> <li> * <b>PS_RESPONSE_DATE</b> - дата получения статуса платежной системы;</li> <li> * <b>SUM_PAID </b> - сумма, которая уже была оплачена покупателем по * данному счету (например, с внутреннего счета);</li> <li> <b>PAY_VOUCHER_NUM </b> - * номер платежного поручения;</li> <li> <b>PAY_VOUCHER_DATE</b> - дата платежного * поручения.</li> <li> <b>DATE_INSERT</b> - дата создания заказа.</li> </ul> * * * * @param bDateUpdat $e Обновление даты изменения заказа. Значения <i>true/false</i> * (по-умолчанию <i>true</i>). * * * * @return int <p>Возвращается код добавленного заказа или <i>false</i> в случае * ошибки.</p><a name="examples"></a> * * * <h4>Example</h4> * <pre> * <? * $arOrder = CSaleOrder::GetByID($ID); * if ($arOrder) * { * $arFields = array( * "PAYED" => "Y", * "DATE_PAYED" => Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))), * "USER_ID" => $arOrder["USER_ID"], * "EMP_PAYED_ID" => $USER->GetID() * ); * CSaleOrder::Update($ID, $arFields); * } * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaleorder/csaleorder__update.a8be5ffa.php * @author Bitrix */ public static function Update($ID, $arFields, $bDateUpdate = true) { global $DB, $USER_FIELD_MANAGER; $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; $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 ". " ".$strUpdate." "; if($bDateUpdate) $strSql .= ", DATE_UPDATE = ".$DB->GetNowFunction()." "; $strSql .= "WHERE ID = ".$ID." "; $res = $DB->Query($strSql, true, "File: ".__FILE__."<br>Line: ".__LINE__); if (!$res) return false; $USER_FIELD_MANAGER->Update("ORDER", $ID, $arFields); if ($res) 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)); return $ID; }
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; }
/** * <p>Метод удаляет из корзины все записи с внутренним кодом владельца fUserID. Метод динамичный.</p> * * * @param int $fUserID Внутренний код владельца. * * @param $bool Если флаг равен false (по-умолчанию), то удаляются только записи из * корзины. Если флаг равен true, то удаляются и те записи, которые * относятся к уже сделанным заказам. * * @param bIncOrdere $d = false] * * @return bool * * <h4>Example</h4> * <pre> * <? * if (CSaleBasket::DeleteAll(3, False)) * echo "Корзина пользователя с внутренним кодом 3 успешно удалена"; * ?> * * * //пример вызова с автоопределением fUserID * <? * CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID()); * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalebasket/csalebasket__deleteall.e0d06223.php * @author Bitrix */ public static function DeleteAll($FUSER_ID = 0, $bIncOrdered = false) { global $DB, $APPLICATION; $isOrderConverted = \Bitrix\Main\Config\Option::get("main", "~sale_converted_15", 'N'); $bIncOrdered = $bIncOrdered ? True : False; $FUSER_ID = intval($FUSER_ID); if ($FUSER_ID <= 0) { return false; } $arFilter = array("FUSER_ID" => $FUSER_ID); if (!$bIncOrdered) { $arFilter["ORDER_ID"] = "NULL"; } $dbBasket = CSaleBasket::GetList(array(), $arFilter, false, false, array('ID', 'ORDER_ID', 'PRODUCT_ID', 'NAME')); while ($arBasket = $dbBasket->Fetch()) { if ($isOrderConverted == "Y") { /** @var \Bitrix\Sale\Result $r */ $r = \Bitrix\Sale\Compatible\BasketCompatibility::delete($arBasket["ID"]); if (!$r->isSuccess(true)) { foreach ($r->getErrorMessages() as $error) { $APPLICATION->ThrowException($error); } return false; } } else { if (0 < intval($arBasket["ORDER_ID"])) { CSaleOrderChange::AddRecord($arBasket["ORDER_ID"], "BASKET_REMOVED", array("PRODUCT_ID" => $arBasket["PRODUCT_ID"], "NAME" => $arBasket["NAME"])); } $DB->Query("DELETE FROM b_sale_basket_props WHERE BASKET_ID = " . $arBasket["ID"], true); $DB->Query("DELETE FROM b_sale_store_barcode WHERE BASKET_ID = " . $arBasket["ID"], true); $DB->Query("DELETE FROM b_sale_basket WHERE ID = " . $arBasket["ID"], true); } } $_SESSION["SALE_BASKET_NUM_PRODUCTS"][SITE_ID] = 0; return true; }
} $dbRecords = new CDBResult(); $dbRecords->InitFromArray($arHistoryData); $arResult["STATUSES"] = array(); $dbStatusList = CSaleStatus::GetList(array("SORT" => "ASC"), array("LID" => LANGUAGE_ID), false, false, array("ID", "NAME")); while ($arStatusList = $dbStatusList->Fetch()) { $arResult["STATUSES"][htmlspecialcharsbx($arStatusList["ID"])] = htmlspecialcharsbx($arStatusList["NAME"]); } $arResult["PAY_SYSTEMS"] = array(); $dbPaySystemList = CSalePaySystem::GetList(array("SORT" => "ASC"), array()); while ($arPaySystemList = $dbPaySystemList->Fetch()) { $arResult["PAY_SYSTEMS"][$arPaySystemList["ID"]] = htmlspecialcharsbx($arPaySystemList["NAME"]); } $userCache = array(); $deliveryCache = array(); while ($arHistory = $dbRecords->Fetch()) { if (isset($userCache[$arResult["ORDER"]["USER_ID"]])) { $arHistory["USER"] = $userCache[$arResult["ORDER"]["USER_ID"]]; } else { $dbUser = CUser::GetByID($arResult["ORDER"]["USER_ID"]); if ($arUser = $dbUser->Fetch()) { $arHistory["USER"]["LOGIN"] = $arUser["LOGIN"]; $arHistory["USER"]["NAME"] = htmlspecialcharsbx($arUser["NAME"]); $arHistory["USER"]["LAST_NAME"] = htmlspecialcharsbx($arUser["LAST_NAME"]); $userCache[$arResult["ORDER"]["USER_ID"]] = $arHistory["USER"]; } } $arHistory = array_merge($arHistory, CSaleOrderChange::GetRecordDescription($arHistory["TYPE"], $arHistory["DATA"])); $arResult["HISTORY"][] = $arHistory; } $this->IncludeComponentTemplate();
array("id"=>"DATA", "content"=>GetMessage("SOD_HIST_DATA"), "sort"=>"", "default"=>true), ); $lAdmin_tab5->AddHeaders($histdHeader); $arOperations = array(); while ($arChangeRecord = $dbRecords->Fetch()) { $row =& $lAdmin_tab5->AddRow($arChangeRecord["ID"], $arChangeRecord, '', ''); $stmp = MakeTimeStamp($arChangeRecord["DATE_CREATE"], "DD.MM.YYYY HH:MI:SS"); $row->AddField("DATE_CREATE", date("d.m.Y H:i", $stmp)); $row->AddField("USER_ID", GetFormatedUserName($arChangeRecord["USER_ID"], false)); $arRecord = CSaleOrderChange::GetRecordDescription($arChangeRecord["TYPE"], $arChangeRecord["DATA"]); $row->AddField("TYPE", $arRecord["NAME"]); $row->AddField("DATA", htmlspecialcharsbx($arRecord["INFO"])); $arOperations[$arChangeRecord["TYPE"]] = $arRecord["NAME"]; } if($_REQUEST["table_id"]==$sTableID_tab5) $lAdmin_tab5->CheckListMode(); //end get history order list $aTabs = array(); $aTabs[] = array("DIV" => "edit1", "TAB" => GetMessage("SODN_TAB_ORDER"), "TITLE" => GetMessage("SODN_TAB_ORDER_DESCR"), "ICON" => "sale"); $aTabs[] = array("DIV" => "edit3", "TAB" => GetMessage("SODN_TAB_TRANSACT"), "TITLE" => GetMessage("SODN_TAB_TRANSACT_DESCR"), "ICON" => "sale");
function _Update($ID, &$arFields) { global $DB; $ID = (int)$ID; //CSaleBasket::Init(); if (!CSaleBasket::CheckFields("UPDATE", $arFields, $ID)) return false; foreach(GetModuleEvents("sale", "OnBeforeBasketUpdateAfterCheck", true) as $arEvent) if (ExecuteModuleEventEx($arEvent, array($ID, &$arFields))===false) return false; $arOldFields = CSaleBasket::GetByID($ID); $strUpdate = $DB->PrepareUpdate("b_sale_basket", $arFields); if(!empty($strUpdate)) { $strSql = "update b_sale_basket set ".$strUpdate.", DATE_UPDATE = ".$DB->GetNowFunction()." where ID = ".$ID; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); } if (isset($arFields["PROPS"]) && !empty($arFields["PROPS"]) && is_array($arFields["PROPS"])) { $sql = "delete from b_sale_basket_props where BASKET_ID = ".$ID; $bProductXml = false; $bCatalogXml = false; foreach($arFields["PROPS"] as $prop) { if ($prop["CODE"] == "PRODUCT.XML_ID") $bProductXml = true; if ($prop["CODE"] == "CATALOG.XML_ID") $bCatalogXml = true; if ($bProductXml && $bCatalogXml) break; } if (!$bProductXml) $sql .= " and CODE <> 'PRODUCT.XML_ID'"; if (!$bCatalogXml) $sql .= " and CODE <> 'CATALOG.XML_ID'"; $DB->Query($sql, false, "File: ".__FILE__."<br>Line: ".__LINE__); if (!$bProductXml || !$bCatalogXml) { $sql = "delete from b_sale_basket_props where BASKET_ID = ".$ID." and CODE IS NULL"; $DB->Query($sql, false, "File: ".__FILE__."<br>Line: ".__LINE__); } foreach($arFields["PROPS"] as $prop) { if(strlen($prop["NAME"]) > 0) { $arInsert = $DB->PrepareInsert("b_sale_basket_props", $prop); $strSql = "INSERT INTO b_sale_basket_props(BASKET_ID, ".$arInsert[0].") VALUES(".$ID.", ".$arInsert[1].")"; $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); } } } if (isset($arFields["ORDER_ID"]) && (int)$arFields["ORDER_ID"] > 0) CSaleOrderChange::AddRecordsByFields($arFields["ORDER_ID"], $arOldFields, $arFields, array(), "BASKET"); foreach(GetModuleEvents("sale", "OnBasketUpdate", true) as $arEvent) ExecuteModuleEventEx($arEvent, Array($ID, $arFields)); return true; }
function Update($ID, $arFields, $bDateUpdate = true) { global $DB, $USER_FIELD_MANAGER, $CACHE_MANAGER; $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; } } $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 . " "; $res = $DB->Query($strSql, true, "File: " . __FILE__ . "<br>Line: " . __LINE__); if (!$res) { return false; } $USER_FIELD_MANAGER->Update("ORDER", $ID, $arFields); if ($res) { 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_NAME), "EMAIL" => $payerEMail, "SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@" . $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; }
/** * @param $entityName * @param $orderId * @param $type * @param null $id * @param null|Entity $entity * @param array $data */ protected static function addRecord($entityName, $orderId, $type, $id = null, $entity = null, array $data = array()) { if ($entity !== null && ($operationType = static::getOperationType($entityName, $type)) && (!empty($operationType["DATA_FIELDS"]) && is_array($operationType["DATA_FIELDS"]))) { foreach ($operationType["DATA_FIELDS"] as $fieldName) { if (!array_key_exists($fieldName, $data) && ($value = $entity->getField($fieldName))) { $data[$fieldName] = TruncateText($value, 128); } } } \CSaleOrderChange::AddRecord($orderId, $type, $data, $entityName, $id); }