...

Выходные и праздничные дни для сценариев формы

Тема в разделе "Примеры сценариев", создана пользователем pozhidaev, 9 сен 2022.

  1. pozhidaev

    pozhidaev Новичок

    В ходе реализации задачи по управлению командировками возникла необходимость оповещать пользователя на форме создания элемента приложения о попадании дат командировки на выходные или праздничные дни. Настроил рабочий календарь, добавил исключения на 22 и 23 года, согласно приказу Минтруда. Далее нужно как то достать эту информацию на форму. Для этого была написана функция, которая принимает даты начала и конца события из соответствующих полей формы и возвращает сортированный массив дат выходных дней и дней исключений (праздничных) в формате TDate, в противном случае возвращает пустой массив.
    Допускаю, что можно решить эту задачу гораздо эффективнее, но я пока только учусь, так что просьба не швыряться тапками. Публикую это здесь, т.к. хочу "оживить" форум хотя бы до уровня "стаковерфлоу"), ну и вдруг кому пригодится.
    Так же если подскажете более простое/лёгкое/элегантное решение пошлю вам лучи добра и плюсов в карму.
    Код:
    
    async function myWeekendsHolidays(stDateTDateenDateTDate): Promise<TDate[]> {
        const 
    timeStart = new TTime(0000);
        var 
    myHolidaysTDate[]
        
    myHolidays = [];
        
    let fromDate stDate.asDatetime(timeStart); // переводим в формат TDateTime
        
    let toDate enDate.asDatetime(timeStart);
        
    // получение праздничных дней:
        
    const specialDays await System.productionSchedule.getSpecialDays(fromDatetoDate).then(e=> e.filter(e=> e.holiday==true)); // выбираем все дни-исключения попадающие в заданный период 
        
    if (specialDays !== undefined) {
            for (
    let elem of specialDays){ перебираем полученный массив и добавляем его в ответ функции
                    myHolidays
    .push(elem.date);
            }
        }
        
    //Поиск выходных дней через день недели в соответствующем формате 
        
    let myWEstring='56';
        
    let currentD fromDate;
        while(
    currentD.asDate() <= toDate.asDate()){ // перебираем все даты заданного периода
            
    if (myWE.includes(currentD.format('e'))){ // если суббота (5ый день) или воскресенье (6ой)
                // fromDate.format('d') d: - номер дня недели, где воскресенье 0, 'e' - номер дня недели, где понедельник 0
                
    myHolidays.push(currentD.getDate()); // добавляем его в массив ответов
            
    }
            
    currentD currentD.addDate(0,0,1).getDate().asDatetime(timeStart);
        }
        return 
    myHolidays.sort((a,b) => a.asDatetime(timeStart).unix() - b.asDatetime(timeStart).unix()); // возвращаем сортированный массив
    Последнее редактирование: 9 сен 2022