From 2126f4de62de1363bf88d7d3ba811cc7e8e0a336 Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Sat, 22 Oct 2022 19:19:17 +0200 Subject: [PATCH] https://gitlab.com/jottyfan/camporganizer2/-/issues/3 --- .../module/common/BookingBean.java | 24 +++ .../module/common/IndexController.java | 9 ++ .../module/common/IndexGateway.java | 30 +++- .../module/common/IndexService.java | 16 ++ src/main/resources/static/css/style.css | 12 +- .../templates/confirmation/person.html | 12 +- src/main/resources/templates/dashboard.html | 145 ++++++++++++------ 7 files changed, 188 insertions(+), 60 deletions(-) diff --git a/src/main/java/de/jottyfan/camporganizer/module/common/BookingBean.java b/src/main/java/de/jottyfan/camporganizer/module/common/BookingBean.java index fa3d32a..a18777f 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/common/BookingBean.java +++ b/src/main/java/de/jottyfan/camporganizer/module/common/BookingBean.java @@ -42,6 +42,30 @@ public class BookingBean implements Serializable { private Boolean accept; private String subscriber; + public Boolean isFemale() { + return EnumSex.female.equals(sex); + } + + public Boolean isMale() { + return EnumSex.male.equals(sex); + } + + public Boolean isTeacher() { + return EnumCamprole.teacher.equals(camprole); + } + + public Boolean isStudent() { + return EnumCamprole.student.equals(camprole); + } + + public Boolean isDirector() { + return EnumCamprole.director.equals(camprole); + } + + public Boolean isFeeder() { + return EnumCamprole.feeder.equals(camprole); + } + /** * @return the forename */ diff --git a/src/main/java/de/jottyfan/camporganizer/module/common/IndexController.java b/src/main/java/de/jottyfan/camporganizer/module/common/IndexController.java index f652b2b..3235d25 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/common/IndexController.java +++ b/src/main/java/de/jottyfan/camporganizer/module/common/IndexController.java @@ -9,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; /** * @@ -36,9 +38,16 @@ public class IndexController extends CommonController { public String dashboard(Model model) { super.setupSession(model, request); model.addAttribute("mybookings", service.getBookingsOf(super.getCurrentUser(request))); + model.addAttribute("bookingBean", new BookingBean()); return "/dashboard"; } + @PostMapping("/dashboard/update") + public String updateBooking(Model model, @ModelAttribute BookingBean bean) { + service.update(bean); + return dashboard(model); + } + @GetMapping("/logout") public String getLogout(HttpServletRequest request) throws ServletException { request.logout(); diff --git a/src/main/java/de/jottyfan/camporganizer/module/common/IndexGateway.java b/src/main/java/de/jottyfan/camporganizer/module/common/IndexGateway.java index 293af85..635d422 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/common/IndexGateway.java +++ b/src/main/java/de/jottyfan/camporganizer/module/common/IndexGateway.java @@ -14,11 +14,13 @@ import org.jooq.Condition; import org.jooq.DSLContext; import org.jooq.Record; import org.jooq.SelectConditionStep; +import org.jooq.UpdateConditionStep; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import de.jottyfan.camporganizer.db.jooq.tables.TProfile; +import de.jottyfan.camporganizer.db.jooq.tables.records.TPersonRecord; import de.jottyfan.camporganizer.db.jooq.tables.records.VCampRecord; /** @@ -110,7 +112,7 @@ public class IndexGateway { String forename = r.get(REGISTRATOR.FORENAME); String surname = r.get(REGISTRATOR.SURNAME); if (forename != null) { - buf.append(forename).append(" "); + buf.append(forename).append(" "); } buf.append(surname != null ? surname : ""); bean.setRegistrator(buf.toString()); @@ -118,7 +120,7 @@ public class IndexGateway { String regForename = r.get(T_PROFILE.FORENAME); String regSurname = r.get(T_PROFILE.SURNAME); if (regForename != null) { - buf.append(regForename).append(" "); + buf.append(regForename).append(" "); } buf.append(regSurname != null ? regSurname : ""); bean.setSubscriber(buf.toString()); @@ -126,4 +128,28 @@ public class IndexGateway { } return list; } + + /** + * update defined fields of the bean + * + * @param bean the bean + * @return number of affected database rows; should be 1 + */ + public Integer update(BookingBean bean) { + UpdateConditionStep sql = jooq + // @formatter:off + .update(T_PERSON) + .set(T_PERSON.FORENAME, bean.getForename()) + .set(T_PERSON.SURNAME, bean.getSurname()) + .set(T_PERSON.STREET, bean.getStreet()) + .set(T_PERSON.ZIP, bean.getZip()) + .set(T_PERSON.CITY, bean.getCity()) + .set(T_PERSON.PHONE, bean.getPhone()) + .set(T_PERSON.EMAIL, bean.getEmail()) + .set(T_PERSON.COMMENT, bean.getComment()) + .where(T_PERSON.PK.eq(bean.getPk())); + // @formatter:on + LOGGER.debug(sql.toString()); + return sql.execute(); + } } diff --git a/src/main/java/de/jottyfan/camporganizer/module/common/IndexService.java b/src/main/java/de/jottyfan/camporganizer/module/common/IndexService.java index 4bf3c4d..aba2b01 100644 --- a/src/main/java/de/jottyfan/camporganizer/module/common/IndexService.java +++ b/src/main/java/de/jottyfan/camporganizer/module/common/IndexService.java @@ -36,7 +36,23 @@ public class IndexService { return list; } + /** + * get all bookings that the user can see + * + * @param username the name of the user + * @return a list of beans + */ public List getBookingsOf(String username) { return gateway.getAllBookings(username); } + + /** + * update defined contents of the bean + * + * @param bean the bean + * @return true or false + */ + public Boolean update(BookingBean bean) { + return gateway.update(bean) == 1; + } } diff --git a/src/main/resources/static/css/style.css b/src/main/resources/static/css/style.css index f2fcb3d..f9af22f 100644 --- a/src/main/resources/static/css/style.css +++ b/src/main/resources/static/css/style.css @@ -185,23 +185,33 @@ body { padding: 8px; margin-right: 12px; border-radius: 6px; - min-width: 32px; + min-width: 30px; + min-height: 30px; text-align: center; } .framed-green { background: linear-gradient(to bottom right, lime, darkgreen); color: white; + border: 1px solid green; } .framed-red { background: linear-gradient(to bottom right, red, darkred); color: white; + border: 1px solid red; } .framed-orange { background: linear-gradient(to bottom right, orange, #bf6c06); color: white; + border: 1px solid orange; +} + +.framed-white { + background: white; + color: black; + border: 1px solid black; } .nomaxwidth { diff --git a/src/main/resources/templates/confirmation/person.html b/src/main/resources/templates/confirmation/person.html index 273fb2d..9a52d12 100644 --- a/src/main/resources/templates/confirmation/person.html +++ b/src/main/resources/templates/confirmation/person.html @@ -113,12 +113,12 @@
- - - - - - + + + + + +
diff --git a/src/main/resources/templates/dashboard.html b/src/main/resources/templates/dashboard.html index 0552232..4c87c6d 100644 --- a/src/main/resources/templates/dashboard.html +++ b/src/main/resources/templates/dashboard.html @@ -14,70 +14,113 @@
+

