/******************************************************************************* * Copyright (c) 2012 Dmitry Tikhomirov. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Dmitry Tikhomirov - initial API and implementation ******************************************************************************/ package org.opensheet.mvc; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.opensheet.server.dao.AssignmentUserDAO; import org.opensheet.server.dao.DepartmentDAO; import org.opensheet.server.dao.HolidaysDAO; import org.opensheet.server.dao.HourDAO; import org.opensheet.server.dao.UserDAO; import org.opensheet.shared.model.Assignment; import org.opensheet.shared.model.Hour; import org.opensheet.shared.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; @Controller @RequestMapping("/timesheettoxls.htm") public class TimesheetToXlsController{ private Calendar cal; @Autowired private HourDAO hourDAO; @Autowired private UserDAO userDAO; @Autowired private HolidaysDAO holidays; @Autowired private AssignmentUserDAO assignmentUserDAO; @Autowired private DepartmentDAO departmentDAO; @RequestMapping(method = RequestMethod.GET) protected ModelAndView handleRequestInternal(@RequestParam("user_id") Integer user_id, @RequestParam("month") Integer month,@RequestParam("year") Integer year) throws Exception { Map<Assignment, List<Assignment>> map = null; Map<Assignment,List<Integer>> result = new LinkedHashMap<Assignment,List<Integer>>(); cal = Calendar.getInstance(); cal.set(year,month,1); HashMap<Integer, Boolean> getHolidaysMap = holidays.getHolidays(cal); User user = (User) userDAO.getUser(user_id); User userContext = (User) userDAO.whoIam(); if(!userContext.getPermission().getAdmin() == true){ if(!user.equals(userContext)){ if(userContext.getPermission().getDm() == true){ List<User> departmentManagerUsers = departmentDAO.getDepartmentManagerUsers(userContext); if(!departmentManagerUsers.contains(user)){ return null; } } } } map = assignmentUserDAO.getSheetAssignmentByUser(user, cal); Iterator<Assignment> iterator = map.keySet().iterator(); while(iterator.hasNext()){ Assignment a = (Assignment) iterator.next(); result.put(a, makeHourList(user,a)); if(map.get(a).size() >1){ for(Assignment as: map.get(a)){ result.put(as, makeHourList(user,as)); } } } List<Hour> hoursSummList = hourDAO.getHoursSumm(user,cal); Assignment hoursSummListAssignment = new Assignment(); hoursSummListAssignment.setName("Result"); hoursSummListAssignment.setLevel(0); List<Hour> overtimeList = new ArrayList<Hour>(hoursSummList.size()); for(Hour h: hoursSummList){ if(getHolidaysMap.get(h.getDate().getDate())){ Hour temp = new Hour(); temp.setHour(h.getHour()); temp.setDate(h.getDate()); overtimeList.add(temp); }else if(h.getHour() > 8 ){ Hour temp = new Hour(); temp.setHour(h.getHour()-8); temp.setDate(h.getDate()); overtimeList.add(temp); } } Assignment hoursOvertimeListAssignment = new Assignment(); hoursOvertimeListAssignment.setName("Overtime"); hoursOvertimeListAssignment.setLevel(0); result.put(hoursOvertimeListAssignment, makeHourSummList(overtimeList )); result.put(hoursSummListAssignment, makeHourSummList(hoursSummList)); ModelAndView model = new ModelAndView("timesheettoxlsview","Hours",result); model.addObject("holidays", getHolidaysMap); return model; } private List<Integer> freshList(Calendar cal){ int max = cal.getActualMaximum(Calendar.DAY_OF_MONTH); max++; List<Integer> hours = new ArrayList<Integer>(max); for(int i=1;i<=max; i++){ hours.add(0); } return hours; } @SuppressWarnings("deprecation") private List<Integer> makeHourList(User user,Assignment a){ int sum = 0; List<Integer> list = this.freshList(this.cal); for(Hour h: hourDAO.getHours(user,a,cal)){ list.remove(h.getDate().getDate()); list.add(h.getDate().getDate(), h.getHour()); sum = sum + h.getHour(); } list.remove(0); list.add(0, sum); return list; } @SuppressWarnings("deprecation") private List<Integer> makeHourSummList(List<Hour> hoursSummList){ int sum = 0; List<Integer> list = this.freshList(this.cal); for(Hour h: hoursSummList){ list.remove(h.getDate().getDate()); list.add(h.getDate().getDate(), h.getHour()); sum = sum + h.getHour(); } list.remove(0); list.add(0, sum); return list; } }