Skip to main content

5. Модуль керування відпускними днями (Vacation Management)

При натисканні на кнопку Vacation Management  відкривається модальне вікно “Vacation_Management_modal”, в якому відображаємо кількість відпускних та лікарняних днів працівника, можливість обрати дати відпуску а також лікарняні дні. Нижче в таблиці відображаємо історію.

5.1.Вибір дати та типу відпускних днів:

Для вибору типу відпускних днів використовуємо віджет “Radio”. В налаштуваннях даного віджету вказуємо опції які відображатимуться. В даному випадку це будуть DayOffs, Sick.

Для вибору дати використовуємо віджет DatePicker, в налаштування якого потрібно видалити дефолтну дату, та вписати date Format :MM/DD/YYYY.

5.2. Створення трансформеру для перевірки чи вибрані дні не перевищують ліміт наявних вільних відпускних днів:

В середовищі UI Editor є можливість використання трансформерів, в яких можна писати код мовою Java Script. Для цього потрібно в лівому боковому меню середовища обрати розділ TRANSFORMER та натиснути на + .

По дефолту трансформер створюється типу OnLoad, потрібно змінити його тип на Function.

`В даному трансформері ми напишемо перевірку, чи обраний проміжок дат не перевищує кількість відпускних або лікарняних днів, в залежності від типу відпускних.

if({{TypeTymeOff_field.selectedOptionValue =="D"}}){
if ({{date_to_field.selectedDate}}){
let date1=new Date({{date_from_field.selectedDate}}).getTime();
let date2=new Date({{date_to_field.selectedDate}}).getTime();
let diff = (date2 - date1) / (1000 * 3600 * 24);
if(diff <0){
return{"showError":true}
}
let result=({{dayOffs_field.text - diff}})
if(result<0 ){
return{"showError":true}
}
return {result,"dayOff":true, "showError":false, diff};
}
else{
let result=({{dayOffs_field.text -1 }})
if(result<0){
return{"showError":true}
}
else{
return{result,"dayOff":true, "showError":false,"diff":1}
}
}
}
else{
if ({{date_to_field.selectedDate}}){
let date1=new Date({{date_from_field.selectedDate}}).getTime();
let date2=new Date({{date_to_field.selectedDate}}).getTime();
let diff = (date2 - date1) / (1000 * 3600 * 24);
if(diff <0){
return{"showError":true}
}
let result=({{sickDays_field.text - diff}})
if(result<0 ){
return{"showError":true}
}
return {result,"sickDay":true,"showError":false,diff};
}
else{
let result=({{sickDays_field.text -1 }})
if(result<0){
return{"showError":true}
}
else{
return{result,"sickDay":true,"showError":false,"diff":1}
}
}
}

З коду що вище, TypeTymeOff_field це назва віджету Radio, date_from_field - назва першого datepicker, date_to_field назва другого datepicker, dayOffs_field  це інпут в якому відображаємо кількість відпускних днів, sickDays_field це інпут, в якому відображаємо кількість лікарняних днів. Перша перевірка з'ясовує який тип відпускних днів обрано, друга чи це проміжок між датами чи одна дата, третя  рахує різницю між кількість невикористаних днів і кількістю днів обраних в дейтпікерах. Якщо кількість днів обрана в дейтпікерах перевищує ліміт, ми повертаємо змінну showError==true. У випадку успішного проходження всіх перевірок ми повертаємо чотири змінні:

result - кількість днів що залишилась;

diff - кількість днів на яку беруть відпустку чи лікарняний;

showError ==false;

dayOff == true або  sickDay == true, в залежності до обраного типу відпускних днів. 

В модальному вікні “TimeOff_Management_modal”  нижче двох дейт пікерів розміщуємо текстовий віджет, який відображає текст лише якщо трансформер повертає змінну showError ==true.

5.3. Збереження інформації про відпускні дні та відображення історії

Для збереження інформації  про відпускні дні в середовищі NodeRed створюємо потік (flow), який складається з наступних вузлів:

  • http in;
  • http response;
  • function;
  • mongodb out;
  • debug.

Вузол function (query):

Вузол mongodb out:

 

В середовищі UI Editro створюємо API call, method POST,який передасть всю необхідну інформацію в середовище Node Red. В тілі цього дзвінка передаємо наступне:

З трансформера дані витягується синтаксисом: transformer0.value.sickDay   (transformer0 - назва трансформеру, value - обєкт змінних які повертає, sickDay - назва змінної).