/* * This file is part of LibrePlan * * Copyright (C) 2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.libreplan.web.users.dashboard; import static org.libreplan.web.I18nHelper._; import org.joda.time.LocalDate; import org.libreplan.business.common.entities.PersonalTimesheetsPeriodicityEnum; import org.libreplan.business.workingday.EffortDuration; import org.libreplan.business.workreports.entities.WorkReport; /** * Simple class to represent the personal timesheets to be shown in the list. * <br /> * This is only a utility class for the UI, everything will be saved using {@link WorkReport} class. * * @author Manuel Rego Casasnovas <mrego@igalia.com> */ public class PersonalTimesheetDTO { private static final String MMMM_Y_PATTERN = "MMMM y"; private LocalDate date; private WorkReport workReport; private EffortDuration resourceCapacity; private EffortDuration totalHours; private int tasksNumber; /** * @param date * The date of the timesheet. * @param workReport * The work report of the personal timesheet, it could be * <code>null</code> if it doesn't exist yet. * @param resourceCapacity * The capacity of the resource bound to current user in the * period of this timesheet. * @param totalHours * Total hours worked by the resource bound to the current user * in the personal timesheet * @param tasksNumber * Number of tasks in the personal timesheet */ public PersonalTimesheetDTO(LocalDate date, WorkReport workReport, EffortDuration resourceCapacity, EffortDuration totalHours, int tasksNumber) { this.date = date; this.workReport = workReport; this.resourceCapacity = resourceCapacity; this.totalHours = totalHours; this.tasksNumber = tasksNumber; } public LocalDate getDate() { return date; } public WorkReport getWorkReport() { return workReport; } public EffortDuration getResourceCapacity() { return resourceCapacity; } public EffortDuration getTotalHours() { return totalHours; } public int getTasksNumber() { return tasksNumber; } public String toString(PersonalTimesheetsPeriodicityEnum periodicity) { return toString(periodicity, date); } /** * Returns a string representing the personal timehseet in a given * <code>date</code> depending on the <code>periodicity</code>. */ public static String toString(PersonalTimesheetsPeriodicityEnum periodicity, LocalDate date) { switch (periodicity) { case WEEKLY: LocalDate start = periodicity.getStart(date); LocalDate end = periodicity.getEnd(date); String string = date.toString("w"); if (start.getMonthOfYear() == end.getMonthOfYear()) { string += " (" + date.toString(MMMM_Y_PATTERN) + ")"; } else { if (start.getYear() == end.getYear()) { string += " (" + start.toString("MMMM") + " - " + end.toString(MMMM_Y_PATTERN) + ")"; } else { string += " (" + start.toString(MMMM_Y_PATTERN) + " - " + end.toString(MMMM_Y_PATTERN) + ")"; } } return _("Week {0}", string); case TWICE_MONTHLY: return (date.getDayOfMonth() <= 15) ? _("{0} 1st fortnight", date.toString(MMMM_Y_PATTERN)) : _("{0} 2nd fortnight", date.toString(MMMM_Y_PATTERN)); case MONTHLY: default: return date.toString(MMMM_Y_PATTERN); } } }