• Модуль: support
  • Путь к файлу: ~/bitrix/modules/support/classes/general/timetablecache.php
  • Класс: CSupportTimetableCache
  • Вызов: CSupportTimetableCache::getEndDate
static function getEndDate($sla, $periodMin0, $dateFrom, $secondTry = false)
{
	global $DB;
	$err_mess = (self::err_mess())."
Function: getEndDate
Line: "; $sla = intval($sla); $periodMin = intval($periodMin0) * 60; $dateFromTS = MakeTimeStamp($dateFrom) - CTimeZone::GetOffset(); $timetableCache = self::TIMETABLE_CACHE; CTimeZone::Disable(); $strSql = " SELECT TC.ID, TC.SLA_ID, " . $DB->DateToCharFunction("TC.DATE_FROM", "FULL") . " DATE_FROM, " . $DB->DateToCharFunction("TC.DATE_TILL", "FULL") . " DATE_TILL, TC.W_TIME, TC.W_TIME_INC FROM $timetableCache TC INNER JOIN ( SELECT MAX(TC.DATE_FROM) MAX_DATE_FROM FROM $timetableCache TC WHERE SLA_ID = $sla AND DATE_FROM <= " . $DB->CharToDateFunction($dateFrom) . ") PZ ON TC.DATE_FROM = PZ.MAX_DATE_FROM AND SLA_ID = $sla"; $q = $DB->Query($strSql, false, $err_mess.__LINE__); CTimeZone::Enable(); if($arrR = $q->Fetch()) { $delta = intval($arrR["W_TIME_INC"]) - intval($arrR["W_TIME"]) + min(($dateFromTS - MakeTimeStamp($arrR["DATE_FROM"])), intval($arrR["W_TIME"])); $findD = $delta + $periodMin ; //CTimeZone::Disable(); $strSql = " SELECT TC.ID, TC.SLA_ID, " . $DB->DateToCharFunction("TC.DATE_FROM", "FULL") . " DATE_FROM, " . $DB->DateToCharFunction("TC.DATE_TILL", "FULL") . " DATE_TILL, TC.W_TIME, TC.W_TIME_INC FROM $timetableCache TC INNER JOIN ( SELECT MIN(TC.DATE_FROM) DF FROM $timetableCache TC WHERE SLA_ID = $sla AND $findD <= W_TIME_INC AND W_TIME_INC <= ($findD + 2*24*60*60)) PZ ON TC.DATE_FROM = PZ.DF AND SLA_ID = $sla"; $q2 = $DB->Query($strSql, false, $err_mess.__LINE__); //CTimeZone::Enable(); if($arrR2 = $q2->Fetch()) { $ts = MakeTimeStamp($arrR2["DATE_TILL"]) - (intval($arrR2["W_TIME_INC"]) - $findD); $ts2010 = mktime(0, 0, 0, 1, 1, 2010); if($ts > $ts2010) { return $ts; } } } if(!$secondTry) { $arOpt = array("SLA" => $sla, "PERIOD_MIN" => $periodMin0, "DATE_FROM" => $dateFrom); $res = self::ToCache(array( "SLA_ID"=> $sla ), false, $arOpt); if($res !== null) { return $res; } return self::getEndDate($sla, $periodMin0, $dateFrom, true); } return null; }