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.roles.service;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.apache.log4j.Logger;
020 import org.kuali.hr.job.Job;
021 import org.kuali.hr.time.assignment.Assignment;
022 import org.kuali.hr.time.roles.TkRole;
023 import org.kuali.hr.time.roles.dao.TkRoleDao;
024 import org.kuali.hr.time.service.base.TkServiceLocator;
025 import org.kuali.hr.time.util.TKUser;
026 import org.kuali.hr.time.util.TkConstants;
027
028 import java.sql.Date;
029 import java.util.ArrayList;
030 import java.util.HashSet;
031 import java.util.List;
032 import java.util.Set;
033
034 public class TkRoleServiceImpl implements TkRoleService {
035
036 private static final Logger LOG = Logger.getLogger(TkRoleServiceImpl.class);
037
038 private TkRoleDao tkRoleDao;
039
040 @Override
041 public List<TkRole> getDepartmentRoles(String department) {
042 List<TkRole> departmentRoles = new ArrayList<TkRole>();
043 departmentRoles.addAll(tkRoleDao.findRoles(null, null, TkConstants.ROLE_TK_DEPT_ADMIN, null, department, null));
044 departmentRoles.addAll(tkRoleDao.findRoles(null, null, TkConstants.ROLE_TK_DEPT_VO, null, department, null));
045 departmentRoles.addAll(tkRoleDao.findRoles(null, null, TkConstants.ROLE_LV_DEPT_ADMIN, null, department, null));
046 departmentRoles.addAll(tkRoleDao.findRoles(null, null, TkConstants.ROLE_LV_DEPT_VO, null, department, null));
047 return departmentRoles;
048 }
049
050 @Override
051 public List<TkRole> getDepartmentRoles(String department, String roleName, Date asOfDate) {
052 return tkRoleDao.findRoles(null, asOfDate, roleName, null, department, null);
053 }
054
055 @Override
056 public List<TkRole> getDepartmentInactiveRoles(String department) {
057 List<TkRole> departmentRoles = new ArrayList<TkRole>();
058 departmentRoles.addAll(tkRoleDao.findInActiveRoles(null, null, TkConstants.ROLE_TK_DEPT_ADMIN, null, department, null));
059 departmentRoles.addAll(tkRoleDao.findInActiveRoles(null, null, TkConstants.ROLE_TK_DEPT_VO, null, department, null));
060 departmentRoles.addAll(tkRoleDao.findInActiveRoles(null, null, TkConstants.ROLE_LV_DEPT_ADMIN, null, department, null));
061 departmentRoles.addAll(tkRoleDao.findInActiveRoles(null, null, TkConstants.ROLE_LV_DEPT_VO, null, department, null));
062 return departmentRoles;
063 }
064
065 @Override
066 public List<TkRole> getDepartmentInactiveRoles(String department, String roleName, Date asOfDate) {
067 return tkRoleDao.findInActiveRoles(null, asOfDate, roleName, null, department, null);
068 }
069
070 @Override
071 public List<TkRole> getWorkAreaRoles(Long workArea) {
072 return tkRoleDao.findRoles(null, null, null, workArea, null, null);
073 }
074
075 @Override
076 public List<TkRole> getWorkAreaRoles(Long workArea, String roleName, Date asOfDate) {
077 return tkRoleDao.findRoles(null, asOfDate, roleName, workArea, null, null);
078 }
079
080 @Override
081 public List<TkRole> getInActiveWorkAreaRoles(Long workArea) {
082 return tkRoleDao.findInActiveRoles(null, null, null, workArea, null, null);
083 }
084
085 @Override
086 public List<TkRole> getInActiveWorkAreaRoles(Long workArea, String roleName, Date asOfDate) {
087 return tkRoleDao.findInActiveRoles(null, asOfDate, roleName, workArea, null, null);
088 }
089
090 public void setTkRoleDao(TkRoleDao tkRoleDao) {
091 this.tkRoleDao = tkRoleDao;
092 }
093
094 @Override
095 public void saveOrUpdate(List<TkRole> roles) {
096 this.tkRoleDao.saveOrUpdateRoles(roles);
097 }
098
099 @Override
100 public void saveOrUpdate(TkRole role) {
101 this.tkRoleDao.saveOrUpdateRole(role);
102 }
103
104 /**
105 * Returns all active roles for the given principal as of the indi
106 */
107 public List<TkRole> getRoles(String principalId, Date asOfDate) {
108 return tkRoleDao.findRoles(principalId, asOfDate, null, null, null, null);
109 }
110
111 /**
112 * Returns all active roles for the given principal as of the indi
113 */
114 public List<TkRole> getInactiveRoles(String principalId, Date asOfDate) {
115 return tkRoleDao.findInActiveRoles(principalId, asOfDate, null, null, null, null);
116 }
117
118 /**
119 * Return a List of TkRoles that match the principal ID and roleName.
120 *
121 * ex:
122 *
123 * admin,TK_APPROVER will return all TK_APPROVER roles for the user admin.
124 */
125 public List<TkRole> getRoles(String principalId, String roleName, Date asOfDate) {
126 return this.tkRoleDao.findRoles(principalId, asOfDate, roleName, null, null, null);
127 }
128
129 /**
130 * Return a List of TkRoles that matches criteria.
131 * @param principalId
132 * @param asOfDate
133 * @param roleName
134 * @param workArea
135 * @param department
136 * @return
137 */
138 @Override
139 public List<TkRole> getRoles(String principalId, Date asOfDate, String roleName, Long workArea, String department) {
140 return this.tkRoleDao.findRoles(principalId, asOfDate, roleName, workArea, department, null);
141 }
142
143 //TODO: this won't work at all. We can't use TKUser here, as that just grabs stuff from the session
144 // we need a wrapper class for TKUser, though I'm not sure why we can't just return Person, or Entity...
145 public List<TKUser> getEmployeesForWorkArea(Long workArea, Date asOfDate){
146 List<TKUser> lstEmployees = new ArrayList<TKUser>();
147 List<Assignment> lstActiveAssignments = TkServiceLocator.getAssignmentService().getActiveAssignmentsForWorkArea(workArea, asOfDate);
148
149 for(Assignment assign: lstActiveAssignments){
150 TKUser tkUser = TKUser.getUser(assign.getPrincipal(), assign.getEffectiveDate());
151 lstEmployees.add(tkUser);
152 }
153 return lstEmployees;
154 }
155
156 @Override
157 public List<String> getResponsibleParties(Assignment a, String roleName, Date asOfDate) {
158 List<String> users = new ArrayList<String>();
159
160 List<TkRole> roles = this.getWorkAreaRoles(a.getWorkArea(), roleName, asOfDate);
161 for (TkRole role: roles) {
162 if(StringUtils.isNotBlank(role.getPrincipalId())){
163 users.add(role.getPrincipalId());
164 } else if(StringUtils.isNotBlank(role.getPositionNumber())){
165 List<Job> lstJobs = TkServiceLocator.getJobService().getActiveJobsForPosition(role.getPositionNumber(), asOfDate);
166 for(Job job : lstJobs){
167 users.add(job.getPrincipalId());
168 }
169
170 }
171 }
172
173 return users;
174 }
175
176 @Override
177 public Set<Long> getWorkAreasForApprover(String principalId, Date asOfDate) {
178 Set<Long> workAreas = new HashSet<Long>();
179
180 List<TkRole> roles = this.getRoles(principalId, TkConstants.ROLE_TK_APPROVER, asOfDate);
181 for (TkRole role : roles) {
182 Long wa = role.getWorkArea();
183 if (wa != null)
184 workAreas.add(wa);
185 else
186 LOG.warn(TkConstants.ROLE_TK_APPROVER + " found without WorkArea number, ignoring roleId: " + role.getHrRolesId());
187 }
188
189 return workAreas;
190 }
191
192
193
194 @Override
195 public Set<String> getActivePrincipalsForWorkAreas(Set<Long> workAreas, Date asOfDate) {
196 Set<String> principals = new HashSet<String>();
197
198 for (Long workArea : workAreas) {
199 List<Assignment> assignments = TkServiceLocator.getAssignmentService().getActiveAssignmentsForWorkArea(workArea, asOfDate);
200 for (Assignment assignment : assignments) {
201 principals.add(assignment.getPrincipalId());
202 }
203 }
204
205 return principals;
206 }
207
208 @Override
209 public TkRole getRole(String tkRoleId) {
210 return tkRoleDao.getRole(tkRoleId);
211 }
212
213 @Override
214 public TkRole getRolesByPosition(String positionNumber) {
215 return tkRoleDao.getRolesByPosition(positionNumber);
216 }
217
218 @Override
219 public TkRole getInactiveRolesByPosition(String positionNumber) {
220 return tkRoleDao.getInactiveRolesByPosition(positionNumber);
221 }
222
223 @Override
224 public List<TkRole> getPositionRolesForWorkArea(Long workArea, Date asOfDate) {
225 return tkRoleDao.getPositionRolesForWorkArea(workArea, asOfDate);
226 }
227 }