Compare commits
6 Commits
addRestart
...
5d7329a811
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d7329a811 | ||
|
|
f09fee5a55 | ||
| ac3993545e | |||
| c62127e24d | |||
| f36fd63a04 | |||
| 75ddbecc79 |
14
.gitea/workflows/restart.yaml
Normal file
14
.gitea/workflows/restart.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
name: Docker Restart Manuell
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
restart-docker:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Docker Compose Restart
|
||||||
|
run: |
|
||||||
|
cd /home/docker/apps/mytimetracker
|
||||||
|
docker compose down
|
||||||
|
docker compose up -d
|
||||||
@@ -23,6 +23,10 @@ public class TimeEntryService {
|
|||||||
return repository.findAllByUserOrderByDateDesc(user);
|
return repository.findAllByUserOrderByDateDesc(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getNumberOfEntriesForUser(User user) {
|
||||||
|
return getEntriesForUser(user).size();
|
||||||
|
}
|
||||||
|
|
||||||
public TimeEntry save(TimeEntry entry) {
|
public TimeEntry save(TimeEntry entry) {
|
||||||
return repository.save(entry);
|
return repository.save(entry);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import de.nilzbu.mytimetracker.ui.component.ChartJsComponent;
|
|||||||
import de.nilzbu.mytimetracker.ui.layout.MainLayout;
|
import de.nilzbu.mytimetracker.ui.layout.MainLayout;
|
||||||
import de.nilzbu.mytimetracker.ui.widget.KeyFigureWidget;
|
import de.nilzbu.mytimetracker.ui.widget.KeyFigureWidget;
|
||||||
import jakarta.annotation.security.PermitAll;
|
import jakarta.annotation.security.PermitAll;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
@@ -150,8 +151,14 @@ public class DashboardOverView extends VerticalLayout {
|
|||||||
chartLayout.setSpacing(true);
|
chartLayout.setSpacing(true);
|
||||||
|
|
||||||
Component categoryChart = createCategoryBarChart(scopedEntries);
|
Component categoryChart = createCategoryBarChart(scopedEntries);
|
||||||
Component overtimeChart = createOvertimeLineChart(allEntries, scopedEntries);
|
categoryChart.getStyle().setBackgroundColor("lightgray");
|
||||||
|
categoryChart.getStyle().setBorder("1px solid black" );
|
||||||
|
categoryChart.getStyle().setMargin("10px");
|
||||||
|
|
||||||
|
Component overtimeChart = createOvertimeLineChart(allEntries, scopedEntries);
|
||||||
|
overtimeChart.getStyle().setBackgroundColor("lightgray");
|
||||||
|
overtimeChart.getStyle().setBorder("1px solid black" );
|
||||||
|
overtimeChart.getStyle().setMargin("10px");
|
||||||
|
|
||||||
chartLayout.add(categoryChart, overtimeChart);
|
chartLayout.add(categoryChart, overtimeChart);
|
||||||
chartLayout.setFlexGrow(1, categoryChart);
|
chartLayout.setFlexGrow(1, categoryChart);
|
||||||
@@ -184,18 +191,30 @@ public class DashboardOverView extends VerticalLayout {
|
|||||||
calculateDaysWithDayStatus.apply(scopedEntries, DayStatus.SICK)
|
calculateDaysWithDayStatus.apply(scopedEntries, DayStatus.SICK)
|
||||||
);
|
);
|
||||||
|
|
||||||
KeyFigureWidget deviation = new KeyFigureWidget(
|
KeyFigureWidget timeBalance = new KeyFigureWidget(
|
||||||
"Deviation",
|
"Time Balance",
|
||||||
"" + scopedEntries.stream()
|
getTimeBalance(scopedEntries)
|
||||||
.map(entry -> timeEntryService.calculateNetWorkMinutes(entry) - entry.getTargetMinutes())
|
|
||||||
.reduce(0, Integer::sum)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
keyFigureLayout.add(deviation, workingDays, remoteDays, officeDays, vacationDays, sickDays);
|
keyFigureLayout.getStyle().setBackgroundColor("lightgray");
|
||||||
|
keyFigureLayout.getStyle().setBorder("1px solid black" );
|
||||||
|
keyFigureLayout.getStyle().setMargin("10px");
|
||||||
|
|
||||||
|
keyFigureLayout.add(timeBalance, workingDays, remoteDays, officeDays, vacationDays, sickDays);
|
||||||
|
|
||||||
contentContainer.add(keyFigureLayout);
|
contentContainer.add(keyFigureLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private String getTimeBalance(List<TimeEntry> scopedEntries) {
|
||||||
|
Integer minutes = scopedEntries.stream()
|
||||||
|
.map(entry -> timeEntryService.calculateNetWorkMinutes(entry) - entry.getTargetMinutes())
|
||||||
|
.reduce(0, Integer::sum);
|
||||||
|
|
||||||
|
double hours = minutes / 60.0;
|
||||||
|
return "%.2f h".formatted(hours);
|
||||||
|
}
|
||||||
|
|
||||||
private Component createCategoryBarChart(List<TimeEntry> entries) {
|
private Component createCategoryBarChart(List<TimeEntry> entries) {
|
||||||
Map<String, Long> statusCount = entries.stream()
|
Map<String, Long> statusCount = entries.stream()
|
||||||
.collect(Collectors.groupingBy(e -> e.getStatus().name(), Collectors.counting()));
|
.collect(Collectors.groupingBy(e -> e.getStatus().name(), Collectors.counting()));
|
||||||
|
|||||||
Reference in New Issue
Block a user