b0VIM 8.2w�d:Çedebianvps-8ced61a9/var/www/html/phpmysql/js/person.jsutf-8 3210#"! Utp_O`E¯EôJ9NƒPÑO!LpM¼P MY6¦=ÜMOfWµX  ^d Y N Vi¿NÌWSoj V,5‚ad;Ó_ÿþâͳ�†jH 罞�xP/ ç Ä œ n :  é ³ ˆ † … ^ # ö “ ‚ h ^ W U  ³ r 8 ì ´ j ]  ïž„P%ã“D½u[4ÚŃ7çÙ¿´|2è·cNöëåãâα; ôÓÒ setPerson().then(() => { callback = () => { DAYS.forEach(d => {person_new.mpa.push(0)}) let person_new = {activated: DATE_YEAR_WEEK, name: "", hours: HOURS_DEFAULT, department: DEPARTMENTS[0].id, mpa: []} showLoading("addPerson")addPerson = () => {} } }) return person } PERSONS_TABLE_TO[ppid] = person } else { PERSONS_TABLE_TO = PERSONS_TABLE_TO.filter(p => p.id !== person_id) if (typeof person === "undefined") { let ppid = PERSONS_TABLE_TO.map(p => p.id).indexOf(person_id) return dbGet_person_active(year_week, person_id).then(person => { } else if (year_week === DATE_YEAR_WEEK_TABLE_TO) { }) return person } PERSONS_ROSTER = PERSONS_ROSTER.filter(p => p.id !== person_id) PERSONS_WEEK = PERSONS_WEEK.filter(p => p.id !== person_id) PERSONS = PERSONS.filter(p => p.id !== person_id) } else { PERSONS_ROSTER[prid] = person PERSONS_WEEK[pwid] = person PERSONS[ppid] = person if (person) { let prid = PERSONS_ROSTER.map(p => p.id).indexOf(person_id) let pwid = PERSONS_WEEK.map(p => p.id).indexOf(person_id) let ppid = PERSONS.map(p => p.id).indexOf(person_id) return dbGet_person_active(DATE_YEAR_WEEK, person_id).then(person => { if ((year_week === DATE_YEAR_WEEK) || (typeof year_week === "undefined")) {setActivePerson = (person_id, year_week) => {} }) }) return sortPersonRosterWeek(1) return sortPersonRosterWeek(0).then(() => { PERSONS = persons return dbGet_persons_active_where_yearweek(DATE_YEAR_WEEK).then(persons => {setPerson = async () => {} } return await dbGet_person_active(year_week, parseFloat(person_id)) } else { return PERSONS_TABLE_TO.find(a => a.id === parseFloat(person_id)) } else if (year_week === DATE_YEAR_WEEK_TABLE_TO) { return PERSONS_TABLE_FROM.find(a => a.id === parseFloat(person_id)) } else if (year_week === DATE_YEAR_WEEK_TABLE_FROM) { return PERSONS.find(a => a.id === parseFloat(person_id)) if ((PERSONS.length > 0) && ((typeof year_week === "undefined") || (year_week === DATE_YEAR_WEEK))) {getActivePersonById = async (person_id, year_week) => {} }) } return person } else { return dbGet_person_removed(DATE_YEAR_WEEK, person_id).then(person => {return person}) if (typeof person === "undefined") { return getActivePersonById(person_id).then(person => {getPersonById = async (person_id) => {} EDIT_PERSONS_SHIFT_AVERAGE = undefined EDIT_PERSONS_SHIFT_AVERAGE_ACTIVATION = undefined EDIT_PERSONS_SHIFT_FREE = undefined EDIT_PERSONS_SHIFT_LABEL = undefined EDIT_PERSONS_SHIFT_LABEL_ACTIVATION = undefined EDIT_PERSONS_SHIFT_ACTIVATION = undefined EDIT_PERSONS_DEPARTMENT = undefined EDIT_PERSONS_HOURS = undefined EDIT_PERSONS_NAME = undefined EDIT_PERSONS_FREEDAYS = undefined EDIT_PERSONS_MPA = undefined EDIT_PERSONS_ACTIVATION = undefinedresetEditPersonCheckValues = () => {let EDIT_PERSONS_SHIFT_AVERAGElet EDIT_PERSONS_SHIFT_AVERAGE_ACTIVATIONlet EDIT_PERSONS_SHIFT_FREElet EDIT_PERSONS_SHIFT_LABELlet EDIT_PERSONS_SHIFT_LABEL_ACTIVATIONlet EDIT_PERSONS_SHIFT_ACTIVATIONlet EDIT_PERSONS_DEPARTMENTlet EDIT_PERSONS_HOURSlet EDIT_PERSONS_NAMElet EDIT_PERSONS_FREEDAYSlet EDIT_PERSONS_MPAlet EDIT_PERSONS_ACTIVATIONadM=5¹x ¥U,&ê ‡ e   ø ö ¾ ‹ 6 4 ø æ Ó º Ž ?  ý – Œ k e M K J Û ¸ ˜ — K I H  åÍ�dï°‰F@>=<} } date_string = new Date(date).toISOString().substring(0,10) date.setDate(date.getDate()+1) removePersonShiftDuringDate(person_id, date, noreload) while (date_string >= start.toISOString().substring(0,10) && date_string <= end.toISOString().substring(0,10)) { let date_string = date.toISOString().substring(0,10) let date = new Date(structuredClone(start)) end = new Date(end) start = new Date(start)removePersonShiftsBetweenDate = (person_id, start, end, noreload) => {} return removePersonFromShiftDay(person_id, day_id, year_week, noreload) let day_id = date_roster[1] let year_week = date_roster[0] let date_roster = getDateToRosterDate(date)removePersonShiftDuringDate = (person_id, date, noreload) => {} return await getD() } return [ hours, breaks ] } if (d === DAYS.length-1) {hours = hours+getOvertimesManualYearweek(person_id, year_week)} breaks = breaks+hb[1] hours = hours+hb[0] let hb = await getPersonDayHoursAndBreaks(person_id, d, year_week) for (let d=0; d { let breaks = 0 let hours = 0getPersonHoursAndBreaks = async (person_id, year_week) => {} return person.overtimes_manual.find(o => o.yearweek === yearweek)?.overtime || 0 person = PERSONS.find(p => p.id === person_id)getOvertimesManualYearweek = (person_id, yearweek) => {} return [hours, breaks] } hours = hours+betterments.map(b => b.hours).reduce((a,b) => a+b, 0) if (betterments.length > 0) { let betterments = person.betterments.filter(b => b.start <= check_date && b.end >= check_date) let check_date = getIsoStringFromDay(day_id, year_week) } hours = hours+person.mpa[day_id] if ((person.freedays[day_id] === false) && (person.sf[day_id] === false)) { breaks = person.shifts.filter(s => s.day_id === day_id).map(s => s.breaks).reduce((a,b) => a+b, 0) let hours = person.shifts.filter(s => s.day_id === day_id)?.map(s => s.hours)?.reduce((a,b) => a+b, 0) let person = await getActivePersonById(person_id, year_week) if (typeof year_week === "undefined") {year_week = DATE_YEAR_WEEK}adkNÇŽTÇ“ˆsm][ZY.ï Ñ G = ;  Ø ‹ <  Ï — V - Ù ± – • ” ^ 7 ½ ƒ \ [ '  Ù°wRQô»Œ_EÖ¯­¬«ƒ*Öµ˜qIGFEü¼lk betterments.sort((a, b) => { return new Date(a.start) - new Date(b.start)}) let betterments = await dbGet_person_betterments(person_id) let sorted = []sortPersonBettermentsByYear = async (person_id) => {} } else { return `${start}-${end}` } if (start === end) { return start end = end.substring(0,3) start = start.substring(0,3) let end = new Date(betterment.end).toLocaleString('default', { month: 'long' }) let start = new Date(betterment.start).toLocaleString('default', { month: 'long' }) getBettermentsMonth = (betterment) => {} block_save.innerHTML = "Speichern" block_save.setAttribute("onClick", `saveBetterment(${person_id})`) block_add.appendChild(block_hours) block_hours.value = 8 block_hours.setAttribute("step", "0.25") block_hours.setAttribute("type", "number") block_hours.setAttribute("title", "Stunden pro Tag") block_hours.classList.add("hours") let block_hours = document.createElement("input") block_add.appendChild(block_end) block_end.value = today.toISOString().substr(0, 10); block_end.setAttribute("min", today) block_end.setAttribute("type", "date") block_end.classList.add("end") let block_end = document.createElement("input") block_add.appendChild(block_start) block_start.value = today.toISOString().substr(0, 10) block_start.setAttribute("onchange", `setBettermentEndDate(this.value)`) block_start.setAttribute("type", "date") block_start.classList.add("start") let block_start = document.createElement("input") let today = new Date() block_add.appendChild(block_cancel) block_cancel.setAttribute("onClick", `cancelAddBetterment(this, ${person_id})`) block_cancel.innerHTML = "Abbrechen" block_cancel.classList.add("button-cancel", "button-orange") let block_cancel = document.createElement("button") let block_save = block_add.getElementsByClassName("button-add")[0] block_add.classList.add("active") let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Edit-person-betterments") let person = await getActivePersonById(person_id)renderAddBetterment = async (person_id) => {} },50) block.innerHTML = `` window.setTimeout(() => { block.classList.remove("active") block = el.parentNodecancelAddBetterment = (el, person_id) => {} return cB() } return block }) block.appendChild(block_container_year) block_container_year.appendChild(block_year_items) }) block_year_items.appendChild(block_container) block_container.appendChild(block_remove) block_container.appendChild(block_hours) block_container.appendChild(block_label)ad f š.åä³}· t B á à   g f  à ¬ ¡ Œ † v t s r G -  ê ` V T ' ñ ¤ U / è°oFòʯ®­wP#Öœut@òÉ�kj4 Ô¥x^76ïÈÆÅÄœCïαŠb`_^)Õ…„ betterments.sort((a, b) => { return new Date(a.start) - new Date(b.start)}) let betterments = await dbGet_person_betterments(person_id) let sorted = []sortPersonBettermentsByYear = async (person_id) => {} } else { return `${start}-${end}` } if (start === end) { return start end = end.substring(0,3) start = start.substring(0,3) let end = new Date(betterment.end).toLocaleString('default', { month: 'long' }) let start = new Date(betterment.start).toLocaleString('default', { month: 'long' }) getBettermentsMonth = (betterment) => {} block_save.innerHTML = "Speichern" block_save.setAttribute("onClick", `saveBetterment(${person_id})`) block_add.appendChild(block_hours) block_hours.value = 8 block_hours.setAttribute("step", "0.25") block_hours.setAttribute("type", "number") block_hours.setAttribute("title", "Stunden pro Tag") block_hours.classList.add("hours") let block_hours = document.createElement("input") block_add.appendChild(block_end) block_end.value = today.toISOString().substr(0, 10); block_end.setAttribute("min", today) block_end.setAttribute("type", "date") block_end.classList.add("end") let block_end = document.createElement("input") block_add.appendChild(block_start) block_start.value = today.toISOString().substr(0, 10) block_start.setAttribute("onchange", `setBettermentEndDate(this.value)`) block_start.setAttribute("type", "date") block_start.classList.add("start") let block_start = document.createElement("input") let today = new Date() block_add.appendChild(block_cancel) block_cancel.setAttribute("onClick", `cancelAddBetterment(this, ${person_id})`) block_cancel.innerHTML = "Abbrechen" block_cancel.classList.add("button-cancel", "button-orange") let block_cancel = document.createElement("button") let block_save = block_add.getElementsByClassName("button-add")[0] block_add.classList.add("active") let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Edit-person-betterments") let person = await getActivePersonById(person_id)renderAddBetterment = async (person_id) => {} },50) block.innerHTML = `` window.setTimeout(() => { block.classList.remove("active") block = el.parentNodecancelAddBetterment = (el, person_id) => {} return cB() } return block }) block.appendChild(block_container_year) block_container_year.appendChild(block_year_items) }) block_year_items.append block_hours.innerHTML = betterment.hours let block_hours = document.createElement("div") block_label.innerHTML = `${text_start} - ${text_end}.${end.getFullYear() % 100}` block_label.classList.add("date") let text_end = `${text_end_day}.${text_end_month}` if (text_end_month.toString().length === 1) { text_end_month = `0${text_end_month}` } if (text_end_day.toString().length === 1) { text_end_day = ` ${text_end_day}` } let text_end_month = end.getMonth()+1 let text_end_day = end.getDate() let text_start = `${text_start_day}.${text_start_month}` if (text_start_month.toString().length === 1) { text_start_month = `0${text_start_month}` } if (text_start_day.toString().length === 1) { text_start_day = ` ${text_start_day}` }ad ƒWØ®Xòvlkd.-Þ ” P O - Û È š j  — ( á p  õ ê Æ À • ” ’ ‘ c 9 ê»”`VPNMð½‘|zyA#Ü‹[2ª~pe^\:÷²k(馄fDCÁ¿¾‹"ܬƒ‚ renderBetterments(person_id) setActivePerson(person_id).then(() => { dbRemove_person_betterment(betterment_id, person_id).then(() => { let betterment = PERSONS.find(p => p.id === person_id).betterments.find(i => i.id === betterment_id)removeBetterment = (person_id, betterment_id) => {} cancelAddBetterment(block_add.querySelector(".button-cancel"), person_id) addBettermentDate(person_id, start, end, hours) let hours = block_hours.value let end = block_end.value let start = block_start.value let block_hours = block_add.getElementsByClassName("hours")[0] let block_end = block_add.getElementsByClassName("end")[0] let block_start = block_add.getElementsByClassName("start")[0] let block_save = block_add.getElementsByClassName("button-add")[0] let block_add = block.getElementsByClassName("container-add")[0] let block = document.getElementById("Edit-person-betterments")saveBetterment = (person_id) => {} }) }) } reloadPersonData(person_id) if (getDateToRosterDate(new Date(start))[0] <= DATE_YEAR_WEEK && getDateToRosterDate(new Date(end))[0] >= DATE_YEAR_WEEK) { renderBetterments(person_id) setActivePerson(person_id).then(() => { removePersonShiftsBetweenDate(person_id, new Date(start), new Date(end)) dbAdd_person_betterment(person_id, start, end, hours).then(() => { hours = parseFloat(hours)addBettermentDate = (person_id, start, end, hours) => {} getActiveRoster() closeRosterPersonMenu(person_id, day_id) addBettermentDate(person_id, date, date, hours) let date = getDayDateByDayid(day_id)addBettermentToday = (person_id, day_id, hours) => {} }) }) closeRosterPersonMenu(person_id, day_id) reloadPersonData(person_id) setActivePerson(person_id).then(() => { changePersonValue(person_id, "mpa", hours, day_id, "justthis").then(() => { //let date = getDayDateByDayid(day_id)addMpaToday = (person_id, day_id, hours) => {} return getB().join([separator = ', ']) } return betterments_text_all }) }) else { if (betterments_text_all.indexOf(year) === -1) { betterments_text_all.push(year) } } if (year === DATE.getFullYear()) { betterments_text_all.push(getBettermentsMonth(betterment)) } let year = new Date(betterment.start).getUTCFullYear() if (checkDate.toISOString().substr(0, 10) < new Date(DATE).toISOString().substr(0, 10)) return let checkDate = new Date(new Date(betterment.end).getTime() - new Date(betterment.end).getTimezoneOffset() * 60000) betterment = betterments_all.find(b => b.id === betterment_id) data.ids.forEach(betterment_id => { betterments_sorted.forEach(data => { getB = () => { if (typeof betterments_sorted === "undefined") { return betterments_text_all} let betterments_text_all = [] let betterments_all = await dbGet_person_betterments(person_id) let betterments_sorted = await sortPersonBettermentsByYear(person_id)createPersonBettermentsTextFuture = async (person_id) => {} return sorted sorted.sort((a, b) => { return a.year - b.year }) }) } sorted.push({year: year, ids: [betterment_id]}) } else { sorted.find(data => {return data.year === year}).ids.push(betterment_id) if (sorted.find(data => {return data.year === year})) { let year = start.getFullYear() let start = new Date(betterment.start) let betterment_id = betterment.id betterments.forEach(betterment => {ad„Sb6(Ò‹s>ö ‰ d ü Ì f 5 É – d  Ø � g %   Å ~ 2  ÞÈ®‘lýìÓÉÂÀ¿–GÎȃkih@$Ø»†Pܤo4÷²n4ô³yxwM!ÐϪ„ƒ block.appendChild(hoursBlock) block.appendChild(nameBlock) departmentBlock.innerHTML = dbGet_department_where_id(person.department) hoursBlock.innerHTML = person.hours nameBlock.innerHTML = person.name let block_overtime = document.createElement("td") let block_vacation_text = document.createElement("div") block_vacation.classList.add("td-overflow", "vacation") let block_vacation = document.createElement("td") let block_betterments_text = document.createElement("div") block_betterments.classList.add("td-overflow", "betterment") let block_betterments = document.createElement("td") let block_illnesses = document.createElement("td") let block_mpa = document.createElement("td") let block_labels = document.createElement("td") let freedaysBlock = document.createElement("td") let departmentBlock = document.createElement("td") let hoursBlock = document.createElement("td") let nameBlock = document.createElement("td") block.innerHTML = "" let block = document.querySelector(`#Person-table-tr-${person.id}`) createR = (person) => {renderPersonTableRow = (person_id) => {} renderPerson(value) if (!el.classList.contains("active")) el.classList.add("active") } if (el !== buttons_all[i]) buttons_all[i].classList.remove("active") for (i=0; i< buttons_all.length; i++) { let buttons_all = document.querySelectorAll("#Person-list-buttons button")setSelectRenderPerson = (el, value) => {} }) } return false } else { } else {return true} return SHIFT_LABELS.find(s => s.id === person.sl[day_id]).cut if (person.sl[day_id]) { } else if (free_2) { return free_1 if (free_1) { let free_2 = person.sf[day_id] let free_1 = person.freedays[day_id] return await getActivePersonById(person_id, year_week).then(person => { if (typeof year_week === "undefined") {year_week = DATE_YEAR_WEEK}checkIfPersonDayIsFree = async (person_id, day_id, year_week) => {} return is_ture } is_ture = dbGet_shift_label_cut(person_active.sl[day_id]) else if (person_active.sf[day_id]) { else if (betterments_check) {is_ture = dbGet_settings_label_cut(2)} else if (illnesses_check) {is_ture = dbGet_settings_label_cut(1)} else if (vacations_check) {is_ture = dbGet_settings_label_cut(3)} if (closingtime) {is_ture = closingtime.name} betterments_check = await betterments_check let betterments_check = new Promise((res, rej) => {res(checkIfDateIsDuringBetterment(person_id, day))}) illnesses_check = await illnesses_check let illnesses_check = new Promise((res, rej) => {res(checkIfDateIsDuringIllnes(person_id, day))}) vacations_check = await vacations_check let vacations_check = new Promise((res, rej) => {res(checkIfDateIsDuringVacation(person_id, day))}) closingtime = await closingtime let closingtime = new Promise((res, rej) => {res(dbGet_closingtime_person_during_date(person_id, day))}) let person_active = await getActivePersonById(person_id, year_week) let day = getIsoStringFromDay(day_id, year_week) let is_ture = false if (typeof year_week === "undefined") {year_week = DATE_YEAR_WEEK}getIfPersonDayIsFree = async (person_id, day_id, year_week) => {} }) }) } reloadPersonData(person_id) if (getDateToRosterDate(new Date(betterment.start))[0] <= DATE_YEAR_WEEK && getDateToRosterDate(new Date(betterment.end))[0] >= DATE_YEAR_WEEK) {ad)íj¡x7 øîíÓzON!á ° ¥ ¤ } C  À ‰ ~ } 1 ö º ¯ ® ^  Ü Ñ Ð ¨ r F   æ ½ • p E  rkihB"á°¯|OûúâšvHþÅÄšPîÊ»µ´Žu^T;% ÿã´˜i.󷮊„_÷ðîíì} }) renPe(pp).then(() => {if (parseFloat(id) === person_all.length-1) hideLoading("renderPerson")}) person_all.forEach((pp, id) => { } renderPersonTableRow(pp.id) ppl.setAttribute("onClick", `editPerson(${pp.id})`) ppl.setAttribute("title", `${pp.name} bearbeiten`) ppl.setAttribute("id", `Person-table-tr-${pp.id}`) ppl.setAttribute("class", "Person-tr") tb.appendChild(ppl) let ppl = document.createElement("tr") renPe = async (pp) => { }); return 0; } return 1; if (a.n > b.n) { } return -1; if (a.n < b.n) { person_all.sort(function (a, b) { } return hideLoading("renderPerson") if (person_all.length === 0) { } persons_removed.forEach(p => person_all.push(p)) let persons_removed = await dbGet_persons_removed(DATE_YEAR_WEEK) } else if (selection === "removed") { persons_removed.forEach(p => person_all.push(p)) let persons_removed = await dbGet_persons_removed(DATE_YEAR_WEEK) person_all = structuredClone(PERSONS) else if (selection === "all") { if (selection === "active") {person_all = structuredClone(PERSONS)} let person_all = [] conPpl.appendChild(tb) conPpl.removeChild(conPpl.querySelector("tbody")) && let tb = document.createElement("tbody") let conPpl = document.getElementById("Person") settingsContainerHideAll("Person-container") if (typeof selection === "undefined") {selection = "active"} showLoading("renderPerson")renderPerson = async (selection) => {} }) createR(person) getActivePersonById(person_id).then(person => { } block.appendChild(block_overtime) block.appendChild(block_vacation) block.appendChild(block_betterments) block.appendChild(block_illnesses) block.appendChild(block_mpa) block.appendChild(block_labels) block.appendChild(freedaysBlock) block.appendChild(departmentBlock) block_overtime.classList.add("td-overtime") block_overtime.innerHTML = overtime if (overtime > 0) {overtime = `+${overtime}`} let overtime = person.overtime }) block_betterments.appendChild(block_betterments_text) block_betterments_text.innerHTML = betterments_text createPersonBettermentsTextFuture(person.id).then(betterments_text => { }) block_vacation.appendChild(block_vacation_text) block_vacation_text.innerHTML = vacations_text createPersonVacationsTextFuture(person.id).then(vacations_text => { }) block_illnesses.innerHTML = illnesses_text createPersonIllnessesTextFuture(person.id).then(illnesses_text => { }) block_mpa.innerHTML = mpa_text createPersonMpaText(person.id).then(mpa_text => { block_mpa.classList.add("mpa") }) block_labels.innerHTML = labels_text createPersonLabelsText(person.id).then(labels_text => { block_labels.classList.add("labels") freedaysBlock.innerHTML = freedays person.sf.forEach((sf, sf_d) => { if (sf) freedays.push(DAYS[sf_d].slice(0,2))}) let freedays = [] } return block.classList.add("inactive") if (PERSONS.map(p => p.id).indexOf(person.id) === -1) { block.style.background = d_color let d_color = DEPARTMENT_COLORS[DEPARTMENTS.map(d => d.id).indexOf(person.department)]ad9­V·v`)Á«‘tn><ú ³ m @  ë » ž � † 0  ç Ë � E ¶ ‘ 3 æ  ˜ S $ ëÖ€n8 ç´¢”“{1éèÂSûÍ¿•Z5*#! ášYCB ÔjPíºš” øöõô­¬getPersonDayHoursAndBreaks = async (person_id, day_id, year_week) => {} return parseFloat(hours.toFixed(2)) hours = person.hours-day_count*(person.hours/(DAYS.length-person.sf.filter(sf => {return sf === true}).length)) } day_count = day_count+1 if ((free === "Frei") || (!free)) continue if (person.sf[day_id]) continue if (free === dbGet_settings_label_cut(2)) continue free = await free let free = new Promise((res, rej) => {res(checkIfPersonDayIsFree(person_id, day_id, year_week))}) for (let day_id=0; day_id {} }) }) return average+time_step if (average < time_step) {average = time_step} average = parseFloat(average) } average = Math.round(average) } else { average = (Math.round(average * 2) / 2).toFixed(1) } else if (TIME_STEP === 0.5) { average = (Math.round(average * 4) / 4).toFixed(2) if (TIME_STEP === 0.25) { else { average = parseFloat((hours/day_count).toFixed(2)) } if ((hours === 0) || (day_count === 0)) {average = TIME_STEP} let average } } hours = hours-person.mpa[d_id] sa_check = false day_count = day_count-1 if ((free !== false) || (sa_check)) { } } hours = hours-p_sa.a sa_check = true if (typeof p_sa.a !== "undefined") { let p_sa = person.sa[d_id] } else if (typeof day_id !== "undefined" && !free) { hours = hours-d_hours sa_check = true if (typeof day_id !== "undefined" && !free && d_hours > 0) { let d_hours = await getPersonDayHoursAndBreaks(person_id, d_id, year_week)[0] let sa_check = false let free = await checkIfPersonDayIsFree(person_id, d_id, year_week) for (let d_id=0; d_id { } } return hours let hours = person_sa+TIME_STEP if (person_sa !== false) { let person_sa = person.sa[day_id] if (typeof day_id !== "undefined") { return getActivePersonById(person_id, year_week).then(person => { if (typeof year_week === "undefined") {year_week = DATE_YEAR_WEEK}getPersonAverageHours = async (person_id, day_id, year_week) => {} return person.hours/(DAYS.length-days_free) } {days = days_free+1} if (cf !== false) cf = await cf let cf = new Promise((res, rej) => {res(checkIfPersonDayIsFree(person_id, day_id, year_week))}) for (let day_id=0; day_id {ad$˜VÃÂŽk@ÒѪ…„Aë ¨ V  À € ~ } V 4 ¾ o 0 /  È Æ Å ˆ M ã Ç › r M  ùâÛÙØ¨håÀ¿ud7Ñ�Oî°[ ÌË›Lâá�]Ýܦ¥qÒ˜— let text_start_month = start.getMonth()+1 let text_start_day = start.getDate() block_remove.setAttribute("onClick", `removeBetterment(${person_id}, ${betterment_id})`) block_remove.innerHTML = "löschen" block_container.classList.add("item") block_remove.classList.add("button-remove") let block_remove = document.createElement("button") let block_label = document.createElement("div") let block_container = document.createElement("div") let end = new Date(betterment.end) let start = new Date(betterment.start) let betterment = betterments.find(b => b.id === betterment_id) data.ids.forEach(betterment_id => { block_container_year.appendChild(block_year_title) block_container_year.classList.add("container-data", "font-number") block_container_year.setAttribute("id", `Betterments-container-${year}`) block_year_items.classList.add("container-items") block_year_title.innerHTML = year block_year_title.classList.add("year") let block_year_items = document.createElement("div") let block_year_title = document.createElement("div") let block_container_year = document.createElement("div") let year = data.year betterments_sorted.forEach(data => { cB = () => { let betterments_sorted = await sortPersonBettermentsByYear(person_id) block.classList.add("container") let block = document.createElement("div") if ( (typeof betterments === "undefined") || (betterments.length === 0) ) return let betterments = await dbGet_person_betterments(person_id)createBlockBetterments = async (person_id) => {} }) return is_true }) if (date >= start && date <= end) { is_true = true; return } let end = betterment.end let start = betterment.start betterments.forEach(betterment => { let is_true = false if (typeof betterments === "undefined") return false let betterments = person.betterments return getActivePersonById(person_id).then(person => {checkIfDateIsDuringBetterment = async (person_id, date) => {} block_end.value = max_date.toISOString().substr(0, 10) block_end.setAttribute("min", max_date) let block_end = block_add.getElementsByClassName("end")[0] let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Edit-person-betterments") if (!isValidDate(max_date)) {return} max_date = new Date(max_date)setBettermentEndDate = (max_date) => {} if (block_betterments) block.appendChild(block_betterments) if (block_betterment_container) block.removeChild(block_betterment_container) let block_betterments = await createBlockBetterments(person_id) let block_betterment_container = block.getElementsByClassName("container")[0] let block = document.getElementById("Edit-person-betterments")renderBetterments = async (person_id) => {} block_save.innerHTML = "Speichern" block_save.setAttribute("onClick", `saveIllnes(${person_id})`) block_add.appendChild(block_end) block_add.appendChild(block_start) block_end.value = after_tomorrow.toISOString().substr(0, 10); block_end.setAttribute("min", tomorrow) block_end.setAttribute("type", "date") block_end.classList.add("end") let block_end = document.createElement("input") block_start.value = tomorrow.toISOString().substr(0, 10)ad)}NÒ”Añ²±…@ Þ Ý ™ Y  Ù Ø ¢ ¡ m Ö œ 6 Ê � € O  ¹ S  Þ}|C ˼»|H=("çͨŠúøÕŠ;ΖU,Ü´–rDñ·RQPóÆ}| block_start.setAttribute("onchange", `setIllnesEndDate(this.value)`) block_start.setAttribute("type", "date") block_start.classList.add("start") let block_start = document.createElement("input") after_tomorrow = new Date(after_tomorrow.getTime() - after_tomorrow.getTimezoneOffset() * 60000) after_tomorrow.setDate(after_tomorrow.getDate() + 2); tomorrow = new Date(tomorrow.getTime() - tomorrow.getTimezoneOffset() * 60000) tomorrow.setDate(tomorrow.getDate() + 1); let after_tomorrow = new Date() let tomorrow = new Date() block_add.appendChild(block_cancel) block_cancel.setAttribute("onClick", `cancelAddIllnes(this, ${person_id})`) block_cancel.innerHTML = "Abbrechen" block_cancel.classList.add("button-cancel", "button-orange") let block_cancel = document.createElement("button") let block_save = block_add.getElementsByClassName("button-add")[0] block_add.classList.add("active") let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Edit-person-illnesses")renderAddIllnes = (person_id) => {} },50) block.innerHTML = `` window.setTimeout(() => { block.classList.remove("active") block = el.parentNodecancelAddIllnes = (el, person_id) => {} return cB() } return block }) block.appendChild(block_container_year) block_container_year.appendChild(block_year_items) }) block_year_items.appendChild(block_container) block_container.appendChild(block_remove) block_container.appendChild(block_label) block_label.innerHTML = `${text_start} - ${text_end}.${end.getFullYear() % 100}` block_label.classList.add("date") let text_end = `${text_end_day}.${text_end_month}` if (text_end_month.toString().length === 1) { text_end_month = `0${text_end_month}` } if (text_end_day.toString().length === 1) { text_end_day = ` ${text_end_day}` } let text_end_month = end.getMonth()+1 let text_end_day = end.getDate() let text_start = `${text_start_day}.${text_start_month}` if (text_start_month.toString().length === 1) { text_start_month = `0${text_start_month}` } if (text_start_day.toString().length === 1) { text_start_day = ` ${text_start_day}` } let text_start_month = start.getMonth()+1 let text_start_day = start.getDate() block_remove.setAttribute("onClick", `removeIllnes(${person_id}, ${illnes_id})`) block_remove.innerHTML = "löschen" block_container.classList.add("item") block_remove.classList.add("button-remove") let block_remove = document.createElement("button") let block_label = document.createElement("div") let block_container = document.createElement("div") let end = new Date(illnes.end) let start = new Date(illnes.start) let illnes = illnesses.find(i => i.id === illnes_id) data.ids.forEach(illnes_id => { block_container_year.appendChild(block_year_title) block_container_year.classList.add("container-data", "font-number") block_container_year.setAttribute("id", `Illnesses-container-${year}`) block_year_items.classList.add("container-items") block_year_title.innerHTML = yearad ŒYÀNGF64õ¿nmC%Ç À ¿ ¯ ­ ¬ s . î í Í  l <  ä ™  ® E Ý Î Ã ¡ › p n m D  µu+ïíìÉ~/ðÊ¡srF  Õ˜o4òͬcXA:87 Í|N)(ãÒ§†A¿Œ‹ block_year_title.classList.add("year") let block_year_items = document.createElement("div") let block_year_title = document.createElement("div") let block_container_year = document.createElement("div") let year = data.year illnesses_sorted.forEach(data => { cB = () => { let illnesses_sorted = await sortPeoplIllnessesByYear(person_id) block.classList.add("container") let block = document.createElement("div") if ( (typeof illnesses === "undefined") || (illnesses.length === 0) ) return let illnesses = await dbGet_person_illnesses(person_id)createBlockIllnesses = async (person_id) => {} }) return is_true }) if (date >= start && date <= end) { is_true = true; return } let end = illnes.end let start = illnes.start illnesses.forEach(illnes => { let is_true = false if (typeof illnesses === "undefined") return false let illnesses = person.illnesses return getActivePersonById(person_id).then((person) => {checkIfDateIsDuringIllnes = (person_id, date) => {} block_end.value = tomorrow.toISOString().substr(0, 10) block_end.setAttribute("min", max_date) tomorrow.setDate(tomorrow.getDate() + 1); if (!isValidDate(tomorrow)) {return} let tomorrow = new Date(max_date) let block_end = block_add.getElementsByClassName("end")[0] let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Edit-person-illnesses")setIllnesEndDate = (max_date) => {} if (block_illnesses) block.appendChild(block_illnesses) if (block_illnes_container) block.removeChild(block_illnes_container) let block_illnesses = await createBlockIllnesses(person_id) let block_illnes_container = block.getElementsByClassName("container")[0] let block = document.getElementById("Edit-person-illnesses")renderIllnesses = async (person_id) => {} return getI().join([separator = ', ']) } return illnesses_text_all }) }) else { if (illnesses_text_all.indexOf(year) === -1) { illnesses_text_all.push(year) } } if (year === DATE.getFullYear()) { illnesses_text_all.push(getIllnessesMonth(illnes)) } if (checkDate.toISOString().substr(0, 10) < new Date(DATE).toISOString().substr(0, 10)) return let checkDate = new Date(new Date(illnes.end).getTime() - new Date(illnes.end).getTimezoneOffset() * 60000) let illnes = illnesses_all.find(il => il.id === illnes_id) year_data.ids.forEach(illnes_id => { let year = year_data.year illnesses_sorted.forEach(year_data => { getI = () => { if (typeof illnesses_sorted === "undefined") { return illnesses_text_all} let illnesses_text_all = [] let illnesses_all = await dbGet_person_illnesses(person_id) let illnesses_sorted = await sortPeoplIllnessesByYear(person_id)createPersonIllnessesTextFuture = async (person_id) => {} return text }) text = `${text}
${DAYS[day_id].substring(0,2)}
${mpa}
` if (mpa === 0) return person.mpa.forEach((mpa, day_id) => { if (typeof person === "undefined") {person = await getPersonById(person_id)} let person = await getActivePersonById(person_id) let text = ""createPersonMpaText = async (person_id) => {} return text }) text = `${text}
${DAYS[sl_d].substring(0,2)}
${dbGet_shift_label_cut(sl)}
` if ((sl === false || typeof sl === "undefined")) returnad>Ò^¯žf\[T  ÞµŒ_3Ò « v :  é ³ ² ± œ „ n 8  ë Î } : ú ï î Ó ~ J  “ c Q B 8  »TÔpfLþôíëêÌ‹Fÿ¼}[=<ÉÇÆ›<þΧå×ÌÅÃÂ’€JùøÒÑ person.sl.forEach((sl, sl_d) => { if (typeof person === "undefined") {person = await getPersonById(person_id)} let person = await getActivePersonById(person_id) let text = ""createPersonLabelsText = async (person_id) => {} }) }) } reloadPersonData(person_id) if (getDateToRosterDate(new Date(illnes.start))[0] <= DATE_YEAR_WEEK && getDateToRosterDate(new Date(illnes.end))[0] >= DATE_YEAR_WEEK) { renderIllnesses(person_id) setActivePerson(person_id).then(() => { dbRemove_person_illnes(illnes_id, person_id).then(() => { let illnes = PERSONS.find(p => p.id === person_id).illnesses.find(i => i.id === illnes_id)removeIllnes = (person_id, illnes_id) => {} cancelAddIllnes(block_add.querySelector(".button-cancel"), person_id) addIllnesDate(person_id, start, end) let end = block_end.value let start = block_start.value let block_end = block_add.getElementsByClassName("end")[0] let block_start = block_add.getElementsByClassName("start")[0] let block_save = block_add.getElementsByClassName("button-add")[0] let block_add = block.getElementsByClassName("container-add")[0] let block = document.getElementById("Edit-person-illnesses")saveIllnes = (person_id) => {} }) } dbAdd_person_illnes(person_id, start, end).then(() => callback()) else if (check) { } dbSet_person_illnes(change_end_id, person_id, start, illnes.end).then(() => callback()) let illnes = illnesses.find(i => i.id === change_end_id) } else if (typeof change_end_id !== "undefined") { dbSet_person_illnes(change_start_id, person_id, illnes.start, end).then(() => callback()) let illnes = illnesses.find(i => i.id === change_start_id) if (typeof change_start_id !== "undefined") { } }) } reloadPersonData(person_id) if (getDateToRosterDate(new Date(start))[0] <= DATE_YEAR_WEEK && getDateToRosterDate(new Date(end))[0] >= DATE_YEAR_WEEK) { renderIllnesses(person_id) setActivePerson(person_id).then(() => { removePersonShiftsBetweenDate(person_id, new Date(start), new Date(end)) callback = () => { }) if (after_end === data.start) {change_end_id = id } if (before_start === data.end) {change_start_id = id } if (start >= data.start && end <= data.end) { check = false; return} let id = data.id illnesses.forEach(data => { let illnesses = person.illnesses getActivePersonById(person_id).then((person) => { let change_end_id let change_start_id let check = true after_end = after_end.toISOString().substr(0, 10) after_end.setDate(after_end.getDate() - 1) let after_end = new Date(end) before_start = before_start.toISOString().substr(0, 10) before_start.setDate(before_start.getDate() - 1) let before_start = new Date(start)addIllnesDate = async (person_id, start, end) => {} }) reloadPersonData(person_id) setActivePerson(person_id).then(() => { closeRosterPersonMenu(person_id, day_id) addIllnesDate(person_id, date, date) let date = getDayDateByDayid(day_id)addIllnesToday = (person_id, day_id) => {} return sorted sorted.sort((a, b) => { return a.year - b.year }) }) } sorted.push({year: year, ids: [illnes_id]}) } else { sorted.find(data => {return data.year === year}).ids.push(illnes_id)ad<¸XÍ’;:ⱉX'ï » l > ) Û › h V H >  ü ú ù Ð ¶ ‘ s ë á ß º r # ý ¶ ~ =  š5é–•”^7 ¿…„P-Ù�œuPOàÞÝ»fõر‰‡†T@Ý�ŽlJø¸· if (sorted.find(data => {return data.year === year})) { let year = start.getFullYear() let start = new Date(illnes.start) let illnes_id = illnes.id illnesses.forEach(illnes => { illnesses.sort((a, b) => { return new Date(a.start) - new Date(b.start)}) if (illnesses.length === 0) return let illnesses = await dbGet_person_illnesses(person_id) let sorted = []sortPeoplIllnessesByYear = async (person_id) => {} } else { return `${start}-${end}` } if (start === end) { return start end = end.substring(0,3) start = start.substring(0,3) let end = new Date(illnes.end).toLocaleString('default', { month: 'long' }) let start = new Date(illnes.start).toLocaleString('default', { month: 'long' }) getIllnessesMonth = (illnes) => {} block_save.innerHTML = "Speichern" block_save.setAttribute("onClick", `getSaveVacation(${person_id})`) block_add.appendChild(block_end) block_add.appendChild(block_start) block_end.value = tomorrow.toISOString().substr(0, 10); block_end.setAttribute("min", today) block_end.setAttribute("type", "date") block_end.classList.add("end") let block_end = document.createElement("input") block_start.value = today.toISOString().substr(0, 10) block_start.setAttribute("onchange", `setVacationEndDate(this.value)`) block_start.setAttribute("type", "date") block_start.classList.add("start") let block_start = document.createElement("input") tomorrow = new Date(tomorrow.getTime() - tomorrow.getTimezoneOffset() * 60000) tomorrow.setDate(tomorrow.getDate() + 1); let tomorrow = new Date() today = new Date(today.getTime() - today.getTimezoneOffset() * 60000) let today = new Date() block_add.appendChild(block_cancel) block_cancel.setAttribute("onClick", `cancelAddVacation(this, ${person_id})`) block_cancel.innerHTML = "Abbrechen" block_cancel.classList.add("button-cancel", "button-orange") let block_cancel = document.createElement("button") let block_save = block_add.getElementsByClassName("button-add")[0] block_add.classList.add("active") let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Settings-vacations")renderAddVacation = (person_id) => {} },50) block.innerHTML = `` window.setTimeout(() => { block.classList.remove("active") block = el.parentNodecancelAddVacation = (el, person_id) => {} }) return vacations_text_all.join([separator = ', ']) } } } vacations_text_all.push(value) if (vacations_text_all.indexOf(value) === -1) { let value = getVacationsMonth([vacation.start, vacation.end]) } else { vacations_text_all.push(year) if (year > DATE_YEAR && vacations_text_all.indexOf(year) === -1) { month_end = vacation.end.substring(5,7) month_start = vacation.start.substring(5,7) year = vacation.start.substring(0,4) if (vacation.end < date) {continue} let vacation = vacations[i] for (let i=0; i a.start.localeCompare(b.start)) return getActivePersonById(person_id).then(person => {createPersonVacationsTextFuture = (person_id) => {ad‘W½ðÀ§xfO@6œ ‹ %     ß ¤ M Ó Ò · b ' ü p @ .   ý  • *  ¹¯¨§¥fÖÏͪl'à�^<õ©§¦�9ê«…WÚ®sqp5øÏ”xP)½²›”’‘�} }) return is_true }) if (date >= start && date <= end) { is_true = true; return } let end = vacation.end let start = vacation.start vacations.forEach(vacation => { let is_true = false if (typeof vacations === "undefined") return false let vacations = person.vacations return getActivePersonById(person_id).then((person) => {checkIfDateIsDuringVacation = async (person_id, date) => {} block_end.value = tomorrow.toISOString().substr(0, 10) block_end.setAttribute("min", max_date) if (!isValidDate(tomorrow)) {return} tomorrow = new Date(tomorrow.getTime() - tomorrow.getTimezoneOffset() * 60000) tomorrow.setDate(tomorrow.getDate() + 1); let tomorrow = new Date(max_date) let block_end = block_add.getElementsByClassName("end")[0] let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Settings-vacations")setVacationEndDate = (max_date) => {} cancelAddVacation(block_add.querySelector(".button-cancel"), person_id) saveVacation(person_id, start, end) let end = block_end.value let start = block_start.value let block_end = block_add.getElementsByClassName("end")[0] let block_start = block_add.getElementsByClassName("start")[0] let block_save = block_add.getElementsByClassName("button-add")[0] let block_add = block.getElementsByClassName("container-add")[0] let block = document.getElementById("Settings-vacations")getSaveVacation = (person_id) => {} }) setActivePerson(person_id).then(() => {return}) return await dbSet_person_vacation(person_id, vacation_id, start, end).then(() => {editVacation = async (person_id, vacation_id, start, end) => {} }) } return dbAdd_person_vacation(person_id, start, end).then(() => {return callback()}) } else { return dbSet_person_vacation(person_id, update.id, start, end).then(() => {return callback()}) if (typeof update !== "undefined") { if (typeof already_set !== "undefined") { return } } }) return } reloadPersonData(person_id) if (getDateToRosterDate(new Date(start))[0] <= DATE_YEAR_WEEK && getDateToRosterDate(new Date(end))[0] >= DATE_YEAR_WEEK) { renderVacations(person_id) return setActivePerson(person_id).then(() => { removePersonShiftsBetweenDate(person_id, new Date(start), new Date(end)) callback = () => { let update = person.vacations.find(v => (v.start >= start && v.end <= start) || (v.start >= end && v.end <= end)) let already_set = person.vacations.find(v => v.start <= start && v.end >= end) return getActivePersonById(person_id).then(person => {saveVacation = async (person_id, start, end) => {} }) } return dbRemove_person_vacation(vacation_id, person_id).then(() => { return callback() }) } else { return dbRemove_closingtime_person(vacation_id, person_id).then(() => {return callback()}) if (is_closing && vacation.lawful === 0) { } }) return } renderVacations(person_id) } else { reloadPersonData(person_id) renderVacations(person_id) if (getDateToRosterDate(new Date(vacation.start))[0] <= DATE_YEAR_WEEK && getDateToRosterDate(new Date(vacation.end))[0] >= DATE_YEAR_WEEK) { return setActivePerson(person_id).then((person_n) => {adlO˦†A¿ˆV½ i & ã « � œ u R & % å © ¨ v u t 1 ù — R Q  Þ ‚ C  ½¼‡†+ç³wƉEÕp6!ঘV á§™^$#þîìëªmX>êÙ‘‡lk callback = () => { } vacation = person.vacations.find(v => v.id === vacation_id) } else { vacation = person.vacations.find(v => v.closingtime_id === vacation_id) if (is_closing) { let vacation return getActivePersonById(person_id).then((person) => {removeVacation = async (person_id, vacation_id, is_closing) => {} return cB() } return block } block_year_items.appendChild(block_container) block_container.appendChild(block_description) } block_description.innerHTML = description block_description.classList.add("description") if (typeof description !== "undefined") { let block_description = document.createElement("div") } block_container.appendChild(block_remove) let block_remove = document.createElement("div") } else { block_container.appendChild(block_remove) block_remove.setAttribute("onClick", `removeVacation(${person_id}, ${vacation.id})`) block_remove.classList.add("button-remove") block_remove.innerHTML = "löschen" let block_remove = document.createElement("button") } else if (typeof vacation.id !== "undefined") { block_container.appendChild(block_remove) block_remove.setAttribute("onClick", `removeVacation(${person_id}, ${vacation.closingtime_id}, true)`) block_remove.classList.add("button-remove") block_remove.innerHTML = "löschen" let block_remove = document.createElement("button") if (typeof vacation.closingtime_id !== "undefined" && vacation.lawful === 0) { block_container.appendChild(block_label) block_label.innerHTML = `${text_start} - ${text_end}.${end.substring(0,4)}` block_label.classList.add("date") let text_end = `${text_end_day}.${text_end_month}` if (text_end_day.toString().length === 1) { text_end_day = ` ${text_end_day}` } let text_end_month = end.substring(5,7) let text_end_day = parseFloat(end.substring(8,10)) let text_start = `${text_start_day}.${text_start_month}` if (text_start_day.toString().length === 1) { text_start_day = ` ${text_start_day}` } let text_start_month = start.substring(5,7) let text_start_day = parseFloat(start.substring(8,10)) block_container.classList.add("item") let block_label = document.createElement("div") let block_container = document.createElement("div") let description = vacation.name let end = vacation.end let start = vacation.start } block.appendChild(block_container_year) block_container_year.appendChild(block_year_items) block_container_year.appendChild(block_year_title) block_container_year.classList.add("container-data", "font-number") block_container_year.setAttribute("id", `Vacations-container-${year}`) block_year_items.classList.add("container-items") block_year_title.innerHTML = year block_year_title.classList.add("year") block_year_items = document.createElement("div") block_year_title = document.createElement("div") block_container_year = document.createElement("div") year_old = year if (year !== year_old) { let year = vacation.start.substring(0,4)ad-}M¹Xø­X$ô ° ¯ g Ë ¬ c  à ² r q p " ½ z Y ³ } K   ¹cD¸c/ÿ»ºœRFDCËzY<íëêÁƒ3ó¥igfe7®€[ZI4öÙ¦}| let vacation = vacations[vs] for (let vs=0; vs { block.classList.add("container") let block = document.createElement("div") let vacations = person.vacations.sort((a,b) => b.start.localeCompare(a.start)) let person = await getActivePersonById(person_id)createBlockVacations = async (person_id) => {} if (block_vacations) block.appendChild(block_vacations) if (block_vacation_container) block.removeChild(block_vacation_container) let block_vacations = await createBlockVacations(person_id) let block_vacation_container = block.getElementsByClassName("container")[0] let block = document.getElementById("Settings-vacations")renderVacations = async (person_id) => {} } else { return `${start}-${end}` } if (start === end) { return start end = end.substring(0,3) start = start.substring(0,3) let end = new Date(vacation[1]).toLocaleString('default', { month: 'long' }) let start = new Date(vacation[0]).toLocaleString('default', { month: 'long' }) getVacationsMonth = (vacation) => {} }, 100) document.body.onclick = (e) => eventListenerEditPerson(e, is_new) window.setTimeout(() => { block_overtime_container_add.appendChild(block_overtime_button) block_overtime_container_add.innerHTML = "" block_overtime_button.innerHTML = "Hinzugügen" block_overtime_button.setAttribute("onClick", `renderAddOvertime(${person_id})`) block_overtime_button.classList.add("button-add", "button-whitegreen") let block_overtime_button = document.createElement("button") renderOvertimes(person_id) let block_overtime_container_add = block_overtime.querySelector(".container-add") let block_overtime = document.getElementById("Edit-person-overtime") block_betterment_container_add.appendChild(block_betterment_button) block_betterment_container_add.innerHTML = "" block_betterment_button.innerHTML = "Hinzugügen" block_betterment_button.setAttribute("onClick", `renderAddBetterment(${person_id})`) block_betterment_button.classList.add("button-add", "button-whitegreen") renderBetterments(person_id) let block_betterment_button = document.createElement("button") let block_betterment_container_add = block_betterment.getElementsByClassName("container-add")[0] let block_betterment = document.getElementById("Edit-person-betterments") block_illnes_container_add.appendChild(block_illnes_button) block_illnes_container_add.innerHTML = "" block_illnes_button.innerHTML = "Hinzugügen" block_illnes_button.setAttribute("onClick", `renderAddIllnes(${person_id})`) block_illnes_button.classList.add("button-add", "button-whitegreen") renderIllnesses(person_id) let block_illnes_button = document.createElement("button") let block_illnes_container_add = block_illnes.getElementsByClassName("container-add")[0] let block_illnes = document.getElementById("Edit-person-illnesses") block_vacation_container_add.appendChild(block_vacation_button) block_vacation_container_add.innerHTML = "" block_vacation_button.innerHTML = "Hinzugügen" block_vacation_button.setAttribute("onClick", `renderAddVacation(${person_id})`) block_vacation_button.classList.add("button-add", "button-whitegreen") renderVacations(person_id) let block_vacation_button = document.createElement("button") let block_vacation_container_add = block_vacation.getElementsByClassName("container-add")[0] let block_vacation = document.getElementById("Settings-vacations")ad=™úº„Û Œ M B õ ¥ f e + é à ]  Å ]  ” f e # ß•!à„JÍ�Vâ®:òÒ‘Z! 릠Ÿ`ÙŠJÅ‹C block_mpa.appendChild(block_mpa_items) if (block_mpa_container) block_mpa.removeChild(block_mpa_container) let block_mpa_items = await createMpaItems(person_id) let block_mpa_container = block_mpa.getElementsByClassName("container")[0] block_mpa.appendChild(block_mpa_assign_container) block_mpa_assign_container.appendChild(block_mpa_assign_to) let block_mpa_assign_to = renderBlockAssignEditPersonTo(person_id, is_new) block_mpa_assign_container.innerHTML = "" let block_mpa_assign_container = block_mpa.querySelector(".select-assign-container") let block_mpa = document.getElementById("Edit-person-mpa") } block_shift_setting_container.appendChild(block_s_container) block_s_container.appendChild(block_s_items) block_s_items.appendChild(block_hours_container) block_hours_container.appendChild(block_hours) if (setting_day_sa) {block_hours.value = setting_day_sa} block_hours.value = pav let pav = await getPersonAverageHoursDefault(person_id, day_id) block_hours.setAttribute("onchange", `changePersonShiftSettingsAverage(${day_id}, parseFloat(this.value))`) block_hours.setAttribute("step", TIME_STEP) block_hours.setAttribute("type", "number") if (!setting_day_sa) block_hours.classList.add("d-none") let block_hours = document.createElement("input") block_hours_container.appendChild(block_hours_label) block_hours_label.innerHTML = "Ø Stunden" if (setting_day_sa) block_hours_label.classList.add("active") block_hours_label.classList.add("button-average") block_hours_label.setAttribute("onClick", `activateShiftSettingAverage(${day_id})`) let block_hours_label = document.createElement("button") block_hours_container.setAttribute("title", "Benutzerdefinierte durchschnittliche Arbeitszeit aktivieren.") if (setting_day_sa) block_hours_container.classList.add("active") block_hours_container.classList.add("item", "item-average") let block_hours_container = document.createElement("div") block_s_items.appendChild(block_free) else if ((setting_day_sl !== false && typeof setting_day_sl !== "undefined")) block_free.classList.remove("d-none") if (setting_day_sl === free_id) {block_free.classList.add("d-none")} if (setting_day_sf) {block_free.classList.add("active"); block_free.classList.remove("d-none")} let free_id = SHIFT_LABELS.find(l => l.name = "Frei").id block_free.setAttribute("onClick", `togglePersonShiftSettingsFree(${day_id})`) block_free.setAttribute("title", "Hiermit kann an diesem Tag keine Schicht vergeben werden.") block_free.innerHTML = "Frei" block_free.classList.add("item", "button-free", "d-none") let block_free = document.createElement("button") block_s_items.appendChild(block_shift_label_container) block_shift_label_container.appendChild(block_shift_label_select_label) block_shift_label_select_label.appendChild(block_shift_label_select) }) block_shift_label_select.appendChild(block_option) if (setting_day_sl === l.id) {block_option.defaultSelected = true} block_option.setAttribute("value", l.id) block_option.innerHTML = `${l.name}${" ".repeat(longest_option_length-l.name.length+1)}| ${l.cut}` block_option.classList.add("font-number") let block_option = document.createElement("option") SHIFT_LABELS.forEach(l => { let longest_option_length = SHIFT_LABELS.map(d => d.name).reduce((a, b) => a.length > b.length ? a : b, '').length block_shift_label_select.setAttribute("onchange", `changePersonShiftSettingsLabel(${day_id})`)ad"6|Kù³²±~*½ … , Ø € O  û Ì � n H ´ v ! × – N  ñ½z0ܧkj0¼t,§¤c/÷|"ß’%�U block_shift_label_select.classList.add("select-label") let block_shift_label_select = document.createElement("select") if ((setting_day_sl === false || typeof setting_day_sl === "undefined")) block_shift_label_select_label.classList.add("d-none") block_shift_label_select_label.classList.add("chevron-down", "chevron-select", "select-label-label") let block_shift_label_select_label = document.createElement("label") block_shift_label_container.appendChild(block_shift_label) block_shift_label.setAttribute("onClick", `activateShiftSettingLabel(${day_id})`) if ((setting_day_sl !== false && typeof setting_day_sl !== "undefined")) block_shift_label.classList.add("active") block_shift_label.classList.add("button-label") block_shift_label.innerHTML = "Bezeichnung" let block_shift_label = document.createElement("button") block_shift_label_container.setAttribute("title", "Bezeichnung aktivieren.\nIn den Einstellungen können neue Bezeichnungen hinzugefügt werden.\nDie Bezeichnung erscheint in der Legende der Dienstplanwoche,\ndie Abkürzung erscheint im Schichtplan") if ((setting_day_sl !== false && typeof setting_day_sl !== "undefined")) block_shift_label_container.classList.add("active") block_shift_label_container.classList.add("item", "item-label") let block_shift_label_container = document.createElement("div") if (!setting_day_active) block_s_items.classList.add("d-none") block_s_items.classList.add("items") let block_s_items = document.createElement("div") block_s_container.appendChild(block_name_container) block_name_container.appendChild(block_name) block_name.setAttribute("onClick", `activateShiftSetting(this, ${day_id})`) block_name.setAttribute("title", "Schichteinstellung aktivieren") if (setting_day_active) block_name.classList.add("active") block_name.classList.add("button-activate") block_name.innerHTML = day let block_name = document.createElement("button") block_name_container.classList.add("button-activate-container") let block_name_container = document.createElement("div") block_s_container.classList.add("edit-person-shift-settings-day") block_s_container.setAttribute("id", `Edit-person-shift-settings-${day_id}`) let block_s_container = document.createElement("div") if ((setting_day_sl === false || typeof setting_day_sl === "undefined") && !setting_day_sa && !setting_day_sf) {setting_day_active = false} let setting_day_active = true let setting_day_sf = person.sf[day_id] let setting_day_sa = person.sa[day_id] let setting_day_sl = person.sl[day_id] let day = DAYS[day_id] for (let day_id=0;day_id { block_department.appendChild(block_department_label) block_department_label.classList.add("title") block_department_label.innerHTML = "Bereich:" let block_department_label = document.createElement("label") block_department.innerHTML = "" let block_department = block.getElementsByClassName("department")[0] block_select_label.classList.add("chevron-down", "chevron-select") let block_select = document.createElement("select") let block_select_label = document.createElement("label") blockHours.setAttribute("onChange", `changePersonHours(${person_id}, parseFloat(this.value))`) blockHours.value = person.hours let blockHours = block.getElementsByClassName("hours")[0].querySelector("input") blockRemove.setAttribute("onClick", 'removePerson('+person_id+'); document.body.onclick = null') let blockRemove = block.getElementsByClassName("remove")[0].querySelector("button") blockName.setAttribute("onChange", `changePersonName(${person_id}, this.value)`) blockName.value = person.name let blockName = block.getElementsByClassName("name")[0].querySelector("input") block_close.setAttribute("onClick", `closeEditPerson(${is_new})`) let block_close = block.getElementsByClassName("edit-close")[0] block.setAttribute("person", person_id) block.classList.add("active") let block_container = document.getElementById("Edit-person-container") let block = document.getElementById("Edit-person") document.body.classList.add("noscroll") } return renderEditRemovedPerson(person_id) if (typeof is_removed !== "undefined" && getDateOfISOWeek(is_removed.yearweek) <= getDateOfISOWeek(DATE_YEAR_WEEK)) { is_removed = is_removed[0] let is_removed = await dbGet_person_changes_where_key(person_id, "r") if (typeof person === "undefined") {person = await getPersonById(person_id)} let person = await getActivePersonById(person_id) resetEditPersonCheckValues()editPerson = async (person_id, is_new) => {} }) }) block_container.appendChild(block_reactivate) block_reactivate.setAttribute("onClick", `reactivatePerson(${person_id})`) block_reactivate.innerHTML = "Reaktivieren" let block_reactivate = document.createElement("button") block_container.appendChild(block_removed_date) block_removed_date.innerHTML = `Gelöscht: ${r_date }` r_date = r_date[0].yearweek dbGet_person_changes_where_key(person_id, "r").then(r_date => { let block_removed_date = document.createElement("div") block_container.appendChild(block_activated_date) block_activated_date.innerHTML = `Aktiviert: ${person.activated}` let block_activated_date = document.createElement("div") block_container.appendChild(block_name) block_name.innerHTML = person.name let block_name = document.createElement("h3") block.classList.add("active", "reactivate-person") let block_container = document.getElementById("Popup-container") block.onclick = (e) => eventListenerClosePopup(e)ad;—P¥ŒXGý÷õÆl&ã œ m C ê ¤ g R ! á à à � d W "   å ‹ D  ð Å — Š \ + % ΄6þüÄgÉŽ‹]À�XKæ›8*ÿéÓ†qNʇDBÌ—– let block = document.getElementById("Popup") dbGet_person_removed(DATE_YEAR_WEEK, person_id).then(person => {renderEditRemovedPerson = async (person_id) => {} else EDIT_PERSONS_SHIFT_ACTIVATION.push({v: value, d: day_id}) if (c_id > -1) {EDIT_PERSONS_SHIFT_ACTIVATION[c_id].v = value} let c_id = EDIT_PERSONS_SHIFT_ACTIVATION.map(c => c.d).indexOf(day_id) } block_container.classList.remove("d-none") el.classList.add("active") value = true } else { block_container.classList.add("d-none") el.classList.remove("active") value = false if (el.classList.contains("active")) { let value if (typeof EDIT_PERSONS_SHIFT_ACTIVATION === "undefined") {EDIT_PERSONS_SHIFT_ACTIVATION = []} let block_container = el.parentNode.parentNode.querySelector(".items")activateShiftSetting = (el, day_id) => {} } changePersonShiftSettingsFree(day_id, true) } else { changePersonShiftSettingsFree(day_id, false) if (block_free.classList.contains("active")) { let block_free = block_container.querySelector(".button-free") let block_container = document.querySelector(`#Edit-person-shift-settings-${day_id}`)togglePersonShiftSettingsFree = (day_id) => {} else {EDIT_PERSONS_SHIFT_AVERAGE[change_id].v = value} if (change_id === -1) EDIT_PERSONS_SHIFT_AVERAGE.push({d: day_id, v: value}) let change_id = EDIT_PERSONS_SHIFT_AVERAGE.map(a => a.d).indexOf(day_id) if (typeof EDIT_PERSONS_SHIFT_AVERAGE === "undefined") {EDIT_PERSONS_SHIFT_AVERAGE = []}changePersonShiftSettingsAverage = (day_id, value) => {} else {EDIT_PERSONS_SHIFT_FREE[change_id].v = value} if (change_id === -1) EDIT_PERSONS_SHIFT_FREE.push({d: day_id, v: value}) let change_id = EDIT_PERSONS_SHIFT_FREE.map(f => f.d).indexOf(day_id) if (typeof EDIT_PERSONS_SHIFT_FREE === "undefined") {EDIT_PERSONS_SHIFT_FREE = []} } block_average.classList.remove("d-none") block_free.classList.remove("active") } else { block_average.classList.add("d-none") block_free.classList.add("active") if (value) { let block_free = block_container.querySelector(".button-free") let block_average = block_container.querySelector(".item-average") let block_container = document.querySelector(`#Edit-person-shift-settings-${day_id}`)changePersonShiftSettingsFree = (day_id, value) => {} } changePersonShiftSettingsFree(day_id, false) } else { block_free.classList.add("d-none") changePersonShiftSettingsFree(day_id, true) if (value === free_id) { } else EDIT_PERSONS_SHIFT_LABEL.push({d: day_id, v: value}) EDIT_PERSONS_SHIFT_LABEL[l_id].v = value if (l_id > -1) { let free_id = SHIFT_LABELS.find(l => l.name = "Frei").id let l_id = EDIT_PERSONS_SHIFT_LABEL.map(a => a.d).indexOf(day_id) if (typeof EDIT_PERSONS_SHIFT_LABEL === "undefined") {EDIT_PERSONS_SHIFT_LABEL = []} block_free.classList.remove("d-none") let value = parseFloat(block_select.value) let block_average = block_container.querySelector(".item-average") let block_free = block_container.querySelector(".button-free") let block_select = block_container.querySelector(".select-label") let block_container = document.querySelector(`#Edit-person-shift-settings-${day_id}`)changePersonShiftSettingsLabel = (day_id) => {} } } EDIT_PERSONS_SHIFT_FREE.push({d: day_id, v: false}) } else { EDIT_PERSONS_SHIFT_FREE[l_id].v = false if (l_id > -1) { if (typeof EDIT_PERSONS_SHIFT_FREE === "undefined") {EDIT_PERSONS_SHIFT_FREE = []}ad%uMúÝ¡yU³„}L.,º � – ” “ g ¿ u , ñ µ � K   Ö £ i c a 7 Ý • I ÷±n'ÞÈ’^+Ò¡”Lå¶°Að§^LÓziP½°—bQðut if (typeof EDIT_PERSONS_SHIFT_FREE !== "undefined") {f_id = EDIT_PERSONS_SHIFT_FREE.map(f => f.d).indexOf(day_id)} let f_id = -1 } EDIT_PERSONS_SHIFT_LABEL.push({d: day_id, v: false}) } else { EDIT_PERSONS_SHIFT_LABEL[l_id].v = false if (l_id > -1) { } else { } else EDIT_PERSONS_SHIFT_LABEL.push({d: day_id, v: SHIFT_LABELS[0].id}) EDIT_PERSONS_SHIFT_LABEL[l_id].v = SHIFT_LABELS[0].id if (l_id > -1) { if (value) { if (typeof EDIT_PERSONS_SHIFT_LABEL === "undefined") {EDIT_PERSONS_SHIFT_LABEL = []} if (typeof EDIT_PERSONS_SHIFT_LABEL !== "undefined") {l_id = EDIT_PERSONS_SHIFT_LABEL.map(a => a.d).indexOf(day_id)} let l_id = -1 else EDIT_PERSONS_SHIFT_LABEL_ACTIVATION.push({v: value, d: day_id}) if (a_id > -1) {EDIT_PERSONS_SHIFT_LABEL_ACTIVATION[a_id].v = value} let a_id = EDIT_PERSONS_SHIFT_LABEL_ACTIVATION.map(a => a.d).indexOf(day_id) if (typeof EDIT_PERSONS_SHIFT_LABEL_ACTIVATION === "undefined") {EDIT_PERSONS_SHIFT_LABEL_ACTIVATION = []} } changePersonShiftSettingsLabel(day_id) block_select_label.classList.remove("d-none") block_item_label.classList.add("active") block_button_label.classList.add("active") value = true } else { block_average.classList.remove("d-none") block_free.classList.remove("active") block_free.classList.add("d-none") block_select_label.classList.add("d-none") block_item_label.classList.remove("active") block_button_label.classList.remove("active") value = false if (block_button_label.classList.contains("active")) { let value let block_average = block_container.querySelector(".item-average") let block_free = block_container.querySelector(".button-free") let block_select = block_container.querySelector(".select-label") let block_select_label = block_container.querySelector(".select-label-label") let block_button_label = block_container.querySelector(".button-label") let block_item_label = block_container.querySelector(".item-label") let block_container = document.querySelector(`#Edit-person-shift-settings-${day_id}`)activateShiftSettingLabel = (day_id) => {} } block_item_hours_input.classList.remove("d-none") block_button_hours.classList.add("active") block_item_hours.classList.add("active") } else { block_item_hours_input.classList.add("d-none") block_button_hours.classList.remove("active") block_item_hours.classList.remove("active") changePersonShiftSettingsAverage(day_id, undefined) if (block_button_hours.classList.contains("active")) { let block_item_hours_input = block_item_hours.querySelector("input") let block_item_hours = block_container.querySelector(".item-average") let block_button_hours = block_container.querySelector(".button-average") let block_container = document.querySelector(`#Edit-person-shift-settings-${day_id}`)activateShiftSettingAverage = (day_id) => {} }) window.location = "" dbRemove_person_changes_where_person_and_key(person_id, "r").then(() => {reactivatePerson = (person_id) => {} return block_label_select block_label_select.appendChild(block_select) }) block_select.appendChild(block_option) else if (data.v === default_selected) {block_option.defaultSelected = true} if (is_new && data.v === "all") {block_option.defaultSelected = true} block_option.value = data.v block_option.innerHTML = data.t let block_option = document.createElement("option") values.forEach(data => { }ad ULÓÒ£€F Ù¨l;ÿ Î ž ‚ f * ú ¿ x @ ì � Ž R Q  â ± ° r 9 â � { 5 ÷Ç–•WÖ”b10þð¹{DÙ¬nZPÛÐÉÇÆ�Y8á�g*ÏÙ¡�UT block_select.setAttribute("disabled", "disabled") if (is_new) { let block_select = document.createElement("select") block_label_select.setAttribute("title", "Die Änderung wird auf den folgenden Zeitraum übertragen.\nAlle: Vergangene und zukünftige Dienspläne\nFortlaufend: Aktueller und zukünftige Dienspläne.\nEinmalig: nur aktuelle Dienstplanwoche") block_label_select.classList.add("select-assign-to", "chevron-down", "chevron-select") let block_label_select = document.createElement("label") else {default_selected = "justthis"} if (DATE_YEAR_WEEK === DATE_YEAR_WEEK_NEWEST) {default_selected = "ongoing"} values.push({t: "Alle", v: "all"}) values.push({t: "Einmalig", v: "justthis"}) let default_selected = "all" let values = [{t: "Fortlaufend", v: "ongoing"}]renderBlockAssignEditPersonTo = (person_id, is_new) => {} }) }) return createB(overtimes) return dbGet_person_overtimes_yearweeks(person.id).then(overtimes => { } return block_overtime_container.appendChild(block_table) block_td_t_m.innerHTML = total_m block_td_t_a.innerHTML = total_a else if (total_m === 0) {total_m = ` ${total_m}`} if (total_m > 0) {total_m = `+${total_m}`} else if (total_a === 0) {total_a = ` ${total_a}`} if (total_a > 0) {total_a = `+${total_a}`} } block_tbody.appendChild(block_tr) block_tr.appendChild(block_td_m) block_td_m.innerHTML = overtime_m if (overtime_m > 0) overtime_m = `+${overtime_m}` else {overtime_m = overtime_m.overtime} if (typeof overtime_m === "undefined") {overtime_m = ""} let block_td_m = document.createElement("td") block_tr.appendChild(block_td_a) block_td_a.innerHTML = overtime if (overtime > 0) {overtime = `+${overtime}`} total_a = parseFloat((total_a+(overtime)).toFixed(2)) } total_m = parseFloat((total_m+(overtime_m.overtime)).toFixed(2)) overtime = parseFloat((overtime-(overtime_m.overtime)).toFixed(2)) if (typeof overtime_m !== "undefined") { let block_td_a = document.createElement("td") block_tr.appendChild(block_td_y) block_td_y.innerHTML = year_week let block_td_y = document.createElement("td") let block_tr = document.createElement("tr") let overtime_m = person.overtimes_manual.find(o => o.yearweek === year_week) let overtime = parseFloat((ot.hours_is-ot.hours_should).toFixed(2)) if (typeof ot === "undefined") continue let ot = overtimes.find(o => o.yearweek === year_week) if (person.activated > year_week) continue let year_week = year_weeks[ywi] for (let ywi=0; ywi { let year_weeks = [...ROSTERS_YEARWEEK] block_table.appendChild(block_tbody)ad$|O d> Ù¿š|ô ê è à y *  Ì ‹ b  è ¡ \ 5 4 ô ª h  Õ Œ f ë«QСts5Ýܧ¥¤{@ó¡qp6üÂÁ…X#ç´EÔ¥Jä·¶|{ let block_tbody = document.createElement("tbody") block_table.appendChild(block_thead) block_thead.appendChild(block_thead_tr) block_thead_tr.appendChild(block_thead_th_m) block_thead_th_m.setAttribute("title", "Die Stunden wurden manuell hinzugefügt.") block_thead_th_m.innerHTML = "Manuell" let block_thead_th_m = document.createElement("th") block_thead_tr.appendChild(block_thead_th_a) block_thead_th_a.setAttribute("title", "Die Stunden ergeben sich durch die hinzugefügten Schichten.") block_thead_th_a.innerHTML = "Automatisch" let block_thead_th_a = document.createElement("th") block_thead_tr.appendChild(block_thead_th_y) block_thead_th_y.innerHTML = "Woche" let block_thead_th_y = document.createElement("th") let block_thead_tr = document.createElement("tr") let block_thead = document.createElement("thead") let block_table = document.createElement("table") block_overtime_container.innerHTML = "" let block_overtime_container = block_overtime.querySelector(".container") let block_overtime = document.getElementById("Edit-person-overtime") return getActivePersonById(person_id).then(person => {renderOvertimes = async (person_id) => {} setOvertimeInputValue(person_id, DATE_YEAR_WEEK) block_add.appendChild(block_input) block_add.appendChild(block_label_year_week) block_label_year_week.appendChild(block_select_year_week) block_input.setAttribute("step", "0.25") block_input.setAttribute("type", "number") let block_input = document.createElement("input") }) block_select_year_week.appendChild(block_option_year_week) if (year_week === DATE_YEAR_WEEK) {block_option_year_week.defaultSelected = true} block_option_year_week.setAttribute("value", year_week) block_option_year_week.innerHTML = year_week let block_option_year_week = document.createElement("option") year_weeks.forEach(year_week => { year_weeks.sort((a, b) => getDateOfISOWeek(b) - getDateOfISOWeek(a)) let year_weeks = [...ROSTERS_YEARWEEK] block_select_year_week.setAttribute("onchange", `setOvertimeInputValue(${person_id}, this.value)`) let block_select_year_week = document.createElement("select") block_label_year_week.classList.add("chevron-select", "chevron-down") let block_label_year_week = document.createElement("label") block_save.innerHTML = "Speichern" block_save.setAttribute("onClick", `saveOvertime(${person_id})`) let block_save = block_add.getElementsByClassName("button-add")[0] block_add.appendChild(block_cancel) block_cancel.setAttribute("onClick", `cancelAddOvertime(this, ${person_id})`) block_cancel.innerHTML = "Abbrechen" block_cancel.classList.add("button-cancel", "button-orange") let block_cancel = document.createElement("button") block_add.classList.add("active") let block_add = block_container.getElementsByClassName("container-add")[0] let block_container = document.getElementById("Edit-person-overtime")renderAddOvertime = (person_id) => {} },50) block.innerHTML = `` window.setTimeout(() => { block.classList.remove("active") block = el.parentNodecancelAddOvertime = (el, person_id) => {} }) return block_time.value = overtime else {overtime = overtime[1]} if (typeof overtime === "undefined") {overtime = 0} return dbGet_person_overtime_manual_where_yearweek(year_week, person_id).then(overtime => {adtPÑKËGƒ c T J D ) ù Ö ´ ƒ [ 9  â À † € ~ } | T &  Ë z d <  Ä † Y # ºƒR뼌bWB<'%ïÓs/Ë�]NC<:Ú•N Å�Ž=ïº�c@97ýªts let block_time = block_add.querySelector("input") let block_add = document.querySelector("#Edit-person-overtime .container-add")setOvertimeInputValue = async (person_id, year_week) => {} }) renderOvertimes(person_id) block_save.innerHTML = "Hinzufügen" block_add.removeChild(block_time) block_add.removeChild(block_year_week_label) block_save.setAttribute("onClick", `renderAddOvertime(${person_id})`) addOvertime(person_id, block_year_week.value, block_time.value).then(() => { let block_time = block_add.querySelector("input") let block_year_week = block_year_week_label.querySelector("select") let block_year_week_label = block_add.querySelector("label") let block_save = block_add.getElementsByClassName("button-add")[0] let block_add = block.getElementsByClassName("container-add")[0] let block = document.getElementById("Edit-person-overtime")saveOvertime = (person_id) => {} }) }) }) return reloadPersonData(person_id) return setActivePerson(person_id).then(() => { return dbSet_person_overtime_manual_where_yearweek(year_week, person_id, time).then(() => { if (typeof overtime === "undefined" && time === 0) {return} return dbGet_person_overtime_manual_where_yearweek(year_week, person_id).then(overtime => { time = parseFloat(time)addOvertime = async (person_id, year_week, time) => {} return createB() } return block }) block.appendChild(block_item) block_item.appendChild(block_input) block_item.appendChild(block_name) block_input.value = person.mpa[day_id] block_input.setAttribute("step", "0.5") block_input.setAttribute("min", "0") block_input.setAttribute("type", "number") block_input.setAttribute("onchange", `changePersonMpa(${person_id}, this.value, ${day_id})`) block_name.innerHTML = day.substring(0,2) block_item.classList.add("item") let block_input = document.createElement("input") let block_name = document.createElement("label") let block_item = document.createElement("div") DAYS.forEach((day, day_id) => { createB = () => { if (typeof person === "undefined") {person = await getPersonById(person_id)} let person = await getActivePersonById(person_id) block.classList.add("container") let block = document.createElement("div")createMpaItems = async (person_id) => {} } return setChange("m", person.mpa[day_id], day_id) value = parseFloat(value) } else if (name === "mpa") { return setChange("d", person.department, 999) value = parseFloat(value) } else if (name === "department") { return setChange("h", person.hours, 999) value = parseFloat(value) } else if (name === "hours") { return setChange("n", person.name, 999) if (name === "name") { } } }) } else {return} return dbSet_person_change_where_yearweek_day_and_person_and_key(next_yw, day_id, person_id, key, old_value).then(() => {return}) if (change_n?.length === 0) { return dbSet_person_change_where_yearweek_day_and_person_and_key(year_week, day_id, person_id, key, value).then(() => { let change_n = await dbGet_person_change_where_yearweek_and_day_and_person_and_key(next_yw, day_id, person_id, key) let next_yw = getDateToRosterDate(new Date(new Date(getDateOfISOWeek(year_week)).getTime() + 7 * 24 * 60 * 60 * 1000))[0] } else if (assign_to === "justthis") {admNÉ«vga+)(ì¶= Á o , í  L ã ’ X ' ë ‘ =  ü µ e d b 7   ئ¤s<:å­re+ꨢ nPÜÏŠl%äÚÔÒ‡d. Աô†÷|ml }) return dbSet_person_change_where_yearweek_day_and_person_and_key(year_week, day_id, person_id, key, value) return dbSet_person_changes_where_yearweek_is_ge_and_day_and_person_and_key(year_week, day_id, person_id, key, value).then(() => { } else if (assign_to === "ongoing") { }) return dbSet_person_changes_where_person_and_key(person_id, key, value) return dbSet_person_changes_where_yearweek_is_ge_and_day_and_person_and_key(person.activated, day_id, person_id, key, value).then(() => { if (assign_to === "all") { setChange = async (key, old_value, day_id) => { let add_change let change_id let person = await getActivePersonById(person_id) let year_week = DATE_YEAR_WEEKchangePersonValue = async (person_id, name, value, day_id, assign_to) => {} } } EDIT_PERSONS_MPA[edit_id].v = value } else { EDIT_PERSONS_MPA.push({p: person_id, v: value, d: day_id}) if (edit_id === -1) { let edit_id = EDIT_PERSONS_MPA.map(m => m.d).indexOf(day_id) } else { EDIT_PERSONS_MPA = [{p: person_id, v: value, d: day_id}] if (typeof EDIT_PERSONS_MPA === "undefined") { value = parseFloat(value)changePersonMpa = (person_id, value, day_id) => {} } else EDIT_PERSONS_FREEDAYS.push({p: person_id, d: value}) if (remove > -1) EDIT_PERSONS_FREEDAYS.splice(remove, 1) let remove = EDIT_PERSONS_FREEDAYS.indexOf(value) } else { EDIT_PERSONS_FREEDAYS = [{p: person_id, d: value}] if (typeof EDIT_PERSONS_FREEDAYS === "undefined") { el.classList.toggle("active")changePersonFreedays = (el, person_id, value) => {} EDIT_PERSONS_DEPARTMENT = {p: person_id, d: value}changePersonDepartment = (person_id, value) => {} EDIT_PERSONS_HOURS = {p: person_id, d: value}changePersonHours = (person_id, value) => {} EDIT_PERSONS_NAME = {p: person_id, d: value}changePersonName = (person_id, value) => {} block_activation_input_container.appendChild(block_activation_select_label) block_activation_select_label.appendChild(block_activation_select) }) block_activation_select.appendChild(block_option) if (a_year_week === person.activated) {block_option.defaultSelected = true} block_option.innerHTML = a_year_week === "Andere" ? "Datum wählen" : a_year_week let block_option = document.createElement("option") activation_options.forEach( a_year_week => { activation_options = ["Andere",...activation_options] activation_options.sort((a, b) => getDateOfISOWeek(b) - getDateOfISOWeek(a)) if (activation_options.indexOf(person.activated) === -1) {activation_options.push(person.activated)} let activation_options = [...ROSTERS_YEARWEEK] block_activation_select.setAttribute("onChange", `checkChangePersonActivation(${person_id}, this.value)`) block_activation_select.classList.add("select-activation") let block_activation_select = document.createElement("select") block_activation_select_label.classList.add("chevron-down", "chevron-select") let block_activation_select_label = document.createElement("label") block_activation_input_container.innerHTML = "" let block_activation_input_container = document.querySelector("#Edit-person-container .activation .input-container") let person = await getActivePersonById(person_id)renderChangePersonActivationSelect = async (person_id) => {} EDIT_PERSONS_ACTIVATION = getDateOfISOWeek(value) } return renderChangePersonActivationInput(person_id) if (value === "Andere") {checkChangePersonActivation = (person_id, value) => { ad1uJ×®…å¾·¶µ³�$² - & $ ”  — � Ž e ù u Þ × Õ ³ U E & Þ×£|MñÆ™/ý¯oe_]+Ù½š:4ò¾�BýûúÅLòÊ”g µwut} block_activation_input_container.appendChild(block_input) block_input.value = getDateOfISOWeek(DATE_YEAR_WEEK).toISOString().substring(0,10) block_input.setAttribute("onchange", `EDIT_PERSONS_ACTIVATION = new Date(this.value)`) block_input.setAttribute("type", "date") let block_input = document.createElement("input") block_dnone.classList.add("d-none") let block_dnone = document.querySelector("#Edit-person-container .select-activation") let block_activation_input_container = document.querySelector("#Edit-person-container .activation .input-container")renderChangePersonActivationInput = (person_id) => {} return await dbSet_person_person_activated(person_id, year_week) removePersonShiftsBetweenDate(person_id, start, end, true) end = new Date(end.getTime() - 1 * 24 * 60 * 60 * 1000); let end = new Date(getDateOfISOWeek(year_week)) let start = new Date(getDateOfISOWeek(DATE_YEAR_WEEK_OLDEST)) } year_week = getDateToRosterDate(new Date(value.getTime() + 7 * 24 * 60 * 60 * 1000))[0] if (date[1] > DAYS.length-1) { let year_week = date[0] let date = getDateToRosterDate(value) let value = EDIT_PERSONS_ACTIVATIONsetPersonActivationValue = async (person_id) => {} } } if (assign_to === "all") {new_mpa[data.d] = data.v} await changePersonValue(data.p, "mpa", data.v, data.d, assign_to) } else { }) } return dbSet_person_where(EDIT_PERSONS_MPA[0].p, "mpa", new_mpa).then(() => {return}) new_mpa[data.d] = data.v if (assign_to === "all") { return changePersonValue(data.p, "mpa", data.v, data.d, assign_to).then(() => { if (e === EDIT_PERSONS_MPA.length-1) { let data = EDIT_PERSONS_MPA[e] for (let e=0; e p.id === EDIT_PERSONS_MPA[0].p).mpa if (assign_to === "all") { let new_mpa let assign_to = document.querySelector("#Edit-person-mpa .select-assign-to select").valuesetPersonMpaValue = async () => {} }) if (assign_to === "all") {return dbSet_person_where(EDIT_PERSONS_DEPARTMENT.p, "department", EDIT_PERSONS_DEPARTMENT.d).then(() => {return})} return changePersonValue(EDIT_PERSONS_DEPARTMENT.p, "department", EDIT_PERSONS_DEPARTMENT.d, undefined, assign_to).then(() => { let assign_to = document.querySelector("#Edit-person .person-container .select-assign-to select").valuesetPersonDepartmentValue = async () => {} }) if (assign_to === "all") {return dbSet_person_where(EDIT_PERSONS_HOURS.p, "hours", EDIT_PERSONS_HOURS.d).then(() => {return})} return changePersonValue(EDIT_PERSONS_HOURS.p, "hours", EDIT_PERSONS_HOURS.d, undefined, assign_to).then(() => { let assign_to = document.querySelector("#Edit-person .person-container .select-assign-to select").valuesetPersonHoursValue = async () => {} }) if (assign_to === "all") {return dbSet_person_where(EDIT_PERSONS_NAME.p, "name", EDIT_PERSONS_NAME.d).then(() => {return})} return changePersonValue(EDIT_PERSONS_NAME.p, "name", EDIT_PERSONS_NAME.d, undefined, assign_to).then(() => { let assign_to = document.querySelector("#Edit-person .person-container .select-assign-to select").valuesetPersonNameValue = async () => {} }) hideLoading("closeEditPerson") block.setAttribute("person", "") document.getElementById("Edit-person-container").removeEventListener('click', (e) => { e.stopPropagation() }) block.classList.remove("active") block.setAttribute("person", "") block.classList.remove("active")ad,\EŒ{þøöÇWVä « 1 § � — • h  ÿ ö ¿ ¢ Š n l k E " ë ® — C í Æ £ † w q :   þýmêeÞM¶‡üküæÅ²”Z-õοµ�]\[ document.body.classList.remove("noscroll") document.body.onclick = null } }) else getActiveRoster() if (person) reloadPersonData(person_id) resetEditPersonCheckValues() setActivePerson(person_id).then((person) => { } else if (reload) { return window.location = "" if (is_new) { Promise.all([funA(), funB(), funC(), funD(), funE(), funF(), funG(), funH(), funI(), funJ()]).then(() => { funJ = async () => {if (typeof EDIT_PERSONS_SHIFT_AVERAGE !== "undefined") { reload = true; return await setPersonShiftAverage(person_id) }} funI = async () => {if (typeof EDIT_PERSONS_SHIFT_FREE !== "undefined") { reload = true; return await setPersonShiftFree(person_id) }} funH = async () => {if (typeof EDIT_PERSONS_SHIFT_LABEL !== "undefined") { reload = true; return await setPersonShiftLabel(person_id) }} funG = async () => {if (typeof EDIT_PERSONS_SHIFT_LABEL_ACTIVATION !== "undefined") { reload = true; return await setPersonShiftLabelActivation(person_id) }} funF = async () => {if (typeof EDIT_PERSONS_SHIFT_ACTIVATION !== "undefined") { reload = true; return await setPersonShiftActivation(person_id) }} funE = async () => {if (typeof EDIT_PERSONS_DEPARTMENT !== "undefined") { reload = true; return await setPersonDepartmentValue(person_id) }} funD = async () => {if (typeof EDIT_PERSONS_HOURS !== "undefined") { reload = true; return await setPersonHoursValue(person_id) }} funC = async () => {if (typeof EDIT_PERSONS_NAME !== "undefined") { reload = true; return await setPersonNameValue(person_id) }} funB = async () => {if (typeof EDIT_PERSONS_MPA !== "undefined") { reload = true; return await setPersonMpaValue(person_id) }} funA = async () => {if (typeof EDIT_PERSONS_ACTIVATION !== "undefined") { reload = true; return await setPersonActivationValue(person_id)}} } return hideLoading("closeEditPerson") if ((name.length === 0) || (hours.length === 0)) { } return window.location = "" dbRemove_person(person_id) if (is_new && name.length === 0) { let hours = block.getElementsByClassName("hours")[0].querySelector("input").value let name = block.getElementsByClassName("name")[0].querySelector("input").value let reload = false let person_id = parseFloat(block.getAttribute("person")) let block = document.getElementById("Edit-person") showLoading("closeEditPerson")closeEditPerson = async (is_new) => {} closeEditPerson(is_new) } while (targetEl); else {targetEl = ""} if (block_container.contains(targetEl)) return do { let targetEl = evt.target let block_container = document.getElementById("Edit-person-container")eventListenerEditPerson = (evt, is_new) => {} } } await setPersonChange(person_id, assign_to, "sa", DATE_YEAR_WEEK, average.d, average.v).then(() => {return}) } else { return setPersonChange(person_id, assign_to, "sa", DATE_YEAR_WEEK, average.d, average.v).then(() => {return}) if (i === EDIT_PERSONS_SHIFT_AVERAGE.length-1) { let average = EDIT_PERSONS_SHIFT_AVERAGE[i] for (let i=0; i {} } } await setPersonChange(person_id, assign_to, "sf", DATE_YEAR_WEEK, free.d, free.v).then(() => {return}) } else { return setPersonChange(person_id, assign_to, "sf", DATE_YEAR_WEEK, free.d, free.v).then(() => {return})add”EtÒ¬•ƒVÈ ¡ Š q N < - , "    æ ¥ k H & ² v œ ) Ö ¿ ¬ � Œ  ¨6,&!èx1ñ˜u3¹¨0& ð€DÝgVá×ÑÏ£3øÊ”“ if (i === EDIT_PERSONS_SHIFT_FREE.length-1) { let free = EDIT_PERSONS_SHIFT_FREE[i] for (let i=0; i {} } } await setPersonChange(person_id, assign_to, "sl", DATE_YEAR_WEEK, label.d, label.v).then(() => {return}) } else { return setPersonChange(person_id, assign_to, "sl", DATE_YEAR_WEEK, label.d, label.v).then(() => {return}) if (i === EDIT_PERSONS_SHIFT_LABEL.length-1) { let label = EDIT_PERSONS_SHIFT_LABEL[i] for (let i=0; i {} } } await setPersonChange(person_id, assign_to, "sl", DATE_YEAR_WEEK, activation.d, false).then(() => {return}) } else { return setPersonChange(person_id, assign_to, "sl", DATE_YEAR_WEEK, activation.d, false).then(() => { return}) if (i === EDIT_PERSONS_SHIFT_LABEL_ACTIVATION.length-1) { if (activation.v) continue if (activation.v && i === EDIT_PERSONS_SHIFT_LABEL_ACTIVATION.length-1) {return} let activation = EDIT_PERSONS_SHIFT_LABEL_ACTIVATION[i] for (let i=0; i {} } } await setPersonChange(person_id, assign_to, "sa", DATE_YEAR_WEEK, day_id, false).then(() => {return}) await setPersonChange(person_id, assign_to, "sf", DATE_YEAR_WEEK, day_id, false).then(() => {return}) await setPersonChange(person_id, assign_to, "sl", DATE_YEAR_WEEK, day_id, false).then(() => {return}) } else { }) }) }) if (i === EDIT_PERSONS_SHIFT_ACTIVATION.length-1) {return} return setPersonChange(person_id, assign_to, "sa", DATE_YEAR_WEEK, day_id, false).then(() => { return setPersonChange(person_id, assign_to, "sf", DATE_YEAR_WEEK, day_id, false).then(() => { return setPersonChange(person_id, assign_to, "sl", DATE_YEAR_WEEK, day_id, false).then(() => { if (i === EDIT_PERSONS_SHIFT_ACTIVATION.length-1) { let assign_to = document.querySelector("#Edit-person-shift-settings .select-assign-container select").value let day_id = activation.d if (activation.v) continue let activation = EDIT_PERSONS_SHIFT_ACTIVATION[i] for (let i=0; i {} }) } }) } return callS() } else { }) return callS() return dbAdd_person_change_where_yearweek_and_day_and_person_and_key(next_yw, day_id, person_id, key, old_v).then(() => { if (change_n.length === 0) { } }) else {return} if (key === "sf" && value) {return dbRemove_shift_where_person_and_year_week_and_day(person_id, year_week, day_id).then(() => {return })} return dbSet_person_change_where_yearweek_day_and_person_and_key(year_week, day_id, person_id, key, value).then(() => {adc»O®£�rV0äͼ–OÌ ¥ ‹ t [ +  ò à Ñ Ç À ¾ ½ � i .  Ü ³ ² ‰ ˆ 5 4 ö Ð N %  ý Å œ ‰ { p i f e  ˹|:ø÷Ô7Â(žxaN?‚úY7$æ`Û»º callS = () => { return dbGet_person_change_where_yearweek_and_day_and_person_and_key(next_yw, day_id, person_id, key).then(change_n => { let next_yw = getDateToRosterDate(new Date(new Date(getDateOfISOWeek(year_week)).getTime() + 7 * 24 * 60 * 60 * 1000))[0] } else if (assign_to === "justthis") { }) }) else {return} if (key === "sf" && value) { return dbRemove_shift_where_person_and_year_week_ge_and_day(person_id, year_week, day_id).then(() => {return})} return dbSet_person_change_where_yearweek_day_and_person_and_key(year_week, day_id, person_id, key, value).then(() => { return dbSet_person_changes_where_yearweek_is_ge_and_day_and_person_and_key(year_week, day_id, person_id, key, value).then(() => { } else if (assign_to === "ongoing") { }) }) }) else {return} if (key === "sf" && value) { return dbRemove_shift_where_person_and_day(person_id, day_id).then(() => {return}) } return dbSet_person_change_where_yearweek_day_and_person_and_key(person_active.activated, day_id, person_id, key, value).then(() => { return dbSet_person_changes_where_day_and_person_and_key(day_id, person_id, key, value).then(() => { return dbSet_person_changes_where_yearweek_is_ge_and_day_and_person_and_key(person_active.activated, day_id, person_id, key, value).then(() => { if (assign_to === "all") { else if (key === "sf") {old_v = person_active.sf[day_id]} else if (key === "sa") {old_v = person_active.sa[day_id]} if (key === "sl") {old_v = person_active.sl[day_id]} let old_v return getActivePersonById(person_id, year_week).then(person_active => {setPersonChange = (person_id, assign_to, key, year_week, day_id, value) => {} }) }) } }) window.location = "" dbRemove_person(person_id).then(() => { } else { }) window.location = "" dbSet_person_change_where_yearweek_day_and_person_and_key(DATE_YEAR_WEEK, 999, person_id, "r", true).then(() => { if (shifts.length > 0) { dbGet_shifts_where_person(person_id).then(shifts => { DAYS.forEach((day, day_id) => removePersonFromShiftDay(person.id, day_id)) block.setAttribute("person", "") block.classList.remove("active") block.setAttribute("person", "") block.classList.remove("active") let block = document.getElementById("Edit-person") getActivePersonById(person_id).then(person => {removePerson = (person_id) => {} }) } }) } } callback() if (c_id === cl.length-1) { } else { }) } callback() if (c_id === cl.length-1) { dbAdd_closingtime_person(c.id, PERSON_NEW_ID).then(() => { if (getDateToRosterDate(c.end)[0] >= DATE_YEAR_WEEK) { cl.forEach((c, c_id) => { } else { callback() if (cl.length === 0) { let cl = dbGet_closingtimes_lawful() person_new.id = PERSON_NEW_ID PERSON_NEW_ID = pni dbAdd_person(person_new).then(pni => { } }) editPerson(PERSON_NEW_ID, true).then(() => hideLoading("addPerson") )