public static function isDayOff($date = null) { if (is_null($date)) { $date = date("d.m.Y"); } //$date = "4.11.2016"; $dateHelper = new DateHelper(); list($day, $month, $year) = explode(".", $date); $timestamp = $dateHelper->getDateTimestamp($date); $dayOfWeek = date("w", $timestamp); if ($dayOfWeek == 0) { $dayOfWeek = 7; } $res = WorkCalendarTable::getList(array('filter' => array('DAY' => intval($day), 'MONTH' => intval($month), 'YEAR' => intval($year)))); if (!$res) { //Если дата не найдена - смотрим день недели и отвечаем выходной он или нет if ($dayOfWeek >= 1 && $dayOfWeek <= 5) { return false; } else { return true; } } else { //Если дата найдена - смотрим выходной день или нет по флагу if ($res[0]["WEEKEND"] == "Y" || $res[0]["WEEKEND"] === true) { return true; } else { return false; } } }
public static function showListTable($carID = null) { if (is_null($carID)) { $carID = MyCar::getDefaultCarID(); } $arList = static::getTsList($carID); if ($arList) { echo '<div id="tsList"></div><div id="tsPager"></div>'; $dateHelper = new CoreLib\DateHelper(); $imgSrcPath = CoreLib\Tools::getSitePath(CoreLib\Loader::getTemplate('icar') . "images/"); //msDebug($arList); $arDatas = array(); foreach ($arList as $list) { $arDatas[] = array('id' => $list['ID'], 'ts' => "ТО-" . $list['TS_NUM'], 'date' => $list['DATE'], 'timestamp' => "=" . $dateHelper->getDateTimestamp($list['DATE']), 'odo' => "=" . $list['ODO'], 'cost' => "=" . $list['COST'], 'executors_name' => $list['EXECUTORS_NAME'], 'point_name' => $list['POINT_NAME'], 'point_latitude' => $list['POINT_LATITUDE'], 'point_longitude' => $list['POINT_LONGITUDE'], 'yandex_map' => "<img src='https://static-maps.yandex.ru/1.x/?l=map&z=12&size=600,450&pt=" . $list['POINT_LONGITUDE'] . "," . $list['POINT_LATITUDE'] . ",pm2blm'>", 'point_type' => $list['POINT_TYPE_NAME'], 'info' => strlen($list['INFO']) > 0 ? "<img src='" . $imgSrcPath . "info.png'>" : "", 'comment' => $list['INFO'], 'edit' => "<a href='edit.php?id=" . $list['ID'] . "'><img src='" . $imgSrcPath . "edit.png'></a>", 'delete' => "<a href='delete.php?id=" . $list['ID'] . "'><img src='" . $imgSrcPath . "delete.png'></a>"); } $webixHelper = new IcarWebixHelper(); $webixHelper->addFunctionSortByTimestamp(); $arData = array('grid' => 'tsGrid', 'container' => 'tsList', 'footer' => true, 'tooltip' => true, 'pager' => array('container' => 'tsPager'), 'columns' => array($webixHelper->getColumnArray('DATE', array('footer' => '={text:"Итого:", colspan:3}')), $webixHelper->getColumnArray('TS'), $webixHelper->getColumnArray('ODO'), $webixHelper->getColumnArray('EXECUTORS'), $webixHelper->getColumnArray('COST', array('footer' => '={ content:"summColumn" }')), $webixHelper->getColumnArray('POINT'), $webixHelper->getColumnArray('INFO'), $webixHelper->getColumnArray('EDIT'), $webixHelper->getColumnArray('DELETE')), 'data' => $arDatas); return CoreLib\Webix::showDataTable($arData); } else { echo 'Нет данных о прохождении ТО'; return false; } }
protected static function getCalendar($month, $year) { //В коде может использоваться другой пакет if (CoreLib\Loader::issetPackage('dates')) { //Если пакет установлен, подключаем его CoreLib\Loader::IncludePackage('dates'); } //$month = 2; $year = 2017; //Для теста $arCalendar = array(); $dateHelper = new CoreLib\DateHelper(); $arCalendar["INFO"]["MONTH"] = $month; $arCalendar["INFO"]["YEAR"] = $year; //Получаем timestamp на первое число заданного месяца и года $arCalendar["INFO"]["START_DATE"] = "1." . $month . "." . $year; $arCalendar["INFO"]["START_TIMESTAMP"] = $dateHelper->getDateTimestamp($arCalendar["INFO"]["START_DATE"]); //Получаем количество дней в месяце $arCalendar["INFO"]["NUMBER_OF_DAYS"] = intval(date("t", $arCalendar["INFO"]["START_TIMESTAMP"])); //Получаем timestamp на последнее число заданного месяца и года $arCalendar["INFO"]["LAST_DATE"] = $arCalendar["INFO"]["NUMBER_OF_DAYS"] . "." . $month . "." . $year; $arCalendar["INFO"]["LAST_TIMESTAMP"] = $dateHelper->getDateTimestamp($arCalendar["INFO"]["LAST_DATE"]); //Получаем день недели для 1го числа месяца $arCalendar["INFO"]["START_DAY_OF_WEEK"] = intval(date("w", $arCalendar["INFO"]["START_TIMESTAMP"])); if ($arCalendar["INFO"]["START_DAY_OF_WEEK"] == 0) { $arCalendar["INFO"]["START_DAY_OF_WEEK"] = 7; } //Получаем день недели для последнего числа месяца $arCalendar["INFO"]["LAST_DAY_OF_WEEK"] = intval(date("w", $arCalendar["INFO"]["LAST_TIMESTAMP"])); if ($arCalendar["INFO"]["LAST_DAY_OF_WEEK"] == 0) { $arCalendar["INFO"]["LAST_DAY_OF_WEEK"] = 7; } //Если 1е число не понедельник - нужно получить несколько дней предыдущего месяца if ($arCalendar["INFO"]["START_DAY_OF_WEEK"] != 1) { $arCalendar["INFO"]["DAY_PREV_MONTH"] = $arCalendar["INFO"]["START_DAY_OF_WEEK"] - 1; $arCalendar["INFO"]["FIRST_DAY_PREV_MONTH"] = $dateHelper->strToTime($arCalendar["INFO"]["START_DATE"], "-" . $arCalendar["INFO"]["DAY_PREV_MONTH"] . " day"); list($arCalendar["INFO"]["PREV_MONTH_DAY"], $arCalendar["INFO"]["PREV_MONTH_MONTH"], $arCalendar["INFO"]["PREV_MONTH_YEAR"]) = explode(".", $arCalendar["INFO"]["FIRST_DAY_PREV_MONTH"]); for ($i = 0; $i < $arCalendar["INFO"]["DAY_PREV_MONTH"]; $i++) { if ($i == 0) { $dayOfWeek = date("w", $dateHelper->getDateTimestamp(intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_YEAR"]))); if ($dayOfWeek == 0) { $dayOfWeek = 7; } //Использование пакета "Даты" if (CoreLib\Loader::issetPackage('dates')) { $isDayOff = \MSergeev\Packages\Dates\Lib\WorkCalendar::isDayOff(intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_YEAR"])); if ($isDayOff) { $dayOfWeek = 6; } else { $dayOfWeek = 1; } } $arCalendar["PREV_MONTH"][intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_YEAR"])] = array("TEXT" => intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) . " " . self::getMonthName(intval($arCalendar["INFO"]["PREV_MONTH_MONTH"])), "DAY_OF_WEEK" => $dayOfWeek); } else { $dayOfWeek = date("w", $dateHelper->getDateTimestamp(intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) + $i . "." . intval($arCalendar["INFO"]["PREV_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_YEAR"]))); if ($dayOfWeek == 0) { $dayOfWeek = 7; } //Использование пакета "Даты" if (CoreLib\Loader::issetPackage('dates')) { $isDayOff = \MSergeev\Packages\Dates\Lib\WorkCalendar::isDayOff(intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) + $i . "." . intval($arCalendar["INFO"]["PREV_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_YEAR"])); if ($isDayOff) { $dayOfWeek = 6; } else { $dayOfWeek = 1; } } $arCalendar["PREV_MONTH"][intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) + $i . "." . intval($arCalendar["INFO"]["PREV_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["PREV_MONTH_YEAR"])] = array("TEXT" => intval($arCalendar["INFO"]["PREV_MONTH_DAY"]) + $i, "DAY_OF_WEEK" => $dayOfWeek); } } } //Вносим информацию по заданному месяцу for ($i = 0; $i < $arCalendar["INFO"]["NUMBER_OF_DAYS"]; $i++) { if ($i == 0) { $dayOfWeek = date("w", $dateHelper->getDateTimestamp($i + 1 . "." . $month . "." . $year)); if ($dayOfWeek == 0) { $dayOfWeek = 7; } //Использование пакета "Даты" if (CoreLib\Loader::issetPackage('dates')) { $isDayOff = \MSergeev\Packages\Dates\Lib\WorkCalendar::isDayOff($i + 1 . "." . $month . "." . $year); if ($isDayOff) { $dayOfWeek = 6; } else { $dayOfWeek = 1; } } $arCalendar["NOW_MONTH"][$i + 1 . "." . $month . "." . $year] = array("TEXT" => $i + 1 . " " . self::getMonthName($month), "DAY_OF_WEEK" => $dayOfWeek); } else { $dayOfWeek = date("w", $dateHelper->getDateTimestamp($i + 1 . "." . $month . "." . $year)); if ($dayOfWeek == 0) { $dayOfWeek = 7; } //Использование пакета "Даты" if (CoreLib\Loader::issetPackage('dates')) { $isDayOff = \MSergeev\Packages\Dates\Lib\WorkCalendar::isDayOff($i + 1 . "." . $month . "." . $year); if ($isDayOff) { $dayOfWeek = 6; } else { $dayOfWeek = 1; } } $arCalendar["NOW_MONTH"][$i + 1 . "." . $month . "." . $year] = array("TEXT" => $i + 1, "DAY_OF_WEEK" => $dayOfWeek); } } //Если последний день заданного месяца не воскресение - нужно добавить несколько дней следующего месяца if ($arCalendar["INFO"]["LAST_DAY_OF_WEEK"] != 7) { $arCalendar["INFO"]["FIRST_DAY_NEXT_MONTH"] = $dateHelper->strToTime($arCalendar["INFO"]["LAST_DATE"], "+1 day"); list($arCalendar["INFO"]["NEXT_MONTH_DAY"], $arCalendar["INFO"]["NEXT_MONTH_MONTH"], $arCalendar["INFO"]["NEXT_MONTH_YEAR"]) = explode(".", $arCalendar["INFO"]["FIRST_DAY_NEXT_MONTH"]); $arCalendar["INFO"]["DAY_NEXT_MONTH"] = 7 - $arCalendar["INFO"]["LAST_DAY_OF_WEEK"]; for ($i = 0; $i < $arCalendar["INFO"]["DAY_NEXT_MONTH"]; $i++) { if ($i == 0) { $dayOfWeek = date("w", $dateHelper->getDateTimestamp($i + 1 . "." . intval($arCalendar["INFO"]["NEXT_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["NEXT_MONTH_YEAR"]))); if ($dayOfWeek == 0) { $dayOfWeek = 7; } //Использование пакета "Даты" if (CoreLib\Loader::issetPackage('dates')) { $isDayOff = \MSergeev\Packages\Dates\Lib\WorkCalendar::isDayOff($i + 1 . "." . intval($arCalendar["INFO"]["NEXT_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["NEXT_MONTH_YEAR"])); if ($isDayOff) { $dayOfWeek = 6; } else { $dayOfWeek = 1; } } $arCalendar["NEXT_MONTH"][$i + 1 . "." . intval($arCalendar["INFO"]["NEXT_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["NEXT_MONTH_YEAR"])] = array("TEXT" => $i + 1 . " " . self::getMonthName(intval($arCalendar["INFO"]["NEXT_MONTH_MONTH"])), "DAY_OF_WEEK" => $dayOfWeek); } else { $dayOfWeek = date("w", $dateHelper->getDateTimestamp($i + 1 . "." . intval($arCalendar["INFO"]["NEXT_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["NEXT_MONTH_YEAR"]))); if ($dayOfWeek == 0) { $dayOfWeek = 7; } //Использование пакета "Даты" if (CoreLib\Loader::issetPackage('dates')) { $isDayOff = \MSergeev\Packages\Dates\Lib\WorkCalendar::isDayOff($i + 1 . "." . intval($arCalendar["INFO"]["NEXT_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["NEXT_MONTH_YEAR"])); if ($isDayOff) { $dayOfWeek = 6; } else { $dayOfWeek = 1; } } $arCalendar["NEXT_MONTH"][$i + 1 . "." . intval($arCalendar["INFO"]["NEXT_MONTH_MONTH"]) . "." . intval($arCalendar["INFO"]["NEXT_MONTH_YEAR"])] = array("TEXT" => $i + 1, "DAY_OF_WEEK" => $dayOfWeek); } } } return $arCalendar; }
public static function checkAlerts() { $arAlerts = array(); $arCars = static::getListCar(); $dateHelper = new DateHelper(); $time = time(); foreach ($arCars as &$arCar) { //Проверка необходимости ТО $arCar['CURRENT_MILEAGE'] = static::getCarCurrentMileage($arCar['ID']); //echo 'CURRENT_MILEAGE ='.$arCar['CURRENT_MILEAGE']."<br>"; //echo 'count = floor(CURRENT_MILEAGE / INTERVAL_TS)<br>'; $count = floor($arCar['CURRENT_MILEAGE'] / $arCar['INTERVAL_TS']); //echo $count.' = floor('.$arCar['CURRENT_MILEAGE'].' / '.$arCar['INTERVAL_TS'].')<br>'; //echo 'minus = INTERVAL_TS * count<br>'; $minus = $arCar['INTERVAL_TS'] * $count; //echo $minus.' = '.$arCar['INTERVAL_TS'].' * '.$count.'<br>'; //echo 'curMil = CURRENT_MILEAGE - minus<br>'; $curMil = $arCar['CURRENT_MILEAGE'] - $minus; //echo $curMil.' = '.$arCar['CURRENT_MILEAGE'].' - '.$minus.'<br>'; //echo 'raznica = INTERVAL_TS - curMil<br>'; $raznica = $arCar['INTERVAL_TS'] - $curMil; //echo $raznica.' = '.$arCar['INTERVAL_TS'].' - '.$curMil.'<br>'; if ($raznica > 500 && $raznica <= 1000) { $arAlerts[] = array('COLOR' => 'green', 'TYPE' => 'odo', 'TEXT' => 'Обратите внимание! Скоро необходимо будет проходить плановое ТО на автомобиле "' . $arCar['NAME'] . '"! Осталось проехать ' . $raznica . ' км'); } elseif ($raznica > 300 && $raznica <= 500) { $arAlerts[] = array('COLOR' => 'yellow', 'TYPE' => 'odo', 'TEXT' => 'Внимание! В ближайшее время необходимо пройти плановое ТО на автомобиле "' . $arCar['NAME'] . '"! Осталось проехать ' . $raznica . ' км'); } elseif ($raznica >= 0 && $raznica <= 300) { $arAlerts[] = array('COLOR' => 'red', 'TYPE' => 'odo', 'TEXT' => 'ВНИМАНИЕ! Необходимо в срочном порядке пройти плановое ТО на автомобиле "' . $arCar['NAME'] . '"!'); } //Проверка необходимости оформления новой страховки и прохождения ГТО $carOsagoTime = $dateHelper->getDateTimestamp($arCar['DATE_OSAGO_END']); $carGtoTime = $dateHelper->getDateTimestamp($arCar['DATE_GTO_END']); $carOsagoDay = floor(($carOsagoTime - $time) / (60 * 60 * 24)) + 1; $carGtoDay = floor(($carGtoTime - $time) / (60 * 60 * 24)) + 1; if ($carOsagoDay > 5 && $carOsagoDay <= 30) { $arAlerts[] = array('COLOR' => 'green', 'TYPE' => 'osago', 'TEXT' => 'Заканчивается срок действия полиса ОСАГО у автомобиля "' . $arCar['NAME'] . '". Рекомендуем позаботится о продлении заранее. Осталось ' . $carOsagoDay . ' ' . $dateHelper->showDaysRus($carOsagoDay)); } elseif ($carOsagoDay > 0 && $carOsagoDay <= 5) { $arAlerts[] = array('COLOR' => 'yellow', 'TYPE' => 'osago', 'TEXT' => 'Внимание! Скоро закончится срок действия полиса ОСАГО у автомобиля "' . $arCar['NAME'] . '". Необходимо продлить полис! Осталось ' . $carOsagoDay . ' ' . $dateHelper->showDaysRus($carOsagoDay)); } elseif ($carOsagoDay == 0) { $arAlerts[] = array('COLOR' => 'red', 'TYPE' => 'osago', 'TEXT' => 'ВНИМАНИЕ! Сегодня заканчиватся срок действия полиса ОСАГО у автомобиля "' . $arCar['NAME'] . '". Необходимо СРОЧНО продлить полис!'); } elseif ($carOsagoDay < 0) { $arAlerts[] = array('COLOR' => 'red', 'TYPE' => 'osago', 'TEXT' => 'ВНИМАНИЕ! Закончился срок действия полиса ОСАГО у автомобиля "' . $arCar['NAME'] . '". Необходимо СРОЧНО продлить полис!'); } if ($carGtoDay > 5 && $carGtoDay <= 30) { $arAlerts[] = array('COLOR' => 'green', 'TYPE' => 'gto', 'TEXT' => 'Подходит дата очередного ГТО у автомобиля "' . $arCar['NAME'] . '". Подготовьте автомобиль к осмотру. Осталось ' . $carGtoDay . ' ' . $dateHelper->showDaysRus($carGtoDay)); } elseif ($carGtoDay > 0 && $carGtoDay <= 5) { $arAlerts[] = array('COLOR' => 'yellow', 'TYPE' => 'gto', 'TEXT' => 'Внимание! Скоро подойдет дата очередного ГТО у автомобиля "' . $arCar['NAME'] . '". Последняя возможность подготовить автомобиль к осмотру! Осталось ' . $carGtoDay . ' ' . $dateHelper->showDaysRus($carGtoDay)); } elseif ($carGtoDay == 0) { $arAlerts[] = array('COLOR' => 'red', 'TYPE' => 'gto', 'TEXT' => 'ВНИМАНИЕ! Сегодня последний день действия ГТО на автомобиле "' . $arCar['NAME'] . '". Необходимо СРОЧНО пройти ГТО!'); } elseif ($carGtoDay < 0) { $arAlerts[] = array('COLOR' => 'red', 'TYPE' => 'gto', 'TEXT' => 'ВНИМАНИЕ! Необходимо СРОЧНО пройти ГТО на автомобиле "' . $arCar['NAME'] . '". Езда без ГТО может привести к штрафу и лишению прав. Необходимо СРОЧНО пройти ГТО!'); } //msDebug($arCar); } unset($arCar); return $arAlerts; }