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