• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/classes/general/timeman_report_full.php
  • Класс: CUserReportFull
  • Вызов: CUserReportFull::Recalc
public function Recalc()
{
	$settings = $this->GetSettings();
	$lastReportDate = $this->GetLastDate();

	$submitDay = $settings["UF_TM_REPORT_DATE"];
	$submitDayTime = CTimeman::MakeShortTS($settings["UF_TM_TIME"]);

	$fields = [
		"DATE_FROM" => "",
		"DATE_TO" => "",
		"DATE_SUBMIT" => ""
	];

	if (!$settings["UF_REPORT_PERIOD"])
	{
		return $fields;
	}

	switch ($settings["UF_REPORT_PERIOD"])
	{
		case "WEEK":
			if ($settings["UF_TM_DAY"]<=4)//mon,tue,wen,thu
			{
				if ($lastReportDate>strtotime("last sun -1 week") && $lastReportDate<=strtotime("last sun"))
					$fields["DATE_FROM"] = $lastReportDate+$this->oneDayTime;
				else
					$fields["DATE_FROM"] = strtotime("next mon",$lastReportDate);

				$fields["DATE_TO"] = strtotime("next sun", $fields["DATE_FROM"]);
				if (!is_numeric($settings["UF_TM_DAY"]))
				{
					$fields["DATE_SUBMIT"] = strtotime(
						"next " . reset($this->days), $fields["DATE_TO"]
					) + $submitDayTime;
				}
				else
				{
					$fields["DATE_SUBMIT"] = strtotime(
						"next " . $this->days[$settings["UF_TM_DAY"] - 1],
						$fields["DATE_TO"]
					) + $submitDayTime;
				}
			}
			else//fri,sat,sun
			{
				if ($lastReportDate>strtotime("last sun") && $lastReportDate<=strtotime("next sun"))
					$fields["DATE_FROM"] = $lastReportDate+$this->oneDayTime;
				else
					$fields["DATE_FROM"] = strtotime("mon next week",$lastReportDate-date('Z'));

				$fields["DATE_TO"] = strtotime("next sun", $fields["DATE_FROM"]);

				if (!is_numeric($settings["UF_TM_DAY"]))
				{
					$fields["DATE_SUBMIT"] = strtotime(
						"last " . reset($this->days),
						$fields["DATE_TO"]
					) + $submitDayTime;
				}
				else
				{
					$fields["DATE_SUBMIT"] = strtotime(
						"last " . $this->days[$settings["UF_TM_DAY"] - 1],
						$fields["DATE_TO"]
					) + $submitDayTime;
				}
			}
		break;
		case "MONTH":
			$fields["DATE_FROM"] = $lastReportDate + $this->oneDayTime;
			$submitDate = $this->getSubmitDateForNextReport($lastReportDate, $submitDay);
			$fields["DATE_TO"] = $submitDate;
			$fields["DATE_SUBMIT"] = $submitDate + $submitDayTime;
		break;
		case "DAY":
			$fields["DATE_FROM"] = $lastReportDate + $this->oneDayTime;
			$fields["DATE_TO"] = $lastReportDate + $this->oneDayTime;
			$fields["DATE_SUBMIT"] = CTimeMan::RemoveHoursTS($fields["DATE_FROM"]) + $submitDayTime;
		break;

	}

	$fields["DATE_FROM"] = ConvertTimeStampForReport($fields["DATE_FROM"], "SHORT");
	$fields["DATE_TO"] = ConvertTimeStampForReport($fields["DATE_TO"], "SHORT");
	$fields["DATE_SUBMIT"] = ConvertTimeStampForReport($fields["DATE_SUBMIT"], "FULL");

	return $fields;
}