if ($bSameUser && $arFields["ACTIVE"] == "Y") { $arFields["APPROVE"] = "Y"; $arFields["APPROVER"] = $curUser; $arFields["APPROVE_DATE"] = ConvertTimeStamp(time(), "FULL"); $arFields["MARK"] = "N"; } if ($ID) { $dbReport = CTimeManReportFull::GetByID($ID); $arReport = $dbReport->Fetch(); if ($USER->GetID() == $arReport["USER_ID"]) { $res = CTimeManReportFull::Update($ID, $arFields); } if ($arFields["ACTIVE"] == "Y" && $arReport["ACTIVE"] == "N") { $last_date = strtotime("+1 days", MakeTimeStamp($arFields["DATE_TO"])); $last_date = ConvertTimeStampForReport($last_date, "SHORT"); $tm_user->SetLastDate($arReport["USER_ID"], $last_date); $tm_user->CancelDelay(); if (!$bSameUser) { CReportNotifications::SendMessage($ID); } } } else { if (is_array($_SESSION['report_files'])) { $arFields['FILES'] = $_SESSION['report_files']; } $arManagers = CTimeMan::GetUserManagers($curUser); $res = CTimeManReportFull::Add($arFields); if ($res && $arFields["ACTIVE"] != "N" && !$bSameUser) { CReportNotifications::SendMessage($res); } }
public static function Add($arFields) { global $DB; $tm_user = new CUserReportFull($arFields["USER_ID"]); $arReportDate = $tm_user->GetReportInfo(); if ($arReportDate["IS_REPORT_DAY"] != "Y") { return false; } $arFields["DATE_TO"] = ConvertTimeStamp(MakeTimeStamp($arReportDate["DATE_TO"], TM_SHORT_FORMAT), "SHORT"); $arFields["DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp($arReportDate["DATE_FROM"], TM_SHORT_FORMAT), "SHORT"); $arFields["REPORT_DATE"] = ConvertTimeStamp(MakeTimeStamp($arFields["REPORT_DATE"], TM_FULL_FORMAT), "FULL"); foreach (GetModuleEvents('timeman', 'OnBeforeFullReportAdd', true) as $event) { if (false === ExecuteModuleEventEx($event, array(&$arFields))) { return false; } } if (!self::CheckFields('ADD', $arFields)) { return false; } //we try to find report with DATE_TO>DATE_FROM-of-current-report $dbreport = CTimeManReportFull::GetList(array("DATE_FROM" => "DESC"), array(">=DATE_TO" => $arFields["DATE_FROM"], "USER_ID" => $arFields["USER_ID"], "ACTIVE" => "Y"), array("ID", "DATE_TO"), array("nTopCount" => 1)); if ($last_report = $dbreport->Fetch()) { //if we found it //fix date from $arFields["DATE_FROM"] = ConvertTimeStamp(strtotime("next day", MakeTimeStamp($last_report["DATE_TO"])), "SHORT"); } if (MakeTimeStamp($arFields["DATE_FROM"]) > MakeTimeStamp($arFields["DATE_TO"])) { //fix date to $arFields["DATE_TO"] = $arFields["DATE_FROM"]; } CTimeZone::Disable(); $ID = $DB->Add('b_timeman_report_full', $arFields, array('REPORT', 'TASKS', 'EVENTS', 'FILES')); CTimeZone::Enable(); if ($ID > 0) { $last_date = ConvertTimeStampForReport(MakeTimeStamp($arFields["DATE_TO"]), "SHORT"); $arFields['ID'] = $ID; foreach (GetModuleEvents('timeman', 'OnAfterFullReportAdd', true) as $a) { ExecuteModuleEventEx($a, array($arFields)); } if ($arFields["ACTIVE"] != "N") { $tm_user->SetLastDate($arFields["USER_ID"], $last_date); } } return $ID; }