diff --git a/src/main/java/de/jottyfan/timetrack/modules/CommonController.java b/src/main/java/de/jottyfan/timetrack/modules/CommonController.java index a410f82..f1071fd 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/CommonController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/CommonController.java @@ -1,7 +1,11 @@ package de.jottyfan.timetrack.modules; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.ModelAttribute; + +import de.jottyfan.timetrack.component.OAuth2Provider; +import de.jottyfan.timetrack.modules.profile.ProfileService; /** * * @author jotty @@ -9,6 +13,12 @@ import org.springframework.web.bind.annotation.ModelAttribute; */ public abstract class CommonController { + @Autowired + private OAuth2Provider provider; + + @Autowired + private ProfileService profileService; + @Value("${server.servlet.context-path}") private String contextPath; @@ -16,4 +26,10 @@ public abstract class CommonController { public String getBaseUrl() { return contextPath; } + + @ModelAttribute("theme") + public String getTheme() { + String username = provider.getName(); + return profileService.getTheme(username); + } } diff --git a/src/main/java/de/jottyfan/timetrack/modules/IndexController.java b/src/main/java/de/jottyfan/timetrack/modules/IndexController.java index d9ec5d9..8bee9a9 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/IndexController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/IndexController.java @@ -12,14 +12,12 @@ 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.RequestMapping; import de.jottyfan.timetrack.component.OAuth2Provider; import de.jottyfan.timetrack.modules.done.DoneService; import de.jottyfan.timetrack.modules.done.model.DoneBean; import de.jottyfan.timetrack.modules.done.model.DoneModel; import de.jottyfan.timetrack.modules.done.model.SummaryBean; -import de.jottyfan.timetrack.modules.profile.ProfileService; import jakarta.annotation.security.RolesAllowed; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; @@ -38,9 +36,6 @@ public class IndexController extends CommonController { @Autowired private OAuth2Provider provider; - - @Autowired - private ProfileService profileService; @GetMapping("/logout") public String getLogout(HttpServletRequest request) throws ServletException { @@ -49,14 +44,13 @@ public class IndexController extends CommonController { } @RolesAllowed("timetrack_user") - @RequestMapping("/") + @GetMapping("/") public String getIndex(@ModelAttribute DoneModel doneModel, Model model, OAuth2AuthenticationToken token) { String username = provider.getName(); Duration maxWorkTime = Duration.ofHours(8); // TODO: to the configuration file LocalDate day = LocalDate.now(); List list = doneService.getList(day, username); model.addAttribute("sum", new SummaryBean(list, day, maxWorkTime)); - model.addAttribute("theme", profileService.getTheme(username)); LOGGER.debug("sum = {}", model.getAttribute("sum")); return "public/index"; } diff --git a/src/main/java/de/jottyfan/timetrack/modules/calendar/CalendarController.java b/src/main/java/de/jottyfan/timetrack/modules/calendar/CalendarController.java index a59f7c1..315a95f 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/calendar/CalendarController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/calendar/CalendarController.java @@ -5,9 +5,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; -import de.jottyfan.timetrack.component.OAuth2Provider; import de.jottyfan.timetrack.modules.CommonController; -import de.jottyfan.timetrack.modules.profile.ProfileService; /** * @@ -17,19 +15,12 @@ import de.jottyfan.timetrack.modules.profile.ProfileService; @Controller public class CalendarController extends CommonController { - @Autowired - private OAuth2Provider provider; - - @Autowired - private ProfileService profileService; - @Autowired private CalendarService service; @GetMapping("/calendar") public String getCalendar(Model model) { model.addAttribute("events", service.getJsonEvents()); - model.addAttribute("theme", profileService.getTheme(provider.getName())); return "/calendar/calendar"; } } diff --git a/src/main/java/de/jottyfan/timetrack/modules/contact/ContactController.java b/src/main/java/de/jottyfan/timetrack/modules/contact/ContactController.java index 3fd698a..c77fe2c 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/contact/ContactController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/contact/ContactController.java @@ -10,14 +10,11 @@ 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.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; -import de.jottyfan.timetrack.component.OAuth2Provider; import de.jottyfan.timetrack.db.contact.enums.EnumContacttype; import de.jottyfan.timetrack.modules.CommonController; -import de.jottyfan.timetrack.modules.profile.ProfileService; import jakarta.annotation.security.RolesAllowed; /** @@ -27,12 +24,6 @@ import jakarta.annotation.security.RolesAllowed; */ @Controller public class ContactController extends CommonController { - - @Autowired - private OAuth2Provider provider; - - @Autowired - private ProfileService profileService; @Autowired private ContactService contactService; @@ -44,16 +35,15 @@ public class ContactController extends CommonController { } @RolesAllowed("timetrack_user") - @RequestMapping(value = "/contact/list") + @GetMapping("/contact/list") public String getList(Model model) { List list = contactService.getList(); model.addAttribute("contactList", list); - model.addAttribute("theme", profileService.getTheme(provider.getName())); return "contact/list"; } @RolesAllowed("timetrack_user") - @RequestMapping(value = "/contact/add", method = RequestMethod.GET) + @GetMapping("/contact/add") public String toAdd(Model model) { return toItem(null, model); } @@ -67,12 +57,11 @@ public class ContactController extends CommonController { } model.addAttribute("contactBean", bean); model.addAttribute("types", Arrays.asList(EnumContacttype.values())); - model.addAttribute("theme", profileService.getTheme(provider.getName())); return "contact/item"; } @RolesAllowed("timetrack_user") - @RequestMapping(value = "/contact/upsert", method = RequestMethod.POST) + @PostMapping("/contact/upsert") public String doUpsert(Model model, @ModelAttribute ContactBean bean) { Integer amount = contactService.doUpsert(bean); return amount.equals(1) ? getList(model) : toItem(bean.getPk(), model); diff --git a/src/main/java/de/jottyfan/timetrack/modules/done/DoneController.java b/src/main/java/de/jottyfan/timetrack/modules/done/DoneController.java index 588b1c3..3394b8f 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/done/DoneController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/done/DoneController.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.SessionAttributes; import de.jottyfan.timetrack.component.OAuth2Provider; @@ -19,8 +20,8 @@ import de.jottyfan.timetrack.modules.CommonController; import de.jottyfan.timetrack.modules.done.model.DoneBean; import de.jottyfan.timetrack.modules.done.model.DoneModel; import de.jottyfan.timetrack.modules.done.model.OvertimeBean; +import de.jottyfan.timetrack.modules.done.model.SlotBean; import de.jottyfan.timetrack.modules.done.model.SummaryBean; -import de.jottyfan.timetrack.modules.profile.ProfileService; import jakarta.annotation.security.RolesAllowed; /** @@ -35,9 +36,6 @@ public class DoneController extends CommonController { @Autowired private OAuth2Provider provider; - @Autowired - private ProfileService profileService; - @Autowired private DoneService doneService; @@ -68,7 +66,6 @@ public class DoneController extends CommonController { model.addAttribute("moduleList", doneService.getModules(false)); model.addAttribute("jobList", doneService.getJobs(false)); model.addAttribute("billingList", doneService.getBillings(false)); - model.addAttribute("theme", profileService.getTheme(username)); model.addAttribute("favorites", doneService.getFavorites(username)); return "done/list"; } @@ -96,13 +93,11 @@ public class DoneController extends CommonController { } private String toItem(DoneBean bean, Model model) { - String username = provider.getName(); model.addAttribute("doneBean", bean); model.addAttribute("projectList", doneService.getProjects(true)); model.addAttribute("moduleList", doneService.getModules(true)); model.addAttribute("jobList", doneService.getJobs(true)); model.addAttribute("billingList", doneService.getBillings(true)); - model.addAttribute("theme", profileService.getTheme(username)); return "done/item"; } @@ -210,4 +205,11 @@ public class DoneController extends CommonController { model.addAttribute("bean", doneService.getSlot(id, username)); return "/done/slot/item"; } + + @RolesAllowed("timetrack_user") + @GetMapping("/done/slot/add") + public String addSlot(@RequestParam("day") LocalDate day, Model model) { + model.addAttribute("bean", SlotBean.of(day)); + return "/done/slot/item"; + } } diff --git a/src/main/java/de/jottyfan/timetrack/modules/note/NoteController.java b/src/main/java/de/jottyfan/timetrack/modules/note/NoteController.java index f8c6dd6..6d60812 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/note/NoteController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/note/NoteController.java @@ -10,14 +10,11 @@ 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.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.PostMapping; -import de.jottyfan.timetrack.component.OAuth2Provider; import de.jottyfan.timetrack.db.note.enums.EnumCategory; import de.jottyfan.timetrack.db.note.enums.EnumNotetype; import de.jottyfan.timetrack.modules.CommonController; -import de.jottyfan.timetrack.modules.profile.ProfileService; import jakarta.annotation.security.RolesAllowed; /** @@ -28,27 +25,19 @@ import jakarta.annotation.security.RolesAllowed; @Controller public class NoteController extends CommonController { - @Autowired - private OAuth2Provider provider; - - @Autowired - private ProfileService profileService; - @Autowired private NoteService noteService; @RolesAllowed("timetrack_user") - @RequestMapping(value = "/note/list") + @GetMapping("/note/list") public String getList(Model model) { - String username = provider.getName(); List list = noteService.getList(); model.addAttribute("noteList", list); - model.addAttribute("theme", profileService.getTheme(username)); return "note/list"; } @RolesAllowed("timetrack_user") - @RequestMapping(value = "/note/add", method = RequestMethod.GET) + @GetMapping("/note/add") public String toAdd(Model model, OAuth2AuthenticationToken token) { return toItem(null, model); } @@ -56,7 +45,6 @@ public class NoteController extends CommonController { @RolesAllowed("timetrack_user") @GetMapping("/note/edit/{id}") public String toItem(@PathVariable Integer id, Model model) { - String username = provider.getName(); NoteBean bean = noteService.getBean(id); if (bean == null) { bean = new NoteBean(); // the add case @@ -64,12 +52,11 @@ public class NoteController extends CommonController { model.addAttribute("noteBean", bean); model.addAttribute("types", Arrays.asList(EnumNotetype.values())); model.addAttribute("categories", Arrays.asList(EnumCategory.values())); - model.addAttribute("theme", profileService.getTheme(username)); return "note/item"; } @RolesAllowed("timetrack_user") - @RequestMapping(value = "/note/upsert", method = RequestMethod.POST) + @PostMapping("/note/upsert") public String doUpsert(Model model, @ModelAttribute NoteBean bean, OAuth2AuthenticationToken token) { Integer amount = noteService.doUpsert(bean); return amount.equals(1) ? getList(model) : toItem(bean.getPk(), model); diff --git a/src/main/java/de/jottyfan/timetrack/modules/profile/ProfileController.java b/src/main/java/de/jottyfan/timetrack/modules/profile/ProfileController.java index e35fdf7..a0890cf 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/profile/ProfileController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/profile/ProfileController.java @@ -3,9 +3,7 @@ package de.jottyfan.timetrack.modules.profile; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; - +import org.springframework.web.bind.annotation.PostMapping; import de.jottyfan.timetrack.component.OAuth2Provider; import de.jottyfan.timetrack.modules.CommonController; @@ -23,7 +21,7 @@ public class ProfileController extends CommonController { @Autowired private ProfileService service; - @RequestMapping(value = "/profile/{theme}", method = RequestMethod.POST) + @PostMapping("/profile/{theme}") public String setTheme(@PathVariable String theme) { String username = provider.getName(); service.setTheme(username, theme); diff --git a/src/main/resources/templates/done/list.html b/src/main/resources/templates/done/list.html index 669b0c5..039e91a 100644 --- a/src/main/resources/templates/done/list.html +++ b/src/main/resources/templates/done/list.html @@ -249,11 +249,11 @@
Sonntag
-
Montag
-
Dienstag
-
Mittwoch
-
Donnerstag
-
Freitag
+
Montag
+
Dienstag
+
Mittwoch
+
Donnerstag
+
Freitag
Samstag
@@ -262,7 +262,7 @@ - + diff --git a/src/main/resources/templates/done/slot/item.html b/src/main/resources/templates/done/slot/item.html index c5cd004..5bc164e 100644 --- a/src/main/resources/templates/done/slot/item.html +++ b/src/main/resources/templates/done/slot/item.html @@ -6,6 +6,9 @@
@@ -17,6 +20,8 @@
vereinbarte Arbeitszeit
+ TODO: Löschen
+ TODO: Ersetzen durch Dienstbefreiung, Urlaub, Ausgleichstag/Überstunden, Krankheit oder sonstwas