dienstplancreator git · main
Dienstplan (roster) creator, PHP/JS web app
JavaScript 50% PHP 40.5% CSS 8.5%git clone https://git.christianimmanuel.de/web-tools/dienstplancreator.gitwget https://git.christianimmanuel.de/web-tools/dienstplancreator/archive/dienstplancreator.tar.gzjs/startpage.js raw
let block_start = document.getElementById("Start")
startRoster = async () => {
showLoading("startRoster")
VERSION = 1
SETTINGS = await dbGet_settings()
document.querySelector("#Menu-settings > h3").innerHTML = SETTINGS.institution
//fixDataByVersion()
DEPARTMENTS = await dbGet_departments()
SETTINGS_LABELS = await dbGet_settings_labels()
SHIFT_LABELS = await dbGet_shift_labels()
DISPLAY_EDITABLE_CELL = SETTINGS.default_edit_cell_right
if (DISPLAY_EDITABLE_CELL) {EDITABLE_CELL = true}
DISPLAY_EDITABLE_ROW = SETTINGS.default_row_top
if (DISPLAY_EDITABLE_ROW ) {EDITABLE_ROW = true}
DISPLAY_EDITABLE_ROW_BOTTOM = SETTINGS.default_row_bottom
if (DISPLAY_EDITABLE_ROW_BOTTOM ) {EDITABLE_ROW_BOTTOM = true}
DISPLAY_OVERTIME = SETTINGS.default_overtime
DATE_YEAR_WEEK_OLD = DATE_YEAR_WEEK
CLOSINGTIMES = await dbGet_closingtimes()
ROSTERS_YEARWEEK = await dbGet_rosters_yearweek()
renderMenuWeeks()
setPrintZoomLevel()
let date = window.location.search.slice(1)
if (!getDateOfISOWeek(date)) { date = ROSTERS_YEARWEEK[0]}
setRosterDate(getDateOfISOWeek(date))
callback = async () => {
if (SETTINGS.default_overtime) document.querySelector("#Roster-week-display-overtime button").classList.add("active")
setPerson().then(async () => {
getActiveRoster().then(() => {
document.querySelector("#Roster-copy-person-from").setAttribute("onClick", `openCopyPersonTablePopup("${DATE_YEAR_WEEK_BEFORE}", "${DATE_YEAR_WEEK}"); document.getElementById("Roster-week-container")?.scrollIntoView();`)
let printmode = SETTINGS.printmode
document.querySelector("#Roster-week-print-mode button").innerHTML = PRINT_MODES[printmode]
document.getElementById("Zoom-roster").value = SETTINGS.zoom_web
setRosterSortButtons(0)
setRosterSortButtons(1)
addSettingsGlobal()
let scroll = window.location.hash
if (scroll === "#settings") { renderSettings()}
else if (scroll) { document.querySelector(`${scroll}`)?.scrollIntoView()}
hideLoading("startRoster")
})
})
}
if (ROSTERS_YEARWEEK.indexOf(DATE_YEAR_WEEK) === -1) {
let get_yw
if (ROSTERS_YEARWEEK[0] < DATE_YEAR_WEEK) { get_yw = ROSTERS_YEARWEEK[0]}
else if (ROSTERS_YEARWEEK[ROSTERS_YEARWEEK.length-1] > DATE_YEAR_WEEK) { get_yw = ROSTERS_YEARWEEK[ROSTERS_YEARWEEK.length-1]}
else { get_yw = ROSTERS_YEARWEEK.find(y => y < DATE_YEAR_WEEK)}
let roster_old = await dbGet_roster_where_yearweek(get_yw)
let changes
if (DATE_YEAR_WEEK < DATE_YEAR_WEEK_OLDEST) {
changes = await dbGet_roster_changes_where_yearweek(DATE_YEAR_WEEK_OLDEST)
}
dbSet_roster(DATE_YEAR_WEEK, roster_old.time_step, [roster_old.break_60, roster_old.break_90]).then(() => {
if (DATE_YEAR_WEEK < DATE_YEAR_WEEK_OLDEST) {
changes.forEach(c => dbSet_roster_change_where_yearweek_and_day(DATE_YEAR_WEEK, c.day_id, c.start, c.end, c.amount))
}
callA = async () => {
dbGet_rosters_yearweek().then(year_weeks => {
ROSTERS_YEARWEEK = year_weeks
DATE_YEAR_WEEK_NEWEST = ROSTERS_YEARWEEK[0]
DATE_YEAR_WEEK_OLDEST = ROSTERS_YEARWEEK[ROSTERS_YEARWEEK.length-1]
callback()
})
}
callA()
})
} else {
callback()
}
}
startVisitor = async () => {
showLoading("startRoster")
VERSION = 1
SETTINGS = await dbGet_settings()
document.querySelector("h2.main-title").innerHTML = SETTINGS.institution
DEPARTMENTS = await dbGet_departments()
SETTINGS_LABELS = await dbGet_settings_labels()
SHIFT_LABELS = await dbGet_shift_labels()
DISPLAY_EDITABLE_CELL = SETTINGS.default_edit_cell_right
DISPLAY_EDITABLE_ROW = SETTINGS.default_row_top
DISPLAY_EDITABLE_ROW_BOTTOM = SETTINGS.default_row_bottom
DISPLAY_OVERTIME = SETTINGS.overtime
DATE_YEAR_WEEK_OLD = DATE_YEAR_WEEK
CLOSINGTIMES = await dbGet_closingtimes()
ROSTERS_YEARWEEK = await dbGet_rosters_yearweek()
setPrintZoomLevel()
let date = window.location.search.slice(1)
if ((!getDateOfISOWeek(date)) || (ROSTERS_YEARWEEK.indexOf(date) === -1)) { date = ROSTERS_YEARWEEK[0]}
setRosterDate(getDateOfISOWeek(date))
return setPerson().then(async () => {
return getActiveRosterWeek().then(() => {
let printmode = SETTINGS.printmode
setRosterSortButtons(1)
hideLoading("startRoster")
return
})
})
}