/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global string $DBType */
/** @global CDatabase $DB */
use Bitrix\Main;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Config\Option;
use Bitrix\Sale\Internals\StatusTable;
use Bitrix\Sale;
use \Bitrix\Sale\Exchange\Integration\Admin;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
Loader::includeModule('sale');
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/prolog.php");
\Bitrix\Main\UI\Extension::load('sale.admin_order_list');
// include functions
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/general/admin_tool.php");
$saleModulePermissions = $APPLICATION->GetGroupRight("sale");
$isCanUsePersonalization = \Bitrix\Sale\Configuration::isCanUsePersonalization();
if($saleModulePermissions == "D")
$APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED"));
$LOCAL_SITE_LIST_CACHE = array();
$LOCAL_PERSON_TYPE_CACHE = array();
$LOCAL_PAYED_USER_CACHE = array();
$LOCAL_STATUS_CACHE = array();
Loc::loadMessages(__FILE__);
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
$link = Admin\Link::getInstance();
$publicMode = $adminPage->publicMode;
$arUserGroups = $USER->GetUserGroupArray();
$intUserID = (int)$USER->GetID();
$registry = Sale\Registry::getInstance(Sale\Registry::REGISTRY_TYPE_ORDER);
/** @var Sale\Order $orderClass */
$orderClass = $registry->getOrderClassName();
$isUserResponsible = false;
$arAccessibleSites = array();
$dbAccessibleSites = CSaleGroupAccessToSite::GetList(
array(),
array("GROUP_ID" => $arUserGroups),
false,
false,
array("SITE_ID")
);
while ($arAccessibleSite = $dbAccessibleSites->Fetch())
{
if(!in_array($arAccessibleSite["SITE_ID"], $arAccessibleSites))
$arAccessibleSites[] = $arAccessibleSite["SITE_ID"];
}
$bExport = (isset($_REQUEST['mode']) && $_REQUEST['mode'] == 'excel');
$sTableID = "tbl_sale_order";
$oSort = new CAdminSorting($sTableID, "ID", "desc");
$lAdmin = new CAdminSaleList($sTableID, $oSort);
$runtimeFields = array();
$arFilterFields = array(
"filter_universal",
"filter_is_sync_b24",
"filter_id_from",
"filter_id_to",
"filter_account_number",
"filter_date_from",
"filter_date_to",
"filter_date_update_from",
"filter_date_update_to",
"filter_date_paid_from",
"filter_date_paid_to",
"filter_lang",
"filter_currency",
"filter_price_from",
"filter_price_to",
"filter_status",
"filter_date_status_from",
"filter_by_recommendation",
"filter_date_status_to",
"filter_payed",
"filter_canceled",
"filter_deducted",
"filter_allow_delivery",
"filter_date_allow_delivery_to",
"filter_date_allow_delivery_from",
"filter_marked",
"filter_buyer",
"filter_product_id",
"filter_product_xml_id",
"filter_catalog_xml_id",
"filter_affiliate_id",
"filter_order_use_discounts",
"filter_order_use_coupons",
"filter_discount_coupon",
"filter_person_type",
"filter_user_id",
"filter_user_login",
"filter_user_email",
"filter_group_id",
"filter_sum_paid",
"filter_pay_system",
"filter_delivery_service",
"filter_xml_id",
"filter_tracking_number",
"filter_delivery_doc_date_from",
"filter_delivery_doc_date_to",
"filter_source",
"filter_company_id",
"filter_responsible_id",
);
$arOrderProps = array();
$arOrderPropsCode = array();
$dbProps = \Bitrix\Sale\Internals\OrderPropsTable::getList(
array(
'filter' => array(
'=ACTIVE' => 'Y'
),
'order' => array(
"PERSON_TYPE_ID" => "ASC", "SORT" => "ASC"
),
'select' => array(
"ID", "NAME", "PERSON_TYPE_NAME" => "PERSON_TYPE.NAME", "LID" => "PERSON_TYPE.LID", "PERSON_TYPE_ID", "SORT", "IS_FILTERED", "TYPE", "CODE", "SETTINGS"
),
));
while ($arProps = $dbProps->fetch())
{
$key = "";
$propAdded = false;
if(trim((string)$arProps["CODE"]) !== '')
{
$key = $arProps["CODE"];
if(empty($arOrderPropsCode[$key]))
{
$arOrderPropsCode[$key] = $arProps;
}
$propAdded = true;
}
if (!$propAdded)
{
$key = intval($arProps["ID"]);
if (empty($arOrderProps[$key]))
{
$arOrderProps[$key] = $arProps;
}
}
if($key)
{
if($arProps["IS_FILTERED"] == "Y" && $arProps["TYPE"] != "MULTISELECT" && $arProps["TYPE"] != "FILE")
{
$arFilterFields[] = "filter_prop_".$key;
}
}
}
$lAdmin->InitFilter($arFilterFields);
$filter_lang = trim((string)$filter_lang);
if($filter_lang <> '')
{
if(!in_array($filter_lang, $arAccessibleSites) && $saleModulePermissions < "W")
$filter_lang = "";
}
$arFilter = array();
$arSelectFields = array();
$userCompanyList = array();
if(intval($filter_id_from)>0) $arFilter[">=ID"] = intval($filter_id_from);
if(intval($filter_id_to)>0) $arFilter["<=ID"] = intval($filter_id_to);
if(trim((string)$filter_date_from) !== '')
{
$arFilter[">=DATE_INSERT"] = trim($filter_date_from);
}
if(trim((string)$filter_date_to) !== '')
{
if($arDate = ParseDateTime($filter_date_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if(mb_strlen($filter_date_to) < 11)
{
$arDate["HH"] = 23;
$arDate["MI"] = 59;
$arDate["SS"] = 59;
}
$filter_date_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)), mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
$arFilter["<=DATE_INSERT"] = $filter_date_to;
}
else
{
$filter_date_to = "";
}
}
if(trim((string)$filter_date_update_from) !== '')
{
$arFilter[">=DATE_UPDATE"] = trim($filter_date_update_from);
}
elseif($set_filter!="Y" && $del_filter != "Y" && !$bExport)
{
$filter_date_update_from_DAYS_TO_BACK = Option::get("sale", "order_list_date", 30);
$filter_date_update_from = GetTime(time()-86400*Option::get("sale", "order_list_date", 30));
$arFilter[">=DATE_UPDATE"] = $filter_date_update_from;
}
if(trim((string)$filter_date_update_to) !== '')
{
if($arDate = ParseDateTime($filter_date_update_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if(mb_strlen($filter_date_update_to) < 11)
{
$arDate["HH"] = 23;
$arDate["MI"] = 59;
$arDate["SS"] = 59;
}
$filter_date_update_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)), mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
$arFilter["<=DATE_UPDATE"] = $filter_date_update_to;
}
else
{
$filter_date_update_to = "";
}
}
if(trim((string)$filter_date_paid_from) !== '')
{
$arFilter[">=DATE_PAYED"] = trim($filter_date_paid_from);
}
if(trim((string)$filter_date_paid_to) !== '')
{
if($arDate = ParseDateTime($filter_date_paid_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if(mb_strlen($filter_date_paid_to) < 11)
{
$arDate["HH"] = 23;
$arDate["MI"] = 59;
$arDate["SS"] = 59;
}
$filter_date_paid_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)), mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
$arFilter["<=DATE_PAYED"] = $filter_date_paid_to;
}
else
{
$filter_date_paid_to = "";
}
}
if(trim((string)$filter_date_allow_delivery_from) !== '')
{
$arFilter[">=DATE_ALLOW_DELIVERY"] = trim($filter_date_allow_delivery_from);
}
if(trim((string)$filter_date_allow_delivery_to) !== '')
{
if($arDate = ParseDateTime($filter_date_allow_delivery_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if(mb_strlen($filter_date_allow_delivery_to) < 11)
{
$arDate["HH"] = 23;
$arDate["MI"] = 59;
$arDate["SS"] = 59;
}
$filter_date_allow_delivery_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)), mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
$arFilter["<=DATE_ALLOW_DELIVERY"] = $filter_date_allow_delivery_to;
}
else
{
$filter_date_allow_delivery_to = "";
}
}
if($filter_lang <> '' && $filter_lang!="NOT_REF") $arFilter["=LID"] = trim($filter_lang);
if($filter_currency <> '') $arFilter["CURRENCY"] = trim($filter_currency);
if (isset($filter_status) && !is_array($filter_status) && $filter_status <> '')
{
$filter_status = array($filter_status);
}
if (isset($filter_status) && is_array($filter_status) && count($filter_status) > 0)
{
foreach ($filter_status as $filterStatusIndex => $filterStatusValue)
{
$filterStatusValue = trim($filterStatusValue);
if (strval($filterStatusValue) != '')
{
$arFilter["=STATUS_ID"][] = $filterStatusValue;
}
}
}
if ($filter_by_recommendation <> '') $arFilter["=BY_RECOMMENDATION"] = trim($filter_by_recommendation);
if($filter_date_status_from <> '') $arFilter[">=DATE_STATUS"] = trim($filter_date_status_from);
if($filter_date_status_to <> '')
{
if($arDate = ParseDateTime($filter_date_status_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if(mb_strlen($filter_date_status_to) < 11)
{
$arDate["HH"] = 23;
$arDate["MI"] = 59;
$arDate["SS"] = 59;
}
$filter_date_status_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)), mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
$arFilter["<=DATE_STATUS"] = $filter_date_status_to;
}
else
{
$filter_date_status_to = "";
}
}
if($filter_is_sync_b24 <> '') $arFilter["=IS_SYNC_B24"] = trim($filter_is_sync_b24);
if($filter_payed <> '') $arFilter["=PAYED"] = trim($filter_payed);
if($filter_canceled <> '') $arFilter["=CANCELED"] = trim($filter_canceled);
if($filter_deducted <> '') $arFilter["=DEDUCTED"] = trim($filter_deducted);
if($filter_allow_delivery <> '') $arFilter["=ALLOW_DELIVERY"] = trim($filter_allow_delivery);
if($filter_marked <> '') $arFilter["=MARKED"] = trim($filter_marked);
if($filter_buyer <> '') $arFilter["%BUYER"] = trim($filter_buyer);
if($filter_user_login <> '') $arFilter["USER.LOGIN"] = trim($filter_user_login);
if($filter_user_email <> '') $arFilter["USER.EMAIL"] = trim($filter_user_email);
if(intval($filter_user_id)>0) $arFilter["=USER_ID"] = intval($filter_user_id);
if (!empty($filter_group_id) && is_array($filter_group_id))
{
Main\Type\Collection::normalizeArrayValuesByInt($filter_group_id);
if (!empty($filter_group_id))
{
$whereExpression = '(' . implode(', ', $filter_group_id) . ')';
$runtimeFields['REQUIRED_UG_PRESENTED'] = [
'data_type' => 'boolean',
'expression' => [
'case when exists (select USER_ID from b_user_group where USER_ID = %s and GROUP_ID in '
. $whereExpression . ') then 1 else 0 end'
,
'USER_ID',
],
];
$arFilter['=REQUIRED_UG_PRESENTED'] = 1;
}
}
if(intval($filter_affiliate_id)>0) $arFilter["AFFILIATE_ID"] = intval($filter_affiliate_id);
if(isset($filter_discount_coupon) && $filter_discount_coupon <> '') $arFilter["=ORDER_COUPONS.COUPON"] = trim($filter_discount_coupon);
if (isset($filter_order_use_discounts))
{
switch ($filter_order_use_discounts)
{
case 'Y':
$runtimeFields["REQUIRED_DISCOUNT_RULES"] = [
'data_type' => 'boolean',
'expression' => [
'CASE WHEN EXISTS (SELECT ID FROM b_sale_order_rules WHERE ORDER_ID = %s) THEN 1 ELSE 0 END',
'ID'
]
];
$arFilter['=REQUIRED_DISCOUNT_RULES'] = 1;
break;
case 'N':
$arFilter['=ORDER_DISCOUNT_RULES.ID'] = null;
break;
}
}
if (isset($filter_order_use_coupons))
{
switch ($filter_order_use_coupons)
{
case 'Y':
$runtimeFields["REQUIRED_COUPONS"] = [
'data_type' => 'boolean',
'expression' => [
'CASE WHEN EXISTS (SELECT ID FROM b_sale_order_coupons WHERE ORDER_ID = %s) THEN 1 ELSE 0 END',
'ID'
]
];
$arFilter['=REQUIRED_COUPONS'] = 1;
break;
case 'N':
$arFilter['=ORDER_COUPONS.ID'] = null;
break;
}
}
if(floatval($filter_price_from)>0) $arFilter[">=PRICE"] = floatval($filter_price_from);
if(floatval($filter_price_to)>0) $arFilter["<=PRICE"] = floatval($filter_price_to);
if($filter_xml_id <> '') $arFilter["%XML_ID"] = trim($filter_xml_id);
if($filter_tracking_number <> '') $arFilter["%SHIPMENT.TRACKING_NUMBER"] = trim($filter_tracking_number);
if(trim((string)$filter_delivery_doc_date_from) !== '')
{
$arFilter[">=SHIPMENT.DELIVERY_DOC_DATE"] = trim($filter_delivery_doc_date_from);
}
if(trim((string)$filter_delivery_doc_date_to) !== '')
{
if($arDate = ParseDateTime($filter_delivery_doc_date_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if(mb_strlen($filter_delivery_doc_date_to) < 11)
{
$arDate["HH"] = 23;
$arDate["MI"] = 59;
$arDate["SS"] = 59;
}
$filter_delivery_doc_date_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)), mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
$arFilter["<=SHIPMENT.DELIVERY_DOC_DATE"] = $filter_delivery_doc_date_to;
}
else
{
$filter_delivery_doc_date_to = "";
}
}
if(isset($filter_universal) && $filter_universal <> '')
$arFilter["NAME_SEARCH"] = trim($filter_universal);
if($filter_account_number <> '') $arFilter["ACCOUNT_NUMBER"] = trim($filter_account_number);
if($filter_sum_paid <> '')
{
if($filter_sum_paid == "Y")
$arFilter[">SUM_PAID"] = 0;
else
$arFilter["<=SUM_PAID"] = 0;
}
if(isset($filter_person_type) && is_array($filter_person_type) && count($filter_person_type) > 0)
{
foreach ($filter_person_type as $filterPersonTypeId)
{
if(intval($filterPersonTypeId) > 0)
$arFilter["=PERSON_TYPE_ID"][] = intval($filterPersonTypeId);
}
}
if (isset($filter_source))
{
$filter_source = (int)$filter_source;
if ($filter_source)
{
$arFilter["=SOURCE.TRADING_PLATFORM_ID"] = $filter_source !== -1 ? $filter_source : "";
}
}
if(!empty($filter_pay_system) && is_array($filter_pay_system))
{
$whereExpression = "";
foreach ($filter_pay_system as $filterPaySystemId)
{
if(intval($filterPaySystemId) <= 0)
continue;
if($whereExpression == "")
$whereExpression .= "(";
else
$whereExpression .= " OR ";
$whereExpression .= "PAY_SYSTEM_ID = ".intval($filterPaySystemId);
}
if($whereExpression <> '')
{
$whereExpression .= ")";
$runtimeFields["REQUIRED_PS_PRESENTED"] = array(
'data_type' => 'boolean',
'expression' => array(
'CASE WHEN EXISTS (SELECT ID FROM b_sale_order_payment WHERE ORDER_ID = %s AND '.$whereExpression.') THEN 1 ELSE 0 END',
'ID'
)
);
$arFilter["=REQUIRED_PS_PRESENTED"] = 1;
}
}
if(!empty($filter_tracking_number) && $filter_tracking_number <> '')
{
$runtimeFields["REQUIRED_PS_PRESENTED"] = array(
'data_type' => 'boolean',
'expression' => array(
'CASE WHEN EXISTS (SELECT ID FROM b_sale_order_payment WHERE ORDER_ID = %s AND '.$whereExpression.') THEN 1 ELSE 0 END',
'ID'
)
);
}
if(!empty($filter_delivery_service) && is_array($filter_delivery_service))
{
$countFilterDeliveryService = count($filter_delivery_service);
$whereExpression = "";
foreach ($filter_delivery_service as $filterDeliveryServiceId)
{
if(intval($filterDeliveryServiceId) <= 0)
continue;
if($whereExpression == "")
$whereExpression .= "(";
else
$whereExpression .= " OR ";
$whereExpression .= "DELIVERY_ID = ".intval($filterDeliveryServiceId);
}
if(strval($whereExpression) != "")
{
$whereExpression .= ")";
$runtimeFields["REQUIRED_DLV_PRESENTED"] = array(
'data_type' => 'boolean',
'expression' => array(
'CASE WHEN EXISTS (SELECT ID FROM b_sale_order_delivery WHERE ORDER_ID = %s AND `SYSTEM`="N" AND '.$whereExpression.') THEN 1 ELSE 0 END',
'ID'
)
);
$arFilter["=REQUIRED_DLV_PRESENTED"] = 1;
}
}
if(!empty($filter_product_id) || !empty($filter_product_xml_id)|| !empty($filter_catalog_xml_id))
{
$whereExpression = "";
if (intval($filter_product_id) > 0)
{
$whereExpression .= "(PRODUCT_ID = ".intval($filter_product_id);
}
$filterProductFields = [
'PRODUCT_XML_ID' => $filter_product_xml_id,
'CATALOG_XML_ID' => $filter_catalog_xml_id
];
foreach ($filterProductFields as $code=>$filterValue)
{
if (trim((string)$filterValue) !== "")
{
if ($whereExpression == "")
{
$whereExpression .= "(";
}
else
{
$whereExpression .= " AND ";
}
/** @var \Bitrix\Main\DB\Connection $connection */
$connection = \Bitrix\Main\Application::getConnection();
/** @var \Bitrix\Main\DB\SqlHelper $sqlHelper */
$sqlHelper = $connection->getSqlHelper();
$whereExpression .= "{$code} = '".$sqlHelper->forSql($filterValue)."'";
}
}
if(strval($whereExpression) != "")
{
$whereExpression .= ")";
$runtimeFields["REQUIRED_PRODUCT_PRESENTED"] = array(
'data_type' => 'boolean',
'expression' => array(
'CASE WHEN EXISTS (SELECT ID FROM b_sale_basket WHERE ORDER_ID = %s AND '.$whereExpression.') THEN 1 ELSE 0 END',
'ID'
)
);
$arFilter["=REQUIRED_PRODUCT_PRESENTED"] = 1;
}
}
$filterOrderPropValue = array();
$filterOrderProps = array();
foreach ($arOrderProps as $key => $value)
{
if($value["IS_FILTERED"] == "Y" && $value["TYPE"] != "MULTIPLE")
{
$tmp = trim(${"filter_prop_".$key});
if($tmp <> '')
{
if($value["TYPE"]=="STRING" && !preg_match("/^\d+$/", $tmp))
$filterName = "%PROPERTY_VALUE_".$key;
else
$filterName = "PROPERTY_VALUE_".$key;
$filterOrderProps[$filterName] = $tmp;
$filterOrderPropValue[$key] = $tmp;
}
}
}
foreach ($arOrderPropsCode as $key => $value)
{
if($value["IS_FILTERED"] == "Y" && $value["TYPE"] != "MULTIPLE")
{
$tmp = trim((string)${"filter_prop_".$key});
if($tmp <> '')
{
if($value["TYPE"]=="STRING" && !preg_match("/^\d+$/", $tmp))
$filterName = "%PROPERTY_VAL_BY_CODE_".$key;
else
$filterName = "PROPERTY_VAL_BY_CODE_".$key;
$filterOrderProps[$filterName] = $tmp;
$filterOrderPropValue[$key] = $tmp;
}
}
}
if($saleModulePermissions < "W")
{
if($filter_lang == '' && count($arAccessibleSites) > 0)
$arFilter["=LID"] = $arAccessibleSites;
}
$allowedStatusesView = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('view'));
if($saleModulePermissions == "P")
{
$userCompanyList = Sale\Services\Company\Manager::getUserCompanyList($USER->GetID());
$arFilter[] = array(
"LOGIC" => "OR",
'=RESPONSIBLE_ID' => $USER->GetID(),
'=COMPANY_ID' => $userCompanyList,
);
$arSelectFields[] = 'RESPONSIBLE_ID';
$arSelectFields[] = 'COMPANY_ID';
}
$companyListNames = array();
$dbRes = \Bitrix\Sale\Services\Company\Manager::getList(array(
'select' => array('ID', 'NAME'),
'order' => array('NAME' => 'ASC')
));
while($row = $dbRes->fetch())
$companyListNames[$row['ID']] = htmlspecialcharsbx($row['NAME']);
if(intval($filter_company_id)>0) $arFilter["COMPANY_ID"] = intval($filter_company_id);
if(intval($filter_responsible_id)>0) $arFilter["RESPONSIBLE_ID"] = intval($filter_responsible_id);
if($saleModulePermissions < "W")
{
if(!$arFilter["=STATUS_ID"])
$arFilter["=STATUS_ID"] = array();
$intersected = array_intersect($arFilter["=STATUS_ID"], $allowedStatusesView);
if(!empty($arFilter["=STATUS_ID"]))
{
if(empty($intersected))
{
$arFilter[]["=STATUS_ID"] = $arFilter["=STATUS_ID"];
$arFilter[]["=STATUS_ID"] = $allowedStatusesView;
unset($arFilter["=STATUS_ID"], $arFilter["=STATUS_ID"]);
}
else
{
$arFilter["=STATUS_ID"] = $intersected;
}
}
else
{
$arFilter["=STATUS_ID"] = $allowedStatusesView;
}
}
if (!empty($_REQUEST['OID']) && is_array($_REQUEST['OID']))
{
foreach ($_REQUEST['OID'] as $orderId)
{
if (intval($orderId) > 0)
{
$arFilter['=ID'][] = intval($orderId);
}
}
}
$arFilterTmp = $arFilter;
if($lAdmin->EditAction() && $saleModulePermissions >= "U")
{
foreach ($FIELDS as $ID => $arFields)
{
$ID = (int)$ID;
$isOrderNeedSave = false;
if(!$lAdmin->IsUpdated($ID))
continue;
/** @var \Bitrix\Sale\Order $editOrder */
$editOrder = $orderClass::load($ID);
if($editOrder)
{
if(array_key_exists("CANCELED", $arFields)
&& ($arFields["CANCELED"] == "Y" || $arFields["CANCELED"] == "N")
&& $arFields["CANCELED"] != $editOrder->getField("CANCELED"))
{
if(CSaleOrder::CanUserCancelOrder($ID, $arUserGroups, $intUserID))
{
/** @var \Bitrix\Sale\Result $res */
$res = $editOrder->setField("CANCELED", $arFields["CANCELED"]);
if($res->isSuccess())
{
$isOrderNeedSave = true;
}
else
{
$errMessages = $res->getErrorMessages();
if(count($errMessages) > 0)
$lAdmin->AddUpdateError(implode("
\n", $errMessages), $ID);
else
$lAdmin->AddUpdateError(Loc::getMessage("SOA_ERROR_CANCEL"), $ID);
}
}
else
{
$lAdmin->AddUpdateError(Loc::getMessage("SOA_PERMS_CANCEL"), $ID);
}
}
if(array_key_exists("IS_SYNC_B24", $arFields)
&& ($arFields["IS_SYNC_B24"] == "Y" || $arFields["IS_SYNC_B24"] == "N")
&& $arFields["IS_SYNC_B24"] != $editOrder->getField("IS_SYNC_B24"))
{
/** @var \Bitrix\Sale\Result $res */
$res = $editOrder->setField("IS_SYNC_B24", $arFields["IS_SYNC_B24"]);
if($res->isSuccess())
{
$isOrderNeedSave = true;
}
}
$statusId = $editOrder->getField("STATUS_ID");
if(array_key_exists("STATUS_ID", $arFields)
&& $arFields["STATUS_ID"] <> ''
&& $arFields["STATUS_ID"] != $statusId)
{
$statusesList = \Bitrix\Sale\OrderStatus::getAllowedUserStatuses(
$USER->GetID(),
\Bitrix\Sale\OrderStatus::getInitialStatus()
);
if(array_key_exists($statusId, $statusesList))
{
$res = $editOrder->setField("STATUS_ID", $arFields["STATUS_ID"]);
if($res->isSuccess())
{
$isOrderNeedSave = true;
}
else
{
$errMessages = $res->getErrorMessages();
if(count($errMessages) > 0)
$lAdmin->AddUpdateError(implode("
\n", $errMessages), $ID);
else
$lAdmin->AddUpdateError(Loc::getMessage("SOA_ERROR_STATUS"), $ID);
}
}
else
{
$lAdmin->AddUpdateError(Loc::getMessage("SOA_PERMS_STATUS"), $ID);
}
}
if($isOrderNeedSave)
{
$res = $editOrder->save();
Sale\Provider::resetTrustData($editOrder->getSiteId());
if(!$res->isSuccess())
{
$errMessages = $res->getErrorMessages();
if(count($errMessages) > 0)
$lAdmin->AddUpdateError(implode("
\n", $errMessages), $ID);
else
$lAdmin->AddUpdateError(Loc::getMessage("SOA_ERROR_CANCEL"), $ID);
}
}
}
else
{
$lAdmin->AddUpdateError(Loc::getMessage("SOA_NO_ORDER"), $ID);
}
}
}
$bShowBasketProps = ((string)\Bitrix\Main\Config\Option::get('sale', 'show_basket_props_in_order_list') == 'Y');
//Filters by foreign entities
//User params
if(isset($arFilterTmp["NAME_SEARCH"]) && $arFilterTmp["NAME_SEARCH"] <> '')
{
$nameSearch = $arFilterTmp["NAME_SEARCH"];
$arFilterTmp[] = array(
"LOGIC" => "OR",
"%USER.LOGIN" => $nameSearch,
"%USER.NAME" => $nameSearch,
"%USER.LAST_NAME" => $nameSearch,
"%USER.SECOND_NAME" => $nameSearch,
"%USER.EMAIL" => $nameSearch,
);
}
unset($arFilterTmp["NAME_SEARCH"]);
$propIterator = 0;
//Order props params
foreach ($arOrderPropsCode as $key => $value)
{
if($value["IS_FILTERED"] != "Y" || $value["TYPE"] == "MULTIPLE")
continue;
if(
(isset($filterOrderProps["PROPERTY_VAL_BY_CODE_".$key]) && $filterOrderProps["PROPERTY_VAL_BY_CODE_".$key] <> '')
|| (isset($filterOrderProps["%PROPERTY_VAL_BY_CODE_".$key]) && $filterOrderProps["%PROPERTY_VAL_BY_CODE_".$key] <> '')
)
{
$propIterator++;
$runtimeFields['PROP_'.$propIterator] = array(
'data_type' => 'Bitrix\Sale\Internals\OrderPropsValueTable',
'reference' => array(
'ref.ORDER_ID' => 'this.ID',
),
'join_type' => 'inner'
);
$arFilterTmp["=PROP_".$propIterator.".CODE"] = $key;
if (isset($filterOrderProps["%PROPERTY_VAL_BY_CODE_".$key]))
$arFilterTmp["?PROP_".$propIterator.".VALUE"] = $filterOrderPropValue[$key];
else
$arFilterTmp["PROP_".$propIterator.".VALUE"] = $filterOrderPropValue[$key];
}
}
foreach ($arOrderProps as $key => $value)
{
$propIterator++;
if($value["IS_FILTERED"] != "Y" || $value["TYPE"] == "MULTIPLE")
continue;
if(
(isset($filterOrderProps["PROPERTY_VALUE_".$key]) && $filterOrderProps["PROPERTY_VALUE_".$key] <> '')
|| (isset($filterOrderProps["%PROPERTY_VALUE_".$key]) && $filterOrderProps["%PROPERTY_VALUE_".$key] <> '')
)
{
$runtimeFields['PROP_'.$propIterator] = array(
'data_type' => 'Bitrix\Sale\Internals\OrderPropsValueTable',
'reference' => array(
'ref.ORDER_ID' => 'this.ID',
),
'join_type' => 'inner'
);
$arFilterTmp["=PROP_".$propIterator.".ORDER_PROPS_ID"] = $key;
if (isset($filterOrderProps["%PROPERTY_VALUE_".$key]))
$arFilterTmp["?PROP_".$propIterator.".VALUE"] = $filterOrderPropValue[$key];
else
$arFilterTmp["PROP_".$propIterator.".VALUE"] = $filterOrderPropValue[$key];
}
}
foreach(GetModuleEvents("sale", "OnOrderListFilter", true) as $arEvent)
$arFilterTmp = ExecuteModuleEventEx($arEvent, array($arFilterTmp));
if(
array_key_exists('=SOURCE.TRADING_PLATFORM_ID', $arFilterTmp)
|| in_array('SOURCE_NAME', $arSelectFields)
|| $by == 'SOURCE_NAME')
{
addSourceNameToRuntimeAndSelect($runtimeFields, $arSelectFields);
}
$arID = array();
if(($arID = $lAdmin->GroupAction()) && $saleModulePermissions >= "P")
{
$arAffectedOrders = array();
$forAll =($_REQUEST['action_target'] == 'selected');
if($forAll)
{
$filter = $arFilterTmp;
$arID = array();
}
else
{
$filter = array(
"ID" => $arID,
"=STATUS_ID" => $allowedStatusesView
);
}
if ($by === 'USER_EMAIL')
{
$by = 'USER.EMAIL';
}
$dbOrderList = \Bitrix\Sale\Internals\OrderTable::getList(array(
'order' => [$by => $order],
'filter' => $filter,
'select' => array_merge(["ID", "PERSON_TYPE_ID", "PAYED", "CANCELED", "DEDUCTED", "STATUS_ID"], $arSelectFields),
'runtime' => $runtimeFields
));
while ($arOrderList = $dbOrderList->fetch())
{
if($forAll)
$arID[] = $arOrderList['ID'];
$arAffectedOrders[$arOrderList["ID"]] = $arOrderList;
}
foreach ($arID as $ID)
{
if($ID == '')
continue;
if($_REQUEST['action'] != "unlock" && mb_substr($_REQUEST['action'], 0, mb_strlen("status_")) != "status_")
{
/** @var \Bitrix\Sale\Order $saleOrder */
if(!($saleOrder = $orderClass::load($ID)))
{
$lAdmin->AddGroupError(Loc::getMessage("SO_NO_ORDER", array("#ID#" => $ID)));
continue;
}
}
if(CSaleOrder::IsLocked($ID, $lockedBY, $dateLock) && $_REQUEST['action'] != "unlock")
{
$lAdmin->AddGroupError(str_replace("#DATE#", "$dateLock", str_replace("#ID#", "$lockedBY", Loc::getMessage("SOE_ORDER_LOCKED"))), $ID);
}
else
{
$isOrderSaved = false;
switch ($_REQUEST['action'])
{
case "delete":
$allowedStatusesDelete = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('delete'));
if(!in_array($saleOrder->getField("STATUS_ID"), $allowedStatusesDelete))
{
$lAdmin->AddGroupError(Loc::getMessage("SO_NO_PERMS2DEL", array("#ID#" => $ID)), $ID);
break;
}
try
{
$res = $orderClass::delete($ID);
}
catch (Exception $e)
{
$res = $orderClass::deleteNoDemand($ID);
}
if (!$res->isSuccess())
{
$lAdmin->AddGroupError(implode("
\n", $res->getErrorMessages()));
}
break;
case "unlock":
CSaleOrder::UnLock($ID);
break;
case "cancel":
$allowedStatusesCancel = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('cancel'));
if(!in_array($saleOrder->getField("STATUS_ID"), $allowedStatusesCancel))
{
$lAdmin->AddGroupError(Loc::getMessage("SOA_PERMS_CANCEL_GROUP", array("#ID#" => $ID)), $ID);
break;
}
if($saleOrder->getField("CANCELED") == "Y")
{
$lAdmin->AddGroupError(Loc::getMessage("SOA_PERMS_CANCEL_GROUP_CANCEL", array("#ID#" => $ID)), $ID);
break;
}
/** @var \Bitrix\Sale\Result $res */
$res = $saleOrder->setField("CANCELED", "Y");
if(!$res->isSuccess())
{
$lAdmin->AddGroupError(implode("
\n", $res->getErrorMessages()), $ID);
break;
}
$isOrderSaved = true;
$res = $saleOrder->save();
if(!$res->isSuccess())
$lAdmin->AddGroupError(implode("
\n", $res->getErrorMessages()), $ID);
break;
case "cancel_n":
$allowedStatusesCancel = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('cancel'));
if(!in_array($saleOrder->getField("STATUS_ID"), $allowedStatusesCancel))
{
$lAdmin->AddGroupError(Loc::getMessage("SOA_PERMS_CANCEL_GROUP", array("#ID#" => $ID)), $ID);
break;
}
if($saleOrder->getField("CANCELED") == "N")
{
$lAdmin->AddGroupError(Loc::getMessage("SOA_PERMS_CANCEL_GROUP_CANCEL_N", array("#ID#" => $ID)), $ID);
break;
}
/** @var \Bitrix\Sale\Result $res */
$res = $saleOrder->setField("CANCELED", "N");
if(!$res->isSuccess())
{
$lAdmin->AddGroupError(implode("
\n", $res->getErrorMessages()), $ID);
break;
}
$isOrderSaved = true;
$res = $saleOrder->save();
if(!$res ->isSuccess())
$lAdmin->AddGroupError(implode("
\n", $res->getErrorMessages()), $ID);
break;
case "archive":
$allowedStatusesDelete = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('delete'));
if(!in_array($saleOrder->getField("STATUS_ID"), $allowedStatusesDelete))
{
$lAdmin->AddGroupError(Loc::getMessage("SO_NO_PERMS2ARCHIVE", array("#ID#" => $ID)), $ID);
break;
}
$result = Sale\Archive\Manager::archiveOrders(["ID" => $ID], 1);
if ($result->isSuccess())
{
$warnings = $result->getWarningMessages();
if (empty($warnings))
{
$lAdmin->AddActionSuccessMessage(Loc::getMessage("SO_ORDER_ARCHIVED", array("#ID#" => $ID)));
}
else
{
foreach ($warnings as $message)
$lAdmin->AddGroupError($message);
}
}
else
{
foreach ($result->getErrorMessages() as $error)
$lAdmin->AddGroupError($error);
}
break;
case "allow_delivery":
case "allow_delivery_n":
/** @var \Bitrix\Sale\Shipment $shipment */
foreach ($saleOrder->getShipmentCollection() as $shipment)
{
if(!$shipment->isSystem())
{
$shpMsg = Loc::getMessage(
'SALE_ORDER_SHIPMENT_N',
array(
'##ORDER_N##' => $saleOrder->getField('ACCOUNT_NUMBER'),
'##SHIPMENT_ID##' => $shipment->getId()
));
$allowedDeliveryStatusesUpdate = \Bitrix\Sale\DeliveryStatus::getStatusesUserCanDoOperations($USER->GetID(), array('update'));
$allowUpdate = in_array($shipment->getField("STATUS_ID"), $allowedDeliveryStatusesUpdate);
if(!$allowUpdate)
{
$lAdmin->AddGroupError(Loc::getMessage('SALE_SHIPMENT_ALLOW_DELIVERY_PERMS_ERR').'. '.$shpMsg);
continue;
}
if($_REQUEST['action'] == 'allow_delivery')
$setResult = $shipment->allowDelivery();
else
$setResult = $shipment->disallowDelivery();
if ($setResult->isSuccess())
{
$warnings = $setResult->getWarningMessages();
if (empty($warnings))
{
if($_REQUEST['action'] == 'allow_delivery')
$mess = Loc::getMessage('SOA_SHIPMENTS_ALLOW_DELIVERY');
else
$mess = Loc::getMessage('SOA_SHIPMENTS_NOT_ALLOW_DELIVERY');
$lAdmin->AddActionSuccessMessage($mess.'. '.$shpMsg);
}
else
{
foreach ($warnings as $message)
$lAdmin->AddGroupError($message.' '.$shpMsg);
}
$isOrderSaved = true;
$saveResult = $saleOrder->save();
if (!$saveResult->isSuccess())
$lAdmin->AddGroupError(join("\n", $saveResult->getErrorMessages()).' '.$shpMsg);
}
else
{
$serResultMessage = $setResult->getErrorMessages();
if (!empty($serResultMessage))
$lAdmin->AddGroupError(join("\n", $serResultMessage.' '.$shpMsg));
else
$lAdmin->AddGroupError(Loc::getMessage('SALE_SHIPMENT_ALLOW_DELIVERY_ERR').'. '.$shpMsg);
}
}
}
break;
case "deducted":
case "deducted_n":
/** @var \Bitrix\Sale\Shipment $shipment */
foreach ($saleOrder->getShipmentCollection() as $shipment)
{
if(!$shipment->isSystem())
{
$shpMsg = Loc::getMessage(
'SALE_ORDER_SHIPMENT_N',
array(
'##ORDER_N##' => $saleOrder->getField('ACCOUNT_NUMBER'),
'##SHIPMENT_ID##' => $shipment->getId()
));
$allowedDeliveryStatusesUpdate = \Bitrix\Sale\DeliveryStatus::getStatusesUserCanDoOperations($USER->GetID(), array('deduction'));
$allowUpdate = in_array($shipment->getField("STATUS_ID"), $allowedDeliveryStatusesUpdate);
if(!$allowUpdate)
{
$lAdmin->AddGroupError(Loc::getMessage('SALE_SHIPMENT_DEDUCTED_PERMS_ERR').'. '.$shpMsg);
continue;
}
$setResult = $shipment->setField('DEDUCTED', ($_REQUEST['action'] == 'deducted' ? 'Y' : 'N'));
if ($setResult->isSuccess())
{
$warningsList = array();
$hasErrors = false;
$warnings = $setResult->getWarningMessages();
$hasWarnings = false;
if (!empty($warnings))
{
foreach ($warnings as $message)
{
$warningsList[] = $message.' '.$shpMsg;
}
}
$isOrderSaved = true;
$saveResult = $saleOrder->save();
if (!$saveResult->isSuccess())
{
$hasErrors = true;
$lAdmin->AddGroupError(join("\n", $saveResult->getErrorMessages()).' '.$shpMsg);
}
if(empty($warnings) && !$hasErrors)
{
if($_REQUEST['action'] == 'deducted')
$mess = Loc::getMessage('SALE_SHIPMENT_DEDUCTED');
else
$mess = Loc::getMessage('SALE_SHIPMENT_DEDUCTED_N');
$lAdmin->AddActionSuccessMessage($mess.'. '.$shpMsg);
}
else
{
foreach ($warnings as $message)
{
$warningsList[] = $message.' '.$shpMsg;
}
$warningsList = array_unique($warningsList);
foreach ($warningsList as $warning)
{
$lAdmin->AddGroupError($warning);
}
}
}
else
{
$serResultMessage = $setResult->getErrorMessages();
if (!empty($serResultMessage))
$lAdmin->AddGroupError(join("\n", $serResultMessage).' '.$shpMsg);
else
$lAdmin->AddGroupError(Loc::getMessage('SALE_SHIPMENT_ALLOW_DELIVERY_ERR').'. '.$shpMsg);
if ($setResult->hasWarnings())
{
$isOrderSaved = true;
$saveResult = $saleOrder->save();
}
}
}
}
break;
case "update_payment_status":
/** @var \Bitrix\Sale\Payment $payment */
foreach ($saleOrder->getPaymentCollection() as $payment)
{
$payMsg = Loc::getMessage(
'SALE_ORDER_PAYMENT_N',
array(
'##ORDER_N##' => $saleOrder->getField('ACCOUNT_NUMBER'),
'##PAYMENT_ID##' => $payment->getId()
));
$allowedStatusesView = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('view'));
$allowView = in_array($saleOrder->getField("STATUS_ID"), $allowedStatusesView);
if(!$allowView)
{
$lAdmin->AddGroupError(Loc::getMessage('SALE_UPDATE_PAYMENT_STATUS_PERMS_ERR').'. '.$payMsg);
continue;
}
/** @var Sale\PaySystem\Service $paySystem */
$paySystem = $payment->getPaySystem();
if(!$paySystem)
{
$lAdmin->AddGroupError(Loc::getMessage('SALE_UPDATE_PAYMENT_STATUS_PS_NOT_FOUND').'. '.$payMsg);
continue;
}
if(!$paySystem->isCheckable())
{
$lAdmin->AddActionSuccessMessage(
Loc::getMessage(
'SALE_UPDATE_PAYMENT_STATUS_PS_NOT_ABLE',
array('##PS_NAME##' => $paySystem->getField('NAME'))
).'. '.$payMsg
);
continue;
}
$setResult = $paySystem->check($payment);
if (!$setResult->isSuccess())
$lAdmin->AddGroupError(join('\n', $setResult->getErrorMessages()));
else
$lAdmin->AddActionSuccessMessage(Loc::getMessage('SALE_UPDATE_PAYMENT_STATUS_DONE').'. '.$payMsg);
}
break;
case "paid":
case "paid_n":
/** @var \Bitrix\Sale\Payment $payment */
foreach ($saleOrder->getPaymentCollection() as $payment)
{
$payMsg = Loc::getMessage(
'SALE_ORDER_PAYMENT_N',
array(
'##ORDER_N##' => $saleOrder->getField('ACCOUNT_NUMBER'),
'##PAYMENT_ID##' => $payment->getId()
));
$allowedStatusesUpdate = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('payment'));
$allowUpdate = in_array($saleOrder->getField("STATUS_ID"), $allowedStatusesUpdate);
if(!$allowUpdate)
{
$lAdmin->AddGroupError(Loc::getMessage('SALE_UPDATE_PAYMENT_STATUS_PERMS_ERR').'. '.$payMsg);
continue;
}
$res = $payment->setPaid($_REQUEST['action'] == 'paid' ? 'Y' : 'N');
if (!$res->isSuccess())
{
$lAdmin->AddGroupError(join("\n", $res->getErrorMessages()));
}
elseif ($res->hasWarnings())
{
$lAdmin->AddGroupError(join("\n", $res->getWarningMessages()));
}
else
{
$isOrderSaved = true;
$res = $saleOrder->save();
if (!$res->isSuccess())
{
$lAdmin->AddGroupError(join("\n", $res->getErrorMessages()));
}
else
{
if($_REQUEST['action'] == 'paid')
$msg = Loc::getMessage('SALE_ORDER_PAID_SUCCESS');
else
$msg = Loc::getMessage('SALE_ORDER_PAID_SUCCESS_N');
$lAdmin->AddActionSuccessMessage($msg.'. '.$payMsg);
}
}
}
break;
case "delivery_requests":
$shipmentIds = array();
$dbRes = Sale\Internals\ShipmentTable::getList(array(
'filter' => array('=ORDER_ID' => $arID, '!=SYSTEM' => 'Y'),
'select' => array('ID')
));
while($row = $dbRes->fetch())
$shipmentIds[] = $row['ID'];
$_SESSION["SALE_DELIVERY_REQUEST_SHIPMENT_IDS"] = $shipmentIds;
echo '';
die();
break;
default:
if(mb_substr($_REQUEST['action'], 0, mb_strlen("status_")) == "status_")
{
$statusID = mb_substr($_REQUEST['action'], mb_strlen("status_"));
if($statusID <> '')
{
$resStatus = StatusTable::getList(array(
'select' => array('ID', 'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME'),
'filter' => array(
'=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => LANGUAGE_ID,
'=ID' => $statusID
),
));
if($arStatus = $resStatus->fetch())
{
$allowedStatusesTo = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('to'));
if(in_array($statusID, $allowedStatusesTo))
{
if($arAffectedOrders[$ID]["STATUS_ID"] != $statusID)
{
$saleOrder = $orderClass::load($ID);
$res = $saleOrder->setField("STATUS_ID", $statusID);
if(!$res->isSuccess())
{
$errMsgs = $res->getErrorMessages();
if(count($errMsgs) > 0)
$lAdmin->AddGroupError(Loc::getMessage("SOA_ERROR_STATUS", array("#ID#" => $ID, "#STATUS#" => $arStatus["NAME"])).": ".implode("
\n", $errMsgs), $ID);
else
$lAdmin->AddGroupError(Loc::getMessage("SOA_ERROR_STATUS", array("#ID#" => $ID, "#STATUS#" => $arStatus["NAME"])), $ID);
}
else
{
$isOrderSaved = true;
$res = $saleOrder->save();
if(!$res ->isSuccess())
$lAdmin->AddGroupError(implode("
\n", $res->getErrorMessages()), $ID);
}
}
else
{
$lAdmin->AddGroupError(Loc::getMessage("SOA_ERROR_STATUS_ALREADY", Array("#ID#" => $ID, "#STATUS#" => $arStatus["NAME"])), $ID);
}
}
else
{
$lAdmin->AddGroupError(Loc::getMessage("SOA_PERMS_STATUS_GROUP", Array("#ID#" => $ID, "#STATUS#" => $arStatus["NAME"])), $ID);
}
}
}
}
break;
}
if ($isOrderSaved)
{
Sale\Provider::resetTrustData($saleOrder->getSiteId());
}
}
}
}
$arColumn2Field = array(
"ID" => array("ID"),
"ACCOUNT_NUMBER" => array("ACCOUNT_NUMBER"),
"LID" => array("LID"),
"PERSON_TYPE" => array("PERSON_TYPE_ID"),
"IS_SYNC_B24" => array("IS_SYNC_B24"),
"PAYED" => array("PAYED", "DATE_PAYED", "EMP_PAYED_ID"),
"CANCELED" => array("CANCELED", "DATE_CANCELED", "EMP_CANCELED_ID"),
"DEDUCTED" => array("DEDUCTED"),
"MARKED" => array("MARKED", "DATE_MARKED", "EMP_MARKED_ID", "REASON_MARKED"),
"STATUS_ID" => array("STATUS_ID", "DATE_STATUS", "EMP_STATUS_ID"),
"STATUS" => array("STATUS_ID", "DATE_STATUS", "EMP_STATUS_ID"),
"PRICE_DELIVERY" => array("PRICE_DELIVERY", "CURRENCY"),
"PRICE" => array("PRICE", "CURRENCY"),
"SUM_PAID" => array("SUM_PAID", "CURRENCY"),
"USER" => array("USER_ID"),
"DATE_INSERT" => array("DATE_INSERT"),
"DATE_UPDATE" => array("DATE_UPDATE"),
"TAX_VALUE" => array("TAX_VALUE", "CURRENCY"),
"LOCK_STATUS" => array("LOCK_STATUS", "LOCK_USER_NAME"),
"BASKET" => array(),
"COMMENTS" => array("COMMENTS"),
"REASON_CANCELED" => array("REASON_CANCELED"),
"REASON_MARKED" => array("REASON_MARKED"),
"USER_EMAIL" => array("USER_EMAIL"),
"USER_DESCRIPTION" => array("USER_DESCRIPTION"),
"EXTERNAL_ORDER" => array("EXTERNAL_ORDER"),
"SOURCE_NAME" => array("SOURCE_NAME"),
"XML_ID" => array("XML_ID"),
"COMPANY_ID" => array("COMPANY_ID"),
"RESPONSIBLE_ID" => array("RESPONSIBLE_ID"),
"AFFILIATE_ID" => array("AFFILIATE_ID"),
);
$arHeaders = array(
array("id"=>"DATE_INSERT","content"=>Loc::getMessage("SI_DATE_INSERT"), "sort"=>"DATE_INSERT", "default"=>true),
array("id"=>"ID", "content"=>"ID", "sort"=>"ID", "default"=>true),
array("id"=>"USER","content"=>Loc::getMessage("SI_BUYER"), "sort"=>"USER_ID", "default"=>true),
array("id"=>"STATUS_ID","content"=>Loc::getMessage("SI_STATUS"), "sort"=>"STATUS_ID", "default"=>true, "title" => Loc::getMessage("SO_S_DATE_STATUS")),
array("id"=>"PAYED","content"=>Loc::getMessage("SI_PAID"), "sort"=>"PAYED", "default"=>true, "title" => Loc::getMessage("SO_S_DATE_PAYED")),
array("id"=>"ALLOW_DELIVERY","content"=>Loc::getMessage("SI_ALLOW_DELIVERY"), "sort"=>"ALLOW_DELIVERY", "default"=>false),
array("id"=>"CANCELED","content"=>Loc::getMessage("SI_CANCELED"), "sort"=>"CANCELED", "default"=>true),
array("id"=>"DEDUCTED","content"=>Loc::getMessage("SI_DEDUCTED"), "sort"=>"DEDUCTED", "default"=>true),
array("id"=>"MARKED","content"=>Loc::getMessage("SI_MARKED"), "sort"=>"MARKED", "default"=>true),
array("id"=>"PRICE","content"=>Loc::getMessage("SI_SUM"), "sort"=>"PRICE", "default"=>true),
array("id"=>"BASKET","content"=>Loc::getMessage("SI_ITEMS"), "sort"=>"", "default"=>true),
array("id"=>"DATE_UPDATE","content"=>Loc::getMessage("SI_DATE_UPDATE"), "sort"=>"DATE_UPDATE", "default"=>false),
array("id"=>"LID","content"=>Loc::getMessage("SI_SITE"), "sort"=>"LID"),
array("id"=>"PERSON_TYPE","content"=>Loc::getMessage("SI_PAYER_TYPE"), "sort"=>"PERSON_TYPE_ID"),
array("id"=>"PAY_VOUCHER_NUM","content"=>Loc::getMessage("SI_NO_PP"), "sort"=>"", "default"=>false),
array("id"=>"PAY_VOUCHER_DATE","content"=>Loc::getMessage("SI_DATE_PP"), "sort"=>"", "default"=>false),
array("id"=>"STATUS","content"=>Loc::getMessage("SI_STATUS_OLD"), "sort"=>"STATUS_ID", "default"=>false),
array("id"=>"PRICE_DELIVERY","content"=>Loc::getMessage("SI_DELIVERY"), "sort"=>"PRICE_DELIVERY", "default"=>false),
array("id"=>"DELIVERY_DOC_NUM","content"=>Loc::getMessage("SI_DELIVERY_DOC_NUM"), "sort"=>"", "default"=>false),
array("id"=>"DELIVERY_DOC_DATE","content"=>Loc::getMessage("SI_DELIVERY_DOC_DATE"), "sort"=>"", "default"=>false),
array("id"=>"SUM_PAID","content"=>Loc::getMessage("SI_SUM_PAID"), "sort"=>"SUM_PAID"),
array("id"=>"USER_EMAIL","content"=>Loc::getMessage("SALE_F_USER_EMAIL"), "sort"=>"USER_EMAIL", "default"=>false),
array("id"=>"PAY_SYSTEM","content"=>Loc::getMessage("SI_PAY_SYS"), "sort"=>"", "default"=>false),
array("id"=>"DELIVERY","content"=>Loc::getMessage("SI_DELIVERY_SYS"), "sort"=>"", "default"=>false),
array("id"=>"PS_STATUS","content"=>Loc::getMessage("SI_PAYMENT_PS"), "sort"=>"", "default"=>false),
array("id"=>"PS_SUM","content"=>Loc::getMessage("SI_PS_SUM"), "sort"=>"", "default"=>false),
array("id"=>"TAX_VALUE","content"=>Loc::getMessage("SI_TAX"), "sort"=>"TAX_VALUE"),
array("id"=>"BASKET_NAME","content"=>Loc::getMessage("SOA_BASKET_NAME"), "sort"=>""),
array("id"=>"BASKET_PRODUCT_ID","content"=>Loc::getMessage("SOA_BASKET_PRODUCT_ID"), "sort"=>""),
array("id"=>"BASKET_PRICE","content"=>Loc::getMessage("SOA_BASKET_PRICE"), "sort"=>""),
array("id"=>"BASKET_QUANTITY","content"=>Loc::getMessage("SOA_BASKET_QUANTITY"), "sort"=>""),
array("id"=>"BASKET_WEIGHT","content"=>Loc::getMessage("SOA_BASKET_WEIGHT"), "sort"=>""),
array("id"=>"BASKET_NOTES","content"=>Loc::getMessage("SOA_BASKET_NOTES"), "sort"=>""),
array("id"=>"BASKET_DISCOUNT_PRICE","content"=>Loc::getMessage("SOA_BASKET_DISCOUNT_PRICE"), "sort"=>""),
array("id"=>"BASKET_CATALOG_XML_ID","content"=>Loc::getMessage("SOA_BASKET_CATALOG_XML_ID"), "sort"=>""),
array("id"=>"BASKET_PRODUCT_XML_ID","content"=>Loc::getMessage("SOA_BASKET_PRODUCT_XML_ID"), "sort"=>""),
array("id"=>"BASKET_DISCOUNT_NAME","content"=>Loc::getMessage("SALE_ORDER_LIST_HEADER_NAME_DISCOUNTS"), "sort"=>""),
array("id"=>"BASKET_DISCOUNT_VALUE","content"=>Loc::getMessage("SOA_BASKET_DISCOUNT_VALUE"), "sort"=>""),
array("id"=>"BASKET_DISCOUNT_COUPON","content"=>Loc::getMessage("SALE_ORDER_LIST_HEADER_NAME_COUPONS_MULTI"), "sort"=>""),
array("id"=>"BASKET_VAT_RATE","content"=>Loc::getMessage("SOA_BASKET_VAT_RATE"), "sort"=>""),
array("id"=>"DATE_ALLOW_DELIVERY", "content"=>Loc::getMessage("SALE_F_DATE_ALLOW_DELIVERY"), "sort"=>"", "default"=>false),
array("id"=>"ACCOUNT_NUMBER","content"=>Loc::getMessage("SOA_ACCOUNT_NUMBER"), "sort"=>""),
array("id"=>"TRACKING_NUMBER","content"=>Loc::getMessage("SOA_TRACKING_NUMBER"), "sort"=>"", "default"=>false),
array("id"=>"DELIVERY_DOC_DATE","content"=>Loc::getMessage("SOA_DELIVERY_DOC_DATE"), "sort"=>"", "default"=>false),
array("id"=>"EXTERNAL_ORDER","content"=>Loc::getMessage("SOA_EXTERNAL_ORDER"), "sort"=>"", "default"=> false),
array("id"=>"SHIPMENTS","content"=>Loc::getMessage("SOA_SHIPMENTS"), "sort"=>"", "default"=> true),
array("id"=>"PAYMENTS","content"=>Loc::getMessage("SOA_PAYMENTS"), "sort"=>"", "default"=> true),
array("id"=>"SOURCE_NAME","content"=>Loc::getMessage("SALE_F_SOURCE"), "sort"=>"SOURCE_NAME", "default"=>false),
array("id"=>"XML_ID","content"=>Loc::getMessage("SO_XML_ID"), "sort"=>"XML_ID", "default"=>false),
array("id"=>"COMPANY_ID","content"=>Loc::getMessage("SALE_F_COMPANY_ID"), "sort"=>"COMPANY_ID", "default"=>false),
array("id"=>"RESPONSIBLE_ID","content"=>Loc::getMessage("SALE_F_RESPONSIBLE_ID"), "sort"=>"RESPONSIBLE_ID", "default"=>false),
array("id"=>"IS_SYNC_B24","content"=>Loc::getMessage("SALE_F_IS_SYNC_B24"), "sort"=>"IS_SYNC_B24", "default"=>($link->getType() == Admin\ModeType::APP_LAYOUT_TYPE)),
array("id"=>"AFFILIATE_ID","content"=>Loc::getMessage("SI_AFFILIATE"), "sort"=>"AFFILIATE_ID", "default"=>false),
);
$arHeaders[] = array("id"=>"COMMENTS","content"=>Loc::getMessage("SI_COMMENTS"), "sort"=>"COMMENTS", "default"=>false);
$arHeaders[] = array("id"=>"PS_STATUS_DESCRIPTION","content"=>Loc::getMessage("SOA_PS_STATUS_DESCR"), "sort"=>"", "default"=>false);
$arHeaders[] = array("id"=>"USER_DESCRIPTION","content"=>Loc::getMessage("SI_USER_DESCRIPTION"), "sort"=>"", "default"=>false);
$arHeaders[] = array("id"=>"REASON_CANCELED","content"=>Loc::getMessage("SI_REASON_CANCELED"), "sort"=>"", "default"=>false);
$arHeaders[] = array("id"=>"REASON_MARKED","content"=>Loc::getMessage("SI_REASON_MARKED"), "sort"=>"", "default"=>false);
foreach ($arOrderProps as $key => $value)
{
$arHeaders[] = array("id" => "PROP_".$key, "content" => htmlspecialcharsbx($value["NAME"])." (".htmlspecialcharsbx($value["PERSON_TYPE_NAME"]).")", "sort" => "", "default" => false);
$arColumn2Field["PROP_".$key] = array();
}
foreach ($arOrderPropsCode as $key => $value)
{
$arHeaders[] = array("id" => "PROP_".$key, "content" => htmlspecialcharsbx($value["NAME"]), "sort" => "", "default" => false);
$arColumn2Field["PROP_".$key] = array();
}
$lAdmin->AddHeaders($arHeaders);
$arSelectFields[] = "ID";
$arSelectFields[] = "LID";
$arSelectFields[] = "LOCK_STATUS";
$arSelectFields[] = "LOCK_USER_NAME";
if($link->getType() == Admin\ModeType::APP_LAYOUT_TYPE)
{
$lAdmin->AddVisibleHeaderColumn("IS_SYNC_B24");
}
$arVisibleColumns = $lAdmin->GetVisibleHeaderColumns();
if(in_array('SOURCE_NAME', $arVisibleColumns))
{
addSourceNameToRuntimeAndSelect($runtimeFields, $arSelectFields);
}
$bNeedProps = false;
$bNeedBasket = false;
foreach ($arVisibleColumns as $visibleColumn)
{
if(!$bNeedProps && mb_substr($visibleColumn, 0, mb_strlen("PROP_")) == "PROP_")
$bNeedProps = true;
if(
!$bNeedBasket
&& $visibleColumn != 'BASKET_DISCOUNT_COUPON'
&& $visibleColumn != 'BASKET_DISCOUNT_NAME'
&& mb_strpos($visibleColumn, "BASKET") !== false
)
$bNeedBasket = true;
if(array_key_exists($visibleColumn, $arColumn2Field))
{
if(is_array($arColumn2Field[$visibleColumn]) && count($arColumn2Field[$visibleColumn]) > 0)
{
$countArColumn = count($arColumn2Field[$visibleColumn]);
for ($i = 0; $i < $countArColumn; $i++)
{
if(!in_array($arColumn2Field[$visibleColumn][$i], $arSelectFields))
$arSelectFields[] = $arColumn2Field[$visibleColumn][$i];
}
}
}
}
$WEIGHT_UNIT = [];
$WEIGHT_KOEF = [];
$dbSite = CSite::GetList();
while ($arSite = $dbSite->Fetch())
{
$serverName[$arSite["LID"]] = $arSite["SERVER_NAME"];
if($serverName[$arSite["LID"]] == '')
{
if(defined("SITE_SERVER_NAME") && SITE_SERVER_NAME <> '')
$serverName[$arSite["LID"]] = SITE_SERVER_NAME;
else
$serverName[$arSite["LID"]] = \Bitrix\Main\Config\Option::get("main", "server_name", "");
}
$WEIGHT_UNIT[$arSite["LID"]] = htmlspecialcharsbx(\Bitrix\Main\Config\Option::get('sale', 'weight_unit', "", $arSite["LID"]));
$WEIGHT_KOEF[$arSite["LID"]] = htmlspecialcharsbx(\Bitrix\Main\Config\Option::get('sale', 'weight_koef', 1, $arSite["LID"]));
}
$arGroupByTmp = array();
if($saleModulePermissions < "W")
{
foreach($arSelectFields as $k => $v)
{
if(in_array($v, Array("COMMENTS")) && $saleModulePermissions < "U")
unset($arSelectFields[$k]);
}
}
$arFilterOrder = array();
if(!empty($by) && in_array($by, $arSelectFields))
{
if(!isset($order) || !is_string($order))
$order = "DESC";
if ($by == "STATUS_ID")
{
$arFilterOrder["STATUS_ID"] = $order;
$arFilterOrder["DATE_STATUS"] = $order;
}
elseif($by == "CANCELED")
$arFilterOrder["DATE_CANCELED"] = $order;
else
$arFilterOrder[$by] = $order;
}
$sScript = "
var topWindow = (window.BX||window.parent.BX).PageObject.getRootWindow();";
$usePageNavigation = true;
$navyParams = array();
if (isset($_REQUEST['mode']) && $_REQUEST['mode'] == 'excel')
{
$usePageNavigation = false;
}
else
{
$navyParams = CDBResult::GetNavParams(CAdminResult::GetNavSize($sTableID));
if ($navyParams['SHOW_ALL'])
{
$usePageNavigation = false;
}
else
{
$navyParams['PAGEN'] = (int)$navyParams['PAGEN'];
$navyParams['SIZEN'] = (int)$navyParams['SIZEN'];
}
}
if (in_array('USER_EMAIL', $arSelectFields))
{
$arSelectFields["USER_EMAIL"] = 'USER.EMAIL';
if ($searchIndex = array_search('USER_EMAIL', $arSelectFields))
unset($arSelectFields[$searchIndex]);
}
$getListParams = array(
'filter' => $arFilterTmp,
'group' => $arGroupByTmp,
'select' => $arSelectFields,
'runtime' => $runtimeFields
);
if(!empty($arFilterOrder))
$getListParams['order'] = $arFilterOrder;
if ($usePageNavigation)
{
$getListParams['limit'] = $navyParams['SIZEN'];
$getListParams['offset'] = $navyParams['SIZEN']*($navyParams['PAGEN']-1);
}
/** @var \Bitrix\Main\Entity\Event $event */
$event = new \Bitrix\Main\Event('sale', Sale\EventActions::EVENT_ON_ADMIN_ORDER_LIST, $getListParams);
$event->send();
if ($event->getResults())
{
/** @var \Bitrix\Main\EventResult $eventResult */
foreach($event->getResults() as $eventResult)
{
if($eventResult->getType() == \Bitrix\Main\EventResult::ERROR)
{
$errorMsg = new Sale\ResultError(\Bitrix\Main\Localization\Loc::getMessage('SALE_EVENT_ON_ADMIN_ORDER_LIST_ERROR'), 'SALE_EVENT_ON_ADMIN_ORDER_LIST_ERROR');
if ($eventResultData = $eventResult->getParameters())
{
if (isset($eventResultData) && $eventResultData instanceof Sale\ResultError)
{
/** @var Sale\ResultError $errorMsg */
$errorMsg = $eventResultData;
}
}
}
elseif($eventResult->getType() == \Bitrix\Main\EventResult::SUCCESS)
{
$eventParams = $eventResult->getParameters();
if (is_array($eventParams))
{
$getListParams = $eventParams;
}
}
}
}
$totalPages = 0;
if ($usePageNavigation)
{
$countQuery = new \Bitrix\Main\Entity\Query(\Bitrix\Sale\Internals\OrderTable::getEntity());
$countQuery->addSelect(new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(1)'));
$countQuery->setFilter($getListParams['filter']);
foreach ($getListParams['runtime'] as $key => $field)
$countQuery->registerRuntimeField($key, $field);
$totalCount = $countQuery->setLimit(null)->setOffset(null)->exec()->fetch();
unset($countQuery);
$totalCount = (int)$totalCount['CNT'];
if ($totalCount > 0)
{
$totalPages = ceil($totalCount/$navyParams['SIZEN']);
if ($navyParams['PAGEN'] > $totalPages)
$navyParams['PAGEN'] = $totalPages;
$getListParams['limit'] = $navyParams['SIZEN'];
$getListParams['offset'] = $navyParams['SIZEN']*($navyParams['PAGEN']-1);
}
else
{
$navyParams['PAGEN'] = 1;
$getListParams['limit'] = $navyParams['SIZEN'];
$getListParams['offset'] = 0;
}
}
$dbOrderList = new CAdminResult(\Bitrix\Sale\Internals\OrderTable::getList($getListParams), $sTableID);
if ($usePageNavigation)
{
$dbOrderList->NavStart($getListParams['limit'], $navyParams['SHOW_ALL'], $navyParams['PAGEN']);
$dbOrderList->NavRecordCount = $totalCount;
$dbOrderList->NavPageCount = $totalPages;
$dbOrderList->NavPageNomer = $navyParams['PAGEN'];
$dbOrderList->nSelectedCount = $totalCount;
}
else
{
$dbOrderList->NavStart();
}
$lAdmin->NavText($dbOrderList->GetNavPrint(Loc::getMessage("SALE_PRLIST")));
$ordersIds = array();
$shipmentStatuses = array();
$rowsList = array();
$basketSeparator = '
';
if(!$bExport)
$idTmp .= " | create() ->setFilterParams(GetFilterParams("filter_")) ->fill() ->setField('ID', $orderId) ->setPageByType(Admin\Registry::SALE_ORDER_VIEW) ->build(); $idTmp .=" href='".$href."' title='".Loc::getMessage("SALE_DETAIL_DESCR")."'>##ID## | "; $idTmp .= "