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