1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.hr.time.base.web;
17  
18  import java.sql.Date;
19  import java.text.SimpleDateFormat;
20  import java.util.ArrayList;
21  import java.util.Collections;
22  import java.util.List;
23  
24  import javax.servlet.http.HttpServletRequest;
25  import javax.servlet.http.HttpServletResponse;
26  
27  import org.apache.commons.lang.StringUtils;
28  import org.apache.commons.lang.time.DateUtils;
29  import org.apache.struts.action.ActionForm;
30  import org.apache.struts.action.ActionForward;
31  import org.apache.struts.action.ActionMapping;
32  import org.displaytag.tags.TableTagParameters;
33  import org.displaytag.util.ParamEncoder;
34  import org.kuali.hr.time.calendar.Calendar;
35  import org.kuali.hr.time.calendar.CalendarEntries;
36  import org.kuali.hr.time.person.TKPerson;
37  import org.kuali.hr.time.service.base.TkServiceLocator;
38  import org.kuali.hr.time.util.TKContext;
39  import org.kuali.hr.time.util.TKUtils;
40  import org.kuali.hr.time.util.TkConstants;
41  import org.kuali.hr.time.workarea.WorkArea;
42  import org.kuali.rice.krad.exception.AuthorizationException;
43  import org.kuali.rice.krad.util.GlobalVariables;
44  
45  public class ApprovalAction extends TkAction{
46  
47  	@Override
48      public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
49          if (form instanceof TkForm) {
50             String methodToCall = ((TkForm)form).getMethodToCall();
51             if(StringUtils.isEmpty(methodToCall)) {
52          	   super.execute(mapping, form, request, response);
53          	   return loadApprovalTab(mapping, form, request, response); 
54             }
55          }
56          return super.execute(mapping, form, request, response);
57      }
58  	
59  	public ActionForward loadApprovalTab(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
60  		return mapping.findForward("basic");
61  	}
62  	
63  	protected List<TKPerson> getSubListPrincipalIds(HttpServletRequest request, List<TKPerson> assignmentPrincipalIds) {
64  	    String page = request.getParameter((new ParamEncoder(TkConstants.APPROVAL_TABLE_ID).encodeParameterName(TableTagParameters.PARAMETER_PAGE)));
65  	    
66  	    
67  	    Integer beginIndex = StringUtils.isBlank(page) || StringUtils.equals(page, "1") ? 0 : (Integer.parseInt(page) - 1)*TkConstants.PAGE_SIZE;
68  	    Integer endIndex = beginIndex + TkConstants.PAGE_SIZE > assignmentPrincipalIds.size() ? assignmentPrincipalIds.size() : beginIndex + TkConstants.PAGE_SIZE;
69  	
70  	    return assignmentPrincipalIds.subList(beginIndex, endIndex);
71  	}
72  
73  	protected Boolean isAscending(HttpServletRequest request) {
74  	    
75  	    String ascending = request.getParameter((new ParamEncoder(TkConstants.APPROVAL_TABLE_ID).encodeParameterName(TableTagParameters.PARAMETER_ORDER)));
76  	    return StringUtils.equals(ascending, "1") ? true : false;
77  	}
78  
79  	protected String getSortField(HttpServletRequest request) {
80  	    return request.getParameter((new ParamEncoder(TkConstants.APPROVAL_TABLE_ID).encodeParameterName(TableTagParameters.PARAMETER_SORT)));
81  	}
82  	
83  	protected void checkTKAuthorization(ActionForm form, String methodToCall)
84  			throws AuthorizationException {
85  			    if (!TKContext.getUser().isTimesheetReviewer() && !TKContext.getUser().isAnyApproverActive() && !TKContext.getUser().isSystemAdmin() 
86  			    		&& !TKContext.getUser().isLocationAdmin() && !TKContext.getUser().isGlobalViewOnly() && !TKContext.getUser().isDeptViewOnly() 
87  			    		&& !TKContext.getUser().isDepartmentAdmin()) {
88  			        throw new AuthorizationException(GlobalVariables.getUserSession().getPrincipalId(), "ApprovalAction", "");
89  			    }
90  			}
91  	
92  	protected void resetMainFields(ActionForm form) {
93  		ApprovalForm taf = (ApprovalForm) form;
94  		taf.setSearchField(null);
95  		taf.setSearchTerm(null);
96  		taf.setSelectedWorkArea(null);
97  		taf.setSelectedDept(null);
98  		taf.setPayBeginDate(null);
99  		taf.setPayEndDate(null);
100 		taf.setHrPyCalendarEntriesId(null);
101 	}
102 	
103 	protected void setupDocumentOnFormContext(HttpServletRequest request,
104 			ApprovalForm taf, CalendarEntries payCalendarEntries, String page) {
105 		if(payCalendarEntries == null) {
106 			return;
107 		}
108 		taf.setHrPyCalendarId(payCalendarEntries.getHrCalendarId());
109 		taf.setHrPyCalendarEntriesId(payCalendarEntries.getHrCalendarEntriesId());
110 		taf.setPayBeginDate(payCalendarEntries.getBeginPeriodDateTime());
111 		taf.setPayEndDate(DateUtils.addMilliseconds(payCalendarEntries.getEndPeriodDateTime(),-1));
112 		
113 		CalendarEntries prevPayCalendarEntries = TkServiceLocator.getCalendarEntriesService().getPreviousCalendarEntriesByCalendarId(taf.getHrPyCalendarId(), payCalendarEntries);
114 		if (prevPayCalendarEntries != null) {
115 		    taf.setPrevPayCalendarId(prevPayCalendarEntries.getHrCalendarEntriesId());
116 		} else {
117 		    taf.setPrevPayCalendarId(null);
118 		}
119 		
120 		CalendarEntries nextPayCalendarEntries = TkServiceLocator.getCalendarEntriesService().getNextCalendarEntriesByCalendarId(taf.getHrPyCalendarId(), payCalendarEntries);
121 		if (nextPayCalendarEntries != null) {
122 		    taf.setNextPayCalendarId(nextPayCalendarEntries.getHrCalendarEntriesId());
123 		} else {
124 		    taf.setNextPayCalendarId(null);
125 		}	
126 		if (StringUtils.isBlank(page)) {
127 		    List<String> depts = new ArrayList<String>(TKContext.getUser().getReportingApprovalDepartments().keySet());
128 		    if ( depts.isEmpty() ) {
129 		    	return;
130 		    }
131 		    Collections.sort(depts);
132 		    taf.setDepartments(depts);
133 		    
134 		    if (taf.getDepartments().size() == 1 || taf.getSelectedDept() != null) {
135 		    	if (StringUtils.isEmpty(taf.getSelectedDept()))
136 		    		taf.setSelectedDept(taf.getDepartments().get(0));
137 		    	
138 		    	List<WorkArea> workAreas = TkServiceLocator.getWorkAreaService().getWorkAreas(taf.getSelectedDept(), new java.sql.Date(taf.getPayBeginDate().getTime()));
139 		        for(WorkArea wa : workAreas){
140 		        	if (TKContext.getUser().getApproverWorkAreas().contains(wa.getWorkArea())
141 		        			|| TKContext.getUser().getReviewerWorkAreas().contains(wa.getWorkArea())) {
142 		        		taf.getWorkAreaDescr().put(wa.getWorkArea(),wa.getDescription()+"("+wa.getWorkArea()+")");
143 		        	}
144 		        }
145 		    }
146 		}
147 
148 	}
149 	
150     public ActionForward gotoCurrentPayPeriod(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
151     	
152     	String page = request.getParameter((new ParamEncoder(TkConstants.APPROVAL_TABLE_ID).encodeParameterName(TableTagParameters.PARAMETER_PAGE)));         
153     	ApprovalForm taf = (ApprovalForm) form;
154     	Date currentDate = TKUtils.getTimelessDate(null);
155         Calendar currentPayCalendar = TkServiceLocator.getCalendarService().getCalendarByGroup(taf.getSelectedPayCalendarGroup());
156         CalendarEntries payCalendarEntries = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(currentPayCalendar.getHrCalendarId(), currentDate);
157         taf.setPayCalendarEntries(payCalendarEntries);
158         taf.setSelectedCalendarYear(new SimpleDateFormat("yyyy").format(payCalendarEntries.getBeginPeriodDate()));
159         taf.setSelectedPayPeriod(payCalendarEntries.getHrCalendarEntriesId());
160         populateCalendarAndPayPeriodLists(request, taf);
161         setupDocumentOnFormContext(request, taf, payCalendarEntries, page);
162         return mapping.findForward("basic");
163     }
164     
165    
166     
167     
168     public ActionForward changeCalendarYear(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
169     	ApprovalForm taf = (ApprovalForm) form;
170     	if(!StringUtils.isEmpty(request.getParameter("selectedCY"))) {
171     		taf.setSelectedCalendarYear(request.getParameter("selectedCY").toString());
172     		populateCalendarAndPayPeriodLists(request, taf);
173     	}
174     	return mapping.findForward("basic");
175     }
176 
177     
178     public ActionForward changePayPeriod(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
179       String page = request.getParameter((new ParamEncoder(TkConstants.APPROVAL_TABLE_ID).encodeParameterName(TableTagParameters.PARAMETER_PAGE)));
180       ApprovalForm taf = (ApprovalForm) form;
181   	  if(!StringUtils.isEmpty(request.getParameter("selectedPP"))) {
182   		  taf.setSelectedPayPeriod(request.getParameter("selectedPP").toString());
183   		  CalendarEntries pce = TkServiceLocator.getCalendarEntriesService()
184   		  	.getCalendarEntries(request.getParameter("selectedPP").toString());
185   		  if(pce != null) {
186   			  taf.setPayCalendarEntries(pce);
187   			  setupDocumentOnFormContext(request, taf, pce, page);
188   		  }
189   	  }
190   	  return mapping.findForward("basic");
191 	}
192     
193     protected void populateCalendarAndPayPeriodLists(HttpServletRequest request, ApprovalForm taf) {
194     	
195     }
196 
197 
198 }