diff --git a/build.gradle b/build.gradle index 5d5d27d..f91b977 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ apply plugin: 'eclipse' apply plugin: 'nu.studer.jooq' group = 'jottyfan' -version = '1.0.5' +version = '1.0.6' description = """timetrack""" diff --git a/src/main/java/de/jottyfan/timetrack/modules/done/DoneBean.java b/src/main/java/de/jottyfan/timetrack/modules/done/DoneBean.java index 8a0152b..8f2ddbc 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/done/DoneBean.java +++ b/src/main/java/de/jottyfan/timetrack/modules/done/DoneBean.java @@ -4,7 +4,11 @@ import java.io.Serializable; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.time.Duration; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZoneId; +import java.util.Date; import java.util.Map; import de.jottyfan.timetrack.db.done.tables.records.TDoneRecord; @@ -41,6 +45,27 @@ public class DoneBean implements Bean, Serializable, Comparable { this.activity = jobMap.get(r.getFkJob()); } + /** + * set the day of timeFrom and timeUntil, keeping the times + * + * @param day + * the day + */ + public void setDay(Date day) { + if (timeFrom != null) { + LocalDateTime ldt = timeFrom.toLocalDateTime(); + LocalDate date = day.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + ldt = ldt.withYear(date.getYear()).withMonth(date.getMonthValue()).withDayOfMonth(date.getDayOfMonth()); + timeFrom = Timestamp.from(ldt.toInstant(OffsetDateTime.now().getOffset())); + } + if (timeUntil != null) { + LocalDateTime ldt = timeUntil.toLocalDateTime(); + LocalDate date = day.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + ldt = ldt.withYear(date.getYear()).withMonth(date.getMonthValue()).withDayOfMonth(date.getDayOfMonth()); + timeUntil = Timestamp.from(ldt.toInstant(OffsetDateTime.now().getOffset())); + } + } + public String getTimeSummary() { StringBuilder buf = new StringBuilder(); if (timeFrom != null) { diff --git a/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java b/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java index d7a454a..01c400d 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java +++ b/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java @@ -137,6 +137,7 @@ public class DoneModel implements Model, Serializable { public boolean insert(JooqFacesContext facesContext) { try { + bean.setDay(day); new DoneGateway(facesContext).insert(bean); return true; } catch (DataAccessException | ClassNotFoundException | SQLException e) { diff --git a/src/test/java/de/jottyfan/timetrack/moduls/done/TestDoneBean.java b/src/test/java/de/jottyfan/timetrack/moduls/done/TestDoneBean.java index f573e86..c31fdd3 100644 --- a/src/test/java/de/jottyfan/timetrack/moduls/done/TestDoneBean.java +++ b/src/test/java/de/jottyfan/timetrack/moduls/done/TestDoneBean.java @@ -1,8 +1,13 @@ package de.jottyfan.timetrack.moduls.done; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import java.util.Date; import org.junit.jupiter.api.Test; @@ -33,4 +38,30 @@ public class TestDoneBean { assertEquals(ldt.withHour(1).withMinute(0), new DoneBean().getLocalDateTimeFromHHmm("1")); assertEquals(ldt.withHour(5).withMinute(0), new DoneBean().getLocalDateTimeFromHHmm("5")); } + + @Test + public void testSetDay() throws ParseException { + String today = new SimpleDateFormat("dd.MM.yyyy").format(new Date()); + SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm"); + SimpleDateFormat sd = new SimpleDateFormat("dd.MM.yyyy"); + + DoneBean bean = new DoneBean(); + bean.setDay(new Date()); + assertNull(bean.getTimeFrom()); + assertNull(bean.getTimeUntil()); + + bean.setTimeFromString("08:00"); + Timestamp ts1 = bean.getTimeFrom(); + assertEquals(today.concat(" 08:00"), sdf.format(ts1)); + bean.setDay(sd.parse("01.01.2001")); + assertEquals("01.01.2001", sd.format(bean.getTimeFrom())); + assertNull(bean.getTimeUntil()); + + bean.setTimeUntilString("10:00"); + Timestamp ts2 = bean.getTimeUntil(); + assertEquals(today.concat(" 10:00"), sdf.format(ts2)); + bean.setDay(sd.parse("01.01.2001")); + assertEquals("01.01.2001", sd.format(bean.getTimeFrom())); + assertEquals("01.01.2001", sd.format(bean.getTimeUntil())); + } }