From b978765df751ed4625c7f344d57e66534832e6c2 Mon Sep 17 00:00:00 2001 From: jotty Date: Sat, 9 Feb 2019 15:52:19 +0100 Subject: [PATCH] adding full calendar support --- .../timetrack/modules/done/DoneGateway.java | 62 +++++- .../timetrack/modules/done/DoneModel.java | 6 + src/main/webapp/pages/done/init.xhtml | 190 +++++++++--------- 3 files changed, 158 insertions(+), 100 deletions(-) diff --git a/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java b/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java index 73ea1fe..1703ac1 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java +++ b/src/main/java/de/jottyfan/timetrack/modules/done/DoneGateway.java @@ -25,6 +25,7 @@ import org.jooq.DeleteConditionStep; import org.jooq.InsertValuesStep6; import org.jooq.Record; import org.jooq.Record4; +import org.jooq.Record5; import org.jooq.SelectConditionStep; import org.jooq.SelectWhereStep; import org.jooq.UpdateConditionStep; @@ -35,6 +36,8 @@ import de.jottyfan.timetrack.db.done.tables.records.TJobRecord; import de.jottyfan.timetrack.db.done.tables.records.TModuleRecord; import de.jottyfan.timetrack.db.done.tables.records.TProjectRecord; import de.jottyfan.timetrack.modules.JooqGateway; +import net.bootsfaces.component.fullCalendar.FullCalendarEventBean; +import net.bootsfaces.component.fullCalendar.FullCalendarEventList; /** * @@ -126,8 +129,7 @@ public class DoneGateway extends JooqGateway { /** * get all from t_done of the given day * - * @param day - * the day; if null, the current date is used + * @param day the day; if null, the current date is used * * @return a list of found times, an empty one at least */ @@ -222,8 +224,7 @@ public class DoneGateway extends JooqGateway { /** * get day summary * - * @param day - * the day + * @param day the day * @return the day summary if found, an empty map otherwise */ public WholeDaySummaryBean getDaySummary(Date day) { @@ -261,8 +262,7 @@ public class DoneGateway extends JooqGateway { /** * get all jobs of day * - * @param day - * the day + * @param day the day * @return list of found jobs; an empty list at least */ public List getAllJobs(Date day) { @@ -287,4 +287,54 @@ public class DoneGateway extends JooqGateway { } return list; } + + /** + * get json representation of all calendar events of user + * + * @return + */ + public String getAllCalendarEvents() { + SelectConditionStep> sql = getJooq() + // @formatter:off + .select(T_DONE.TIME_FROM, + T_DONE.TIME_UNTIL, + T_PROJECT.NAME, + T_MODULE.NAME, + T_JOB.NAME) + .from(T_DONE) + .leftJoin(T_PROJECT).on(T_PROJECT.PK.eq(T_DONE.FK_PROJECT)) + .leftJoin(T_MODULE).on(T_MODULE.PK.eq(T_DONE.FK_MODULE)) + .leftJoin(T_JOB).on(T_JOB.PK.eq(T_DONE.FK_JOB)) + .where(T_DONE.FK_LOGIN.eq(getFkLogin())); + // @formatter:on + LOGGER.debug(sql.toString()); + FullCalendarEventList list = new FullCalendarEventList(); + for (Record r : sql.fetch()) { + String projectName = r.get(T_PROJECT.NAME); + String moduleName = r.get(T_MODULE.NAME); + String jobName = r.get(T_JOB.NAME); + Date timeFrom = r.get(T_DONE.TIME_FROM); + Date timeUntil = r.get(T_DONE.TIME_UNTIL); + + StringBuilder buf = new StringBuilder(); + buf.append(projectName); + buf.append(", "); + buf.append(moduleName); + buf.append(": "); + buf.append(jobName); + + FullCalendarEventBean bean = new FullCalendarEventBean(buf.toString(), timeFrom) { + @Override + public void addExtendedFields(StringBuilder buf) { + } + }; + bean.setEnd(timeUntil); + bean.setColor("#444444"); // TODO: colors by project name, maybe find a way to determine color by project + // name + + list.getList().add(bean); + } + + return list.toJson(); + } } 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 e0ca2a1..3a2733c 100644 --- a/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java +++ b/src/main/java/de/jottyfan/timetrack/modules/done/DoneModel.java @@ -42,6 +42,7 @@ public class DoneModel implements Model, Serializable { private List allJobs; private WholeDaySummaryBean daySummary; private Date day; + private String calendarEvents; public boolean init(FacesContext facesContext) { try { @@ -53,6 +54,7 @@ public class DoneModel implements Model, Serializable { projects = gw.getAllProjects(); daySummary = gw.getDaySummary(day); allJobs = gw.getAllJobs(day); + calendarEvents = gw.getAllCalendarEvents(); return true; } catch (DataAccessException e) { facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", e.getMessage())); @@ -217,4 +219,8 @@ public class DoneModel implements Model, Serializable { public void setDay(Date day) { this.day = day; } + + public String getCalendarEvents() { + return calendarEvents; + } } diff --git a/src/main/webapp/pages/done/init.xhtml b/src/main/webapp/pages/done/init.xhtml index 59601e3..bc2bbef 100644 --- a/src/main/webapp/pages/done/init.xhtml +++ b/src/main/webapp/pages/done/init.xhtml @@ -1,102 +1,104 @@ + xmlns:f="http://java.sun.com/jsf/core" xmlns:my="http://xmlns.jcp.org/jsf/composite/my" xmlns:b="http://bootsfaces.net/ui"> - Arbeitszeit + Arbeitszeit - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- -

-
-
- - - Pause -

- -

-
-
- - Startzeit -

- -

-
-
- - Überstunden -

- -

-
-
- - Arbeitszeit -

- -

-
-
- - Endzeit -

- -

-
-
-
-
-
-
- - - - - - - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + Pause +

+ +

+
+
+ + Startzeit +

+ +

+
+
+ + Überstunden +

+ +

+
+
+ + Arbeitszeit +

+ +

+
+
+ + Endzeit +

+ +

+
+
+
+
+ + + + + + + + + +

+ +

+
+ + + +
+
+
+
+ + + + + + + + +