868d6abb7 2025 -> 2026
63081666f Source file headers: 2024-> 2025.
3785f8347 Migration stuff in progress...
c14b18a48 Migration stuff in progress... (all tests of all packages: OK).
67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (renamed for avoiding mis-understandings in code).
868d6abb7
2025 -> 2026868d6abb75cd191a892911ac8e45058932cf9074
diff --git a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
index 4b64aace9..7ff379f38 100644
--- a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
+++ b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
@@ -3,7 +3,7 @@
// Project ProjectForge Community Edition
// www.projectforge.org
//
-// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2026 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge is dual-licensed.
//
63081666f
Source file headers: 2024-> 2025.63081666f620fb87315f01b817e560e0b2f6a33a
diff --git a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
index ff02d49c9..4b64aace9 100644
--- a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
+++ b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
@@ -3,7 +3,7 @@
// Project ProjectForge Community Edition
// www.projectforge.org
//
-// Copyright (C) 2001-2024 Micromata GmbH, Germany (www.micromata.com)
+// Copyright (C) 2001-2025 Micromata GmbH, Germany (www.micromata.com)
//
// ProjectForge is dual-licensed.
//
3785f8347
Migration stuff in progress...3785f83479d2e37e6410950c957b0848c19f30ea
diff --git a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
index f0aeca364..ff02d49c9 100644
--- a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
+++ b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
@@ -25,6 +25,8 @@ package org.projectforge.web.statistics;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.jfree.chart.JFreeChart;
import org.projectforge.business.fibu.EmployeeCache;
@@ -37,6 +39,7 @@ import org.projectforge.web.WicketSupport;
import org.projectforge.web.wicket.AbstractSecuredPage;
import org.projectforge.web.wicket.JFreeChartImage;
+import java.math.BigDecimal;
import java.text.NumberFormat;
public class PersonalStatisticsPage extends AbstractSecuredPage {
@@ -60,7 +63,13 @@ public class PersonalStatisticsPage extends AbstractSecuredPage {
workingHoursPerDay = employee.getWeeklyWorkingHours().doubleValue() / 5;
}
final TimesheetDisciplineChartBuilder chartBuilder = new TimesheetDisciplineChartBuilder();
- final JFreeChart chart1 = chartBuilder.create(timesheetDao, getUser().getId(), workingHoursPerDay, LAST_N_DAYS, true);
+ final double innerWorkingDaysPerDay = workingHoursPerDay;
+ IModel<JFreeChart> chart1 = new LoadableDetachableModel<>() {
+ @Override
+ protected JFreeChart load() {
+ return chartBuilder.create(timesheetDao, getUser().getId(), innerWorkingDaysPerDay, LAST_N_DAYS, true);
+ }
+ };
JFreeChartImage image = new JFreeChartImage("timesheetStatisticsImage1", chart1, IMAGE_WIDTH, IMAGE_HEIGHT);
image.add(AttributeModifier.replace("width", String.valueOf(IMAGE_WIDTH)));
image.add(AttributeModifier.replace("height", String.valueOf(IMAGE_HEIGHT)));
@@ -78,13 +87,22 @@ public class PersonalStatisticsPage extends AbstractSecuredPage {
timesheetDisciplineChart1Legend.setEscapeModelStrings(false);
body.add(timesheetDisciplineChart1Legend);
- final JFreeChart chart2 = chartBuilder.create(timesheetDao, getUser().getId(), 0, LAST_N_DAYS, false);
+ IModel<JFreeChart> chart2 = new LoadableDetachableModel<>() {
+ @Override
+ protected JFreeChart load() {
+ return chartBuilder.create(timesheetDao, getUser().getId(), 0, LAST_N_DAYS, false);
+ }
+ };
image = new JFreeChartImage("timesheetStatisticsImage2", chart2, IMAGE_WIDTH, IMAGE_HEIGHT);
image.add(AttributeModifier.replace("width", String.valueOf(IMAGE_WIDTH)));
image.add(AttributeModifier.replace("height", String.valueOf(IMAGE_HEIGHT)));
body.add(image);
+ BigDecimal averageBetweenBookings = chartBuilder.getAverageDifferenceBetweenTimesheetAndBooking();
+ if (averageBetweenBookings == null) {
+ averageBetweenBookings = BigDecimal.ZERO;
+ }
final String averageDifference = "<span style=\"color: #DE1821; font-weight: bold;\">"
- + format.format(chartBuilder.getAverageDifferenceBetweenTimesheetAndBooking())
+ + format.format(averageBetweenBookings)
+ "</span>"; c14b18a48
Migration stuff in progress... (all tests of all packages: OK).c14b18a481323a2c60c10d0f7358e7b503b662c9
diff --git a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
index bf11890e8..f0aeca364 100644
--- a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
+++ b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
@@ -27,8 +27,8 @@ import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.jfree.chart.JFreeChart;
+import org.projectforge.business.fibu.EmployeeCache;
import org.projectforge.business.fibu.EmployeeDO;
-import org.projectforge.business.fibu.EmployeeDao;
import org.projectforge.business.timesheet.TimesheetDao;
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext;
import org.projectforge.framework.utils.NumberHelper;
@@ -39,69 +39,65 @@ import org.projectforge.web.wicket.JFreeChartImage;
import java.text.NumberFormat;
-public class PersonalStatisticsPage extends AbstractSecuredPage
-{
- private static final long serialVersionUID = 5957430109012640203L;
+public class PersonalStatisticsPage extends AbstractSecuredPage {
+ private static final long serialVersionUID = 5957430109012640203L;
- private static final short LAST_N_DAYS = 45;
+ private static final short LAST_N_DAYS = 45;
- private static final int IMAGE_WIDTH = 500;
+ private static final int IMAGE_WIDTH = 500;
- private static final int IMAGE_HEIGHT = 400;
+ private static final int IMAGE_HEIGHT = 400;
- public PersonalStatisticsPage(final PageParameters parameters)
- {
- super(parameters);
- final EmployeeDao employeeDao = WicketSupport.get(EmployeeDao.class);
- final TimesheetDao timesheetDao = WicketSupport.get(TimesheetDao.class);
- final Label timesheetDisciplineChartTitle = new Label("timesheetDisciplineChartTitle",
- getString("personal.statistics.timesheetDisciplineChart.title"));
- body.add(timesheetDisciplineChartTitle);
- final EmployeeDO employee = employeeDao.findByUserId(ThreadLocalUserContext.getLoggedInUserId());
- double workingHoursPerDay = 8;
- if (employee != null && NumberHelper.isGreaterZero(employee.getWeeklyWorkingHours())) {
- workingHoursPerDay = employee.getWeeklyWorkingHours().doubleValue() / 5;
- }
- final TimesheetDisciplineChartBuilder chartBuilder = new TimesheetDisciplineChartBuilder();
- final JFreeChart chart1 = chartBuilder.create(timesheetDao, getUser().getId(), workingHoursPerDay, LAST_N_DAYS, true);
- JFreeChartImage image = new JFreeChartImage("timesheetStatisticsImage1", chart1, IMAGE_WIDTH, IMAGE_HEIGHT);
- image.add(AttributeModifier.replace("width", String.valueOf(IMAGE_WIDTH)));
- image.add(AttributeModifier.replace("height", String.valueOf(IMAGE_HEIGHT)));
- body.add(image);
- final NumberFormat format = NumberFormat.getNumberInstance(ThreadLocalUserContext.getLocale());
- final String planHours = "<span style=\"color: #DE1821; font-weight: bold;\">"
- + format.format(chartBuilder.getPlanWorkingHours())
- + "</span>";
- final String actualHours = "<span style=\"color: #40A93B; font-weight: bold;\">"
- + format.format(chartBuilder.getActualWorkingHours())
- + "</span>"; 67805f2fc
ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (renamed for avoiding mis-understandings in code).67805f2fc1f3e6a6393accb4a757a8f4049b001c
diff --git a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
index 00bd41a14..bf11890e8 100644
--- a/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
+++ b/projectforge-wicket/src/main/java/org/projectforge/web/statistics/PersonalStatisticsPage.java
@@ -57,7 +57,7 @@ public class PersonalStatisticsPage extends AbstractSecuredPage
final Label timesheetDisciplineChartTitle = new Label("timesheetDisciplineChartTitle",
getString("personal.statistics.timesheetDisciplineChart.title"));
body.add(timesheetDisciplineChartTitle);
- final EmployeeDO employee = employeeDao.findByUserId(ThreadLocalUserContext.getUserId());
+ final EmployeeDO employee = employeeDao.findByUserId(ThreadLocalUserContext.getLoggedInUserId());
double workingHoursPerDay = 8;
if (employee != null && NumberHelper.isGreaterZero(employee.getWeeklyWorkingHours())) {
workingHoursPerDay = employee.getWeeklyWorkingHours().doubleValue() / 5;