added percent usage
This commit is contained in:
@ -18,7 +18,7 @@ targetCompatibility = 11
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
maven { url "https://www.jottyfan.de/mvnrepo" }
|
||||
maven { url "https://www.jottyfan.de/libs" }
|
||||
maven { url "https://repo.maven.apache.org/maven2" }
|
||||
// maven { url "https://gitlab.com/jottyfan/libs/-/raw/main" }
|
||||
}
|
||||
@ -50,7 +50,7 @@ dependencies {
|
||||
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
|
||||
implementation 'de.jottyfan:timetrackjooq:0.1.0'
|
||||
implementation 'de.jottyfan:timetrackjooq:0.1.1'
|
||||
|
||||
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.0.0'
|
||||
|
||||
|
@ -9,11 +9,11 @@ import java.time.format.DateTimeFormatter;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
import de.jottyfan.timetrack.db.done.tables.records.TBillingRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VBillingRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.TDoneRecord;
|
||||
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.db.done.tables.records.VJobRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VModuleRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VProjectRecord;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -29,10 +29,10 @@ public class DoneBean implements Serializable, Comparable<DoneBean> {
|
||||
private LocalDate day;
|
||||
private LocalDateTime timeFrom;
|
||||
private LocalDateTime timeUntil;
|
||||
private TProjectRecord project;
|
||||
private TModuleRecord module;
|
||||
private TJobRecord activity;
|
||||
private TBillingRecord billing;
|
||||
private VProjectRecord project;
|
||||
private VModuleRecord module;
|
||||
private VJobRecord activity;
|
||||
private VBillingRecord billing;
|
||||
private Integer fkProject;
|
||||
private Integer fkModule;
|
||||
private Integer fkJob;
|
||||
@ -42,8 +42,8 @@ public class DoneBean implements Serializable, Comparable<DoneBean> {
|
||||
this.day = null;
|
||||
}
|
||||
|
||||
public DoneBean(TDoneRecord r, Map<Integer, TProjectRecord> projectMap, Map<Integer, TModuleRecord> moduleMap,
|
||||
Map<Integer, TJobRecord> jobMap, Map<Integer, TBillingRecord> billingMap) {
|
||||
public DoneBean(TDoneRecord r, Map<Integer, VProjectRecord> projectMap, Map<Integer, VModuleRecord> moduleMap,
|
||||
Map<Integer, VJobRecord> jobMap, Map<Integer, VBillingRecord> billingMap) {
|
||||
this.pk = r.getPk();
|
||||
this.day = r.getTimeFrom() != null ? r.getTimeFrom().toLocalDate() : (r.getTimeUntil() == null ? r.getTimeUntil().toLocalDate() : LocalDate.now());
|
||||
this.timeFrom = r.getTimeFrom();
|
||||
@ -260,29 +260,29 @@ public class DoneBean implements Serializable, Comparable<DoneBean> {
|
||||
this.timeUntil = timeUntil;
|
||||
}
|
||||
|
||||
public TProjectRecord getProject() {
|
||||
public VProjectRecord getProject() {
|
||||
return project;
|
||||
}
|
||||
|
||||
public void setProject(TProjectRecord project) {
|
||||
public void setProject(VProjectRecord project) {
|
||||
this.project = project;
|
||||
this.fkProject = project != null ? project.getPk() : null;
|
||||
}
|
||||
|
||||
public TModuleRecord getModule() {
|
||||
public VModuleRecord getModule() {
|
||||
return module;
|
||||
}
|
||||
|
||||
public void setModule(TModuleRecord module) {
|
||||
public void setModule(VModuleRecord module) {
|
||||
this.module = module;
|
||||
this.fkModule = module != null ? module.getPk() : null;
|
||||
}
|
||||
|
||||
public TJobRecord getActivity() {
|
||||
public VJobRecord getActivity() {
|
||||
return activity;
|
||||
}
|
||||
|
||||
public void setActivity(TJobRecord activity) {
|
||||
public void setActivity(VJobRecord activity) {
|
||||
this.activity = activity;
|
||||
this.fkJob = activity != null ? activity.getPk() : null;
|
||||
}
|
||||
@ -290,14 +290,14 @@ public class DoneBean implements Serializable, Comparable<DoneBean> {
|
||||
/**
|
||||
* @return the billing
|
||||
*/
|
||||
public TBillingRecord getBilling() {
|
||||
public VBillingRecord getBilling() {
|
||||
return billing;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param billing the billing to set
|
||||
*/
|
||||
public void setBilling(TBillingRecord billing) {
|
||||
public void setBilling(VBillingRecord billing) {
|
||||
this.billing = billing;
|
||||
this.fkBilling = billing != null ? billing.getPk() : null;
|
||||
}
|
||||
|
@ -5,10 +5,10 @@ import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import de.jottyfan.timetrack.db.done.tables.records.TBillingRecord;
|
||||
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.db.done.tables.records.VBillingRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VJobRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VModuleRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VProjectRecord;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -22,13 +22,13 @@ public interface IDoneService {
|
||||
|
||||
public String getCurrentUser(HttpServletRequest request);
|
||||
|
||||
public List<TProjectRecord> getProjects(boolean includeNull);
|
||||
public List<VProjectRecord> getProjects(boolean includeNull);
|
||||
|
||||
public List<TModuleRecord> getModules(boolean includeNull);
|
||||
public List<VModuleRecord> getModules(boolean includeNull);
|
||||
|
||||
public List<TJobRecord> getJobs(boolean includeNull);
|
||||
public List<VJobRecord> getJobs(boolean includeNull);
|
||||
|
||||
public List<TBillingRecord> getBillings(boolean includeNull);
|
||||
public List<VBillingRecord> getBillings(boolean includeNull);
|
||||
|
||||
public Integer doUpsert(DoneBean bean, String username);
|
||||
|
||||
|
@ -6,6 +6,10 @@ import static de.jottyfan.timetrack.db.done.Tables.T_JOB;
|
||||
import static de.jottyfan.timetrack.db.done.Tables.T_MODULE;
|
||||
import static de.jottyfan.timetrack.db.done.Tables.T_PROJECT;
|
||||
import static de.jottyfan.timetrack.db.profile.Tables.T_LOGIN;
|
||||
import static de.jottyfan.timetrack.db.done.Tables.V_BILLING;
|
||||
import static de.jottyfan.timetrack.db.done.Tables.V_JOB;
|
||||
import static de.jottyfan.timetrack.db.done.Tables.V_MODULE;
|
||||
import static de.jottyfan.timetrack.db.done.Tables.V_PROJECT;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.time.LocalDate;
|
||||
@ -28,11 +32,11 @@ import org.jooq.exception.DataAccessException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import de.jottyfan.timetrack.db.done.tables.records.TBillingRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VBillingRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.TDoneRecord;
|
||||
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.db.done.tables.records.VJobRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VModuleRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VProjectRecord;
|
||||
import de.jottyfan.timetrack.db.profile.tables.records.TLoginRecord;
|
||||
import de.jottyfan.timetrack.spring.done.DoneBean;
|
||||
|
||||
@ -76,12 +80,13 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws SQLException
|
||||
*/
|
||||
public List<TProjectRecord> getAllProjects(boolean includeNull) throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<TProjectRecord> list = new ArrayList<>();
|
||||
public List<VProjectRecord> getAllProjects(boolean includeNull)
|
||||
throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<VProjectRecord> list = new ArrayList<>();
|
||||
if (includeNull) {
|
||||
list.add(new TProjectRecord(null, null, "---"));
|
||||
list.add(new VProjectRecord());
|
||||
}
|
||||
list.addAll(getJooq().selectFrom(T_PROJECT).orderBy(T_PROJECT.NAME).fetchInto(TProjectRecord.class));
|
||||
list.addAll(getJooq().selectFrom(V_PROJECT).orderBy(V_PROJECT.NAME).fetchInto(VProjectRecord.class));
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -96,12 +101,13 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws SQLException
|
||||
*/
|
||||
public List<TModuleRecord> getAllModules(boolean includeNull) throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<TModuleRecord> list = new ArrayList<>();
|
||||
public List<VModuleRecord> getAllModules(boolean includeNull)
|
||||
throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<VModuleRecord> list = new ArrayList<>();
|
||||
if (includeNull) {
|
||||
list.add(new TModuleRecord(null, null, "---"));
|
||||
list.add(new VModuleRecord());
|
||||
}
|
||||
list.addAll(getJooq().selectFrom(T_MODULE).orderBy(T_MODULE.NAME).fetchInto(TModuleRecord.class));
|
||||
list.addAll(getJooq().selectFrom(T_MODULE).orderBy(T_MODULE.NAME).fetchInto(VModuleRecord.class));
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -116,12 +122,13 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws SQLException
|
||||
*/
|
||||
public List<TJobRecord> getAllJobs(boolean includeNull) throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<TJobRecord> list = new ArrayList<>();
|
||||
public List<VJobRecord> getAllJobs(boolean includeNull)
|
||||
throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<VJobRecord> list = new ArrayList<>();
|
||||
if (includeNull) {
|
||||
list.add(new TJobRecord(null, null, "---"));
|
||||
list.add(new VJobRecord());
|
||||
}
|
||||
list.addAll(getJooq().selectFrom(T_JOB).orderBy(T_JOB.NAME).fetchInto(TJobRecord.class));
|
||||
list.addAll(getJooq().selectFrom(T_JOB).orderBy(T_JOB.NAME).fetchInto(VJobRecord.class));
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -136,12 +143,13 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws SQLException
|
||||
*/
|
||||
public List<TBillingRecord> getAllBillings(boolean includeNull) throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<TBillingRecord> list = new ArrayList<>();
|
||||
public List<VBillingRecord> getAllBillings(boolean includeNull)
|
||||
throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
List<VBillingRecord> list = new ArrayList<>();
|
||||
if (includeNull) {
|
||||
list.add(new TBillingRecord(null, null, "---", null, null));
|
||||
list.add(new VBillingRecord(null, null, "---", null, null));
|
||||
}
|
||||
list.addAll(getJooq().selectFrom(T_BILLING).orderBy(T_BILLING.NAME).fetchInto(TBillingRecord.class));
|
||||
list.addAll(getJooq().selectFrom(T_BILLING).orderBy(T_BILLING.NAME).fetchInto(VBillingRecord.class));
|
||||
return list;
|
||||
}
|
||||
|
||||
@ -153,10 +161,10 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws DataAccessException
|
||||
*/
|
||||
private Map<Integer, TProjectRecord> getProjectMap()
|
||||
private Map<Integer, VProjectRecord> getProjectMap()
|
||||
throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
Map<Integer, TProjectRecord> map = new HashMap<>();
|
||||
for (TProjectRecord r : getAllProjects(false)) {
|
||||
Map<Integer, VProjectRecord> map = new HashMap<>();
|
||||
for (VProjectRecord r : getAllProjects(false)) {
|
||||
map.put(r.getPk(), r);
|
||||
}
|
||||
return map;
|
||||
@ -170,9 +178,9 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws DataAccessException
|
||||
*/
|
||||
private Map<Integer, TModuleRecord> getModuleMap() throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
Map<Integer, TModuleRecord> map = new HashMap<>();
|
||||
for (TModuleRecord r : getAllModules(false)) {
|
||||
private Map<Integer, VModuleRecord> getModuleMap() throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
Map<Integer, VModuleRecord> map = new HashMap<>();
|
||||
for (VModuleRecord r : getAllModules(false)) {
|
||||
map.put(r.getPk(), r);
|
||||
}
|
||||
return map;
|
||||
@ -186,9 +194,9 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws DataAccessException
|
||||
*/
|
||||
private Map<Integer, TJobRecord> getJobMap() throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
Map<Integer, TJobRecord> map = new HashMap<>();
|
||||
for (TJobRecord r : getAllJobs(false)) {
|
||||
private Map<Integer, VJobRecord> getJobMap() throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
Map<Integer, VJobRecord> map = new HashMap<>();
|
||||
for (VJobRecord r : getAllJobs(false)) {
|
||||
map.put(r.getPk(), r);
|
||||
}
|
||||
return map;
|
||||
@ -202,10 +210,10 @@ public class DoneGateway {
|
||||
* @throws ClassNotFoundException
|
||||
* @throws DataAccessException
|
||||
*/
|
||||
private Map<Integer, TBillingRecord> getBillingMap()
|
||||
private Map<Integer, VBillingRecord> getBillingMap()
|
||||
throws DataAccessException, ClassNotFoundException, SQLException {
|
||||
Map<Integer, TBillingRecord> map = new HashMap<>();
|
||||
for (TBillingRecord r : getAllBillings(false)) {
|
||||
Map<Integer, VBillingRecord> map = new HashMap<>();
|
||||
for (VBillingRecord r : getAllBillings(false)) {
|
||||
map.put(r.getPk(), r);
|
||||
}
|
||||
return map;
|
||||
@ -241,10 +249,10 @@ public class DoneGateway {
|
||||
// @formatter:on
|
||||
LOGGER.debug("{}", sql.toString());
|
||||
List<DoneBean> list = new ArrayList<>();
|
||||
Map<Integer, TProjectRecord> projectMap = getProjectMap();
|
||||
Map<Integer, TModuleRecord> moduleMap = getModuleMap();
|
||||
Map<Integer, TJobRecord> jobMap = getJobMap();
|
||||
Map<Integer, TBillingRecord> billingMap = getBillingMap();
|
||||
Map<Integer, VProjectRecord> projectMap = getProjectMap();
|
||||
Map<Integer, VModuleRecord> moduleMap = getModuleMap();
|
||||
Map<Integer, VJobRecord> jobMap = getJobMap();
|
||||
Map<Integer, VBillingRecord> billingMap = getBillingMap();
|
||||
for (Record7<Integer, LocalDateTime, LocalDateTime, Integer, Integer, Integer, Integer> r : sql.fetch()) {
|
||||
DoneBean bean = new DoneBean();
|
||||
bean.setPk(r.get(T_DONE.PK));
|
||||
@ -303,10 +311,10 @@ public class DoneGateway {
|
||||
.where(T_DONE.PK.eq(pk));
|
||||
// @formatter:on
|
||||
LOGGER.debug("{}", sql.toString());
|
||||
Map<Integer, TProjectRecord> projectMap = getProjectMap();
|
||||
Map<Integer, TModuleRecord> moduleMap = getModuleMap();
|
||||
Map<Integer, TJobRecord> jobMap = getJobMap();
|
||||
Map<Integer, TBillingRecord> billingMap = getBillingMap();
|
||||
Map<Integer, VProjectRecord> projectMap = getProjectMap();
|
||||
Map<Integer, VModuleRecord> moduleMap = getModuleMap();
|
||||
Map<Integer, VJobRecord> jobMap = getJobMap();
|
||||
Map<Integer, VBillingRecord> billingMap = getBillingMap();
|
||||
for (Record7<Integer, LocalDateTime, LocalDateTime, Integer, Integer, Integer, Integer> r : sql.fetch()) {
|
||||
DoneBean bean = new DoneBean();
|
||||
bean.setPk(r.get(T_DONE.PK));
|
||||
|
@ -14,10 +14,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import de.jottyfan.timetrack.db.done.tables.records.TBillingRecord;
|
||||
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.db.done.tables.records.VBillingRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VJobRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VModuleRecord;
|
||||
import de.jottyfan.timetrack.db.done.tables.records.VProjectRecord;
|
||||
import de.jottyfan.timetrack.spring.done.DoneBean;
|
||||
import de.jottyfan.timetrack.spring.done.IDoneService;
|
||||
import de.jottyfan.timetrack.spring.note.impl.NoteService;
|
||||
@ -68,7 +68,7 @@ public class DoneService implements IDoneService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TProjectRecord> getProjects(boolean includeNull) {
|
||||
public List<VProjectRecord> getProjects(boolean includeNull) {
|
||||
try {
|
||||
return new DoneGateway(dsl).getAllProjects(includeNull);
|
||||
} catch (Exception e) {
|
||||
@ -78,7 +78,7 @@ public class DoneService implements IDoneService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TModuleRecord> getModules(boolean includeNull) {
|
||||
public List<VModuleRecord> getModules(boolean includeNull) {
|
||||
try {
|
||||
return new DoneGateway(dsl).getAllModules(includeNull);
|
||||
} catch (Exception e) {
|
||||
@ -88,7 +88,7 @@ public class DoneService implements IDoneService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TJobRecord> getJobs(boolean includeNull) {
|
||||
public List<VJobRecord> getJobs(boolean includeNull) {
|
||||
try {
|
||||
return new DoneGateway(dsl).getAllJobs(includeNull);
|
||||
} catch (Exception e) {
|
||||
@ -98,7 +98,7 @@ public class DoneService implements IDoneService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TBillingRecord> getBillings(boolean includeNull) {
|
||||
public List<VBillingRecord> getBillings(boolean includeNull) {
|
||||
try {
|
||||
return new DoneGateway(dsl).getAllBillings(includeNull);
|
||||
} catch (Exception e) {
|
||||
|
@ -78,13 +78,13 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Benutzt</th>
|
||||
<th>Benutzt in %</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="project : ${projectList}">
|
||||
<td><span th:text="${project.name}"></span></td>
|
||||
<td>TODO</td>
|
||||
<td><span th:text="${project.percentUsage}"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -94,13 +94,13 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Benutzt</th>
|
||||
<th>Benutzt in %</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="module : ${moduleList}">
|
||||
<td><span th:text="${module.name}"></span></td>
|
||||
<td>TODO</td>
|
||||
<td><span th:text="${module.percentUsage}"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -110,13 +110,13 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Benutzt</th>
|
||||
<th>Benutzt in %</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="job : ${jobList}">
|
||||
<td><span th:text="${job.name}"></span></td>
|
||||
<td>TODO</td>
|
||||
<td><span th:text="${job.percentUsage}"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -127,14 +127,14 @@
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Symbol</th>
|
||||
<th>Benutzt</th>
|
||||
<th>Benutzt in %</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="billing : ${billingList}">
|
||||
<td><span th:text="${billing.name}"></span></td>
|
||||
<td><span th:text="${billing.shortcut}" th:class="'billing ' + ${billing.csskey}"></span></td>
|
||||
<td>TODO</td>
|
||||
<td><span th:text="${billing.percentUsage}"></span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
Reference in New Issue
Block a user