Страница 4 из 5
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Пн апр 29, 2019 2:22 pm
usolie
xor, у меня тоже один в один вопрос, управлять будильником для начала.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Пн апр 29, 2019 10:45 pm
xor
usolie писал(а): Пн апр 29, 2019 2:22 pm
xor, у меня тоже один в один вопрос, управлять будильником для начала.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
у меня компиляция ряда постов:
сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое
Перенесенный рабочий день, кмк, совершенно не информативное
Код: Выделить всё
//0 - выходной,1 - рабочий
function weekDay($date = null) {
if(!isset($date)) $date = time();
$this_year = (int) date('Y', $date);
//debmes(' >>>date '.date('Y-m-d',$date));
//Загружаем если год меняется
$calend = gg('productionCalendar.value');
$order = array("\r\n", "\n", "\r", "<",">" );
$newstr = str_replace($order, " ", $calend);
$pos = strpos( $newstr, 'calendar year='.'"'.$this_year.'"');
if($pos===false){
//Загружаем производственный календарь
$productionCalendar = @file_get_contents('http://xmlcalendar.ru/data/ru/' . $this_year . '/calendar.xml');
}
if ($productionCalendar) { //Если прочитали без ошибок
sg('productionCalendar.value', $productionCalendar); //Запишем на всякий случай))
} else { //Если не прочиталось
$productionCalendar = gg('productionCalendar.value'); // Возьмем ранее загруженный календарь
}
//Проверяем сегодняшний день по производственному календарю (рабочий или нет)
$weekDay = -1;
$this_date = date('m.d', $date);
$calend = new SimpleXMLElement($productionCalendar);
foreach ($calend->days->day as $day) {
$type = $day->attributes()->t; //тип дня: 1 - выходной день, 2 - короткий день, 3 - рабочий день (суббота/воскресен)
$CalDate = $day->attributes()->d; //дата
if ($this_date == $CalDate) {
//debmes(' >>>'.$this_date.' type of day='.$type);
if ($type == 1) { //выходной
$weekDay = 0;
} elseif ($type == 2) {//Короткий день
$weekDay = 1;
} elseif ($type == 3) { //Перенесенный рабочий
$weekDay = 1;
}
}
}
//Если в производственном календаре ничего не нашлось
if ($weekDay == -1) {
if (date('w', $date) == 0 || date('w', $date) == 6) {
$weekDay = 0;
} else {
$weekDay = 1;
}
}
return $weekDay;
}
функция вызывается в методе onNewDay и заполняет свойство ThisComputer.WorkDay
Будильник у меня - класс, в нём есть объект AlarmWork -- будильник для будней, у него есть метод Action
Код: Выделить всё
if (gg('ThisComputer.WorkDay')){
$vl=gg('ThisComputer.VolumeLevel'); // запомним текущий уровень громкости
callMethod("ThisComputer.VolumeLevelChanged",array("VALUE"=>100)); //временно увеличим громкость до максимума
playSound('[all-Sounds.ru]ku-ka-re-ku-petuha'); //алярм
if(gg('AlarmWork.message')){
$msg = gg('AlarmWork.message');
}else{
$msg = 'Это будильник рабочих будней!';
}
setTimeOut('tAlarmWork',"say('".$msg."',5);",3); // произнесем фразу побудки
setTimeOut('tAlarmWork1',"cm('ThisComputer.VolumeLevelChanged',array('VALUE'=>".$vl."));",10); //вернем уровень громкости
brLinkCommand('pro_ch_plus');//тв вкл
setTimeOut('tAlarmWork2','brLinkCommand("pro_vol_mute");brLinkCommand("pro_sel_hdmi1");',10);//без звука, камера на крыльце
}
, где в первой строке и проверяется рабочий это день или нет
ps/ поправил код функции weekDay
Код: Выделить всё
} elseif ($type == 3) { // рабочий сб/вс
$weekDay = 1;
}
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Вт май 07, 2019 8:51 pm
fandaymon
xor писал(а): Пн апр 29, 2019 10:45 pm
сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое
Перенесенный рабочий день, кмк, совершенно не информативное
А в чём не информативность?! Все дни в календаре делятся на 4 категории
1. Рабочие - пн/пт
2. Выходные - сб/вс
3. Празничные, выпадающие на рабочие и соответственно делающие рабочий день выходным
4. Перенесенный рабочий, делающий выходной день рабочим
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Вт май 07, 2019 9:07 pm
xor
fandaymon писал(а): Вт май 07, 2019 8:51 pm
xor писал(а): Пн апр 29, 2019 10:45 pm
сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое
Перенесенный рабочий день, кмк, совершенно не информативное
А в чём не информативность?! Все дни в календаре делятся на 4 категории
1. Рабочие - пн/пт
2. Выходные - сб/вс
3. Празничные, выпадающие на рабочие и соответственно делающие рабочий день выходным
4. Перенесенный рабочий, делающий выходной день рабочим
посмотрите 8 мая и 11 июня - они у меня в календаре отображаются как
Перенесенный рабочий день((
в первом случае - рабочий,
во втором - выходной.
с точки зрения будильника как на это смотреть?
ps. глупость написал - 11 июня - рабочий день(
вот с сайта календаря
t - тип дня: 1 - выходной день, 2 - рабочий и сокращенный (может быть использован для любого дня недели), 3 - рабочий день (суббота/воскресенье)
суббота и воскресенье считаются выходными, если нет тегов day с атрибутом t=2 и t=3 за этот день
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково
Перенесенный рабочий день, мне это не понравилось
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Вт май 07, 2019 10:51 pm
fandaymon
xor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково
Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Ср май 08, 2019 12:08 am
Logrus
fandaymon писал(а): Вт май 07, 2019 10:51 pm
xor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково
Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
я жаловался и это так из первоисточника подтягивает
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Ср май 08, 2019 12:50 pm
fandaymon
Logrus писал(а): Ср май 08, 2019 12:08 am
fandaymon писал(а): Вт май 07, 2019 10:51 pm
xor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково
Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
я жаловался и это так из первоисточника подтягивает
Похоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?
Сделал pull request с исправлением
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Ср май 08, 2019 1:50 pm
xor
fandaymon писал(а): Ср май 08, 2019 12:50 pm
Logrus писал(а): Ср май 08, 2019 12:08 am
fandaymon писал(а): Вт май 07, 2019 10:51 pm
xor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково
Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
я жаловался и это так из первоисточника подтягивает
Похоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?
Сделал pull request с исправлением
там, кмк, с 13 года формат не менялся(
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Ср сен 25, 2019 11:28 am
Divan
Я смотрю, что здесь сценарии отрабатывают только выходные, это суббота и воскресенье, а что делать, если плавающий график, сутки через трое, 2/2, 2/2/3, вахтовый метод? Я пока нарисовал план сценария, привязка будет к телефону или к брелку iTag через bluetooth, система видит, что я дома или меня нет дома.
1) Создать свойство выходной или рабочий день в объекте владельца телефона или брелка.
2) Если меня нет после определенного времени, допустим укажем интервал времени с того момента, как вы ушли на работу. Тут все индивидуально, кто-то на работу уходит в 5-10 утра, кто-то в ночь уходит, но суть такова, ушли на работу, если через от 30 до 60 минут вас нет дома, значит вы ушли на работу, тогда это рабочий день, если через час вы дома, значит выходной день.
3) Если выходной, то в свойстве "Выходной день" оъекта пользователя будет стоять 1, если рабочий день, то в свойстве "Рабочий день" объекта пользователя будет стоять 1, а в свойстве "Выходной день" объекта пользователя установится 0 или наоборот.
4) В модуле Мои блоки для Blockly создать два метода Выходной день и Рабочий день, таким образом, при создании сценария через blockly, там будут блоки Выходной день и Рабочий день.
5) Создаем свой сценарии для сменного графика работы
Re: [Сценарий] Функция Рабочий/Выходной день
Добавлено: Ср сен 25, 2019 1:35 pm
Divan
Вот только тут есть одно но, а если в выходной я не дома, уехал на дачу или у меня отпуск и я улетел, то при таком сценарии система будет считать, что я на работе. Как тогда быть?