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