From f8290cdbb6535ead4abd36eb6e2ee5faf664a266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Henke?= Date: Thu, 15 Jan 2026 11:30:27 +0100 Subject: [PATCH] update work packages --- .../ProjectmanagementController.java | 23 +++++-- .../ProjectmanagementRepository.java | 16 +++++ .../ProjectmanagementService.java | 9 +++ .../model/WorkpackageBean.java | 69 ++++++++++++++++++- .../projectmanagement/workpackage/item.html | 41 ++++++++--- 5 files changed, 144 insertions(+), 14 deletions(-) diff --git a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementController.java b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementController.java index 3afc4ef..85a1dee 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementController.java +++ b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementController.java @@ -3,8 +3,11 @@ package de.jottyfan.timetrack.modules.projectmanagement; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; 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 de.jottyfan.timetrack.modules.CommonController; import de.jottyfan.timetrack.modules.projectmanagement.model.ProjectBean; @@ -21,32 +24,44 @@ public class ProjectmanagementController extends CommonController { @Autowired private ProjectmanagementService service; - + @RolesAllowed("timetrack_user") @GetMapping("/projectmanagement") public String getDashboard(final Model model) { model.addAttribute("projects", service.getProjects()); return "/projectmanagement/dashboard"; } - + @RolesAllowed("timetrack_user") @GetMapping("/projectmanagement/project/add") public String getProjectAddMask(final Model model) { model.addAttribute("bean", new ProjectBean()); return "/projectmanagement/project/add"; } - + @RolesAllowed("timetrack_user") @GetMapping("/projectmanagement/workpackage/{pkWorkpackage}") public String getWorkpackage(@PathVariable("pkWorkpackage") Integer pkWorkpackage, final Model model) { model.addAttribute("bean", service.getWorkpackage(pkWorkpackage)); return "/projectmanagement/workpackage/item"; } - + @RolesAllowed("timetrack_user") @GetMapping("/projectmanagement/project/{fkProject}/addWorkpackage") public String getWorkpackageAddMask(@PathVariable("fkProject") Integer fkProject, final Model model) { model.addAttribute("bean", WorkpackageBean.of(fkProject)); return "/projectmanagement/workpackage/item"; } + + @RolesAllowed("timetrack_user") + @PostMapping("/projectmanagement/project/{fkProject}/update") + public String updateWorkpackage(@PathVariable("fkProject") Integer fkProject, + @ModelAttribute("bean") WorkpackageBean bean, BindingResult bindingResult, final Model model) { + if (bindingResult.hasErrors()) { + return "/projectmanagement/workpackage/item"; + } + bean.setFkProject(fkProject); + service.updateWorkpackage(bean); + return "redirect:/projectmanagement"; + } } diff --git a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementRepository.java b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementRepository.java index cf89034..6d59252 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementRepository.java +++ b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementRepository.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import org.jooq.DSLContext; +import org.jooq.UpdateConditionStep; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @@ -51,4 +52,19 @@ public class ProjectmanagementRepository { return jooq.selectFrom(T_WORKPACKAGE).where(T_WORKPACKAGE.PK_WORKPACKAGE.eq(pkWorkpackage)).fetchOneInto(WorkpackageBean.class); } + public void updateWorkpackage(WorkpackageBean bean) { + UpdateConditionStep sql = jooq + // @formatter:off + .update(T_WORKPACKAGE) + .set(T_WORKPACKAGE.FK_PROJECT, bean.getFkProject()) + .set(T_WORKPACKAGE.NAME, bean.getName()) + .set(T_WORKPACKAGE.DESCRIPTION, bean.getDescription()) + .set(T_WORKPACKAGE.MILESTONE_URL, bean.getMilestoneUrl()) + .set(T_WORKPACKAGE.CONTRACT_URL, bean.getContractUrl()) + .set(T_WORKPACKAGE.PLANNED_DUEDATE, bean.getPlannedDuedate()) + .where(T_WORKPACKAGE.PK_WORKPACKAGE.eq(bean.getPkWorkpackage())); + // @formatter:on + sql.execute(); + } + } diff --git a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementService.java b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementService.java index 5933978..cf59622 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementService.java +++ b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/ProjectmanagementService.java @@ -37,4 +37,13 @@ public class ProjectmanagementService { public WorkpackageBean getWorkpackage(Integer pkWorkpackage) { return repository.getWorkpackage(pkWorkpackage); } + + /** + * update the workpackage + * + * @param bean the bean + */ + public void updateWorkpackage(WorkpackageBean bean) { + repository.updateWorkpackage(bean); + } } diff --git a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/model/WorkpackageBean.java b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/model/WorkpackageBean.java index d4c72f7..1c29c0f 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/model/WorkpackageBean.java +++ b/src/main/java/de/jottyfan/timetrack/modules/projectmanagement/model/WorkpackageBean.java @@ -1,6 +1,7 @@ package de.jottyfan.timetrack.modules.projectmanagement.model; import java.io.Serializable; +import java.time.LocalDate; import de.jottyfan.timetrack.db.project.tables.records.TWorkpackageRecord; @@ -13,14 +14,22 @@ public class WorkpackageBean implements Serializable { private static final long serialVersionUID = 1L; private Integer pkWorkpackage; - private String name; private Integer fkProject; + private String name; + private String description; + private String milestoneUrl; + private String contractUrl; + private LocalDate plannedDuedate; public static final WorkpackageBean of(TWorkpackageRecord r) { WorkpackageBean bean = new WorkpackageBean(); bean.setPkWorkpackage(r.getPkWorkpackage()); - bean.setName(r.getName()); bean.setFkProject(r.getFkProject()); + bean.setName(r.getName()); + bean.setDescription(r.getDescription()); + bean.setMilestoneUrl(r.getMilestoneUrl()); + bean.setContractUrl(r.getContractUrl()); + bean.setPlannedDuedate(r.getPlannedDuedate()); return bean; } @@ -71,4 +80,60 @@ public class WorkpackageBean implements Serializable { public void setFkProject(Integer fkProject) { this.fkProject = fkProject; } + + /** + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * @param description the description to set + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * @return the milestoneUrl + */ + public String getMilestoneUrl() { + return milestoneUrl; + } + + /** + * @param milestoneUrl the milestoneUrl to set + */ + public void setMilestoneUrl(String milestoneUrl) { + this.milestoneUrl = milestoneUrl; + } + + /** + * @return the contractUrl + */ + public String getContractUrl() { + return contractUrl; + } + + /** + * @param contractUrl the contractUrl to set + */ + public void setContractUrl(String contractUrl) { + this.contractUrl = contractUrl; + } + + /** + * @return the plannedDuedate + */ + public LocalDate getPlannedDuedate() { + return plannedDuedate; + } + + /** + * @param plannedDuedate the plannedDuedate to set + */ + public void setPlannedDuedate(LocalDate plannedDuedate) { + this.plannedDuedate = plannedDuedate; + } } diff --git a/src/main/resources/templates/projectmanagement/workpackage/item.html b/src/main/resources/templates/projectmanagement/workpackage/item.html index 8c5500b..0be9d8b 100644 --- a/src/main/resources/templates/projectmanagement/workpackage/item.html +++ b/src/main/resources/templates/projectmanagement/workpackage/item.html @@ -16,15 +16,40 @@ TODO: Maske zum Anlegen eines neuen Workpackages für Projekt
-
-
-
ID
-
-
Name
-
+
+
+
+
ID
+
+ +
+
Name
+
+ +
+
Beschreibung
+
+ +
+
Milestone-URL
+
+ +
+
Auftragsdokument
+
+ +
+
geplante Fertigstellung
+
+ +
+
+
+ +
+
-
- TODO: Maske zum Bearbeiten eines bestehenden Workpackages +