From a3db8c67d0a3ef4b9a190b5156d298e7f5e16376 Mon Sep 17 00:00:00 2001 From: mbremer Date: Mon, 2 Aug 2021 16:57:01 +0200 Subject: [PATCH] Fix Kalender-Page for multiple rooms --- TODO.md | 6 ++++++ .../java/de/mbremer/kalender/KalenderResource.java | 4 ++-- src/main/java/de/mbremer/kalender/KalenderService.java | 10 +++++++--- src/main/java/de/mbremer/kalender/KalenderTag.java | 9 +++++++++ src/main/resources/db/migration/V0003__room.sql | 2 +- src/main/resources/templates/room.html | 2 +- 6 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 TODO.md diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..700dc9a --- /dev/null +++ b/TODO.md @@ -0,0 +1,6 @@ +# TODO + +- unpoly +- Feiertage mit Cache +- API via API-Key +- Verkehrsmodul via Google-Maps: E-Mail, Telegram diff --git a/src/main/java/de/mbremer/kalender/KalenderResource.java b/src/main/java/de/mbremer/kalender/KalenderResource.java index b190143..618e86f 100644 --- a/src/main/java/de/mbremer/kalender/KalenderResource.java +++ b/src/main/java/de/mbremer/kalender/KalenderResource.java @@ -67,7 +67,7 @@ public class KalenderResource { User currentUser = userService.getCurrentUser(); Room room = currentUser.getRoom(); try { - KalenderTag tag = KalenderTag.find("day = ?1 and room = ?2", dayParsed, room).singleResult(); + KalenderTag tag = KalenderTag.findByDayAndRoomId(dayParsed, room == null ? null : room.id); if (kalenderForm.isInOffice() && tag.getInOffice() == null) { tag.setInOffice(currentUser); } else if (!kalenderForm.isInOffice() && currentUser.equals(tag.getInOffice())) { @@ -76,7 +76,7 @@ public class KalenderResource { } catch (NoResultException e) { KalenderTag tag = new KalenderTag(dayParsed, room); tag.setInOffice(currentUser); - tag.setRoom(currentUser.getRoom()); + tag.setRoom(room); tag.persist(); } diff --git a/src/main/java/de/mbremer/kalender/KalenderService.java b/src/main/java/de/mbremer/kalender/KalenderService.java index f382f88..1922677 100644 --- a/src/main/java/de/mbremer/kalender/KalenderService.java +++ b/src/main/java/de/mbremer/kalender/KalenderService.java @@ -6,6 +6,7 @@ import de.mbremer.secutity.UserService; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; +import javax.persistence.NoResultException; import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @@ -24,9 +25,12 @@ public class KalenderService { return Stream.iterate(0, i -> i < 5, i -> ++i) .map(d -> { LocalDate day = montag.plusDays(d); - KalenderTag tag = - (KalenderTag) KalenderTag.find("day = ?1 and room = ?2", day, room).singleResultOptional() - .orElse(new KalenderTag(day, room)); + KalenderTag tag; + try { + tag = KalenderTag.findByDayAndRoomId(day, room == null ? null : room.id); + } catch (NoResultException e) { + tag = new KalenderTag(day, room); + } tag.setCurrentUserInOffice(currentUser.equals(tag.getInOffice())); tag.setToday(LocalDate.now().equals(day)); return tag; diff --git a/src/main/java/de/mbremer/kalender/KalenderTag.java b/src/main/java/de/mbremer/kalender/KalenderTag.java index d37ef15..1cdeb98 100644 --- a/src/main/java/de/mbremer/kalender/KalenderTag.java +++ b/src/main/java/de/mbremer/kalender/KalenderTag.java @@ -32,4 +32,13 @@ public class KalenderTag extends PanacheEntity { this.day = day; this.room = room; } + + /** + * @throws javax.persistence.NoResultException + */ + public static KalenderTag findByDayAndRoomId(LocalDate day, Long roomId) { + return roomId == null ? + (KalenderTag) KalenderTag.find("day = ?1 and room_id is null", day).singleResult() : + (KalenderTag) KalenderTag.find("day = ?1 and room_id = ?2", day, roomId).singleResult(); + } } diff --git a/src/main/resources/db/migration/V0003__room.sql b/src/main/resources/db/migration/V0003__room.sql index 972f568..cb1dfe2 100644 --- a/src/main/resources/db/migration/V0003__room.sql +++ b/src/main/resources/db/migration/V0003__room.sql @@ -7,4 +7,4 @@ alter table users add column room_id bigint references room; alter table kalendertag add column room_id bigint references room; alter table kalendertag drop constraint kalendertag_day_key; - +alter table kalendertag add constraint kalendertag_day_room_unique unique(day,room_id); diff --git a/src/main/resources/templates/room.html b/src/main/resources/templates/room.html index 202dee3..5dd4077 100644 --- a/src/main/resources/templates/room.html +++ b/src/main/resources/templates/room.html @@ -21,7 +21,7 @@
- kein Raumplan vorhanden + kein Raumplan vorhanden
{#if is_admin}