- Модуль: support
- Путь к файлу: ~/bitrix/modules/support/classes/general/support.php
- Класс: CAllTicket
- Вызов: CAllTicket::UpdateLastParams2
function UpdateLastParams2($ticketID, $dateType)
{
global $DB;
$strUsers = implode(",", CTicket::GetSupportTeamAndAdminUsers());
$err_mess = (CAllTicket::err_mess())."
Function: UpdateLastParams2
Line: ";
$arFields=array();
$arFields["D_1_USER_M_AFTER_SUP_M"] = "null";
$arFields["ID_1_USER_M_AFTER_SUP_M"] = "null";
$arFields["LAST_MESSAGE_BY_SUPPORT_TEAM"] = "'Y'";
$arFields["SUPPORT_DEADLINE_NOTIFY"] = "null";
$arFields["SUPPORT_DEADLINE"] = "null";
$arFields["IS_OVERDUE"] = "'N'";
$arFields["IS_NOTIFIED"] = "'N'";
// Get last support response
$M_ID = 0;
$strSql = "
SELECT
T.ID ID,
MAX(TM.ID) M_ID
FROM
b_ticket T
INNER JOIN b_ticket_message TM
ON T.ID = TM.TICKET_ID
AND T.ID = $ticketID
AND TM.OWNER_USER_ID IN($strUsers)
AND (NOT(TM.IS_LOG='Y'))
AND (NOT(TM.IS_HIDDEN='Y'))
AND (NOT(TM.NOT_CHANGE_STATUS='Y'))
GROUP BY
T.ID";
$rs = $DB->Query($strSql, false, $err_mess . __LINE__);
if($arrRs = $rs->Fetch())
{
if(intval($arrRs["M_ID"]) > 0)
{
$M_ID = intval($arrRs["M_ID"]);
}
}
// Get first user request after last support response
$strSql = "
SELECT
T.SLA_ID,
T.DATE_CLOSE,
" . $DB->DateToCharFunction("T.DEADLINE_SOURCE_DATE", "FULL") . " DEADLINE_SOURCE_DATE,
" . $DB->DateToCharFunction("T.D_1_USER_M_AFTER_SUP_M", "FULL") . " DATE_OLD,
T.IS_OVERDUE,
SLA.RESPONSE_TIME_UNIT,
SLA.RESPONSE_TIME,
SLA.NOTICE_TIME_UNIT,
SLA.NOTICE_TIME,
PZ2.M_ID,
PZ2.D_1_USER_M_AFTER_SUP_M
FROM
b_ticket T
INNER JOIN b_ticket_sla SLA
ON T.SLA_ID = SLA.ID
AND T.ID = $ticketID
LEFT JOIN (SELECT
TM.ID M_ID,
TM.TICKET_ID,
" . $DB->DateToCharFunction("TM.DATE_CREATE", "FULL") . " D_1_USER_M_AFTER_SUP_M
FROM
b_ticket_message TM
INNER JOIN (SELECT
T.ID ID,
MIN(TM.ID) M_ID
FROM
b_ticket T
INNER JOIN b_ticket_message TM
ON T.ID = TM.TICKET_ID
AND T.ID = $ticketID
AND TM.ID > $M_ID
AND (NOT(TM.IS_LOG='Y'))
AND (NOT(TM.NOT_CHANGE_STATUS='Y'))
AND (NOT(TM.IS_HIDDEN='Y'))
GROUP BY
T.ID) PZ
ON TM.ID = PZ.M_ID) PZ2
ON T.ID = PZ2.TICKET_ID
";
//AND (NOT(TM.IS_HIDDEN='Y'))
$rs = $DB->Query($strSql, false, $err_mess . __LINE__);
if(!($arrRs = $rs->Fetch()))
{
return;
}
$isOverdue = false;
if(intval($arrRs["M_ID"]) > 0)
{
$arFields["D_1_USER_M_AFTER_SUP_M"] = $DB->CharToDateFunction($arrRs["D_1_USER_M_AFTER_SUP_M"]);
$arFields["ID_1_USER_M_AFTER_SUP_M"] = intval($arrRs["M_ID"]);
$arFields["LAST_MESSAGE_BY_SUPPORT_TEAM"] = "'N'";
if($arrRs["IS_OVERDUE"] == "Y" && !(isset($dateType["EVENT"]) && in_array(CTicket::REOPEN, $dateType["EVENT"])))
{
unset($arFields["SUPPORT_DEADLINE_NOTIFY"]);
unset($arFields["SUPPORT_DEADLINE"]);
unset($arFields["IS_OVERDUE"]);
unset($arFields["IS_NOTIFIED"]);
$isOverdue = true;
}
}
if( !$isOverdue && intval($arrRs["DATE_CLOSE"]) <= 0 && $arFields["LAST_MESSAGE_BY_SUPPORT_TEAM"] == "'N'")
{
$arrRs["ID"] = $ticketID;
CTicketReminder::RecalculateSupportDeadlineForOneTicket($arrRs, $arFields, $dateType);
}
else
{
if(isset($dateType["EVENT"]) && is_array($dateType["EVENT"]) && in_array(CTicket::REOPEN, $dateType["EVENT"]))
{
$arFields["DEADLINE_SOURCE_DATE"] = $DB->CharToDateFunction(GetTime(time() + CTimeZone::GetOffset(),"FULL"));
}
$DB->Update("b_ticket", $arFields, "WHERE ID='" . $ticketID . "'", $err_mess . __LINE__);
}
}