001// -------------------------------------------------------------------------------- 002// Copyright 2002-2025 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.server.control.EntityInstanceControl; 020import com.echothree.model.control.employee.server.control.EmployeeControl; 021import com.echothree.model.control.index.common.IndexFields; 022import com.echothree.model.control.index.common.Indexes; 023import com.echothree.model.control.party.common.PartyTypes; 024import com.echothree.model.control.party.server.search.PartySearchEvaluator; 025import com.echothree.model.control.search.server.search.EntityInstancePKHolder; 026import com.echothree.model.data.core.server.factory.EntityInstanceFactory; 027import com.echothree.model.data.employee.server.entity.PartyEmployee; 028import com.echothree.model.data.search.server.entity.SearchDefaultOperator; 029import com.echothree.model.data.search.server.entity.SearchSortDirection; 030import com.echothree.model.data.search.server.entity.SearchSortOrder; 031import com.echothree.model.data.search.server.entity.SearchType; 032import com.echothree.model.data.user.server.entity.UserVisit; 033import com.echothree.model.data.workflow.server.entity.WorkflowStep; 034import com.echothree.util.server.message.ExecutionErrorAccumulator; 035import com.echothree.util.server.persistence.Session; 036 037public class EmployeeSearchEvaluator 038 extends PartySearchEvaluator { 039 040 private String partyEmployeeName; 041 private WorkflowStep employeeStatusWorkflowStep; 042 private WorkflowStep employeeAvailabilityWorkflowStep; 043 044 /** Creates a new instance of EmployeeSearchEvaluator */ 045 public EmployeeSearchEvaluator(UserVisit userVisit, SearchType searchType, SearchDefaultOperator searchDefaultOperator, 046 SearchSortOrder searchSortOrder, SearchSortDirection searchSortDirection) { 047 super(userVisit, searchType, searchDefaultOperator, searchSortOrder, searchSortDirection, PartyTypes.EMPLOYEE.name(), 048 IndexFields.partyEmployeeName.name(), Indexes.EMPLOYEE.name()); 049 } 050 051 public EntityInstancePKHolder getEntityInstancePKHolderByEmployeeStatusWorkflowStep(WorkflowStep employeeStatusWorkflowStep) { 052 return getEntityInstancePKHolderFromQuery(EntityInstanceFactory.getInstance().prepareStatement( 053 "SELECT _PK_ " + 054 "FROM entityinstances, parties, partydetails, workflowentitystatuses " + 055 "WHERE par_activedetailid = pardt_partydetailid " + 056 "AND eni_ent_entitytypeid = ? AND par_partyid = eni_entityuniqueid " + 057 "AND eni_entityinstanceid = wkfles_eni_entityinstanceid AND wkfles_wkfls_workflowstepid = ? AND wkfles_thrutime = ?"), 058 entityType, employeeStatusWorkflowStep, Session.MAX_TIME); 059 } 060 061 public EntityInstancePKHolder getEntityInstancePKHolderByEmployeeAvailabilityWorkflowStep(WorkflowStep employeeAvailabilityWorkflowStep) { 062 return getEntityInstancePKHolderFromQuery(EntityInstanceFactory.getInstance().prepareStatement( 063 "SELECT _PK_ " + 064 "FROM entityinstances, parties, partydetails, workflowentitystatuses " + 065 "WHERE par_activedetailid = pardt_partydetailid " + 066 "AND eni_ent_entitytypeid = ? AND par_partyid = eni_entityuniqueid " + 067 "AND eni_entityinstanceid = wkfles_eni_entityinstanceid AND wkfles_wkfls_workflowstepid = ? AND wkfles_thrutime = ?"), 068 entityType, employeeAvailabilityWorkflowStep, Session.MAX_TIME); 069 } 070 071 /** 072 * Returns the partyEmployeeName. 073 * @return the partyEmployeeName 074 */ 075 public String getPartyEmployeeName() { 076 return partyEmployeeName; 077 } 078 079 /** 080 * Sets the partyEmployeeName. 081 * @param partyEmployeeName the partyEmployeeName to set 082 */ 083 public void setPartyEmployeeName(String partyEmployeeName) { 084 this.partyEmployeeName = partyEmployeeName; 085 } 086 087 /** 088 * Returns the employeeStatusWorkflowStep. 089 * @return the employeeStatusWorkflowStep 090 */ 091 public WorkflowStep getEmployeeStatusWorkflowStep() { 092 return employeeStatusWorkflowStep; 093 } 094 095 /** 096 * Sets the employeeStatusWorkflowStep. 097 * @param employeeStatusWorkflowStep the employeeStatusWorkflowStep to set 098 */ 099 public void setEmployeeStatusWorkflowStep(WorkflowStep employeeStatusWorkflowStep) { 100 this.employeeStatusWorkflowStep = employeeStatusWorkflowStep; 101 } 102 103 /** 104 * Returns the employeeAvailabilityWorkflowStep. 105 * @return the employeeAvailabilityWorkflowStep 106 */ 107 public WorkflowStep getEmployeeAvailabilityWorkflowStep() { 108 return employeeAvailabilityWorkflowStep; 109 } 110 111 /** 112 * Sets the employeeAvailabilityWorkflowStep. 113 * @param employeeAvailabilityWorkflowStep the employeeAvailabilityWorkflowStep to set 114 */ 115 public void setEmployeeAvailabilityWorkflowStep(WorkflowStep employeeAvailabilityWorkflowStep) { 116 this.employeeAvailabilityWorkflowStep = employeeAvailabilityWorkflowStep; 117 } 118 119 @Override 120 protected EntityInstancePKHolder executeSearch(final ExecutionErrorAccumulator eea) { 121 EntityInstancePKHolder resultSet = null; 122 123 if(partyEmployeeName == null) { 124 resultSet = super.executeSearch(eea); 125 126 if(resultSet == null || resultSet.size() > 0) { 127 if(employeeStatusWorkflowStep != null) { 128 var entityInstancePKHolder = getEntityInstancePKHolderByEmployeeStatusWorkflowStep(employeeStatusWorkflowStep); 129 130 if(resultSet == null) { 131 resultSet = entityInstancePKHolder; 132 } else { 133 resultSet.retainAll(entityInstancePKHolder); 134 } 135 } 136 } 137 138 if(resultSet == null || resultSet.size() > 0) { 139 if(employeeAvailabilityWorkflowStep != null) { 140 var entityInstancePKHolder = getEntityInstancePKHolderByEmployeeAvailabilityWorkflowStep(employeeAvailabilityWorkflowStep); 141 142 if(resultSet == null) { 143 resultSet = entityInstancePKHolder; 144 } else { 145 resultSet.retainAll(entityInstancePKHolder); 146 } 147 } 148 } 149 } else { 150 PartyEmployee partyEmployee = null; 151 152 if(partyEmployeeName != null) { 153 var employeeControl = Session.getModelController(EmployeeControl.class); 154 155 partyEmployee = employeeControl.getPartyEmployeeByName(partyEmployeeName); 156 } 157 158 if(partyEmployee != null) { 159 var entityInstanceControl = Session.getModelController(EntityInstanceControl.class); 160 161 resultSet = new EntityInstancePKHolder(1); 162 resultSet.add(entityInstanceControl.getEntityInstanceByBasePK(partyEmployee.getPartyPK()).getPrimaryKey(), null); 163 } 164 } 165 166 return resultSet; 167 } 168 169}