Проверка на то выходной завтра или нет

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

fandaymon
Сообщения: 1570
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 40 раз
Поблагодарили: 578 раз

Re: Проверка на то выходной завтра или нет

Сообщение fandaymon » Вс мар 08, 2020 8:07 pm

IrisKo писал(а):
Вс мар 08, 2020 3:52 pm
fandaymon писал(а):
Чт мар 05, 2020 6:16 pm
Весь функционал определения рабочий/не рабочий в модуле есть
Почему то не могу там его найти :( Сам календарь заполнила, а вот как к нему обращаться и как у него "спрашивать" какой день рабочий а какой нет понять не могу. Была уверена что как раз те функции о которых писала в своем первом сообщении для этого и существуют, а оказалось что нет. Если не сложно можете дать ссылочку на описание этого функционала модуля календаря, на какую то инструкцию что ли?
Функционал не значит, что есть функция 8-)
Как-то так

Код: Выделить всё

function CalendarHoliday($date) {

$date_year=(int)date('Y',$date); 
$date_day=(int)date('j',$date);
$date_mon=(int)date('n',$date);

if (date('w',$date) == 0 || date('w',$date) == 6) {
 $workday=SQLSelectOne("select calendar_events.ID,day(DUE) as DAY,month(DUE) as MONTH from calendar_events inner join calendar_categories on calendar_events.calendar_category_id=calendar_categories.id where month(DUE)=" . $date_mon . " and day(DUE)=".$date_day." and calendar_categories.WORKDAYS=1 and  year(DUE)=" . $date_year );
 if ($workday) {
  return 0;
 } else {
  return 1;
 }  
} else {

 $holiday=SQLSelectOne("select calendar_events.ID from calendar_events inner join calendar_categories on calendar_events.calendar_category_id=calendar_categories.id where month(DUE)=" . $date_mon . " and day(DUE)=".$date_day." and calendar_categories.HOLIDAYS=1 and  year(DUE)=" . $date_year );
 if ($holiday) {
  return 1;
 } else {
  return 0;
 }  
}
 
}
За это сообщение автора fandaymon поблагодарили (всего 2):
xor (Пн мар 09, 2020 1:05 am) • IrisKo (Пн мар 09, 2020 2:28 pm)
Рейтинг: 2.33%
IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm
Благодарил (а): 19 раз
Поблагодарили: 4 раза

Re: Проверка на то выходной завтра или нет

Сообщение IrisKo » Чт мар 12, 2020 2:24 am

В общем докладываю :D Просто скопировть и вставить ваш код у меня не получилось почему то, а что и где подправить нужно я не очень соображаю, поэтому вдохновившись вашим решением и немного поняв принцип действия наваяла нечто свое примитивное. Решила тут выложить, а вдруг какому-нибудь чайнику типа меня полезно будет. Прошу прощение за то что такой неоптимальный и слишком закоментированый код получился, просто я в этих вещах профан (я все таки художник, а не программер) поэтому сначала все пишу текстом, а потом в гугле и самоучителях ищу команды которыми написанное можно реализовать :lol: ну а комментарии оставляю чтоб через время не забыть какую "гениальную" идею я этим всем хотела донести :lol:

Код: Выделить всё

$ntoday=(int)date('w',time()); //узнаем номер дня недели
$today=date('Y-m-d',time());//сегоднешнее число конвертируем в нужный формат
$tmw=time()+86400;//числовая метка завтрашнего дня
$tomorrow=date('Y-m-d',$tmw);//конвертируем завтрашнюю дату в нужный формат
$ntomorrow=(int)date('w',$tmw);//узнаем номер дня недели завтрашнего дня

//обращаемся к календарю
$sqltoday = SQLSelectOne("SELECT * FROM calendar_events WHERE DUE='$today'"); //ищем в базе события на эту дату
$catoday = $sqltoday['CALENDAR_CATEGORY_ID'];//если событие находится записываем к какой категории оно относится, если не находится возвращает "пусто"

//повторяем то же самое для завтрашнего дня
$sqltomorrow = SQLSelectOne("SELECT * FROM calendar_events WHERE DUE='$tomorrow'");
$catomorrow = $sqltomorrow['CALENDAR_CATEGORY_ID'];

//определяем рабочий или выходной сегодня
if($catoday==9 || $catoday==10 || $catoday==15){
 //если категория 9-"праздники", 10-"перенесенные выходные" или 15-"отпуск"
 $td="1";// 1 - выходной
}
elseif(($ntoday==0 || $ntoday==6) && $catoday!=11){
 //иначе если день недели "суббота или "воскресенье" и категория НЕ 11-"перенесенный рабочий"
  $td="1";// 1 - выходной
}
elseif(($ntoday==0 || $ntoday==6) && $catoday==11){
 //иначе если день недели "суббота или "воскресенье" и категория 11-"перенесенный рабочий"
  $td="0";// 0 - рабочий день
}
elseif(($ntoday!=0 && $ntoday!=6) && ($catoday!=9 && $catoday!=10 && $catoday!=15)){
 //иначе если день недели НЕ "суббота и НЕ "воскресенье" и категория НЕ 9-"праздники" и НЕ 10-"перенесенные выходные" и НЕ 15-"отпуск"
  $td="0";// 0 - рабочий день
}

//аналогично для завтрашнего дня
if($catomorrow==9 || $catomorrow==10 || $catomorrow==15){
  $tw="1";
}
elseif(($ntomorrow==0 || $ntoday==6) && $catomorrow!=11){
  $tw="1";
}
elseif(($ntomorrow==0 || $ntomorrow==6) && $catomorrow==11){
  $tw="0";
}
elseif(($ntomorrow!=0 && $ntomorrow!=6) && ($catomorrow!=9 && $catomorrow!=10 && $catomorrow!=15)){
  $tw="0";
}

$this -> setProperty('PresentDay',$td);//устанавливаем свойству сегодняшний день значение 0 - рабочий день или 1 - выходной
$this -> setProperty('Tomorrow',$tw);//устанавливаем свойству завтрашний день значение 0 - рабочий день или 1 - выходной

//устанавливаем время ночного режима
if($tw=="0" && $td=="0"){
sg('ThisComputer.NightModeEnd',"06:40");
sg('ThisComputer.NightModeStart',"21:30");
}
elseif($tw=="1" && $td=="0"){
sg('ThisComputer.NightModeEnd',"06:40");
sg('ThisComputer.NightModeStart',"23:00"); 
}
elseif($tw=="1" && $td=="1"){
sg('ThisComputer.NightModeEnd',"10:00");
sg('ThisComputer.NightModeStart',"23:00"); 
}
elseif($tw=="0" && $td=="1"){
sg('ThisComputer.NightModeEnd',"10:00");
sg('ThisComputer.NightModeStart',"21:30"); 
}
Ответить