Your IP : 3.139.108.124
<?/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global string $DBType */
/** @global CDatabase $DB */
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Config\Option;
use Bitrix\Sale\Internals\StatusTable;
use Bitrix\Sale;
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");
// include functions
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/sale/general/admin_tool.php");
$saleModulePermissions = $APPLICATION->GetGroupRight("sale");
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__);
$arUserGroups = $USER->GetUserGroupArray();
$intUserID = (int)$USER->GetID();
$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"];
}
$exportMode = (isset($_REQUEST['mode']) && $_REQUEST['mode'] == 'excel');
$sTableID = "tbl_sale_order_archive";
$oSort = new CAdminSorting($sTableID, "ID", "desc");
$lAdmin = new CAdminSaleList($sTableID, $oSort);
$runtimeFields = array();
/** Filter*/
//----------------------------------------------------------------------------------------------------------------------
$arFilterFields = array(
"filter_universal",
"filter_order_id_from",
"filter_id_from",
"filter_order_id_to",
"filter_id_to",
"filter_account_number",
"filter_date_from",
"filter_date_to",
"filter_date_archived_from",
"filter_date_archived_to",
"filter_lang",
"filter_date_order_from",
"filter_date_order_to",
"filter_price_from",
"filter_price_to",
"filter_buyer",
"filter_person_type",
"filter_user_id",
"filter_user_login",
"filter_user_email",
"filter_status"
);
$lAdmin->InitFilter($arFilterFields);
$filter_lang = trim($filter_lang);
if (strlen($filter_lang) > 0)
{
if (!in_array($filter_lang, $arAccessibleSites) && $saleModulePermissions < "W")
$filter_lang = "";
}
if (strlen($filter_lang)>0 && $filter_lang!="NOT_REF")
$arFilter["=LID"] = trim($filter_lang);
if($saleModulePermissions < "W")
{
if(strlen($filter_lang) <= 0 && count($arAccessibleSites) > 0)
$arFilter["=LID"] = $arAccessibleSites;
}
$arFilter = array();
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';
}
if ((int)($filter_id_from)>0)
$arFilter[">=ID"] = (int)($filter_id_from);
if ((int)($filter_id_to)>0)
$arFilter["<=ID"] = (int)($filter_id_to);
if ((int)($filter_order_id_from)>0)
$arFilter[">=ORDER_ID"] = (int)($filter_order_id_from);
if ((int)($filter_order_id_to)>0)
$arFilter["<=ORDER_ID"] = (int)($filter_order_id_to);
if (strlen($filter_date_from)>0)
$arFilter[">=DATE_INSERT"] = trim($filter_date_from);
if (strlen($filter_date_to)>0)
{
if ($arDate = ParseDateTime($filter_date_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if (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 (strlen($filter_date_archived_from)>0)
$arFilter[">=DATE_ARCHIVED"] = trim($filter_date_archived_from);
if (strlen($filter_date_archived_to)>0)
{
if ($arDate = ParseDateTime($filter_date_archived_to, CSite::GetDateFormat("FULL", SITE_ID)))
{
if (strlen($filter_date_archived_to) < 11)
{
$arDate["HH"] = 23;
$arDate["MI"] = 59;
$arDate["SS"] = 59;
}
$filter_date_archived_to = date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)), mktime($arDate["HH"], $arDate["MI"], $arDate["SS"], $arDate["MM"], $arDate["DD"], $arDate["YYYY"]));
$arFilter["<=DATE_ARCHIVED"] = $filter_date_archived_to;
}
else
{
$filter_date_archived_to = "";
}
}
if ((int)($filter_user_id)>0)
$arFilter["=USER_ID"] = (int)($filter_user_id);
if (is_array($filter_group_id) && count($filter_group_id) > 0)
{
foreach($filter_group_id as $v)
{
if((int)($v) > 0)
$arFilter["USER_GROUP.GROUP_ID"][] = $v;
}
}
if (isset($filter_person_type) && is_array($filter_person_type) && count($filter_person_type) > 0)
{
$countFilterPerson = count($filter_person_type);
for ($i = 0; $i < $countFilterPerson; $i++)
{
if ((int)($filter_person_type[$i]) > 0)
$arFilter["=PERSON_TYPE_ID"][] = $filter_person_type[$i];
}
}
if ((float)($filter_price_from)>0)
$arFilter[">=PRICE"] = (float)($filter_price_from);
if ((float)($filter_price_to)>0)
$arFilter["<PRICE"] = (float)($filter_price_to);
if (strlen($filter_account_number)>0)
$arFilter["ACCOUNT_NUMBER"] = trim($filter_account_number);
if (!empty($_REQUEST['OID']) && is_array($_REQUEST['OID']))
{
foreach ($_REQUEST['OID'] as $orderId)
{
if ((int)($orderId) > 0)
{
$arFilter['=ID'][] = (int)($orderId);
}
}
}
if (!empty($filter_product_id))
{
if ((int)($filter_product_id) > 0)
{
$runtimeFields["ARCHIVED_BASKET_ITEMS"] = array(
'select' => "PRODUCT_ID",
'data_type' => '\Bitrix\Sale\Internals\BasketArchiveTable',
'reference' => array(
'=this.ID' => 'ref.ARCHIVE_ID'
)
);
$arFilter["=ARCHIVED_BASKET_ITEMS.PRODUCT_ID"] = (int)($filter_product_id);
}
}
if (isset($filter_status) && !is_array($filter_status) && strlen($filter_status) > 0)
$filter_status = array($filter_status);
if (isset($filter_status) && is_array($filter_status) && count($filter_status) > 0)
{
$countFilter = count($filter_status);
for ($i = 0; $i < $countFilter; $i++)
{
$filter_status[$i] = trim($filter_status[$i]);
if (strlen($filter_status[$i]) > 0)
$arFilter["=STATUS_ID"][] = $filter_status[$i];
}
}
$allowedStatusesView = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('view'));
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 (strlen($filter_payed)>0) $arFilter["=PAYED"] = trim($filter_payed);
if (strlen($filter_canceled)>0) $arFilter["=CANCELED"] = trim($filter_canceled);
if (strlen($filter_deducted)>0) $arFilter["=DEDUCTED"] = trim($filter_deducted);
if ((int)($filter_user_id)>0) $arFilter["=USER_ID"] = (int)($filter_user_id);
if (strlen($filter_user_login)>0) $arFilter["USER.LOGIN"] = trim($filter_user_login);
if (strlen($filter_user_email)>0) $arFilter["USER.EMAIL"] = trim($filter_user_email);
if (strlen($filter_xml_id)>0) $arFilter["%XML_ID"] = trim($filter_xml_id);
if (isset($filter_person_type) && is_array($filter_person_type) && count($filter_person_type) > 0)
{
$countFilterPerson = count($filter_person_type);
for ($i = 0; $i < $countFilterPerson; $i++)
{
if ((int)($filter_person_type[$i]) > 0)
$arFilter["=PERSON_TYPE_ID"][] = $filter_person_type[$i];
}
}
$arFilterTmp = $arFilter;
$idLists = array();
if ($_REQUEST['action_target'] == 'selected')
{
$archiveData = Sale\Archive\Manager::getList(
array(
"filter" => $arFilterTmp,
"select" => array("ID")
)
);
while ($archive = $archiveData->fetch())
{
$idLists[] = $archive['ID'];
}
}
else
{
$idLists = $lAdmin->GroupAction();
}
/** Block of group operations*/
//----------------------------------------------------------------------------------------------------------------------
if ($idLists && $saleModulePermissions == "W")
{
switch ($_REQUEST['action_button'])
{
case "delete":
foreach ($idLists as $id)
{
if ((int)$id)
Sale\Archive\Manager::delete($id);
}
break;
}
}
/** Headers of table */
//----------------------------------------------------------------------------------------------------------------------
$arColumn2Field = array(
"ORDER_ID" => array("ID"),
"ACCOUNT_NUMBER" => array("ACCOUNT_NUMBER"),
"PRICE" => array("PRICE", "CURRENCY"),
"DATE_INSERT" => array("DATE_INSERT"),
"DATE_ARCHIVED" => array("DATE_ARCHIVED"),
);
$arHeaders = array(
array("id"=>"ORDER_ID","content"=>Loc::getMessage("SALE_F_ORDER_ID"), "sort"=>"ORDER_ID", "default"=>true),
array("id"=>"ACCOUNT_NUMBER","content"=>Loc::getMessage("SOA_ACCOUNT_NUMBER"), "sort"=>"ACCOUNT_NUMBER", "default"=>true),
array("id"=>"DATE_INSERT","content"=>Loc::getMessage("SI_DATE_INSERT_ORDER"), "sort"=>"DATE_INSERT", "default"=>true),
array("id"=>"USER","content"=>Loc::getMessage("SI_BUYER"), "sort"=>"USER_ID", "default"=>true),
array("id"=>"PRICE","content"=>Loc::getMessage("SI_SUM"), "sort"=>"PRICE", "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"=>"CANCELED","content"=>Loc::getMessage("SI_CANCELED"), "sort"=>"CANCELED", "default"=>true),
array("id"=>"DEDUCTED","content"=>Loc::getMessage("SI_DEDUCTED"), "sort"=>"DEDUCTED", "default"=>true),
array("id"=>"BASKET","content"=>Loc::getMessage("SI_ITEMS"), "sort"=>"", "default"=>true),
array("id"=>"DATE_ARCHIVED","content"=>Loc::getMessage("SI_DATE_ARCHIVED"), "sort"=>"DATE_ARCHIVED", "default"=>true),
array("id"=>"ID", "content"=>"ID", "sort"=>"ID"),
array("id"=>"LID","content"=>Loc::getMessage("SI_SITE"), "sort"=>"LID"),
array("id"=>"USER_EMAIL","content"=>Loc::getMessage("SALE_F_USER_EMAIL"), "sort"=>"USER_EMAIL", "default"=>false),
array("id"=>"PERSON_TYPE","content"=>Loc::getMessage("SI_PAYER_TYPE"), "sort"=>"PERSON_TYPE_ID"),
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_PRODUCT_XML_ID","content"=>Loc::getMessage("SOA_BASKET_PRODUCT_XML_ID"), "sort"=>""),
array("id"=>"XML_ID","content"=>Loc::getMessage("SO_XML_ID"), "sort"=>"XML_ID", "default"=>false)
);
$lAdmin->AddHeaders($arHeaders);
$arSelectFields = array(
"ORDER_ID", "ACCOUNT_NUMBER","USER_ID", "PRICE", "DATE_ARCHIVED", "DATE_INSERT", "STATUS_ID",
"PAYED", "DEDUCTED", "CANCELED", "PERSON_TYPE_ID", "XML_ID", "ID_1C", "ID", "LID", "USER_EMAIL"
);
$arVisibleColumns = $lAdmin->GetVisibleHeaderColumns();
$bNeedProps = false;
$bNeedBasket = false;
foreach ($arVisibleColumns as $visibleColumn)
{
if (!$bNeedProps && substr($visibleColumn, 0, strlen("PROP_")) == "PROP_")
$bNeedProps = true;
if (
!$bNeedBasket
&& $visibleColumn != 'BASKET_DISCOUNT_COUPON'
&& $visibleColumn != 'BASKET_DISCOUNT_NAME'
&& 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];
}
}
}
}
if (in_array('USER_EMAIL', $arSelectFields))
{
$arSelectFields["USER_EMAIL"] = 'USER.EMAIL';
if ($searchIndex = array_search('USER_EMAIL', $arSelectFields))
unset($arSelectFields[$searchIndex]);
}
$filterOrderSelection = array();
if (!empty($by) && in_array($by, $arSelectFields))
{
if (!isset($order))
$order = "DESC";
$filterOrderSelection[strtoupper($by)] = $order;
}
$ordersIds = array();
$shipmentStatuses = array();
$rowsList = array();
$basketSeparator = '<hr size="1" width="90%">';
$basketSetSeparator = '<br> - ';
if ($exportMode)
{
$basketSeparator = "<br>";
$basketSetSeparator = "<br>";
}
$orderList = array();
$archivedOrdersId = array();
$basketList = array();
$users = array();
$formattedUserNames = array();
$nav = new \Bitrix\Main\UI\AdminPageNavigation("nav-archive");
$orderIterator = \Bitrix\Sale\Internals\OrderArchiveTable::getList(array(
'filter' => $arFilterTmp,
'select' => $arSelectFields,
'runtime' => $runtimeFields,
'order' => $filterOrderSelection,
'count_total' => true,
'offset' => $nav->getOffset(),
'limit' => $nav->getLimit(),
));
$nav->setRecordCount($orderIterator->getCount());
$lAdmin->setNavigation($nav, Loc::getMessage("SALE_PRLIST"));
while($order = $orderIterator->fetch())
{
$orderList[$order['ID']] = $order;
}
if (!empty($orderList) && is_array($orderList))
{
if(\Bitrix\Main\Analytics\Catalog::isOn() || $bNeedBasket)
{
$dbItemsList = \Bitrix\Sale\Internals\BasketArchiveTable::getList(array(
'order' => array('ID' => 'ASC'),
'filter' => array('=ARCHIVE_ID' => array_keys($orderList))
));
while ($item = $dbItemsList->fetch())
{
$basketList[$item['ARCHIVE_ID']][$item['ID']] = $item;
}
}
foreach ($orderList as $id => $arOrder)
{
$formattedUserNames = GetFormatedUserName(array_values($users), false);
$basketItems = array();
if(\Bitrix\Main\Analytics\Catalog::isOn() || $bNeedBasket)
{
$basketItems = $basketList[$arOrder["ID"]];
}
/**
* build row
*/
$rowsList[$arOrder['ID']] = $row =& $lAdmin->AddRow($arOrder['ID'], $arOrder);
$rowTmp = '<table>
<tr>
<td valign="top"></td>
<td><b>##ID##</b></td>
</tr>
</table>';
$row->AddField("ORDER_ID", str_replace('##ID##', Loc::getMessage("SO_ORDER_ID_PREF").$arOrder["ORDER_ID"], $rowTmp));
//ACCOUNT_NUMBER
$fieldValue = "";
if(in_array("ACCOUNT_NUMBER", $arVisibleColumns))
{
$fieldValue = str_replace('##ID##', Loc::getMessage("SO_ORDER_ID_PREF").$arOrder["ACCOUNT_NUMBER"], $rowTmp);
}
$row->AddField("ACCOUNT_NUMBER", $fieldValue);
$row->AddField("DATE_INSERT", $arOrder["DATE_INSERT"]);
//XML_ID
$fieldValue = "";
if(in_array("XML_ID", $arVisibleColumns))
{
$fieldValue = $arOrder["XML_ID"];
}
$row->AddField("XML_ID", $fieldValue);
//LID
$fieldValue = "";
if(in_array("LID", $arVisibleColumns))
{
if(!isset($LOCAL_SITE_LIST_CACHE[$arOrder["LID"]])
|| empty($LOCAL_SITE_LIST_CACHE[$arOrder["LID"]]))
{
$dbSite = CSite::GetByID($arOrder["LID"]);
if($arSite = $dbSite->Fetch())
$LOCAL_SITE_LIST_CACHE[$arOrder["LID"]] = htmlspecialcharsbx($arSite["NAME"]);
}
$fieldValue = "[".$arOrder["LID"]."] ".$LOCAL_SITE_LIST_CACHE[$arOrder["LID"]];
}
$row->AddField("LID", $fieldValue);
//PERSON_TYPE
$fieldValue = "";
if(in_array("PERSON_TYPE", $arVisibleColumns))
{
if(!isset($LOCAL_PERSON_TYPE_CACHE[$arOrder["PERSON_TYPE_ID"]])
|| empty($LOCAL_PERSON_TYPE_CACHE[$arOrder["PERSON_TYPE_ID"]]))
{
$personTypeList = Sale\PersonType::load($arOrder["LID"]);
if(count($personTypeList))
$LOCAL_PERSON_TYPE_CACHE[$arOrder["PERSON_TYPE_ID"]] = htmlspecialcharsbx($personTypeList[$arOrder["PERSON_TYPE_ID"]]["NAME"]);
}
$fieldValue = "[";
if($saleModulePermissions >= "W")
$fieldValue .= '<a href="/bitrix/admin/sale_person_type.php?lang='.LANGUAGE_ID.'">';
$fieldValue .= $arOrder["PERSON_TYPE_ID"];
if($saleModulePermissions >= "W")
$fieldValue .= "</a>";
$fieldValue .= "] ".$LOCAL_PERSON_TYPE_CACHE[$arOrder["PERSON_TYPE_ID"]];
}
$row->AddField("PERSON_TYPE", $fieldValue);
//PAYED
$fieldValue = "";
if(in_array("PAYED", $arVisibleColumns))
{
$fieldValue .= '<span id="payed_'.$arOrder['ID'].'">'.(($arOrder["PAYED"] == "Y") ? Loc::getMessage("SO_YES") : Loc::getMessage("SO_NO"))."</span>";
}
$row->AddField("PAYED", $fieldValue);
//CANCELED
if($row->bEditMode != true
|| $row->bEditMode == true && !CSaleOrder::CanUserCancelOrder($orderId, $arUserGroups, $intUserID))
{
$fieldValue = "";
if(in_array("CANCELED", $arVisibleColumns))
{
$fieldValue .= '<span id="cancel_'.$arOrder['ID'].'">'.(($arOrder["CANCELED"] == "Y") ? Loc::getMessage("SO_YES") : Loc::getMessage("SO_NO"))."</span>";
}
$row->AddField("CANCELED", $fieldValue);
}
else
{
$row->AddCheckField("CANCELED");
}
//DEDUCTED
$fieldValue = "";
if(in_array("PAYED", $arVisibleColumns))
{
$fieldValue .= '<span id="payed_'.$arOrder['ID'].'">'.(($arOrder["DEDUCTED"] == "Y") ? Loc::getMessage("SO_YES") : Loc::getMessage("SO_NO"))."</span>";
}
$row->AddField("DEDUCTED", $fieldValue);
//STATUS_ID
if(in_array("STATUS_ID", $arVisibleColumns))
{
$arStatusList = false;
$fieldValue = "";
$fieldValueTmp = "";
if(in_array("STATUS_ID", $arVisibleColumns))
{
if(!isset($LOCAL_STATUS_CACHE[$arOrder["STATUS_ID"]])
|| empty($LOCAL_STATUS_CACHE[$arOrder["STATUS_ID"]]))
{
$arStatus = StatusTable::getList(array(
'select' => array(
'NAME' => 'Bitrix\Sale\Internals\StatusLangTable:STATUS.NAME',
'COLOR'
),
'filter' => array(
'=ID' => $arOrder["STATUS_ID"],
'=Bitrix\Sale\Internals\StatusLangTable:STATUS.LID' => LANGUAGE_ID,
'=TYPE' => 'O'
),
'limit' => 1,
))->fetch();
if($arStatus)
{
$LOCAL_STATUS_CACHE[$arOrder["STATUS_ID"]]['NAME'] = htmlspecialcharsEx($arStatus["NAME"]);
$LOCAL_STATUS_CACHE[$arOrder["STATUS_ID"]]['COLOR'] = $arStatus["COLOR"];
}
}
$fieldValueTmp .= "[";
if($saleModulePermissions >= "W")
$fieldValueTmp .= '<a href="/bitrix/admin/sale_status_edit.php?ID='.$arOrder["STATUS_ID"].'&lang='.LANGUAGE_ID.'">';
$fieldValueTmp .= $arOrder["STATUS_ID"];
if($saleModulePermissions >= "W")
$fieldValueTmp .= "</a>";
$fieldValueTmp .= "] ".$LOCAL_STATUS_CACHE[$arOrder["STATUS_ID"]]['NAME'];
$fieldValue .= '<span id="status_order_'.$arOrder["ID"].'">'.$LOCAL_STATUS_CACHE[$arOrder["STATUS_ID"]]['NAME'].'</span>';
$colorRGB = array();
$colorRGB = sscanf($LOCAL_STATUS_CACHE[$arOrder["STATUS_ID"]]['COLOR'], "#%02x%02x%02x");
if (count($colorRGB))
{
$color = "background:rgba(".$colorRGB[0].",".$colorRGB[1].",".$colorRGB[2].",0.6);";
$fieldValue = '<div style= "'.$color.'
margin: 0 0 0 -16px;
padding: 11px 10px 10px 16px;
height: 100%;
">'.$fieldValue."</div>";
}
$fieldValueTmp .= "<br />".$arOrder["DATE_STATUS"];
if((int)($arOrder["EMP_STATUS_ID"]) > 0)
$fieldValueTmp .= '<br />'.$formattedUserNames[$arOrder["EMP_STATUS_ID"]];
$sScript .= "
new top.BX.CHint({
parent: top.BX('status_order_".$arOrder["ID"]."'),
show_timeout: 10,
hide_timeout: 100,
dx: 2,
preventHide: true,
min_width: 250,
hint: '".CUtil::JSEscape($fieldValueTmp)."'
});
";
}
$row->AddField("STATUS_ID", $fieldValue);
}
$row->AddField("PRICE", '<span style="white-space:nowrap;">'.htmlspecialcharsbx(SaleFormatCurrency($arOrder["PRICE"], $arOrder["CURRENCY"])).'</span>');
$fieldValue = "";
//BASKET POSITIONS
$fieldValue = "";
$fieldName = "";
$fieldQuantity = "";
$fieldProductID = "";
$fieldPrice = "";
$fieldWeight = "";
$fieldNotes = "";
$fieldDiscountPrice = "";
$fieldCatalogXML = "";
$fieldProductXML = "";
$fieldDiscountName = "";
$fieldDiscountValue = "";
$fieldVatRate = "";
$setParentId = null;
if($bNeedBasket && is_array($basketItems))
{
$bNeedLine = false;
$arElementId = array();
$parentItemFound = false;
foreach ($basketItems as $arItem)
{
$arElementId[] = $arItem["PRODUCT_ID"];
if(CSaleBasketHelper::isSetParent($arItem) || CSaleBasketHelper::isSetItem($arItem))
$parentItemFound = true;
}
$basketItems = getMeasures($basketItems);
foreach ($basketItems as $arItem)
{
$measure = (isset($arItem["MEASURE_TEXT"])) ? $arItem["MEASURE_TEXT"] : Loc::getMessage("SO_SHT");
if($bNeedLine)
{
if(!CSaleBasketHelper::isSetItem($arItem))
$separator = $basketSeparator;
else
$separator = $basketSetSeparator;
}
$fieldName .= $separator;
$fieldQuantity .= $separator;
$fieldProductID .= $separator;
$fieldPrice .= $separator;
$fieldWeight .= $separator;
$fieldNotes .= $separator;
$fieldDiscountPrice .= $separator;
$fieldCatalogXML .= $separator;
$fieldProductXML .= $separator;
$fieldDiscountValue .= $separator;
$fieldVatRate .= $separator;
$bNeedLine = true;
$hidden = "";
$setItemClass = "";
$linkClass = "";
if(CSaleBasketHelper::isSetItem($arItem))
{
$hidden = 'style="display:none"';
$setItemClass = 'class="set_item_'.$setParentId.'"';
$linkClass = "set-item-link-name";
}
$fieldValue .= "<div ".$hidden. " ".$setItemClass.">";
if($arItem['RECOMMENDATION'])
$fieldValue .= '<div class="bx-adm-bigdata-icon-medium-inner"></div>';
$fieldValue .= "[".$arItem["PRODUCT_ID"]."] ";
$fieldValue .= htmlspecialcharsbx($arItem["NAME"]);
if(strlen($arItem["DETAIL_PAGE_URL"]) > 0)
$fieldValue .= "</a>";
$fieldValue .= " <nobr>(".Sale\BasketItem::formatQuantity($arItem["QUANTITY"])." ".$measure.")</nobr>";
if(CSaleBasketHelper::isSetParent($arItem))
{
$setParentId = $arItem["ID"];
$fieldValue .= '<div class="set-link-block">';
$fieldValue .= '<a class="dashed-link show-set-link" href="javascript:void(0);" id="set_toggle_link_'.$arItem["ID"].'" onclick="fToggleSetItems('.$arItem["ID"].')">'.Loc::getMessage("SOA_SHOW_SET")."</a>";
$fieldValue .= "</div>";
}
if($bNeedLine)
$fieldValue .= $basketSeparator;
$fieldValue .= "</div>";
if(strlen($arItem["NAME"]) > 0)
{
$fieldName .= "<nobr>";
if(strlen($arItem["DETAIL_PAGE_URL"]) > 0)
$fieldName .= '<a href="'.$url.'">';
$fieldName .= htmlspecialcharsbx($arItem["NAME"]);
if(strlen($arItem["DETAIL_PAGE_URL"]) > 0)
$fieldName .= "</a>";
$fieldName .= "</nobr>";
}
else
$fieldName .= "<br />";
if(strlen($arItem["QUANTITY"]) > 0)
$fieldQuantity .= htmlspecialcharsbx(Sale\BasketItem::formatQuantity($arItem["QUANTITY"]))." ".$measure;
else
$fieldQuantity .= "<br />";
if(strlen($arItem["PRODUCT_ID"]) > 0)
$fieldProductID .= htmlspecialcharsbx($arItem["PRODUCT_ID"]);
else
$fieldProductID .= "<br />";
if(strlen($arItem["PRICE"]) > 0)
$fieldPrice .= "<nobr>".htmlspecialcharsbx(SaleFormatCurrency($arItem["PRICE"], $arItem["CURRENCY"]))."</nobr>";
else
$fieldPrice .= "<br />";
if(strlen($arItem["WEIGHT"]) > 0)
{
if((float)$WEIGHT_KOEF[$arOrder["LID"]] > 0)
$fieldWeightCalc = (float)($arItem["WEIGHT"]/$WEIGHT_KOEF[$arOrder["LID"]]);
else
$fieldWeightCalc = (float)$arItem["WEIGHT"];
if(!empty($arItem["QUANTITY"]))
{
$fieldWeightCalc *= $arItem["QUANTITY"];
}
$fieldWeight .= htmlspecialcharsbx(roundEx($fieldWeightCalc, SALE_WEIGHT_PRECISION).' '.$WEIGHT_UNIT[$arOrder["LID"]]);
}
else
$fieldWeight .= "<br />";
if(strlen($arItem["PRODUCT_XML_ID"]) > 0)
$fieldProductXML .= $arItem["PRODUCT_XML_ID"];
else
$fieldProductXML .= "<br />";
}
unset($arItem);
}
$row->AddField("BASKET", $fieldValue);
$row->AddField("BASKET_NAME", $fieldName);
$row->AddField("BASKET_QUANTITY", $fieldQuantity);
$row->AddField("BASKET_PRODUCT_ID", $fieldProductID);
$row->AddField("BASKET_PRICE", $fieldPrice);
$row->AddField("BASKET_WEIGHT", $fieldWeight);
//ID
$idTmp = '<table>
<tr>
<td valign="top"></td>
<td><a href="/bitrix/admin/sale_order_archive_view.php?ID=##ID##"><b>'.Loc::getMessage("SO_ORDER_ID_PREF").'##ID##</b></a></td>
</tr>
</table>';
$row->AddField("ID", str_replace('##ID##', $arOrder["ID"], $idTmp));
$row->AddField("BASKET_PRODUCT_XML_ID", $fieldProductXML);
if(in_array("USER", $arVisibleColumns))
$fieldValue = GetFormatedUserName($arOrder["USER_ID"], false, false);
$row->AddField("USER", $fieldValue);
$allowedStatusesUpdate = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($USER->GetID(), array('update'));
if (in_array($arOrder["STATUS_ID"], $allowedStatusesUpdate))
{
$arActions[] = array("ICON"=>"copy", "TEXT"=>Loc::getMessage("SOA_RESTORE_ORDER"), "ACTION"=>$lAdmin->ActionRedirect("sale_order_create.php?restoreID=".$arOrder['ID']."&lang=".LANGUAGE_ID."&".'SITE_ID='.$arOrder['LID'].'&'.bitrix_sessid_get().GetFilterParams("filter_")));
}
$arActions[] = array("ICON"=>"view", "TEXT"=>Loc::getMessage("SALE_DETAIL_DESCR"), "ACTION"=>$lAdmin->ActionRedirect("sale_order_archive_view.php?ID=".$arOrder['ID']."&lang=".LANGUAGE_ID."&".'SITE_ID='.$arOrder['LID'].'&'.bitrix_sessid_get()), "DEFAULT"=>true);
if ($saleModulePermissions == "W")
{
$arActions[] = array("ICON"=>"delete", "TEXT"=>Loc::getMessage("SALE_DELETE_DESCR"), "ACTION"=>$lAdmin->ActionDoGroup($arOrder['ID'], 'delete'));
}
$row->AddActions($arActions);
unset($arActions);
}
}
unset($rowsList);
if ($saleModulePermissions == "W")
{
$arGroupActionsTmp = array(
"delete" => Loc::getMessage("MAIN_ADMIN_LIST_DELETE")
);
}
$lAdmin->AddGroupActionTable($arGroupActionsTmp);
$aContext = array();
$allowedStatusesDelete = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations($intUserID, array('delete'));
if($saleModulePermissions >= "W" || !empty($allowedStatusesDelete))
{
$aContext = array(
array(
"TEXT" => Loc::getMessage("SOAN_ARCHIVE_LINK"),
"LINK" => "sale_archive.php?lang=".LANGUAGE_ID,
"TITLE" => Loc::getMessage("SOAN_ARCHIVE_LINK_TITLE")
),
);
}
$lAdmin->AddAdminContextMenu($aContext);
$lAdmin->CheckListMode();
\Bitrix\Main\Page\Asset::getInstance()->addString('<style>.adm-filter-item-center, .adm-filter-content {overflow: visible !important;}</style>');
/*********************************************************************/
/******************** PAGE *****************************************/
/*********************************************************************/
$APPLICATION->SetTitle(Loc::getMessage("SALE_SECTION_TITLE"));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
?>
<script type="text/javascript">
function fToggleSetItems(setParentId)
{
var elements = document.getElementsByClassName('set_item_' + setParentId);
var hide = false;
for (var i = 0; i < elements.length; ++i)
{
if(elements[i].style.display == 'none' || elements[i].style.display == '')
{
elements[i].style.display = 'table-row';
hide = true;
}
else
elements[i].style.display = 'none';
}
if(hide)
BX("set_toggle_link_" + setParentId).innerHTML = '<?=Loc::getMessage("SOA_HIDE_SET")?>';
else
BX("set_toggle_link_" + setParentId).innerHTML = '<?=Loc::getMessage("SOA_SHOW_SET")?>';
}
</script>
<form name="find_form" method="GET" action="<?echo $APPLICATION->GetCurPage()?>?">
<?
$arFilterFieldsTmp = array(
"filter_order_id_from" => Loc::getMessage("SALE_F_ORDER_ID"),
"filter_account_number" => Loc::getMessage("SALE_F_ACCOUNT_NUMBER"),
"filter_date_insert" => Loc::getMessage("SALE_F_DATE"),
"filter_price" => Loc::getMessage("SOA_F_PRICE"),
"filter_person_type" => Loc::getMessage("SALE_F_PERSON_TYPE"),
"filter_user_id" => Loc::getMessage("SALE_F_USER_ID"),
"filter_user_login" => Loc::getMessage("SALE_F_USER_LOGIN"),
"filter_user_email" => Loc::getMessage("SALE_F_USER_EMAIL"),
"filter_date_archived" => Loc::getMessage("SALE_F_DATE_ARCHIVED"),
"filter_status" => Loc::getMessage("SALE_F_STATUS"),
"filter_canceled" => Loc::getMessage("SALE_F_CANCELED"),
"filter_deducted" => Loc::getMessage("SALE_F_DEDUCTED"),
"filter_payed" => Loc::getMessage("SALE_F_PAYED"),
"filter_id_from" => Loc::getMessage("SALE_F_ID"),
"filter_product_id" => Loc::getMessage("SO_PRODUCT_ID"),
"filter_xml_id" => Loc::getMessage("SO_XML_ID"),
);
$oFilter = new CAdminFilter(
$sTableID."_filter",
$arFilterFieldsTmp
);
$oFilter->SetDefaultRows(array("filter_id_from", "filter_id_to"));
/***********************************************************************************************************************
* Filter
***********************************************************************************************************************/
$oFilter->Begin();
?>
<tr>
<td><?echo Loc::getMessage("SALE_F_ORDER_ID");?>:</td>
<td>
<script type="text/javascript">
function filter_id_from_Change()
{
if(document.find_form.filter_order_id_to.value.length<=0)
{
document.find_form.filter_order_id_to.value = document.find_form.filter_order_id_from.value;
}
}
</script>
<?echo Loc::getMessage("SALE_F_FROM");?>
<input type="text" name="filter_order_id_from" OnChange="filter_id_from_Change()" value="<?echo ((int)($filter_order_id_from)>0)?(int)($filter_order_id_from):""?>" size="10">
<?echo Loc::getMessage("SALE_F_TO");?>
<input type="text" name="filter_order_id_to" value="<?echo ((int)($filter_order_id_to)>0)?(int)($filter_order_id_to):""?>" size="10">
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_ACCOUNT_NUMBER");?>:</td>
<td>
<input type="text" name="filter_account_number" value="<?echo htmlspecialcharsbx($filter_account_number)?>" size="10">
</td>
</tr>
<tr>
<td><b><?echo Loc::getMessage("SALE_F_DATE");?>:</b></td>
<td>
<?echo CalendarPeriod("filter_date_from", $filter_date_from, "filter_date_to", $filter_date_to, "find_form", "Y")?>
</td>
</tr>
<tr>
<td><?=Loc::getMessage("SOA_F_PRICE");?>:</td>
<td>
<?echo Loc::getMessage("SOA_F_PRICE_FROM");?>
<input type="text" name="filter_price_from" value="<?=((float)($filter_price_from)>0)?(float)($filter_price_from):""?>" size="3">
<?echo Loc::getMessage("SOA_F_PRICE_TO");?>
<input type="text" name="filter_price_to" value="<?=((float)($filter_price_to)>0)?(float)($filter_price_to):""?>" size="3">
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_PERSON_TYPE");?>:</td>
<td>
<select name="filter_person_type[]" multiple size="3">
<option value=""><?echo Loc::getMessage("SALE_F_ALL")?></option>
<?
$ptRes = Sale\Internals\PersonTypeTable::getList(array(
'order' => array("SORT"=>"ASC", "NAME"=>"ASC")
));
$personTypes = array();
while ($personType = $ptRes->fetch())
$personTypes[$personType['ID']] = $personType;
foreach ($personTypes as $personType):
?><option value="<?echo htmlspecialcharsbx($personType["ID"])?>"<?if(is_array($filter_person_type) && in_array($personType["ID"], $filter_person_type)) echo " selected"?>>[<?echo htmlspecialcharsbx($personType["ID"]) ?>] <?echo htmlspecialcharsbx($personType["NAME"])?> <?echo "(".htmlspecialcharsbx($personType["LID"]).")";?></option><?
endforeach;
?>
</select>
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_USER_ID");?>:</td>
<td>
<?echo FindUserID("filter_user_id", $filter_user_id, "", "find_form");?>
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_USER_LOGIN");?>:</td>
<td>
<input type="text" name="filter_user_login" value="<?echo htmlspecialcharsbx($filter_user_login)?>" size="40">
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_USER_EMAIL");?>:</td>
<td>
<input type="text" name="filter_user_email" value="<?echo htmlspecialcharsbx($filter_user_email)?>" size="40">
</td>
</tr>
<tr>
<td><b><?echo Loc::getMessage("SALE_F_DATE_ARCHIVED");?>:</b></td>
<td>
<?echo CalendarPeriod("filter_date_archived_from", $filter_date_archived_from, "filter_date_archived_to", $filter_date_archived_to, "find_form", "Y")?>
</td>
</tr>
<tr>
<td valign="top"><?echo Loc::getMessage("SALE_F_STATUS")?>:</td>
<td valign="top">
<select name="filter_status[]" multiple size="3">
<?
$statusesList = \Bitrix\Sale\OrderStatus::getStatusesUserCanDoOperations(
$USER->GetID(),
array('view')
);
$allStatusNames = \Bitrix\Sale\OrderStatus::getAllStatusesNames();
foreach($statusesList as $statusCode)
{
if (!$statusName = $allStatusNames[$statusCode])
continue;
?><option value="<?= htmlspecialcharsbx($statusCode) ?>"<?if(is_array($filter_status) && in_array($statusCode, $filter_status)) echo " selected"?>>[<?= htmlspecialcharsbx($statusCode) ?>] <?= htmlspecialcharsbx($statusName) ?></option><?
}
?>
</select>
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_CANCELED")?>:</td>
<td>
<select name="filter_canceled">
<option value=""><?echo Loc::getMessage("SALE_F_ALL")?></option>
<option value="Y"<?if($filter_canceled=="Y") echo " selected"?>><?echo Loc::getMessage("SALE_YES")?></option>
<option value="N"<?if($filter_canceled=="N") echo " selected"?>><?echo Loc::getMessage("SALE_NO")?></option>
</select>
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_DEDUCTED")?>:</td>
<td>
<select name="filter_deducted">
<option value=""><?echo Loc::getMessage("SALE_F_ALL")?></option>
<option value="Y"<?if($filter_deducted=="Y") echo " selected"?>><?echo Loc::getMessage("SALE_YES")?></option>
<option value="N"<?if($filter_deducted=="N") echo " selected"?>><?echo Loc::getMessage("SALE_NO")?></option>
</select>
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_PAYED")?>:</td>
<td>
<select name="filter_payed">
<option value=""><?echo Loc::getMessage("SALE_F_ALL")?></option>
<option value="Y"<?if($filter_payed=="Y") echo " selected"?>><?echo Loc::getMessage("SALE_YES")?></option>
<option value="N"<?if($filter_payed=="N") echo " selected"?>><?echo Loc::getMessage("SALE_NO")?></option>
</select>
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SALE_F_ID");?>:</td>
<td>
<script type="text/javascript">
function filter_id_from_Change()
{
if(document.find_form.filter_id_to.value.length<=0)
{
document.find_form.filter_id_to.value = document.find_form.filter_id_from.value;
}
}
</script>
<?echo Loc::getMessage("SALE_F_FROM");?>
<input type="text" name="filter_id_from" OnChange="filter_id_from_Change()" value="<?echo ((int)($filter_id_from)>0)?(int)($filter_id_from):""?>" size="10">
<?echo Loc::getMessage("SALE_F_TO");?>
<input type="text" name="filter_id_to" value="<?echo ((int)($filter_id_to)>0)?(int)($filter_id_to):""?>" size="10">
</td>
</tr>
<tr>
<td><?echo Loc::getMessage("SO_PRODUCT_ID")?></td>
<td>
<script type="text/javascript">
function FillProductFields(arParams)
{
if(arParams["id"])
document.find_form.filter_product_id.value = arParams["id"];
el = document.getElementById("product_name_alt");
if(el)
el.innerHTML = arParams["name"] ? arParams["name"] : '';
}
function showProductSearchDialog()
{
var popup = makeProductSearchDialog({
caller: 'order',
lang: '<?=LANGUAGE_ID?>',
callback: 'FillProductFields'
});
popup.Show();
}
function makeProductSearchDialog(params)
{
var caller = params.caller || '',
lang = params.lang || 'ru',
site_id = params.site_id || '',
callback = params.callback || '',
store_id = params.store_id || '0';
var popup = new BX.CDialog({
content_url: '/bitrix/tools/sale/product_search_dialog.php?lang='+lang+'&LID='+site_id+'&caller=' + caller + '&func_name='+callback+'&STORE_FROM_ID='+store_id,
height: Math.max(500, window.innerHeight-400),
width: Math.max(800, window.innerWidth-400),
draggable: true,
resizable: true,
min_height: 500,
min_width: 800
});
BX.addCustomEvent(popup, 'onWindowRegister', BX.defer(function(){
popup.Get().style.position = 'fixed';
popup.Get().style.top = (parseInt(popup.Get().style.top) - BX.GetWindowScrollPos().scrollTop) + 'px';
}));
return popup;
}
</script>
<input name="filter_product_id" value="<?= htmlspecialcharsbx($filter_product_id) ?>" size="5" type="text"> <input type="button" value="..." id="cat_prod_button" onClick="showProductSearchDialog()"><span id="product_name_alt" class="adm-filter-text-search"></span>
</td>
</tr>
<tr>
<td><?=Loc::getMessage('SO_XML_ID')?>:</td>
<td>
<input type="text" name="filter_xml_id" value="<?echo htmlspecialcharsbx($filter_xml_id)?>" size="40">
</td>
</tr>
<script>
function exportData(val)
{
var oForm = document.form_<?= $sTableID ?>;
var expType = oForm.action_target.checked;
var par = "mode=excel";
if(!expType)
{
var num = oForm.elements.length;
for (var i = 0; i < num; i++)
{
if(oForm.elements[i].tagName.toUpperCase() == "INPUT"
&& oForm.elements[i].type.toUpperCase() == "CHECKBOX"
&& oForm.elements[i].name.toUpperCase() == "ID[]"
&& oForm.elements[i].checked == true)
{
par += "&OID[]=" + oForm.elements[i].value;
}
}
}
if(expType)
{
par += "<?= CUtil::JSEscape(GetFilterParams("filter_", false)); ?>";
}
if(par.length > 0)
{
if (val == "excel")
{
url = 'sale_order_archive.php';
window.open(url + "?EXPORT_FORMAT="+val+"&"+par, "vvvvv");
}
}
}
</script>
<?
$oFilter->Buttons(
array(
"table_id" => $sTableID,
"url" => $APPLICATION->GetCurPage(),
"form" => "find_form"
)
);
$oFilter->End();
?>
</form>
<?
$lAdmin->DisplayList();
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");