/** * TNTConcept Easy Enterprise Management by Autentia Real Bussiness Solution S.L. * Copyright (C) 2007 Autentia Real Bussiness Solution S.L. * * This program 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, either version 3 of the License. * * 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 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 com.autentia.tnt.bean.activity; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.autentia.tnt.bean.BaseBean; import com.autentia.tnt.businessobject.Activity; import com.autentia.tnt.businessobject.GlobalHourReport; import com.autentia.tnt.businessobject.Project; import com.autentia.tnt.businessobject.User; import com.autentia.tnt.dao.SortCriteria; import com.autentia.tnt.dao.search.ActivitySearch; import com.autentia.tnt.dao.search.UserSearch; import com.autentia.tnt.manager.activity.ActivityManager; import com.autentia.tnt.manager.admin.ProjectManager; import com.autentia.tnt.manager.admin.UserManager; /** * UI bean for Activity objects. * * @author stajanov code generator */ public class GlobalHoursReportBean extends BaseBean { /** Manager */ private static ActivityManager manager = ActivityManager .getDefault(); /** Serial version field */ private static final long serialVersionUID = 1L; /** Project DAO * */ private static final ProjectManager projectManager = ProjectManager .getDefault(); private static UserManager userManager = UserManager .getDefault(); private List <User> usuarios = null; private Iterator<User> iterator = null; private boolean launchCSV = false; /** * @return the launchCSV */ public boolean isLaunchCSV() { return launchCSV; } /** * @param launchCSV the launchCSV to set */ public void setLaunchCSV(boolean launchCSV) { this.launchCSV = launchCSV; } /** * Constructor */ public GlobalHoursReportBean() { } /** Logger */ private static final Log log = LogFactory.getLog(GlobalHoursReportBean.class); /** Start date to show report */ private Date startDate = new Date(); /** End date to show report */ private Date endDate = new Date(); /** End date to show report */ private Boolean billable = new Boolean(false); public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } public List<GlobalHourReport> getAll() { // Retrieve activities for every User during that period of time ActivitySearch search = new ActivitySearch(); Calendar init = Calendar.getInstance(); init.setTime(startDate); Calendar last = Calendar.getInstance(); last.setTime(endDate); init.set(Calendar.HOUR_OF_DAY, init.getMinimum(Calendar.HOUR_OF_DAY)); init.set(Calendar.MINUTE, init.getMinimum(Calendar.MINUTE)); init.set(Calendar.SECOND, init.getMinimum(Calendar.SECOND)); init.set(Calendar.MILLISECOND, init.getMinimum(Calendar.MILLISECOND)); last.set(Calendar.HOUR_OF_DAY, last.getMaximum(Calendar.HOUR_OF_DAY)); last.set(Calendar.MINUTE, last.getMaximum(Calendar.MINUTE)); last.set(Calendar.SECOND, last.getMaximum(Calendar.SECOND)); last.set(Calendar.MILLISECOND, last.getMaximum(Calendar.MILLISECOND)); search.setStartStartDate(init.getTime()); search.setEndStartDate(last.getTime()); List <GlobalHourReport> listGlobal = new ArrayList<GlobalHourReport>(); if(billable) search.setBillable(true); // Search activities during indicated dates List<Activity> activities = manager.getAllEntities(search, new SortCriteria("role.project.client.name")); // Search for projects in activities and create the global list. for(Activity act : activities) { Project proj = act.getRole().getProject(); GlobalHourReport unit = new GlobalHourReport(); unit.setProject(proj); // an entry in the list represents a project if(!listGlobal.contains(unit)) listGlobal.add(unit); // Retrieve the stored unit and save hours GlobalHourReport storedUnit = listGlobal.get(listGlobal.indexOf(unit)); float horas = act.getDuration() / 60.0f; storedUnit.setUserHours(act.getUser(),horas); storedUnit.setIterator(usuarios.iterator()); } return listGlobal; } public String search() { return null; } public String getSize() { return ""+usuarios.size(); } public List<User> getUsers() { // Retrieve active users: UserSearch userSearch = new UserSearch(); userSearch.setActive(true); usuarios = userManager.getAllEntities(userSearch, new SortCriteria("name")); return usuarios; } public float getTotalHours() { ActivitySearch search = new ActivitySearch(); Calendar init = Calendar.getInstance(); init.setTime(startDate); Calendar last = Calendar.getInstance(); last.setTime(endDate); init.set(Calendar.HOUR_OF_DAY, init.getMinimum(Calendar.HOUR_OF_DAY)); init.set(Calendar.MINUTE, init.getMinimum(Calendar.MINUTE)); init.set(Calendar.SECOND, init.getMinimum(Calendar.SECOND)); init.set(Calendar.MILLISECOND, init.getMinimum(Calendar.MILLISECOND)); last.set(Calendar.HOUR_OF_DAY, last.getMaximum(Calendar.HOUR_OF_DAY)); last.set(Calendar.MINUTE, last.getMaximum(Calendar.MINUTE)); last.set(Calendar.SECOND, last.getMaximum(Calendar.SECOND)); last.set(Calendar.MILLISECOND, last.getMaximum(Calendar.MILLISECOND)); search.setStartStartDate(init.getTime()); search.setEndStartDate(last.getTime()); if(billable) search.setBillable(true); // Search activities during indicated dates List<Activity> activities = manager.getAllEntities(search, new SortCriteria("role.project.client.name")); // Search for projects in activities and create the global list. float totalHours = 0.0f; for(Activity act : activities) { float horas = act.getDuration() / 60.0f; totalHours = totalHours + horas; } return totalHours; } public float getNextUserTotal() { ActivitySearch search = new ActivitySearch(); Calendar init = Calendar.getInstance(); init.setTime(startDate); Calendar last = Calendar.getInstance(); last.setTime(endDate); init.set(Calendar.HOUR_OF_DAY, init.getMinimum(Calendar.HOUR_OF_DAY)); init.set(Calendar.MINUTE, init.getMinimum(Calendar.MINUTE)); init.set(Calendar.SECOND, init.getMinimum(Calendar.SECOND)); init.set(Calendar.MILLISECOND, init.getMinimum(Calendar.MILLISECOND)); last.set(Calendar.HOUR_OF_DAY, last.getMaximum(Calendar.HOUR_OF_DAY)); last.set(Calendar.MINUTE, last.getMaximum(Calendar.MINUTE)); last.set(Calendar.SECOND, last.getMaximum(Calendar.SECOND)); last.set(Calendar.MILLISECOND, last.getMaximum(Calendar.MILLISECOND)); search.setStartStartDate(init.getTime()); search.setEndStartDate(last.getTime()); if(billable) search.setBillable(true); if(iterator==null) iterator = getUsers().iterator(); User user = null; try { user = iterator.next(); } catch(NoSuchElementException e) { iterator = getUsers().iterator(); user = iterator.next(); } search.setUser(user); // Search activities during indicated dates List<Activity> activities = manager.getAllEntities(search, new SortCriteria("role.project.client.name")); // Search for projects in activities and create the global list. float totalHours = 0.0f; for(Activity act : activities) { float horas = act.getDuration() / 60.0f; totalHours = totalHours + horas; } return totalHours; } public Boolean getBillable() { return billable; } public void setBillable(Boolean billable) { this.billable = billable; } public String exportCSV() { launchCSV = true; return null; } public String getParameters() { launchCSV = false; SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); StringBuilder params = new StringBuilder(); params.append("?"); params.append("startDate=").append(sdf.format(startDate)); params.append("&"); params.append("endDate=").append(sdf.format(endDate)); params.append("&"); params.append("billable=").append(billable); return params.toString(); } }