Skip to content

Commit 0b2c910

Browse files
committed
bugfixing
1 parent 90cc2ac commit 0b2c910

File tree

5 files changed

+237
-44
lines changed

5 files changed

+237
-44
lines changed

etc/requirements/Requirements.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,23 @@
1212

1313
## F006 Page after first successful Login
1414

15-
## F007 Add first new Task
15+
## F007 Add first new Task from Inbox
1616

1717
## F008 Add first new Project
1818

19+
## F009 Add another new Task from Inbox
20+
INBOX -> add new task -> Form -> save -> INBOX ( -> OK )
21+
-> add new task -> Form -> save -> Project (-> NOK )
22+
23+
BUG: after saving to db app should show Inbox, but shows ProjectView for RootProject
24+
25+
URLpaths:
26+
http://localhost:5000/taskstate/inbox
27+
http://localhost:5000/task/addtoproject/0
28+
http://localhost:5000/project/0/?listTaskTime=MIN5&listTaskTime=MIN10&listTaskTime=MIN15&listTaskTime=MIN30&listTaskTime=MIN45&listTaskTime=HOUR1&listTaskTime=HOUR2&listTaskTime=HOUR3&listTaskTime=HOUR4&listTaskTime=HOUR6&listTaskTime=HOUR8&listTaskTime=MORE&listTaskTime=NONE&numberOfNewIncomingMessages=0&listTaskEnergy=LOW&listTaskEnergy=MEDIUM&listTaskEnergy=HIGH&listTaskEnergy=NONE&context=Work&refreshMessages=false
29+
30+
31+
32+
1933

2034

src/main/java/org/woehlke/simpleworklist/task/TaskController.java

Lines changed: 68 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,72 @@ public final String addNewTaskToProjectGet(
160160
model.addAttribute("thisProjectId", 0L);
161161
model.addAttribute("breadcrumb", breadcrumb);
162162
model.addAttribute("task", task);
163-
return "task/add";
163+
return "task/addToProject";
164+
}
165+
166+
@RequestMapping(path = "/add", method = RequestMethod.GET)
167+
public final String addNewTaskToInboxGet(
168+
@ModelAttribute("userSession") UserSessionBean userSession,
169+
Locale locale, Model model
170+
) {
171+
UserAccount userAccount = userAccountLoginSuccessService.retrieveCurrentUser();
172+
Task task = new Task();
173+
task.setTaskState(TaskState.INBOX);
174+
task.setTaskEnergy(TaskEnergy.NONE);
175+
task.setTaskTime(TaskTime.NONE);
176+
Boolean mustChooseContext = false;
177+
if(userSession.getContextId() == 0L){
178+
mustChooseContext = true;
179+
task.setContext(userAccount.getDefaultContext());
180+
} else {
181+
Context context = contextService.findByIdAndUserAccount(userSession.getContextId(), userAccount);
182+
task.setContext(context);
183+
}
184+
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForTaskstate(TaskState.INBOX,locale);
185+
model.addAttribute("breadcrumb", breadcrumb);
186+
model.addAttribute("mustChooseArea", mustChooseContext);
187+
model.addAttribute("breadcrumb", breadcrumb);
188+
model.addAttribute("task", task);
189+
return "task/addToInbox";
190+
}
191+
192+
193+
@RequestMapping(path = "/add", method = RequestMethod.POST)
194+
public final String addNewTaskToInboxPost(
195+
@ModelAttribute("userSession") UserSessionBean userSession,
196+
@Valid Task task,
197+
BindingResult result, Locale locale, Model model) {
198+
Context context = super.getContext(userSession);
199+
if (result.hasErrors()) {
200+
for (ObjectError e : result.getAllErrors()) {
201+
LOGGER.info(e.toString());
202+
}
203+
Boolean mustChooseArea = false;
204+
task.setContext(context);
205+
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForTaskstate(TaskState.INBOX,locale);
206+
model.addAttribute("mustChooseArea", mustChooseArea);
207+
model.addAttribute("breadcrumb", breadcrumb);
208+
model.addAttribute("task", task);
209+
return "task/addToProject";
210+
} else {
211+
task.setProject(null);
212+
if(task.getDueDate()==null){
213+
task.setTaskState(TaskState.INBOX);
214+
} else {
215+
task.setTaskState(TaskState.SCHEDULED);
216+
}
217+
task.setFocus(false);
218+
task.setContext(context);
219+
//TODO: verify, that this is correct:
220+
long maxOrderIdProject = taskMoveService.getMaxOrderIdProject(task.getProject(),context);
221+
task.setOrderIdProject(++maxOrderIdProject);
222+
//
223+
long maxOrderIdTaskState = taskMoveService.getMaxOrderIdTaskState(task.getTaskState(),task.getContext());
224+
task.setOrderIdTaskState(++maxOrderIdTaskState);
225+
task = taskService.saveAndFlush(task);
226+
LOGGER.info(task.toString());
227+
return "redirect:/taskstate/" + task.getTaskState().name().toLowerCase();
228+
}
164229
}
165230

