• Модуль: 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__); } }