001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0 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 017package com.echothree.model.control.employee.server.search; 018 019import com.echothree.model.control.core.common.ComponentVendors; 020import com.echothree.model.control.core.common.EntityTypes; 021import com.echothree.model.control.employee.server.control.EmployeeControl; 022import com.echothree.model.control.search.server.search.BaseSearchEvaluator; 023import com.echothree.model.control.search.server.search.EntityInstancePKHolder; 024import com.echothree.model.data.core.server.factory.EntityInstanceFactory; 025import com.echothree.model.data.employee.server.entity.Leave; 026import com.echothree.model.data.employee.server.entity.LeaveReason; 027import com.echothree.model.data.employee.server.entity.LeaveType; 028import com.echothree.model.data.party.server.entity.Party; 029import com.echothree.model.data.search.server.entity.SearchDefaultOperator; 030import com.echothree.model.data.search.server.entity.SearchSortDirection; 031import com.echothree.model.data.search.server.entity.SearchSortOrder; 032import com.echothree.model.data.search.server.entity.SearchType; 033import com.echothree.model.data.user.server.entity.UserVisit; 034import com.echothree.model.data.workflow.server.entity.WorkflowStep; 035import com.echothree.util.server.message.ExecutionErrorAccumulator; 036import com.echothree.util.server.persistence.Session; 037 038public class LeaveSearchEvaluator 039 extends BaseSearchEvaluator { 040 041 private String leaveName; 042 private Party party; 043 private Party companyParty; 044 private LeaveType leaveType; 045 private LeaveReason leaveReason; 046 private WorkflowStep leaveStatusWorkflowStep; 047 048 /** Creates a new instance of LeaveSearchEvaluator */ 049 public LeaveSearchEvaluator(UserVisit userVisit, SearchType searchType, SearchDefaultOperator searchDefaultOperator, SearchSortOrder searchSortOrder, 050 SearchSortDirection searchSortDirection) { 051 super(userVisit, searchDefaultOperator, searchType, searchSortOrder, searchSortDirection, null, ComponentVendors.ECHO_THREE.name(), 052 EntityTypes.Leave.name(), null, null, null); 053 } 054 055 public EntityInstancePKHolder getEntityInstancePKHolderByParty(Party party) { 056 return getEntityInstancePKHolderFromQuery(EntityInstanceFactory.getInstance().prepareStatement( 057 "SELECT _PK_ " + 058 "FROM entityinstances, leaves, leavedetails " + 059 "WHERE lv_activedetailid = lvdt_leavedetailid AND lvdt_par_partyid = ? " + 060 "AND eni_ent_entitytypeid = ? AND lv_leaveid = eni_entityuniqueid"), 061 party, entityType); 062 } 063 064 public EntityInstancePKHolder getEntityInstancePKHolderByCompanyParty(Party companyParty) { 065 return getEntityInstancePKHolderFromQuery(EntityInstanceFactory.getInstance().prepareStatement( 066 "SELECT _PK_ " + 067 "FROM entityinstances, leaves, leavedetails " + 068 "WHERE lv_activedetailid = lvdt_leavedetailid AND lvdt_companypartyid = ? " + 069 "AND eni_ent_entitytypeid = ? AND lv_leaveid = eni_entityuniqueid"), 070 companyParty, entityType); 071 } 072 073 public EntityInstancePKHolder getEntityInstancePKHolderByLeaveType(LeaveType leaveType) { 074 return getEntityInstancePKHolderFromQuery(EntityInstanceFactory.getInstance().prepareStatement( 075 "SELECT _PK_ " + 076 "FROM entityinstances, leaves, leavedetails " + 077 "WHERE lv_activedetailid = lvdt_leavedetailid AND lvdt_lvtyp_leavetypeid = ? " + 078 "AND eni_ent_entitytypeid = ? AND lv_leaveid = eni_entityuniqueid"), 079 leaveType, entityType); 080 } 081 082 public EntityInstancePKHolder getEntityInstancePKHolderByLeaveReason(LeaveReason leaveReason) { 083 return getEntityInstancePKHolderFromQuery(EntityInstanceFactory.getInstance().prepareStatement( 084 "SELECT _PK_ " + 085 "FROM entityinstances, leaves, leavedetails " + 086 "WHERE lv_activedetailid = lvdt_leavedetailid AND lvdt_lvrsn_leavereasonid = ? " + 087 "AND eni_ent_entitytypeid = ? AND lv_leaveid = eni_entityuniqueid"), 088 leaveReason, entityType); 089 } 090 091 public EntityInstancePKHolder getEntityInstancePKHolderByLeaveStatusWorkflowStep(WorkflowStep leaveStatusWorkflowStep) { 092 return getEntityInstancePKHolderFromQuery(EntityInstanceFactory.getInstance().prepareStatement( 093 "SELECT _PK_ " + 094 "FROM entityinstances, leaves, leavedetails, workflowentitystatuses " + 095 "WHERE lv_activedetailid = lvdt_leavedetailid " + 096 "AND eni_ent_entitytypeid = ? AND lv_leaveid = eni_entityuniqueid " + 097 "AND eni_entityinstanceid = wkfles_eni_entityinstanceid AND wkfles_wkfls_workflowstepid = ? AND wkfles_thrutime = ?"), 098 entityType, leaveStatusWorkflowStep, Session.MAX_TIME); 099 } 100 101 /** 102 * Returns the leaveName. 103 * @return the leaveName 104 */ 105 public String getLeaveName() { 106 return leaveName; 107 } 108 109 /** 110 * Sets the leaveName. 111 * @param leaveName the leaveName to set 112 */ 113 public void setLeaveName(String leaveName) { 114 this.leaveName = leaveName; 115 } 116 117 /** 118 * Returns the party. 119 * @return the party 120 */ 121 public Party getParty() { 122 return party; 123 } 124 125 /** 126 * Sets the party. 127 * @param party the party to set 128 */ 129 public void setParty(Party party) { 130 this.party = party; 131 } 132 133 /** 134 * Returns the companyParty. 135 * @return the companyParty 136 */ 137 public Party getCompanyParty() { 138 return companyParty; 139 } 140 141 /** 142 * Sets the companyParty. 143 * @param companyParty the companyParty to set 144 */ 145 public void setCompanyParty(Party companyParty) { 146 this.companyParty = companyParty; 147 } 148 149 /** 150 * Returns the leaveType. 151 * @return the leaveType 152 */ 153 public LeaveType getLeaveType() { 154 return leaveType; 155 } 156 157 /** 158 * Sets the leaveType. 159 * @param leaveType the leaveType to set 160 */ 161 public void setLeaveType(LeaveType leaveType) { 162 this.leaveType = leaveType; 163 } 164 165 /** 166 * Returns the leaveReason. 167 * @return the leaveReason 168 */ 169 public LeaveReason getLeaveReason() { 170 return leaveReason; 171 } 172 173 /** 174 * Sets the leaveReason. 175 * @param leaveReason the leaveReason to set 176 */ 177 public void setLeaveReason(LeaveReason leaveReason) { 178 this.leaveReason = leaveReason; 179 } 180 181 /** 182 * Returns the leaveStatusWorkflowStep. 183 * @return the leaveStatusWorkflowStep 184 */ 185 public WorkflowStep getLeaveStatusWorkflowStep() { 186 return leaveStatusWorkflowStep; 187 } 188 189 /** 190 * Sets the leaveStatusWorkflowStep. 191 * @param leaveStatusWorkflowStep the leaveStatusWorkflowStep to set 192 */ 193 public void setLeaveStatusWorkflowStep(WorkflowStep leaveStatusWorkflowStep) { 194 this.leaveStatusWorkflowStep = leaveStatusWorkflowStep; 195 } 196 197 @Override 198 protected EntityInstancePKHolder executeSearch(final ExecutionErrorAccumulator eea) { 199 EntityInstancePKHolder resultSet = null; 200 201 if(leaveName == null) { 202 resultSet = super.executeSearch(eea); 203 204 if(resultSet == null || resultSet.size() > 0) { 205 if(party != null) { 206 EntityInstancePKHolder entityInstancePKHolder = getEntityInstancePKHolderByParty(party); 207 208 if(resultSet == null) { 209 resultSet = entityInstancePKHolder; 210 } else { 211 resultSet.retainAll(entityInstancePKHolder); 212 } 213 } 214 } 215 216 if(resultSet == null || resultSet.size() > 0) { 217 if(companyParty != null) { 218 EntityInstancePKHolder entityInstancePKHolder = getEntityInstancePKHolderByCompanyParty(companyParty); 219 220 if(resultSet == null) { 221 resultSet = entityInstancePKHolder; 222 } else { 223 resultSet.retainAll(entityInstancePKHolder); 224 } 225 } 226 } 227 228 if(resultSet == null || resultSet.size() > 0) { 229 if(leaveType != null) { 230 EntityInstancePKHolder entityInstancePKHolder = getEntityInstancePKHolderByLeaveType(leaveType); 231 232 if(resultSet == null) { 233 resultSet = entityInstancePKHolder; 234 } else { 235 resultSet.retainAll(entityInstancePKHolder); 236 } 237 } 238 } 239 240 if(resultSet == null || resultSet.size() > 0) { 241 if(leaveReason != null) { 242 EntityInstancePKHolder entityInstancePKHolder = getEntityInstancePKHolderByLeaveReason(leaveReason); 243 244 if(resultSet == null) { 245 resultSet = entityInstancePKHolder; 246 } else { 247 resultSet.retainAll(entityInstancePKHolder); 248 } 249 } 250 } 251 252 if(resultSet == null || resultSet.size() > 0) { 253 if(leaveStatusWorkflowStep != null) { 254 EntityInstancePKHolder entityInstancePKHolder = getEntityInstancePKHolderByLeaveStatusWorkflowStep(leaveStatusWorkflowStep); 255 256 if(resultSet == null) { 257 resultSet = entityInstancePKHolder; 258 } else { 259 resultSet.retainAll(entityInstancePKHolder); 260 } 261 } 262 } 263 } else { 264 var employeeControl = Session.getModelController(EmployeeControl.class); 265 Leave leave = employeeControl.getLeaveByName(leaveName); 266 267 if(leave != null) { 268 resultSet = new EntityInstancePKHolder(1); 269 resultSet.add(getCoreControl().getEntityInstanceByBasePK(leave.getPrimaryKey()).getPrimaryKey(), null); 270 } 271 } 272 273 return resultSet; 274 } 275 276}