166231
@RequestMapping(path = "/addtoproject/{projectId}", method = RequestMethod.GET)
@@ -200,7 +265,7 @@ public final String addNewTaskToProjectGet(
200265
model.addAttribute("thisProjectId", thisProject.getId());
201266
model.addAttribute("breadcrumb", breadcrumb);
202267
model.addAttribute("task", task);
203-
return "task/add";
268+
return "task/addToProject";
204269
}
205270

206271
@RequestMapping(path = "/addtoproject/{projectId}", method = RequestMethod.POST)
@@ -228,7 +293,7 @@ public final String addNewTaskToProjectPost(
228293
model.addAttribute("thisProject", thisProject);
229294
model.addAttribute("breadcrumb", breadcrumb);
230295
model.addAttribute("task", task);
231-
return "task/add";
296+
return "task/addToProject";
232297
} else {
233298
if (projectId == 0) {
234299
task.setProject(null);
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
<!DOCTYPE html>
2+
<html th:lang="${#locale.language}"
3+
xmlns="http://www.w3.org/1999/xhtml"
4+
xmlns:th="http://www.thymeleaf.org"
5+
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
6+
xmlns:sd="http://www.thymeleaf.org/spring-data">
7+
<head th:replace="layout/page :: tw-page-head(headtitle=~{::title},links=~{},refreshMessages=false)">
8+
<title th:text="'SimpleWorklist | ' + #{task.add.h1}">Title</title>
9+
</head>
10+
<body th:replace="layout/page :: tw-page-body(twcontent=~{::mytwcontent},twtitle=~{::mytwtitle},,scripts=~{::script})">
11+
12+
<div th:fragment="mytwtitle">
13+
<!-- New Task Form -->
14+
<h1>
15+
<i class="fas fa-plus-square"></i> &nbsp;
16+
<span th:utext="#{task.add.h1}">Add Task</span>
17+
</h1>
18+
</div>
19+
20+
<div th:fragment="mytwcontent">
21+
<form id="formId" th:action="@{/task/add}" th:object="${task}" method="post">
22+
<input type="hidden" th:field="*{taskState}" />
23+
<input type="hidden" th:field="*{context.id}" />
24+
<input type="hidden" th:field="*{rowCreatedAt.time}" />
25+
<div class="form-group">
26+
<label th:for="${#ids.next('title')}" class="control-label">
27+
<span th:utext="#{task.show.title}">Title</span>
28+
</label>
29+
<input type="text" th:field="*{title}" class="form-control" />
30+
<div>
31+
<div th:each="err : ${#fields.errors('title')}" th:text="${err}" class="alert alert-danger" >
32+
</div>
33+
</div>
34+
</div>
35+
<div class="form-group">
36+
<label for="taskDueDate" class="control-label">
37+
<span th:utext="#{task.show.dueDate}">Due Date</span>
38+
</label>
39+
<input id="taskDueDate" type="text" th:field="*{dueDate}" class="form-control" />
40+
<div>
41+
<div th:each="err : ${#fields.errors('dueDate')}" th:text="${err}" class="alert alert-danger">
42+
</div>
43+
</div>
44+
</div>
45+
<div class="form-group">
46+
<label th:for="textEditor" class="control-label">
47+
<span th:utext="#{task.show.text}">Text</span>
48+
</label>
49+
<textarea id="textEditor" name="textEditor" rows="10" cols="50" th:field="*{text}" class="form-control" ></textarea>
50+
<div>
51+
<div th:each="err : ${#fields.errors('text')}" th:text="${err}" class="alert alert-danger">
52+
</div>
53+
</div>
54+
</div>
55+
<div>
56+
<span class="form-group">
57+
<label th:for="${#ids.next('taskEnergy')}" class="control-label">
58+
<span th:utext="#{task.show.taskEnergy}">Energy</span>
59+
</label>
60+
<select th:field="*{taskEnergy}">
61+
<option th:each="taskEnergyItem : ${listTaskEnergy}"
62+
th:value="${taskEnergyItem.value}"
63+
th:text="${#messages.msgOrNull(taskEnergyItem.code)}">Wireframe</option>
64+
</select>
65+
<div>
66+
<div th:each="err : ${#fields.errors('taskEnergy')}" th:text="${err}" class="alert alert-danger">
67+
</div>
68+
</div>
69+
</span>&nbsp;
70+
<span class="form-group">
71+
<label th:for="${#ids.next('taskTime')}" class="control-label">
72+
<span th:utext="#{task.show.taskTime}">Time</span>
73+
</label>
74+
<select th:field="*{taskTime}">
75+
<option th:each="taskTimeItem : ${listTaskTime}"
76+
th:value="${taskTimeItem.value}"
77+
th:text="${#messages.msgOrNull(taskTimeItem.code)}">Wireframe</option>
78+
</select>
79+
<div>
80+
<div th:each="err : ${#fields.errors('taskTime')}" th:text="${err}" class="alert alert-danger">
81+
</div>
82+
</div>
83+
</span>&nbsp;
84+
<span class="form-group">
85+
<label th:for="${#ids.next('context.id')}" class="control-label">
86+
<span th:utext="#{task.show.context}">Area</span>
87+
</label>
88+
<select th:field="*{context.id}">
89+
<option th:each="areaOption : ${contexts}"
90+
th:value="${areaOption.id}"
91+
th:text="${locale == 'de' ? areaOption.nameDe : areaOption.nameEn}">Wireframe</option>
92+
</select>
93+
<div>
94+
<div th:each="err : ${#fields.errors('context.id')}" th:text="${err}" class="alert alert-danger">
95+
</div>
96+
</div>
97+
</span>
98+
</div>
99+
<input type="hidden"
100+
name="${_csrf.parameterName}"
101+
value="${_csrf.token}"/>
102+
<button id="createNewTask" type="submit" class="btn btn-primary">
103+
<i class="fas fa-save"></i>
104+
<span th:utext="#{task.add.button}">Add Task</span>
105+
</button>
106+
</form>
107+
</div>
108+
109+
<script th:src="@{/webjars/ckeditor/4.11.3/full/ckeditor.js}"></script>
110+
<script th:inline="javascript">
111+
CKEDITOR.replace( 'textEditor' );
112+
</script>
113+
</body>
114+
</html>
Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,40 @@
1-
<!DOCTYPE html>
2-
<html th:lang="${#locale.language}"
3-
xmlns="http://www.w3.org/1999/xhtml"
4-
xmlns:th="http://www.thymeleaf.org"
5-
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
6-
xmlns:sd="http://www.thymeleaf.org/spring-data">
7-
<head th:replace="layout/page :: tw-page-head(headtitle=~{::title},links=~{},refreshMessages=false)">
8-
<title th:text="'SimpleWorklist | ' + #{tasks.inbox.h1}">Inbox</title>
9-
</head>
10-
<body th:replace="layout/page :: tw-page-body(twcontent=~{::mytwcontent},twtitle=~{::mytwtitle},scripts=~{})">
11-
12-
<div th:fragment="mytwtitle">
13-
<div id="tw-content-title">
14-
<h1>
15-
<i class="fas fa-inbox"></i>
16-
<span th:utext="#{tasks.inbox.h1}">Inbox</span>
17-
</h1>
18-
<div id="tw-content-title-actionbuttons">
19-
<a class="btn btn-sm btn-primary" role="button" th:href="@{/task/addtoproject/0}">
20-
<i class="fas fa-plus-square"></i>
21-
<span th:utext="#{tasks.inbox.addTask}">Add Task</span>
22-
</a>
23-
</div>
24-
</div>
25-
</div>
26-
27-
<div th:fragment="mytwcontent">
28-
<div th:replace="layout/tasks :: tw-tasks-message(message=${message})" th:if="${message} != null" id="mytwcontent-message">
29-
</div>
30-
<div th:if="${taskPage.getTotalElements() gt 0}" id="mytwcontent-taskpage">
31-
<div th:replace="layout/tasks :: tw-tasks-table(taskPage=${taskPage},myTaskState='INBOX')">
32-
</div>
33-
</div>
34-
<div th:if="${taskPage.getTotalElements() eq 0}" id="mytwcontent-no-taskpage">
35-
<div th:text="#{tasks.inbox.noTasks}">You have no Tasks in Your Inbox</div>
36-
</div>
37-
</div>
38-
39-
</body>
40-
</html>
1+
<!DOCTYPE html>
2+
<html th:lang="${#locale.language}"
3+
xmlns="http://www.w3.org/1999/xhtml"
4+
xmlns:th="http://www.thymeleaf.org"
5+
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
6+
xmlns:sd="http://www.thymeleaf.org/spring-data">
7+
<head th:replace="layout/page :: tw-page-head(headtitle=~{::title},links=~{},refreshMessages=false)">
8+
<title th:text="'SimpleWorklist | ' + #{tasks.inbox.h1}">Inbox</title>
9+
</head>
10+
<body th:replace="layout/page :: tw-page-body(twcontent=~{::mytwcontent},twtitle=~{::mytwtitle},scripts=~{})">
11+
12+
<div th:fragment="mytwtitle">
13+
<div id="tw-content-title">
14+
<h1>
15+
<i class="fas fa-inbox"></i>
16+
<span th:utext="#{tasks.inbox.h1}">Inbox</span>
17+
</h1>
18+
<div id="tw-content-title-actionbuttons">
19+
<a class="btn btn-sm btn-primary" role="button" th:href="@{/task/add}">
20+
<i class="fas fa-plus-square"></i>
21+
<span th:utext="#{tasks.inbox.addTask}">Add Task</span>
22+
</a>
23+
</div>
24+
</div>
25+
</div>
26+
27+
<div th:fragment="mytwcontent">
28+
<div th:replace="layout/tasks :: tw-tasks-message(message=${message})" th:if="${message} != null" id="mytwcontent-message">
29+
</div>
30+
<div th:if="${taskPage.getTotalElements() gt 0}" id="mytwcontent-taskpage">
31+
<div th:replace="layout/tasks :: tw-tasks-table(taskPage=${taskPage},myTaskState='INBOX')">
32+
</div>
33+
</div>
34+
<div th:if="${taskPage.getTotalElements() eq 0}" id="mytwcontent-no-taskpage">
35+
<div th:text="#{tasks.inbox.noTasks}">You have no Tasks in Your Inbox</div>
36+
</div>
37+
</div>
38+
39+
</body>
40+
</html>

0 commit comments

Comments
 (0)