/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.web.statistics;
import java.text.NumberFormat;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.jfree.chart.JFreeChart;
import org.projectforge.common.NumberHelper;
import org.projectforge.fibu.EmployeeDO;
import org.projectforge.fibu.EmployeeDao;
import org.projectforge.statistics.TimesheetDisciplineChartBuilder;
import org.projectforge.timesheet.TimesheetDao;
import org.projectforge.user.PFUserContext;
import org.projectforge.web.wicket.AbstractSecuredPage;
import org.projectforge.web.wicket.JFreeChartImage;
public class PersonalStatisticsPage extends AbstractSecuredPage
{
private static final long serialVersionUID = 5957430109012640203L;
private static final short LAST_N_DAYS = 45;
private static final int IMAGE_WIDTH = 500;
private static final int IMAGE_HEIGHT = 400;
@SpringBean(name = "employeeDao")
private EmployeeDao employeeDao;
@SpringBean(name = "timesheetDao")
private TimesheetDao timesheetDao;
public PersonalStatisticsPage(final PageParameters parameters)
{
super(parameters);
final Label timesheetDisciplineChartTitle = new Label("timesheetDisciplineChartTitle",
getString("personal.statistics.timesheetDisciplineChart.title"));
body.add(timesheetDisciplineChartTitle);
final EmployeeDO employee = employeeDao.getByUserId(PFUserContext.getUserId());
double workingHoursPerDay = 8;
if (employee != null && NumberHelper.isGreaterZero(employee.getWeeklyWorkingHours()) == true) {
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(PFUserContext.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>";
final String numberOfDays = String.valueOf(LAST_N_DAYS);
final Label timesheetDisciplineChart1Legend = new Label("timesheetDisciplineChart1Legend", getLocalizedMessage(
"personal.statistics.timesheetDisciplineChart1.legend", numberOfDays, planHours, actualHours));
timesheetDisciplineChart1Legend.setEscapeModelStrings(false);
body.add(timesheetDisciplineChart1Legend);
final JFreeChart chart2 = chartBuilder.create(timesheetDao, getUser().getId(), LAST_N_DAYS, true);
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);
final String averageDifference = "<span style=\"color: #DE1821; font-weight: bold;\">"
+ format.format(chartBuilder.getAverageDifferenceBetweenTimesheetAndBooking())
+ "</span>";
final String plannedDifference = "<span style=\"color: #40A93B; font-weight: bold;\">"
+ format.format(chartBuilder.getPlannedAverageDifferenceBetweenTimesheetAndBooking())
+ "</span>";
final Label timesheetDisciplineChart2Legend = new Label("timesheetDisciplineChart2Legend", getLocalizedMessage(
"personal.statistics.timesheetDisciplineChart2.legend", numberOfDays, plannedDifference, averageDifference));
timesheetDisciplineChart2Legend.setEscapeModelStrings(false);
body.add(timesheetDisciplineChart2Legend);
}
@Override
protected String getTitle()
{
return getString("personal.statistics.title");
}
}