From dbca8ad5708ff537d1994bfe9d7b70dbef88360f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20L=C3=BCcke?= Date: Fri, 20 Jun 2025 19:43:04 +0200 Subject: [PATCH] =?UTF-8?q?Eintragung=20von=20HomeOffice=20ist=20=C3=BCber?= =?UTF-8?q?=20die=20Oberfl=C3=A4che=20m=C3=B6glich?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/test-data/report-1672928012.CSV | 2 +- ui/src/lib/Models.svelte.js | 3 +- ui/src/lib/Views.svelte | 2 + ui/src/routes/working-hours/+page.server.js | 19 ++++++++-- ui/src/routes/working-hours/+page.svelte | 8 ++-- .../working-hours/[working_day]/+page.svelte | 8 +++- .../working-hours/create-by-day/+page.svelte | 4 ++ .../working-hours/create-by-week/+page.svelte | 38 ++++++++++++++++++- .../working-hours/import-csv/+page.svelte | 18 +++++++-- 9 files changed, 87 insertions(+), 15 deletions(-) diff --git a/resources/test-data/report-1672928012.CSV b/resources/test-data/report-1672928012.CSV index daf9c3a..d13b8a7 100755 --- a/resources/test-data/report-1672928012.CSV +++ b/resources/test-data/report-1672928012.CSV @@ -23,7 +23,7 @@ Arbeit;04:16;2021-07-22 07:55;2021-07-22 12:11; Arbeit;03:11;2021-07-21 13:37;2021-07-21 16:48; Mittagspause ;01:07;2021-07-21 12:29;2021-07-21 13:37; Arbeit;04:58;2021-07-21 07:31;2021-07-21 12:29; -Arbeit;01:17;2021-07-20 18:44;2021-07-20 20:02; +Verkehr;01:17;2021-07-20 18:44;2021-07-20 20:02; Arbeit;03:50;2021-07-20 13:14;2021-07-20 17:04; Mittagspause ;00:41;2021-07-20 12:32;2021-07-20 13:14; Arbeit;04:55;2021-07-20 07:37;2021-07-20 12:32; diff --git a/ui/src/lib/Models.svelte.js b/ui/src/lib/Models.svelte.js index 099129a..f9bc552 100644 --- a/ui/src/lib/Models.svelte.js +++ b/ui/src/lib/Models.svelte.js @@ -1,9 +1,10 @@ export class PeriodRecord { /** - * @param {{ workingDays: Number; totalHours: any; overtime: string; period: string; }} record + * @param {{ workingDays: Number; totalHours: any; overtime: string; period: string; homeOfficeDays: Number }} record */ constructor(record) { this.workingDays = Number(record.workingDays) + this.homeOfficeDays = Number(record.homeOfficeDays) this.totalHours = String(record.totalHours) this.period = String(record.period) this.overtime = String('##:##:##') diff --git a/ui/src/lib/Views.svelte b/ui/src/lib/Views.svelte index 6b4556a..038a7f7 100644 --- a/ui/src/lib/Views.svelte +++ b/ui/src/lib/Views.svelte @@ -43,6 +43,7 @@ Zeitraum Arbeitstage + davon HomeOffice Arbeitsstunden Über- / Unterstunden @@ -52,6 +53,7 @@ {record.period} {record.workingDays} + {record.homeOfficeDays} {record.totalHours} {record.overtime} diff --git a/ui/src/routes/working-hours/+page.server.js b/ui/src/routes/working-hours/+page.server.js index 6656eaa..b0a6eb4 100644 --- a/ui/src/routes/working-hours/+page.server.js +++ b/ui/src/routes/working-hours/+page.server.js @@ -34,6 +34,7 @@ export const actions = { const body_data = { workingDay: data.get('workingDay'), workingTime: data.get('workingTime'), + isHomeOffice: data.get('isHomeOffice'), } await WorkingHoursRepository.update(env.API_URL, data.get('workingDay'), body_data); }, @@ -42,6 +43,7 @@ export const actions = { const body_data = { workingDay: form_data.get('workingDay'), workingTime: form_data.get('workingTime'), + isHomeOffice: form_data.get('isHomeOffice'), } await WorkingHoursRepository.add(env.API_URL, body_data); }, @@ -56,13 +58,19 @@ export const actions = { actualDayObject.setDate(actualDayObject.getDate() + 1) }) for (const pair of form_data.entries()) { - const working_day = day_list[pair[0]] ?? null - if (working_day === null) { + let key = /(?\w+)\[time]/.exec(pair[0]) + if (key === null) { + continue + } + let day = key?.groups?.day ?? '' + const working_day = day_list[day] ?? null + if (working_day === null || pair[1] === '00:00:00' || pair[1] === '00:00') { continue } const body_data = { workingDay: working_day, workingTime: pair[1], + isHomeOffice: form_data.has(day + '[isHomeOffice]') } await WorkingHoursRepository.addOrUpdate(env.API_URL, working_day, body_data); } @@ -70,10 +78,15 @@ export const actions = { 'import-csv': async ({ request }) => { const form_data = await request.formData(); for (const pair of form_data.entries()) { - const working_day = pair[0] + let key = /^(?\d{4}-\d{2}-\d{2})\[time]$/.exec(pair[0]) + if (key === null) { + continue + } + let working_day = key?.groups?.day ?? '' const body_data = { workingDay: working_day, workingTime: pair[1], + isHomeOffice: form_data.has(working_day + '[isHomeOffice]') } await WorkingHoursRepository.addOrUpdate(env.API_URL, working_day, body_data); } diff --git a/ui/src/routes/working-hours/+page.svelte b/ui/src/routes/working-hours/+page.svelte index ee61cef..979449f 100644 --- a/ui/src/routes/working-hours/+page.svelte +++ b/ui/src/routes/working-hours/+page.svelte @@ -4,11 +4,11 @@ import IconifyIcon from "@iconify/svelte"; let { data } = $props(); const TITLE = "Bearbeitung Einträge" - /** @type {{workingDay: String, workingTime: String, }[]|null} **/ + /** @type {{workingDay: String, workingTime: String, isHomeOffice: Boolean, }[]|null} **/ let records = $state([]) const init = async () => await data.promise.then( /** - * @param {{workingDay: String, workingTime: String, }[]} data + * @param {{workingDay: String, workingTime: String, isHomeOffice: Boolean, }[]} data */ data => { records = data @@ -53,14 +53,16 @@ Datum Arbeitsstunden + Zu Hause gearbeitet? Aktionen {#each records as record} - + {record.workingDay} {record.workingTime} + {record.isHomeOffice ? 'ja' : ''}