diff --git a/build.gradle b/build.gradle index 1d3b705..349a773 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ apply plugin: 'maven-publish' apply plugin: 'eclipse' group = 'de.jottyfan' -version = '20240103b' +version = '20240103c' def artifactId = 'timetrackjooq' def versionNumber = version diff --git a/src/main/java/de/jottyfan/timetrack/db/done/Done.java b/src/main/java/de/jottyfan/timetrack/db/done/Done.java index 44a4363..3d20e5c 100644 --- a/src/main/java/de/jottyfan/timetrack/db/done/Done.java +++ b/src/main/java/de/jottyfan/timetrack/db/done/Done.java @@ -16,6 +16,7 @@ import de.jottyfan.timetrack.db.done.tables.TProject; import de.jottyfan.timetrack.db.done.tables.TRequiredWorktime; import de.jottyfan.timetrack.db.done.tables.VBilling; import de.jottyfan.timetrack.db.done.tables.VCurrentOvertime; +import de.jottyfan.timetrack.db.done.tables.VDay; import de.jottyfan.timetrack.db.done.tables.VDaylimit; import de.jottyfan.timetrack.db.done.tables.VDaylimits; import de.jottyfan.timetrack.db.done.tables.VDone; @@ -105,6 +106,11 @@ public class Done extends SchemaImpl { */ public final VCurrentOvertime V_CURRENT_OVERTIME = VCurrentOvertime.V_CURRENT_OVERTIME; + /** + * The table done.v_day. + */ + public final VDay V_DAY = VDay.V_DAY; + /** * The table done.v_daylimit. */ @@ -192,6 +198,7 @@ public class Done extends SchemaImpl { TRequiredWorktime.T_REQUIRED_WORKTIME, VBilling.V_BILLING, VCurrentOvertime.V_CURRENT_OVERTIME, + VDay.V_DAY, VDaylimit.V_DAYLIMIT, VDaylimits.V_DAYLIMITS, VDone.V_DONE, diff --git a/src/main/java/de/jottyfan/timetrack/db/done/Tables.java b/src/main/java/de/jottyfan/timetrack/db/done/Tables.java index e974296..085c82a 100644 --- a/src/main/java/de/jottyfan/timetrack/db/done/Tables.java +++ b/src/main/java/de/jottyfan/timetrack/db/done/Tables.java @@ -15,6 +15,7 @@ import de.jottyfan.timetrack.db.done.tables.TProject; import de.jottyfan.timetrack.db.done.tables.TRequiredWorktime; import de.jottyfan.timetrack.db.done.tables.VBilling; import de.jottyfan.timetrack.db.done.tables.VCurrentOvertime; +import de.jottyfan.timetrack.db.done.tables.VDay; import de.jottyfan.timetrack.db.done.tables.VDaylimit; import de.jottyfan.timetrack.db.done.tables.VDaylimits; import de.jottyfan.timetrack.db.done.tables.VDone; @@ -90,6 +91,11 @@ public class Tables { */ public static final VCurrentOvertime V_CURRENT_OVERTIME = VCurrentOvertime.V_CURRENT_OVERTIME; + /** + * The table done.v_day. + */ + public static final VDay V_DAY = VDay.V_DAY; + /** * The table done.v_daylimit. */ diff --git a/src/main/java/de/jottyfan/timetrack/db/done/tables/VDay.java b/src/main/java/de/jottyfan/timetrack/db/done/tables/VDay.java new file mode 100644 index 0000000..2ab4579 --- /dev/null +++ b/src/main/java/de/jottyfan/timetrack/db/done/tables/VDay.java @@ -0,0 +1,177 @@ +/* + * This file is generated by jOOQ. + */ +package de.jottyfan.timetrack.db.done.tables; + + +import de.jottyfan.timetrack.db.done.Done; +import de.jottyfan.timetrack.db.done.tables.records.VDayRecord; + +import java.time.LocalDate; +import java.util.function.Function; + +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Function5; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Records; +import org.jooq.Row5; +import org.jooq.Schema; +import org.jooq.SelectField; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.TableOptions; +import org.jooq.impl.DSL; +import org.jooq.impl.SQLDataType; +import org.jooq.impl.TableImpl; +import org.jooq.types.YearToSecond; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class VDay extends TableImpl { + + private static final long serialVersionUID = 1L; + + /** + * The reference instance of done.v_day + */ + public static final VDay V_DAY = new VDay(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return VDayRecord.class; + } + + /** + * The column done.v_day.day. + */ + public final TableField DAY = createField(DSL.name("day"), SQLDataType.LOCALDATE, this, ""); + + /** + * The column done.v_day.worktime. + */ + public final TableField WORKTIME = createField(DSL.name("worktime"), SQLDataType.INTERVAL, this, ""); + + /** + * The column done.v_day.breaktime. + */ + public final TableField BREAKTIME = createField(DSL.name("breaktime"), SQLDataType.INTERVAL, this, ""); + + /** + * The column done.v_day.day_overtime. + */ + public final TableField DAY_OVERTIME = createField(DSL.name("day_overtime"), SQLDataType.INTERVAL, this, ""); + + /** + * The column done.v_day.fk_login. + */ + public final TableField FK_LOGIN = createField(DSL.name("fk_login"), SQLDataType.INTEGER, this, ""); + + private VDay(Name alias, Table aliased) { + this(alias, aliased, null); + } + + private VDay(Name alias, Table aliased, Field[] parameters) { + super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.view()); + } + + /** + * Create an aliased done.v_day table reference + */ + public VDay(String alias) { + this(DSL.name(alias), V_DAY); + } + + /** + * Create an aliased done.v_day table reference + */ + public VDay(Name alias) { + this(alias, V_DAY); + } + + /** + * Create a done.v_day table reference + */ + public VDay() { + this(DSL.name("v_day"), null); + } + + public VDay(Table child, ForeignKey key) { + super(child, key, V_DAY); + } + + @Override + public Schema getSchema() { + return aliased() ? null : Done.DONE; + } + + @Override + public VDay as(String alias) { + return new VDay(DSL.name(alias), this); + } + + @Override + public VDay as(Name alias) { + return new VDay(alias, this); + } + + @Override + public VDay as(Table alias) { + return new VDay(alias.getQualifiedName(), this); + } + + /** + * Rename this table + */ + @Override + public VDay rename(String name) { + return new VDay(DSL.name(name), null); + } + + /** + * Rename this table + */ + @Override + public VDay rename(Name name) { + return new VDay(name, null); + } + + /** + * Rename this table + */ + @Override + public VDay rename(Table name) { + return new VDay(name.getQualifiedName(), null); + } + + // ------------------------------------------------------------------------- + // Row5 type methods + // ------------------------------------------------------------------------- + + @Override + public Row5 fieldsRow() { + return (Row5) super.fieldsRow(); + } + + /** + * Convenience mapping calling {@link SelectField#convertFrom(Function)}. + */ + public SelectField mapping(Function5 from) { + return convertFrom(Records.mapping(from)); + } + + /** + * Convenience mapping calling {@link SelectField#convertFrom(Class, + * Function)}. + */ + public SelectField mapping(Class toType, Function5 from) { + return convertFrom(toType, Records.mapping(from)); + } +} diff --git a/src/main/java/de/jottyfan/timetrack/db/done/tables/records/VDayRecord.java b/src/main/java/de/jottyfan/timetrack/db/done/tables/records/VDayRecord.java new file mode 100644 index 0000000..b4e825b --- /dev/null +++ b/src/main/java/de/jottyfan/timetrack/db/done/tables/records/VDayRecord.java @@ -0,0 +1,249 @@ +/* + * This file is generated by jOOQ. + */ +package de.jottyfan.timetrack.db.done.tables.records; + + +import de.jottyfan.timetrack.db.done.tables.VDay; + +import java.time.LocalDate; + +import org.jooq.Field; +import org.jooq.Record5; +import org.jooq.Row5; +import org.jooq.impl.TableRecordImpl; +import org.jooq.types.YearToSecond; + + +/** + * This class is generated by jOOQ. + */ +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class VDayRecord extends TableRecordImpl implements Record5 { + + private static final long serialVersionUID = 1L; + + /** + * Setter for done.v_day.day. + */ + public void setDay(LocalDate value) { + set(0, value); + } + + /** + * Getter for done.v_day.day. + */ + public LocalDate getDay() { + return (LocalDate) get(0); + } + + /** + * Setter for done.v_day.worktime. + */ + public void setWorktime(YearToSecond value) { + set(1, value); + } + + /** + * Getter for done.v_day.worktime. + */ + public YearToSecond getWorktime() { + return (YearToSecond) get(1); + } + + /** + * Setter for done.v_day.breaktime. + */ + public void setBreaktime(YearToSecond value) { + set(2, value); + } + + /** + * Getter for done.v_day.breaktime. + */ + public YearToSecond getBreaktime() { + return (YearToSecond) get(2); + } + + /** + * Setter for done.v_day.day_overtime. + */ + public void setDayOvertime(YearToSecond value) { + set(3, value); + } + + /** + * Getter for done.v_day.day_overtime. + */ + public YearToSecond getDayOvertime() { + return (YearToSecond) get(3); + } + + /** + * Setter for done.v_day.fk_login. + */ + public void setFkLogin(Integer value) { + set(4, value); + } + + /** + * Getter for done.v_day.fk_login. + */ + public Integer getFkLogin() { + return (Integer) get(4); + } + + // ------------------------------------------------------------------------- + // Record5 type implementation + // ------------------------------------------------------------------------- + + @Override + public Row5 fieldsRow() { + return (Row5) super.fieldsRow(); + } + + @Override + public Row5 valuesRow() { + return (Row5) super.valuesRow(); + } + + @Override + public Field field1() { + return VDay.V_DAY.DAY; + } + + @Override + public Field field2() { + return VDay.V_DAY.WORKTIME; + } + + @Override + public Field field3() { + return VDay.V_DAY.BREAKTIME; + } + + @Override + public Field field4() { + return VDay.V_DAY.DAY_OVERTIME; + } + + @Override + public Field field5() { + return VDay.V_DAY.FK_LOGIN; + } + + @Override + public LocalDate component1() { + return getDay(); + } + + @Override + public YearToSecond component2() { + return getWorktime(); + } + + @Override + public YearToSecond component3() { + return getBreaktime(); + } + + @Override + public YearToSecond component4() { + return getDayOvertime(); + } + + @Override + public Integer component5() { + return getFkLogin(); + } + + @Override + public LocalDate value1() { + return getDay(); + } + + @Override + public YearToSecond value2() { + return getWorktime(); + } + + @Override + public YearToSecond value3() { + return getBreaktime(); + } + + @Override + public YearToSecond value4() { + return getDayOvertime(); + } + + @Override + public Integer value5() { + return getFkLogin(); + } + + @Override + public VDayRecord value1(LocalDate value) { + setDay(value); + return this; + } + + @Override + public VDayRecord value2(YearToSecond value) { + setWorktime(value); + return this; + } + + @Override + public VDayRecord value3(YearToSecond value) { + setBreaktime(value); + return this; + } + + @Override + public VDayRecord value4(YearToSecond value) { + setDayOvertime(value); + return this; + } + + @Override + public VDayRecord value5(Integer value) { + setFkLogin(value); + return this; + } + + @Override + public VDayRecord values(LocalDate value1, YearToSecond value2, YearToSecond value3, YearToSecond value4, Integer value5) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached VDayRecord + */ + public VDayRecord() { + super(VDay.V_DAY); + } + + /** + * Create a detached, initialised VDayRecord + */ + public VDayRecord(LocalDate day, YearToSecond worktime, YearToSecond breaktime, YearToSecond dayOvertime, Integer fkLogin) { + super(VDay.V_DAY); + + setDay(day); + setWorktime(worktime); + setBreaktime(breaktime); + setDayOvertime(dayOvertime); + setFkLogin(fkLogin); + resetChangedOnNotNull(); + } +} diff --git a/src/main/resources/done_ext.sql b/src/main/resources/done_ext.sql index 3e20a74..e25216c 100644 --- a/src/main/resources/done_ext.sql +++ b/src/main/resources/done_ext.sql @@ -65,4 +65,18 @@ group by x.worktime_offset, x.fk_login; grant select on done.v_current_overtime to timetrack; -create view done.v_version as select 20240103 as version; +create view done.v_day as +with x(dayworktime, day, fk_login, required, starttime, endtime) as ( + select sum(d.dayworktime), d.day, d.fk_login, r.required, + min(d.daytime_from), max(d.daytime_until) + from done.v_daylimit d + left join done.t_required_worktime r on r.day = d.day and r.fk_login = d.fk_login + group by d.day, d.fk_login, r.required +) select day, dayworktime as worktime, endtime - starttime - dayworktime as breaktime, + dayworktime - required as day_overtime, fk_login + from x + order by day desc, fk_login; + +grant select on done.v_day to timetrack; + +create or replace view done.v_version as select 20240103 as version;