- Модуль: support
- Путь к файлу: ~/bitrix/modules/support/classes/mysql/support.php
- Класс: CTicket
- Вызов: CTicket::GetDynamicList
static function GetDynamicList($by = 's_date_create', $order = 'desc', $arFilter = [])
{
$err_mess = (CTicket::err_mess())."
Function: GetDynamicList
Line: ";
global $DB;
$arSqlSearch = Array();
if (is_array($arFilter))
{
$filterKeys = array_keys($arFilter);
$filterKeysCount = count($filterKeys);
for ($i=0; $i<$filterKeysCount; $i++)
{
$key = $filterKeys[$i];
$val = $arFilter[$filterKeys[$i]];
if ((is_array($val) && count($val)<=0) || (!is_array($val) && ((string) $val == '' || $val==='NOT_REF')))
continue;
$matchValueSet = (in_array($key."_EXACT_MATCH", $filterKeys)) ? true : false;
$key = strtoupper($key);
switch($key)
{
case "DATE_CREATE_1":
if (CheckDateTime($val))
$arSqlSearch[] = "T.DATE_CREATE>=".$DB->CharToDateFunction($val, "SHORT");
break;
case "DATE_CREATE_2":
if (CheckDateTime($val))
$arSqlSearch[] = "T.DATE_CREATE<".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
break;
case "RESPONSIBLE":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $matchValueSet) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("T.RESPONSIBLE_USER_ID, UR.LOGIN, UR.LAST_NAME, UR.NAME", $val, $match);
break;
case "RESPONSIBLE_ID":
if (intval($val)>0) $arSqlSearch[] = "T.RESPONSIBLE_USER_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.RESPONSIBLE_USER_ID is null or T.RESPONSIBLE_USER_ID=0)";
break;
case "SLA_ID":
case "SLA":
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $matchValueSet) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("T.SLA_ID", $val, $match);
break;
case "CATEGORY_ID":
case "CATEGORY":
if (intval($val)>0) $arSqlSearch[] = "T.CATEGORY_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.CATEGORY_ID is null or T.CATEGORY_ID=0)";
break;
case "CRITICALITY_ID":
case "CRITICALITY":
if (intval($val)>0) $arSqlSearch[] = "T.CRITICALITY_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.CRITICALITY_ID is null or T.CRITICALITY_ID=0)";
break;
case "STATUS_ID":
case "STATUS":
if (intval($val)>0) $arSqlSearch[] = "T.STATUS_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.STATUS_ID is null or T.STATUS_ID=0)";
break;
case "MARK_ID":
case "MARK":
if (intval($val)>0) $arSqlSearch[] = "T.MARK_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.MARK_ID is null or T.MARK_ID=0)";
break;
case "SOURCE_ID":
case "SOURCE":
if (intval($val)>0) $arSqlSearch[] = "T.SOURCE_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.SOURCE_ID is null or T.SOURCE_ID=0)";
break;
case "DIFFICULTY_ID":
case "DIFFICULTY":
if (intval($val)>0) $arSqlSearch[] = "T.DIFFICULTY_ID = '".intval($val)."'";
elseif ($val==0) $arSqlSearch[] = "(T.DIFFICULTY_ID is null or T.DIFFICULTY_ID=0)";
break;
}
}
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
if ($by == "s_date_create") $strSqlOrder = "ORDER BY T.DATE_CREATE";
else
{
$strSqlOrder = "ORDER BY T.DATE_CREATE";
}
if ($order!="asc")
{
$strSqlOrder .= " desc ";
}
$strSql = "
SELECT
count(T.ID) ALL_TICKETS,
sum(if(T.DATE_CLOSE is null,1,0)) OPEN_TICKETS,
sum(if(T.DATE_CLOSE is null,0,1)) CLOSE_TICKETS,
DAYOFMONTH(T.DAY_CREATE) CREATE_DAY,
MONTH(T.DAY_CREATE) CREATE_MONTH,
YEAR(T.DAY_CREATE) CREATE_YEAR
FROM
b_ticket T
LEFT JOIN b_user UR ON (T.RESPONSIBLE_USER_ID = UR.ID)
WHERE
$strSqlSearch
and T.DAY_CREATE is not null
GROUP BY
TO_DAYS(T.DAY_CREATE)
$strSqlOrder
";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return $res;
}