finetuning
This commit is contained in:
@ -7,7 +7,7 @@ plugins {
|
|||||||
apply plugin: 'io.spring.dependency-management'
|
apply plugin: 'io.spring.dependency-management'
|
||||||
|
|
||||||
group = 'de.jottyfan'
|
group = 'de.jottyfan'
|
||||||
version = '1.4.9'
|
version = '1.5.0'
|
||||||
|
|
||||||
description = """timetrack"""
|
description = """timetrack"""
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ dependencies {
|
|||||||
implementation 'org.apache.logging.log4j:log4j-core:latest.release'
|
implementation 'org.apache.logging.log4j:log4j-core:latest.release'
|
||||||
implementation 'org.apache.logging.log4j:log4j-to-slf4j: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:font-awesome:6.4.2'
|
||||||
implementation 'org.webjars:jquery:3.7.1'
|
implementation 'org.webjars:jquery:3.7.1'
|
||||||
implementation 'org.webjars:popper.js:2.11.7'
|
implementation 'org.webjars:popper.js:2.11.7'
|
||||||
|
@ -221,14 +221,14 @@ public class DoneController extends CommonController {
|
|||||||
@PostMapping("/done/slot/upsert")
|
@PostMapping("/done/slot/upsert")
|
||||||
public String upsertSlot(@ModelAttribute("bean") SlotBean bean, Model model) {
|
public String upsertSlot(@ModelAttribute("bean") SlotBean bean, Model model) {
|
||||||
doneService.upsert(bean, provider.getName());
|
doneService.upsert(bean, provider.getName());
|
||||||
return "redirect:/done/list";
|
return "redirect:/done/list#div_slot";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RolesAllowed("timetrack_user")
|
@RolesAllowed("timetrack_user")
|
||||||
@GetMapping("/done/slot/{id}/delete")
|
@GetMapping("/done/slot/{id}/delete")
|
||||||
public String deleteSlot(@PathVariable("id") Integer slotId) {
|
public String deleteSlot(@PathVariable("id") Integer slotId) {
|
||||||
doneService.delete(slotId, provider.getName());
|
doneService.delete(slotId, provider.getName());
|
||||||
return "redirect:/done/list";
|
return "redirect:/done/list#div_slot";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RolesAllowed("timetrack_user")
|
@RolesAllowed("timetrack_user")
|
||||||
@ -243,7 +243,7 @@ public class DoneController extends CommonController {
|
|||||||
public String addRange(@ModelAttribute("bean") SlotRangeBean bean) {
|
public String addRange(@ModelAttribute("bean") SlotRangeBean bean) {
|
||||||
doneService.addSlotRange(bean.getMinutes(), bean.getFrom(), bean.getUntil(), bean.getReason(), provider.getName(),
|
doneService.addSlotRange(bean.getMinutes(), bean.getFrom(), bean.getUntil(), bean.getReason(), provider.getName(),
|
||||||
bean.getIncludeSaturday(), bean.getIncludeSunday());
|
bean.getIncludeSaturday(), bean.getIncludeSunday());
|
||||||
return "redirect:/done/list";
|
return "redirect:/done/list#div_slot";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RolesAllowed("timetrack_user")
|
@RolesAllowed("timetrack_user")
|
||||||
@ -251,7 +251,7 @@ public class DoneController extends CommonController {
|
|||||||
public String oneMonthBack(Model model, @ModelAttribute("doneModel") DoneModel doneModel) {
|
public String oneMonthBack(Model model, @ModelAttribute("doneModel") DoneModel doneModel) {
|
||||||
LocalDate day = doneModel.getDay();
|
LocalDate day = doneModel.getDay();
|
||||||
doneModel.setDay(day.minusMonths(1));
|
doneModel.setDay(day.minusMonths(1));
|
||||||
return "redirect:/done/list";
|
return "redirect:/done/list#div_slot";
|
||||||
}
|
}
|
||||||
|
|
||||||
@RolesAllowed("timetrack_user")
|
@RolesAllowed("timetrack_user")
|
||||||
@ -259,6 +259,6 @@ public class DoneController extends CommonController {
|
|||||||
public String oneMonthForward(Model model, @ModelAttribute("doneModel") DoneModel doneModel) {
|
public String oneMonthForward(Model model, @ModelAttribute("doneModel") DoneModel doneModel) {
|
||||||
LocalDate day = doneModel.getDay();
|
LocalDate day = doneModel.getDay();
|
||||||
doneModel.setDay(day.plusMonths(1));
|
doneModel.setDay(day.plusMonths(1));
|
||||||
return "redirect:/done/list";
|
return "redirect:/done/list#div_slot";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -275,50 +275,50 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.emphgreen {
|
.emphgreen {
|
||||||
font-weight: bolder;
|
|
||||||
color: #136600;
|
color: #136600;
|
||||||
border-radius: 0px 8px 8px 0px;
|
|
||||||
background-image: linear-gradient(to left, #e6e6e6, white);
|
background-image: linear-gradient(to left, #e6e6e6, white);
|
||||||
padding: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.emphblue {
|
.emphblue {
|
||||||
font-weight: bolder;
|
|
||||||
color: #1a5fb4;
|
color: #1a5fb4;
|
||||||
background-image: linear-gradient(to left, #e6e6e6, white);
|
background-image: linear-gradient(to left, #e6e6e6, white);
|
||||||
padding: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.emphorange {
|
.emphorange {
|
||||||
font-weight: bolder;
|
|
||||||
color: #c64600;
|
color: #c64600;
|
||||||
border-radius: 0px 8px 8px 0px;
|
|
||||||
background-image: linear-gradient(to left, #e6e6e6, white);
|
background-image: linear-gradient(to left, #e6e6e6, white);
|
||||||
padding: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.emphred {
|
.emphred {
|
||||||
font-weight: bolder;
|
|
||||||
color: #a51d2d;
|
color: #a51d2d;
|
||||||
border-radius: 0px 8px 8px 0px;
|
|
||||||
background-image: linear-gradient(to left, #e6e6e6, white);
|
background-image: linear-gradient(to left, #e6e6e6, white);
|
||||||
padding: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.emphpink {
|
.emphpink {
|
||||||
font-weight: bolder;
|
|
||||||
color: #613583;
|
color: #613583;
|
||||||
border-radius: 0px 8px 8px 0px;
|
|
||||||
background-image: linear-gradient(to left, #e6e6e6, white);
|
background-image: linear-gradient(to left, #e6e6e6, white);
|
||||||
padding: 4px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.emphgray {
|
.emphgray {
|
||||||
font-weight: bolder;
|
|
||||||
color: #5e5c64;
|
color: #5e5c64;
|
||||||
border-radius: 0px 8px 8px 0px;
|
|
||||||
background-image: linear-gradient(to left, #959595, #cecece);
|
background-image: linear-gradient(to left, #959595, #cecece);
|
||||||
|
}
|
||||||
|
|
||||||
|
.unround-border {
|
||||||
padding: 4px;
|
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 {
|
.sumfield {
|
||||||
|
@ -53,12 +53,16 @@ class Schedule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
time2pixel = function (time, hourHeight) {
|
time2pixel = function (time, hourHeight) {
|
||||||
|
if (time == null) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
var timeArray = time.split(":");
|
var timeArray = time.split(":");
|
||||||
var hours = parseInt(timeArray[0]);
|
var hours = parseInt(timeArray[0]);
|
||||||
var minutes = parseInt(timeArray[1]);
|
var minutes = parseInt(timeArray[1]);
|
||||||
var pixels = parseInt((hours + (minutes / 60)) * hourHeight);
|
var pixels = parseInt((hours + (minutes / 60)) * hourHeight);
|
||||||
return pixels;
|
return pixels;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
drawSlot = function(ctx, slotNr, from, until, color, fillColor) {
|
drawSlot = function(ctx, slotNr, from, until, color, fillColor) {
|
||||||
ctx.strokeStyle = color;
|
ctx.strokeStyle = color;
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<main layout:fragment="content">
|
<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">
|
<li class="nav-item">
|
||||||
<a class="nav-link navlinkstyle active" data-bs-toggle="tab" href="#div_list">Liste</a>
|
<a class="nav-link navlinkstyle active" data-bs-toggle="tab" href="#div_list">Liste</a>
|
||||||
</li>
|
</li>
|
||||||
@ -126,12 +126,12 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr th:if="${daysum}">
|
<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>
|
<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" th:text="${#temporals.format(daysum.daytimeUntil, 'HH:mm')}" th:if="${daysum.daytimeUntil}"></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">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">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" th:text="${#temporals.format(daysum.breaks, 'HH:mm')}" th:if="${daysum.breaks}"></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" th:text="${daysum.printDayOvertime()}"></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" th:text="${daysum.printTotalOvertime()}"></span></span>
|
<span class="sumfield">Überstunden total: <span class="emphpink round-border-right" th:text="${daysum.printTotalOvertime()}"></span></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@ -323,6 +323,16 @@
|
|||||||
$(document)
|
$(document)
|
||||||
.ready(
|
.ready(
|
||||||
function() {
|
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(
|
let width = parseInt($("#schedule").css(
|
||||||
"min-width"));
|
"min-width"));
|
||||||
let height = parseInt($("#schedule").css(
|
let height = parseInt($("#schedule").css(
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<ul layout:fragment="menu">
|
<ul layout:fragment="menu">
|
||||||
<li class="nav-item" sec:authorize="hasRole('timetrack_user')">
|
<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>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<main layout:fragment="content">
|
<main layout:fragment="content">
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<body>
|
<body>
|
||||||
<ul layout:fragment="menu">
|
<ul layout:fragment="menu">
|
||||||
<li class="nav-item" sec:authorize="hasRole('timetrack_user')">
|
<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>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<main layout:fragment="content">
|
<main layout:fragment="content">
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<title>Timetrack</title>
|
<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/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/font-awesome/6.4.2/css/all.min.css}" />
|
||||||
<link rel="stylesheet" type="text/css" th:href="@{/webjars/fullcalendar/5.11.3/main.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}" />
|
<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/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/jquery.dataTables.min.js}"></script>
|
||||||
<script th:src="@{/webjars/datatables/1.13.5/js/dataTables.bootstrap5.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>
|
<script th:src="@{/webjars/fullcalendar/5.11.3/main.js}"></script>
|
||||||
|
@ -17,15 +17,15 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8"><span class="spanlabel">Start:</span></div>
|
<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-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-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-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-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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user