-
-
-
-

Freizeitdaten

+
+
Freizeitdaten
+
+
+
+
Ort:
+
+ +
+
Zeit:
+
+ +
+
Preis:
+
+
Ferien:
+
+
-
Ort:
-
- -
-
Zeit:
-
- -
-
Preis:
-
-
Ferien:
-
-
-
-
-

Teilnehmerdaten

-
-
Rolle:
- -
ID:
- -
Vorname:
- -
Nachname:
- -
Straße:
- -
PLZ:
- -
Ort:
- -
Telefon:
- -
Geburtstag:
- -
E-Mail:
- -
Geschlecht:
- -
Foto-Einverständnis:
- -
Kommentar:
- +
+
Teilnehmerdaten
+
+
+ +
+
+
Rolle:
+ Mitarbeiter Teilnehmer Leiter Küchenteam + +
+
+
Geschlecht:
+ + männlich + weiblich + + +
+
+
Vorname:
+ +
+
+
Nachname:
+ +
+
+
Straße:
+ +
+
+
PLZ:
+ +
+
+
Ort:
+ +
+
+
Telefon:
+ +
+
+
Geburtstag:
+ +
+
+
E-Mail:
+ +
+
+
Foto-Einverständnis:
+ +
+
+
Kommentar:
+ +
+
+
+
+ +
+
+
+