001 /**
002 * Copyright 2004-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.hr.time.base.web;
017
018 import java.util.ArrayList;
019 import java.util.HashMap;
020 import java.util.List;
021 import java.util.Map;
022
023 import javax.servlet.http.HttpServletRequest;
024 import javax.servlet.http.HttpServletResponse;
025
026 import org.apache.struts.action.ActionForm;
027 import org.apache.struts.action.ActionForward;
028 import org.apache.struts.action.ActionMapping;
029 import org.kuali.hr.job.Job;
030 import org.kuali.hr.time.assignment.Assignment;
031 import org.kuali.hr.time.principal.PrincipalHRAttributes;
032 import org.kuali.hr.time.roles.TkRole;
033 import org.kuali.hr.time.roles.UserRoles;
034 import org.kuali.hr.time.service.base.TkServiceLocator;
035 import org.kuali.hr.time.util.TKContext;
036 import org.kuali.hr.time.util.TKUtils;
037 import org.kuali.hr.time.util.TkConstants;
038 import org.kuali.rice.kim.api.identity.Person;
039 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
040
041 public class PersonInfoAction extends TkAction {
042
043
044
045 public ActionForward showInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
046 return mapping.findForward("basic");
047 }
048
049 @Override
050 public ActionForward execute(ActionMapping mapping, ActionForm form,
051 HttpServletRequest request, HttpServletResponse response)
052 throws Exception {
053 ActionForward actForw = super.execute(mapping, form, request, response);
054 PersonInfoActionForm personForm = (PersonInfoActionForm)form;
055
056 personForm.setPrincipalId(TKContext.getTargetPrincipalId());
057 Person person = KimApiServiceLocator.getPersonService().getPerson(personForm.getPrincipalId());
058 personForm.setPrincipalName(person.getPrincipalName());
059 // set name
060 personForm.setName(person.getName());
061 personForm.setJobs(TkServiceLocator.getJobService().getJobs(TKContext.getTargetPrincipalId(), TKUtils.getCurrentDate()));
062
063 //KPME-1441
064 PrincipalHRAttributes principalHRAttributes = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(personForm.getPrincipalId(), TKUtils.getCurrentDate());
065 if ( principalHRAttributes != null && principalHRAttributes.getServiceDate() != null ){
066 personForm.setServiceDate(principalHRAttributes.getServiceDate().toString());
067 } else {
068 personForm.setServiceDate("");
069 }
070 // KPME-1441
071
072 setupRolesOnForm(personForm);
073
074 List<Assignment> lstAssign = TkServiceLocator.getAssignmentService().getAssignments(TKContext.getTargetPrincipalId(), TKUtils.getCurrentDate());
075 Map<Long,List<Assignment>> jobNumberToListAssignments = new HashMap<Long,List<Assignment>>();
076
077 Map<Long,List<TkRole>> workAreaToApprover = new HashMap<Long,List<TkRole>>();
078 Map<Long,List<Person>> workAreaToApproverPerson = new HashMap<Long, List<Person>>();
079 Map<String,List<Person>> deptToDeptAdminPerson = new HashMap<String,List<Person>>();
080
081 Map<String,Person> principalIdToPerson = new HashMap<String,Person>();
082 for(Assignment assign : lstAssign){
083 List<Assignment> lstCurrJobAssign = jobNumberToListAssignments.get(assign.getJobNumber());
084 if(lstCurrJobAssign == null){
085 lstCurrJobAssign = new ArrayList<Assignment>();
086 }
087 lstCurrJobAssign.add(assign);
088 jobNumberToListAssignments.put(assign.getJobNumber(), lstCurrJobAssign);
089
090 this.assignWorkAreaToApprover(assign.getWorkArea(), workAreaToApprover, workAreaToApproverPerson);
091 deptToDeptAdminPerson = assignDeptToDeptAdmin(assign.getDept());
092 }
093
094 personForm.setWorkAreaToApprover(workAreaToApprover);
095 personForm.setWorkAreaToApproverPerson(workAreaToApproverPerson);
096 personForm.setDeptToDeptAdminPerson(deptToDeptAdminPerson);
097 personForm.setJobNumberToListAssignments(jobNumberToListAssignments);
098 personForm.setPrincipalIdToPerson(principalIdToPerson);
099 return actForw;
100 }
101
102 private void setupRolesOnForm(PersonInfoActionForm paForm){
103 UserRoles roles = TKContext.getUser().getCurrentTargetRoles();
104 for(Long waApprover : roles.getApproverWorkAreas()){
105 paForm.getApproverWorkAreas().add(waApprover);
106 }
107
108 for(Long waReviewer : roles.getReviewerWorkAreas()){
109 paForm.getReviewerWorkAreas().add(waReviewer);
110 }
111
112 for(String deptAdmin : roles.getOrgAdminDepartments()){
113 paForm.getDeptAdminDepts().add(deptAdmin);
114 }
115
116 for(String deptViewOnly : roles.getDepartmentViewOnlyDepartments()){
117 paForm.getDeptViewOnlyDepts().add(deptViewOnly);
118 }
119
120 for(String location : roles.getOrgAdminCharts()){
121 paForm.getLocationAdminDepts().add(location);
122 }
123
124 paForm.setGlobalViewOnlyRoles(roles.isGlobalViewOnly());
125 paForm.setSystemAdmin(roles.isSystemAdmin());
126 }
127
128 private Map<String,List<Person>> assignDeptToDeptAdmin(String dept) {
129 List<TkRole> deptAdminRoles = TkServiceLocator.getTkRoleService().getDepartmentRoles(dept, TkConstants.ROLE_TK_DEPT_ADMIN, TKUtils.getCurrentDate());
130 List<Person> deptAdminPeople = new ArrayList<Person>();
131 Map<String,List<Person>> deptAdmins = new HashMap<String, List<Person>>();
132
133 for(TkRole role : deptAdminRoles) {
134 if(role.getPositionNumber() != null){
135 List<Job> lstJobs = TkServiceLocator.getJobService().getActiveJobsForPosition(role.getPositionNumber(), TKUtils.getCurrentDate());
136 for(Job j : lstJobs){
137 Person person = KimApiServiceLocator.getPersonService().getPerson(j.getPrincipalId());
138 if(person !=null){
139 deptAdminPeople.add(person);
140 }
141 }
142 } else{
143 Person person = KimApiServiceLocator.getPersonService().getPerson(role.getPrincipalId());
144 if(person!=null){
145 deptAdminPeople.add(person);
146 }
147 }
148 }
149 deptAdmins.put(dept, deptAdminPeople);
150
151 return deptAdmins;
152 }
153
154 private void assignWorkAreaToApprover(Long workArea, Map<Long,List<TkRole>> workAreaToApprover, Map<Long,List<Person>> workAreaToApproverPerson ){
155 List<TkRole> lstApproverRoles = TkServiceLocator.getTkRoleService().getWorkAreaRoles(workArea, TkConstants.ROLE_TK_APPROVER,
156 TKUtils.getCurrentDate());
157 workAreaToApprover.put(workArea, lstApproverRoles);
158 for(TkRole role : lstApproverRoles){
159 if(role.getPositionNumber() != null){
160 List<Job> lstJobs = TkServiceLocator.getJobService().getActiveJobsForPosition(role.getPositionNumber(), TKUtils.getCurrentDate());
161 for(Job j : lstJobs){
162 Person approver = KimApiServiceLocator.getPersonService().getPerson(j.getPrincipalId());
163 if(approver!=null){
164 addApproverPersonForWorkArea(workArea, approver, workAreaToApproverPerson);
165 }
166 }
167 } else{
168 Person approver = KimApiServiceLocator.getPersonService().getPerson(role.getPrincipalId());
169 if(approver!=null){
170 addApproverPersonForWorkArea(workArea, approver, workAreaToApproverPerson);
171 }
172 }
173 }
174 }
175
176 private void addApproverPersonForWorkArea(Long workArea, Person person, Map<Long,List<Person>> workAreaToApproverPerson){
177 List<Person> approvers = workAreaToApproverPerson.get(workArea);
178 if(approvers == null){
179 approvers = new ArrayList<Person>();
180 }
181 approvers.add(person);
182 workAreaToApproverPerson.put(workArea, approvers);
183 }
184 }