Skip to content

Commit 2fd5263

Browse files
author
Jan Schraff
committed
reworked Day Switching logic in Controller, removed field creation_date of Work and replaced it with date of starttime
1 parent 4ad087b commit 2fd5263

File tree

7 files changed

+58
-76
lines changed

7 files changed

+58
-76
lines changed

src/main/java/de/doubleslash/keeptime/Main.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ private void initialiseApplication(final Stage primaryStage) throws Exception {
136136
readSettings();
137137

138138
final List<Work> todaysWorkItems = model.getWorkRepository()
139-
.findByCreationDateOrderByStartTimeAsc(LocalDate.now());
139+
.findByStartDateOrderByStartTimeAsc(LocalDate.now());
140140
LOG.info("Found {} past work items", todaysWorkItems.size());
141141
model.getPastWorkItems().addAll(todaysWorkItems);
142142

src/main/java/de/doubleslash/keeptime/controller/Controller.java

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -64,26 +64,35 @@ public void changeProject(final Project newProject) {
6464

6565
public void changeProject(final Project newProject, final long minusSeconds) {
6666

67-
final LocalDateTime now = dateProvider.dateTimeNow().minusSeconds(minusSeconds);
67+
final LocalDateTime workEnd = dateProvider.dateTimeNow().minusSeconds(minusSeconds);
68+
final LocalDate today = dateProvider.dateTimeNow().toLocalDate();
6869

69-
saveCurrentWork(now);
70+
final Work oldWork = saveCurrentWork(workEnd);
71+
72+
if (oldWork != null && !today.isEqual(oldWork.getStartTime().toLocalDate())) {
73+
LOG.info("Removing projects with other creation date than today '{}' from list.", today);
74+
final int sizeBefore = model.getPastWorkItems().size();
75+
model.getPastWorkItems().removeIf(w -> !today.isEqual(w.getStartTime().toLocalDate()));
76+
LOG.debug("Removed '{}' work items from past work items.", sizeBefore - model.getPastWorkItems().size());
77+
}
7078

7179
// Start new work
72-
final Work work = new Work(now.toLocalDate(), now, now.plusSeconds(minusSeconds), newProject, "");
80+
final Work newWork = new Work(workEnd, workEnd.plusSeconds(minusSeconds), newProject, "");
81+
82+
model.getPastWorkItems().add(newWork);
7383

74-
model.getPastWorkItems().add(work);
84+
model.activeWorkItem.set(newWork);
7585

76-
model.activeWorkItem.set(work);
7786
}
7887

79-
public void saveCurrentWork(final LocalDateTime now) {
88+
public Work saveCurrentWork(final LocalDateTime workEnd) {
8089
final Work currentWork = model.activeWorkItem.get();
8190

8291
if (currentWork == null) {
83-
return;
92+
return null;
8493
}
8594

86-
currentWork.setEndTime(now);
95+
currentWork.setEndTime(workEnd);
8796
if (currentWork.getNotes().isEmpty()) {
8897
currentWork.setNotes("- No notes -");
8998
}
@@ -95,14 +104,8 @@ public void saveCurrentWork(final LocalDateTime now) {
95104
currentWork.getEndTime(), time, currentWork.getProject().getName(), currentWork.getNotes());
96105

97106
// Save in db
98-
model.getWorkRepository().save(currentWork);
107+
return model.getWorkRepository().save(currentWork);
99108

100-
if (currentWork != null && !now.toLocalDate().isEqual(currentWork.getCreationDate())) {
101-
LOG.info("Removing projects with other creation date than today '{}' from list.", now.toLocalDate());
102-
final int sizeBefore = model.getPastWorkItems().size();
103-
model.getPastWorkItems().removeIf(w -> !now.toLocalDate().isEqual(w.getCreationDate()));
104-
LOG.debug("Removed '{}' work items from past work items.", sizeBefore - model.getPastWorkItems().size());
105-
}
106109
}
107110

108111
public void addNewProject(final Project project) {
@@ -204,7 +207,6 @@ public void editProject(final Project projectToBeUpdated, final Project newValue
204207
public void editWork(final Work workToBeEdited, final Work newValuedWork) {
205208
LOG.info("Changing work '{}' to '{}'.", workToBeEdited, newValuedWork);
206209

207-
workToBeEdited.setCreationDate(newValuedWork.getCreationDate());
208210
workToBeEdited.setStartTime(newValuedWork.getStartTime());
209211
workToBeEdited.setEndTime(newValuedWork.getEndTime());
210212
workToBeEdited.setNotes(newValuedWork.getNotes());
@@ -216,7 +218,7 @@ public void editWork(final Work workToBeEdited, final Work newValuedWork) {
216218
model.getPastWorkItems().removeIf(w -> (w.getId() == workToBeEdited.getId()));
217219
// add if started today
218220
final LocalDate dateNow = dateProvider.dateTimeNow().toLocalDate();
219-
if (dateNow.equals(editedWork.getCreationDate())) {
221+
if (dateNow.equals(editedWork.getStartTime().toLocalDate())) {
220222
model.getPastWorkItems().add(editedWork);
221223
}
222224

@@ -233,13 +235,13 @@ public void deleteWork(final Work workToBeDeleted) {
233235
* Changes the indexes of the originalList parameter to have a consistent order.
234236
*
235237
* @param originalList
236-
* list of all projects to adapt the indexes for
238+
* list of all projects to adapt the indexes for
237239
* @param changedProject
238-
* the project which has changed which already has the new index
240+
* the project which has changed which already has the new index
239241
* @param oldIndex
240-
* the old index of the changed project
242+
* the old index of the changed project
241243
* @param newIndex
242-
* the new index of the changed project (which the projects also already has)
244+
* the new index of the changed project (which the projects also already has)
243245
* @return all projects whose index has been adapted
244246
*/
245247
List<Project> resortProjectIndexes(final List<Project> originalList, final Project changedProject,
@@ -276,9 +278,9 @@ List<Project> resortProjectIndexes(final List<Project> originalList, final Proje
276278
* Decreases all indexes by one, after the removed index
277279
*
278280
* @param originalList
279-
* list of all projects to adapt the indexes for
281+
* list of all projects to adapt the indexes for
280282
* @param removedIndex
281-
* the index which has been removed
283+
* the index which has been removed
282284
* @return all projects whose index has been adapted
283285
*/
284286
List<Project> adaptProjectIndexesAfterRemoving(final List<Project> originalList, final int removedIndex) {

src/main/java/de/doubleslash/keeptime/model/Work.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package de.doubleslash.keeptime.model;
1818

19-
import java.time.LocalDate;
2019
import java.time.LocalDateTime;
2120

2221
import javax.persistence.Column;
@@ -36,8 +35,6 @@ public class Work {
3635
@Column(name = "id", updatable = false, nullable = false)
3736
private long id;
3837

39-
// TODO revise CreationDate Logic to use Date of StartTime
40-
private LocalDate creationDate;
4138
private LocalDateTime startTime;
4239
private LocalDateTime endTime;
4340

@@ -49,10 +46,8 @@ public class Work {
4946
public Work() {
5047
}
5148

52-
public Work(final LocalDate creationDate, final LocalDateTime startTime, final LocalDateTime endTime,
53-
final Project project, final String notes) {
49+
public Work(final LocalDateTime startTime, final LocalDateTime endTime, final Project project, final String notes) {
5450
super();
55-
this.creationDate = creationDate;
5651
this.startTime = startTime;
5752
this.endTime = endTime;
5853
this.project = project;
@@ -63,14 +58,6 @@ public long getId() {
6358
return id;
6459
}
6560

66-
public LocalDate getCreationDate() {
67-
return creationDate;
68-
}
69-
70-
public void setCreationDate(final LocalDate creationDate) {
71-
this.creationDate = creationDate;
72-
}
73-
7461
public LocalDateTime getStartTime() {
7562
return startTime;
7663
}
@@ -105,8 +92,8 @@ public void setNotes(final String notes) {
10592

10693
@Override
10794
public String toString() {
108-
return "Work [id=" + id + ", creationDate=" + creationDate + ", startTime=" + startTime + ", endTime=" + endTime
109-
+ ", projectName=" + project.getName() + ", notes=" + notes + "]";
95+
return "Work [id=" + id + ", startTime=" + startTime + ", endTime=" + endTime + ", projectName="
96+
+ project.getName() + ", notes=" + notes + "]";
11097
}
11198

11299
}

src/main/java/de/doubleslash/keeptime/model/repos/WorkRepository.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@
2020
import java.util.List;
2121

2222
import org.springframework.data.jpa.repository.JpaRepository;
23+
import org.springframework.data.jpa.repository.Query;
2324
import org.springframework.stereotype.Repository;
2425

2526
import de.doubleslash.keeptime.model.Work;
2627

2728
@Repository
2829
public interface WorkRepository extends JpaRepository<Work, Long> {
2930

30-
List<Work> findByCreationDateOrderByStartTimeAsc(LocalDate creationDate);
31+
@Query(value = "SELECT * FROM work WHERE CAST(start_time AS DATE) = ?1 ORDER BY start_time ASC", nativeQuery = true)
32+
List<Work> findByStartDateOrderByStartTimeAsc(LocalDate creationDate);
3133
}

src/main/java/de/doubleslash/keeptime/view/ManageWorkController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,7 @@ private void setColor(final Node object, final Color color) {
267267

268268
public Work getWorkFromUserInput() {
269269

270-
return new Work(startDatePicker.getValue(),
271-
LocalDateTime.of(startDatePicker.getValue(), startTimeSpinner.getValue()),
270+
return new Work(LocalDateTime.of(startDatePicker.getValue(), startTimeSpinner.getValue()),
272271
LocalDateTime.of(endDatePicker.getValue(), endTimeSpinner.getValue()), selectedProject,
273272
noteTextArea.getText());
274273
}

src/main/java/de/doubleslash/keeptime/view/ReportController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ private void updateReport(final LocalDate dateToShow) {
194194

195195
this.currentDayLabel.setText(DateFormatter.toDayDateString(this.currentReportDate));
196196
final List<Work> currentWorkItems = model.getWorkRepository()
197-
.findByCreationDateOrderByStartTimeAsc(this.currentReportDate);
197+
.findByStartDateOrderByStartTimeAsc(this.currentReportDate);
198198

199199
colorTimeLine.update(currentWorkItems, controller.calcSeconds(currentWorkItems));
200200

@@ -259,7 +259,7 @@ private void loadCalenderWidget() {
259259
@Override
260260
public void updateItem(final LocalDate item, final boolean empty) {
261261
super.updateItem(item, empty);
262-
if (model.getWorkRepository().findByCreationDateOrderByStartTimeAsc(item).isEmpty()) {
262+
if (model.getWorkRepository().findByStartDateOrderByStartTimeAsc(item).isEmpty()) {
263263
setDisable(true);
264264
setStyle(FX_BACKGROUND_COLOR_NOT_WORKED);
265265
}

src/test/java/de/doubleslash/keeptime/controller/ControllerTest.java

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import static org.junit.Assert.assertThat;
2525
import static org.junit.Assert.assertTrue;
2626

27-
import java.time.LocalDate;
2827
import java.time.LocalDateTime;
2928
import java.util.ArrayList;
3029
import java.util.Arrays;
@@ -231,6 +230,7 @@ public void changeProjectSameDayTest() {
231230

232231
@Test
233232
public void changeProjectOtherDayTest() {
233+
Mockito.when(mockedWorkRepository.save(Mockito.any(Work.class))).thenAnswer(i -> i.getArguments()[0]);
234234
final LocalDateTime firstProjectDateTime = LocalDateTime.now();
235235
final LocalDateTime secondProjectDateTime = firstProjectDateTime.plusDays(1); // project is create the next day
236236

@@ -253,7 +253,7 @@ public void changeProjectOtherDayTest() {
253253
}
254254
return true;
255255
}));
256-
assertThat("'1st project' should be in the past work items", model.getPastWorkItems().size(), is(1));
256+
assertThat("'2nd project' should be in the past work items", model.getPastWorkItems().size(), is(1));
257257
assertThat("The project should be '2ndProject'", model.getPastWorkItems().get(0).getProject(),
258258
is(secondProject));
259259
assertThat("'2ndProject' should be the active work project", model.activeWorkItem.get().getProject(),
@@ -293,7 +293,7 @@ public void changeProjectOtherDayWithTimeTest() {
293293
is(secondProject));
294294
final Work work = model.activeWorkItem.get();
295295
assertThat("'2ndProject' should be the active work project", work.getProject(), is(secondProject));
296-
assertThat(work.getCreationDate(), is(firstProjectDateTime.toLocalDate()));
296+
assertThat(work.getStartTime().toLocalDate(), is(firstProjectDateTime.toLocalDate()));
297297
assertThat(work.getStartTime(), is(firstProjectPlusOneHour));
298298
}
299299

@@ -304,18 +304,15 @@ public void shouldCalculateSecondsCorrectlyWhenWorkItemsAreGiven() {
304304
final Project nonworkProject1 = new Project("nonworkProject1", "An even better description", Color.RED, false, 2);
305305
final Project nonworkProject2 = new Project("nonworkProject2", "The best description", Color.RED, false, 3);
306306

307-
final LocalDate localDateNow = LocalDate.now();
308307
final LocalDateTime localDateTimeMorning = LocalDateTime.now().withHour(4);
309308

310309
final List<Work> workItems = new ArrayList<>(4);
311-
workItems.add(new Work(localDateNow, localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1),
312-
workProject1, ""));
313-
workItems.add(new Work(localDateNow, localDateTimeMorning.plusHours(1), localDateTimeMorning.plusHours(2),
314-
workProject2, ""));
315-
workItems.add(new Work(localDateNow, localDateTimeMorning.plusHours(2), localDateTimeMorning.plusHours(3),
316-
nonworkProject1, ""));
317-
workItems.add(new Work(localDateNow, localDateTimeMorning.plusHours(3), localDateTimeMorning.plusHours(4),
318-
nonworkProject2, ""));
310+
workItems.add(new Work(localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1), workProject1, ""));
311+
workItems.add(new Work(localDateTimeMorning.plusHours(1), localDateTimeMorning.plusHours(2), workProject2, ""));
312+
workItems
313+
.add(new Work(localDateTimeMorning.plusHours(2), localDateTimeMorning.plusHours(3), nonworkProject1, ""));
314+
workItems
315+
.add(new Work(localDateTimeMorning.plusHours(3), localDateTimeMorning.plusHours(4), nonworkProject2, ""));
319316

320317
model.getAllProjects().addAll(workProject1, workProject2, nonworkProject1, nonworkProject2);
321318
model.getPastWorkItems().addAll(workItems);
@@ -342,22 +339,20 @@ public void shouldUpdateWorkItemPersistentlyWhenWorkItemIsEdited() {
342339
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
343340
model.getAllProjects().add(project1);
344341

345-
final LocalDate localDateNow = LocalDate.now();
346342
final LocalDateTime localDateTimeMorning = LocalDateTime.now().withHour(4);
347343

348-
final Work originalWork = new Work(localDateNow, localDateTimeMorning.plusHours(0),
349-
localDateTimeMorning.plusHours(1), project1, "originalWork");
344+
final Work originalWork = new Work(localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1), project1,
345+
"originalWork");
350346
model.getPastWorkItems().add(originalWork);
351347

352-
final Work newWork = new Work(localDateNow, localDateTimeMorning.plusHours(1), localDateTimeMorning.plusHours(2),
353-
project1, "updated");
348+
final Work newWork = new Work(localDateTimeMorning.plusHours(1), localDateTimeMorning.plusHours(2), project1,
349+
"updated");
354350

355351
testee.editWork(originalWork, newWork);
356352

357353
final Work testWork = model.getPastWorkItems().get(0);
358354
assertThat("Start time was not updated", testWork.getStartTime(), equalTo(newWork.getStartTime()));
359355
assertThat("End timewas not updated", testWork.getEndTime(), equalTo(newWork.getEndTime()));
360-
assertThat("CreationDate was not updated", testWork.getCreationDate(), equalTo(newWork.getCreationDate()));
361356
assertThat("Notes were not updated", testWork.getNotes(), equalTo(newWork.getNotes()));
362357
assertThat("Project was not updated", testWork.getProject(), equalTo(newWork.getProject()));
363358

@@ -376,21 +371,20 @@ public void shouldNotUpdateOthersWhenWorkItemIsEdited() {
376371
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
377372
model.getAllProjects().add(project1);
378373

379-
final LocalDate localDateNow = LocalDate.now();
380374
final LocalDateTime localDateTimeMorning = LocalDateTime.now().withHour(4);
381375

382-
final Work notToBeUpdatedWork = new Work(localDateNow, localDateTimeMorning.plusHours(0),
383-
localDateTimeMorning.plusHours(1), project1, "originalWork");
376+
final Work notToBeUpdatedWork = new Work(localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1),
377+
project1, "originalWork");
384378
ReflectionTestUtils.setField(notToBeUpdatedWork, "id", 1);
385379
model.getPastWorkItems().add(notToBeUpdatedWork);
386380

387-
final Work originalWork = new Work(localDateNow, localDateTimeMorning.plusHours(1),
388-
localDateTimeMorning.plusHours(2), project1, "originalWork");
381+
final Work originalWork = new Work(localDateTimeMorning.plusHours(1), localDateTimeMorning.plusHours(2), project1,
382+
"originalWork");
389383
ReflectionTestUtils.setField(originalWork, "id", 2);
390384
model.getPastWorkItems().add(originalWork);
391385

392-
final Work newWork = new Work(localDateNow, localDateTimeMorning.plusHours(3), localDateTimeMorning.plusHours(4),
393-
project1, "updated");
386+
final Work newWork = new Work(localDateTimeMorning.plusHours(3), localDateTimeMorning.plusHours(4), project1,
387+
"updated");
394388
ReflectionTestUtils.setField(newWork, "id", 3);
395389

396390
testee.editWork(originalWork, newWork);
@@ -412,11 +406,10 @@ public void shouldDeleteWorkPersistentlyWhenWorkIsDeleted() {
412406
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
413407
model.getAllProjects().add(project1);
414408

415-
final LocalDate localDateNow = LocalDate.now();
416409
final LocalDateTime localDateTimeMorning = LocalDateTime.now().withHour(4);
417410

418-
final Work work = new Work(localDateNow, localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1),
419-
project1, "originalWork");
411+
final Work work = new Work(localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1), project1,
412+
"originalWork");
420413
model.getPastWorkItems().add(work);
421414

422415
testee.deleteWork(work);
@@ -433,11 +426,10 @@ public void shouldRemoveWorkFromPastWorkItemsWhenWorkIsDeleted() {
433426
final Project project1 = new Project("workProject1", "Some description", Color.RED, true, 0);
434427
model.getAllProjects().add(project1);
435428

436-
final LocalDate localDateNow = LocalDate.now();
437429
final LocalDateTime localDateTimeMorning = LocalDateTime.now().withHour(4);
438430

439-
final Work work = new Work(localDateNow, localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1),
440-
project1, "originalWork");
431+
final Work work = new Work(localDateTimeMorning.plusHours(0), localDateTimeMorning.plusHours(1), project1,
432+
"originalWork");
441433
model.getPastWorkItems().add(work);
442434

443435
testee.deleteWork(work);

0 commit comments

Comments
 (0)