finetuning

This commit is contained in:
Jörg Henke
2024-01-10 09:40:04 +01:00
parent a4bcc00363
commit 5b296d39e9
9 changed files with 58 additions and 44 deletions

View File

@ -7,7 +7,7 @@ plugins {
apply plugin: 'io.spring.dependency-management'
group = 'de.jottyfan'
version = '1.4.9'
version = '1.5.0'
description = """timetrack"""
@ -29,7 +29,7 @@ dependencies {
implementation 'org.apache.logging.log4j:log4j-core:latest.release'
implementation 'org.apache.logging.log4j:log4j-to-slf4j:latest.release'
implementation 'org.webjars:bootstrap:5.3.1'
implementation 'org.webjars:bootstrap:5.3.2'
implementation 'org.webjars:font-awesome:6.4.2'
implementation 'org.webjars:jquery:3.7.1'
implementation 'org.webjars:popper.js:2.11.7'

View File

@ -221,14 +221,14 @@ public class DoneController extends CommonController {
@PostMapping("/done/slot/upsert")
public String upsertSlot(@ModelAttribute("bean") SlotBean bean, Model model) {
doneService.upsert(bean, provider.getName());
return "redirect:/done/list";
return "redirect:/done/list#div_slot";
}
@RolesAllowed("timetrack_user")
@GetMapping("/done/slot/{id}/delete")
public String deleteSlot(@PathVariable("id") Integer slotId) {
doneService.delete(slotId, provider.getName());
return "redirect:/done/list";
return "redirect:/done/list#div_slot";
}
@RolesAllowed("timetrack_user")
@ -243,7 +243,7 @@ public class DoneController extends CommonController {
public String addRange(@ModelAttribute("bean") SlotRangeBean bean) {
doneService.addSlotRange(bean.getMinutes(), bean.getFrom(), bean.getUntil(), bean.getReason(), provider.getName(),
bean.getIncludeSaturday(), bean.getIncludeSunday());
return "redirect:/done/list";
return "redirect:/done/list#div_slot";
}
@RolesAllowed("timetrack_user")
@ -251,7 +251,7 @@ public class DoneController extends CommonController {
public String oneMonthBack(Model model, @ModelAttribute("doneModel") DoneModel doneModel) {
LocalDate day = doneModel.getDay();
doneModel.setDay(day.minusMonths(1));
return "redirect:/done/list";
return "redirect:/done/list#div_slot";
}
@RolesAllowed("timetrack_user")
@ -259,6 +259,6 @@ public class DoneController extends CommonController {
public String oneMonthForward(Model model, @ModelAttribute("doneModel") DoneModel doneModel) {
LocalDate day = doneModel.getDay();
doneModel.setDay(day.plusMonths(1));
return "redirect:/done/list";
return "redirect:/done/list#div_slot";
}
}

View File

@ -275,50 +275,50 @@ body {
}
.emphgreen {
font-weight: bolder;
color: #136600;
border-radius: 0px 8px 8px 0px;
background-image: linear-gradient(to left, #e6e6e6, white);
padding: 4px;
}
.emphblue {
font-weight: bolder;
color: #1a5fb4;
background-image: linear-gradient(to left, #e6e6e6, white);
padding: 4px;
}
.emphorange {
font-weight: bolder;
color: #c64600;
border-radius: 0px 8px 8px 0px;
background-image: linear-gradient(to left, #e6e6e6, white);
padding: 4px;
}
.emphred {
font-weight: bolder;
color: #a51d2d;
border-radius: 0px 8px 8px 0px;
background-image: linear-gradient(to left, #e6e6e6, white);
padding: 4px;
}
.emphpink {
font-weight: bolder;
color: #613583;
border-radius: 0px 8px 8px 0px;
background-image: linear-gradient(to left, #e6e6e6, white);
padding: 4px;
}
.emphgray {
font-weight: bolder;
color: #5e5c64;
border-radius: 0px 8px 8px 0px;
background-image: linear-gradient(to left, #959595, #cecece);
}
.unround-border {
padding: 4px;
font-weight: bolder;
}
.round-border {
border-radius: 8px;
font-weight: bolder;
padding: 4px;
}
.round-border-right {
font-weight: bolder;
padding: 4px;
border-radius: 0px 8px 8px 0px;
}
.sumfield {

View File

@ -53,11 +53,15 @@ class Schedule {
}
time2pixel = function (time, hourHeight) {
var timeArray = time.split(":");
var hours = parseInt(timeArray[0]);
var minutes = parseInt(timeArray[1]);
var pixels = parseInt((hours + (minutes / 60)) * hourHeight);
return pixels;
if (time == null) {
return 0;
} else {
var timeArray = time.split(":");
var hours = parseInt(timeArray[0]);
var minutes = parseInt(timeArray[1]);
var pixels = parseInt((hours + (minutes / 60)) * hourHeight);
return pixels;
}
}
drawSlot = function(ctx, slotNr, from, until, color, fillColor) {

View File

@ -47,7 +47,7 @@
</li>
</ul>
<main layout:fragment="content">
<ul class="nav nav-tabs navback" role="tablist">
<ul id="worktimetabs" class="nav nav-tabs navback" role="tablist">
<li class="nav-item">
<a class="nav-link navlinkstyle active" data-bs-toggle="tab" href="#div_list">Liste</a>
</li>
@ -126,12 +126,12 @@
</tbody>
<tfoot>
<tr th:if="${daysum}">
<td colspan="7"><span class="sumfield">Start: <span class="emphgreen" th:text="${#temporals.format(daysum.daytimeFrom, 'HH:mm')}" th:if="${daysum.daytimeFrom}"></span></span>
<span class="sumfield">Ende: <span class="emphgreen" th:text="${#temporals.format(daysum.daytimeUntil, 'HH:mm')}" th:if="${daysum.daytimeUntil}"></span></span>
<span class="sumfield">abrechenbar: <span class="emphblue" th:text="${#temporals.format(daysum.dayworktime, 'HH:mm')}" th:if="${daysum.dayworktime}"></span><span class="emphgray" th:text="'/ ' + ${sumtime}"></span></span>
<span class="sumfield">Pausezeit total: <span class="emphorange" th:text="${#temporals.format(daysum.breaks, 'HH:mm')}" th:if="${daysum.breaks}"></span></span>
<span class="sumfield">Überstunden heute: <span class="emphred" th:text="${daysum.printDayOvertime()}"></span></span>
<span class="sumfield">Überstunden total: <span class="emphpink" th:text="${daysum.printTotalOvertime()}"></span></span>
<td colspan="7"><span class="sumfield">Start: <span class="emphgreen round-border-right" th:text="${#temporals.format(daysum.daytimeFrom, 'HH:mm')}" th:if="${daysum.daytimeFrom}"></span></span>
<span class="sumfield">Ende: <span class="emphgreen round-border-right" th:text="${#temporals.format(daysum.daytimeUntil, 'HH:mm')}" th:if="${daysum.daytimeUntil}"></span></span>
<span class="sumfield">Tagessumme: <span class="emphblue unround-border" th:text="${#temporals.format(daysum.dayworktime, 'HH:mm')}" th:if="${daysum.dayworktime}"></span><span class="emphgray round-border-right" th:text="'/ ' + ${sumtime}"></span></span>
<span class="sumfield">Pausezeit total: <span class="emphorange round-border-right" th:text="${#temporals.format(daysum.breaks, 'HH:mm')}" th:if="${daysum.breaks}"></span></span>
<span class="sumfield">Überstunden heute: <span class="emphred round-border-right" th:text="${daysum.printDayOvertime()}"></span></span>
<span class="sumfield">Überstunden total: <span class="emphpink round-border-right" th:text="${daysum.printTotalOvertime()}"></span></span>
</td>
</tr>
<tr>
@ -323,6 +323,16 @@
$(document)
.ready(
function() {
// the tab deeplink functionality
let url = location.href.replace(/\/$/, "");
if (location.hash) {
const hash = url.split("#");
$('#worktimetabs a[href="#' + hash[1] + '"]').tab("show");
url = location.href.replace(/\/#/, "#");
history.replaceState(null, null, url);
}
// the schedule
let width = parseInt($("#schedule").css(
"min-width"));
let height = parseInt($("#schedule").css(

View File

@ -6,7 +6,7 @@
<body>
<ul layout:fragment="menu">
<li class="nav-item" sec:authorize="hasRole('timetrack_user')">
<a class="nav-link btn btn-outline-primary btn-white-text" th:href="@{/done/list}">zur Arbeitszeit</a>
<a class="nav-link btn btn-outline-primary btn-white-text" th:href="@{/done/list#div_slot}">zur Slotübersicht</a>
</li>
</ul>
<main layout:fragment="content">

View File

@ -6,7 +6,7 @@
<body>
<ul layout:fragment="menu">
<li class="nav-item" sec:authorize="hasRole('timetrack_user')">
<a class="nav-link btn btn-outline-primary btn-white-text" th:href="@{/done/list}">zur Arbeitszeit</a>
<a class="nav-link btn btn-outline-primary btn-white-text" th:href="@{/done/list#div_slot}">zur Slotübersicht</a>
</li>
</ul>
<main layout:fragment="content">

View File

@ -5,7 +5,7 @@
<title>Timetrack</title>
<link rel="stylesheet" type="text/css" th:href="@{/webjars/bootstrap/5.3.1/css/bootstrap.min.css}" />
<link rel="stylesheet" type="text/css" th:href="@{/webjars/bootstrap/5.3.2/css/bootstrap.min.css}" />
<link rel="stylesheet" type="text/css" th:href="@{/webjars/datatables/1.13.5/css/dataTables.bootstrap5.min.css}" />
<link rel="stylesheet" type="text/css" th:href="@{/webjars/font-awesome/6.4.2/css/all.min.css}" />
<link rel="stylesheet" type="text/css" th:href="@{/webjars/fullcalendar/5.11.3/main.css}" />
@ -15,7 +15,7 @@
<link rel="icon" type="image/png" sizes="16x16" th:href="@{/png/favicon/favicon-16x16.png}" />
<script th:src="@{/webjars/jquery/3.7.1/jquery.min.js}"></script>
<script th:src="@{/webjars/bootstrap/5.3.1/js/bootstrap.bundle.min.js}"></script>
<script th:src="@{/webjars/bootstrap/5.3.2/js/bootstrap.bundle.min.js}"></script>
<script th:src="@{/webjars/datatables/1.13.5/js/jquery.dataTables.min.js}"></script>
<script th:src="@{/webjars/datatables/1.13.5/js/dataTables.bootstrap5.min.js}"></script>
<script th:src="@{/webjars/fullcalendar/5.11.3/main.js}"></script>

View File

@ -17,15 +17,15 @@
<div class="container">
<div class="row">
<div class="col-8"><span class="spanlabel">Start:</span></div>
<div class="col-4"><span class="emphgreen" th:text="${sum.start}"></span></div>
<div class="col-4"><span class="emphgreen round-border" th:text="${sum.start}"></span></div>
<div class="col-8"><span class="spanlabel">Ende:</span></div>
<div class="col-4"><span class="emphgreen" th:text="${sum.end}"></span></div>
<div class="col-4"><span class="emphgreen round-border" th:text="${sum.end}"></span></div>
<div class="col-8"><span class="spanlabel">Arbeitszeit total:</span></div>
<div class="col-4"><span class="emphblue" th:text="${sum.total}"></span></div>
<div class="col-4"><span class="emphblue round-border" th:text="${sum.total}"></span></div>
<div class="col-8"><span class="spanlabel">Pausezeit total:</span></div>
<div class="col-4"><span class="emphorange" th:text="${sum.pause}"></span></div>
<div class="col-4"><span class="emphorange round-border" th:text="${sum.pause}"></span></div>
<div class="col-8"><span class="spanlabel">Überstunden:</span></div>
<div class="col-4"><span class="emphred" th:text="${sum.overdue}"></span></div>
<div class="col-4"><span class="emphred round-border" th:text="${sum.overdue}"></span></div>
</div>
</div>
</div>