001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 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.cancellationpolicy.server.logic; 018 019import com.echothree.model.control.cancellationpolicy.common.choice.PartyCancellationPolicyStatusChoicesBean; 020import com.echothree.model.control.cancellationpolicy.common.workflow.PartyCancellationPolicyStatusConstants; 021import com.echothree.model.control.cancellationpolicy.server.control.CancellationPolicyControl; 022import com.echothree.model.control.core.server.control.EntityInstanceControl; 023import com.echothree.model.control.workflow.common.transfer.WorkflowEntityStatusTransfer; 024import com.echothree.model.control.workflow.server.control.WorkflowControl; 025import com.echothree.model.data.cancellationpolicy.server.entity.CancellationPolicy; 026import com.echothree.model.data.cancellationpolicy.server.entity.PartyCancellationPolicy; 027import com.echothree.model.data.core.server.entity.EntityInstance; 028import com.echothree.model.data.party.common.pk.PartyPK; 029import com.echothree.model.data.party.server.entity.Language; 030import com.echothree.model.data.party.server.entity.Party; 031import com.echothree.model.data.user.server.entity.UserVisit; 032import com.echothree.model.data.workflow.server.entity.WorkflowEntityStatus; 033import com.echothree.model.data.workflow.server.entity.WorkflowEntrance; 034import com.echothree.util.common.message.ExecutionErrors; 035import com.echothree.util.common.persistence.BasePK; 036import com.echothree.util.server.control.BaseLogic; 037import com.echothree.util.server.message.ExecutionErrorAccumulator; 038import javax.enterprise.context.ApplicationScoped; 039import javax.enterprise.inject.spi.CDI; 040import javax.inject.Inject; 041 042@ApplicationScoped 043public class PartyCancellationPolicyLogic 044 extends BaseLogic { 045 046 @Inject 047 CancellationPolicyControl cancellationPolicyControl; 048 049 @Inject 050 EntityInstanceControl entityInstanceControl; 051 052 @Inject 053 WorkflowControl workflowControl; 054 055 protected PartyCancellationPolicyLogic() { 056 super(); 057 } 058 059 public static PartyCancellationPolicyLogic getInstance() { 060 return CDI.current().select(PartyCancellationPolicyLogic.class).get(); 061 } 062 063 public WorkflowEntrance insertPartyCancellationPolicyIntoWorkflow(EntityInstance entityInstance, BasePK createdBy) { 064 return workflowControl.addEntityToWorkflowUsingNames(null, PartyCancellationPolicyStatusConstants.Workflow_PARTY_CANCELLATION_POLICY_STATUS, 065 PartyCancellationPolicyStatusConstants.WorkflowEntrance_NEW_PARTY_CANCELLATION_POLICY, entityInstance, null, null, createdBy); 066 } 067 068 public WorkflowEntrance insertPartyCancellationPolicyIntoWorkflow(PartyCancellationPolicy partyCancellationPolicy, BasePK createdBy) { 069 var entityInstance = entityInstanceControl.getEntityInstanceByBasePK(partyCancellationPolicy.getPrimaryKey()); 070 071 return insertPartyCancellationPolicyIntoWorkflow(entityInstance, createdBy); 072 } 073 074 public WorkflowEntityStatus getPartyCancellationPolicyStatus(EntityInstance entityInstance, BasePK createdBy) { 075 var partyCancellationPolicyStatus = workflowControl.getWorkflowEntityStatusByEntityInstanceUsingNames( 076 PartyCancellationPolicyStatusConstants.Workflow_PARTY_CANCELLATION_POLICY_STATUS, entityInstance); 077 078 if(partyCancellationPolicyStatus == null) { 079 var workflowEntrance = this.insertPartyCancellationPolicyIntoWorkflow(entityInstance, createdBy); 080 081 if(workflowEntrance != null) { 082 partyCancellationPolicyStatus = getPartyCancellationPolicyStatus(entityInstance, null); 083 } 084 } 085 086 return partyCancellationPolicyStatus; 087 } 088 089 public WorkflowEntityStatus getPartyCancellationPolicyStatus(PartyCancellationPolicy partyCancellationPolicy, BasePK createdBy) { 090 var entityInstance = entityInstanceControl.getEntityInstanceByBasePK(partyCancellationPolicy.getPrimaryKey()); 091 092 return getPartyCancellationPolicyStatus(entityInstance, createdBy); 093 } 094 095 public WorkflowEntityStatusTransfer getPartyCancellationPolicyStatusTransfer(UserVisit userVisit, EntityInstance entityInstance, BasePK createdBy) { 096 var partyCancellationPolicyStatus = getPartyCancellationPolicyStatus(entityInstance, createdBy); 097 098 return partyCancellationPolicyStatus == null ? null : workflowControl.getWorkflowEntityStatusTransfer(userVisit, partyCancellationPolicyStatus); 099 } 100 101 public PartyCancellationPolicy createPartyCancellationPolicy(Party party, CancellationPolicy cancellationPolicy, BasePK createdBy) { 102 var partyCancellationPolicy = cancellationPolicyControl.createPartyCancellationPolicy(party, cancellationPolicy, createdBy); 103 104 insertPartyCancellationPolicyIntoWorkflow(partyCancellationPolicy, createdBy); 105 106 return partyCancellationPolicy; 107 } 108 109 public PartyCancellationPolicyStatusChoicesBean getPartyCancellationPolicyStatusChoices(final String defaultOrderStatusChoice, final Language language, final boolean allowNullChoice, 110 final PartyCancellationPolicy partyCancellationPolicy, final PartyPK partyPK) { 111 var partyCancellationPolicyStatusChoicesBean = new PartyCancellationPolicyStatusChoicesBean(); 112 113 if(partyCancellationPolicy == null) { 114 workflowControl.getWorkflowEntranceChoices(partyCancellationPolicyStatusChoicesBean, defaultOrderStatusChoice, language, allowNullChoice, 115 workflowControl.getWorkflowByName(PartyCancellationPolicyStatusConstants.Workflow_PARTY_CANCELLATION_POLICY_STATUS), partyPK); 116 } else { 117 var entityInstance = entityInstanceControl.getEntityInstanceByBasePK(partyCancellationPolicy.getPrimaryKey()); 118 var workflowEntityStatus = workflowControl.getWorkflowEntityStatusByEntityInstanceUsingNames(PartyCancellationPolicyStatusConstants.Workflow_PARTY_CANCELLATION_POLICY_STATUS, entityInstance); 119 120 workflowControl.getWorkflowDestinationChoices(partyCancellationPolicyStatusChoicesBean, defaultOrderStatusChoice, language, allowNullChoice, workflowEntityStatus.getWorkflowStep(), partyPK); 121 } 122 123 return partyCancellationPolicyStatusChoicesBean; 124 } 125 126 public void setPartyCancellationPolicyStatus(final ExecutionErrorAccumulator eea, final PartyCancellationPolicy partyCancellationPolicy, final String orderStatusChoice, final PartyPK modifiedBy) { 127 var entityInstance = entityInstanceControl.getEntityInstanceByBasePK(partyCancellationPolicy.getPrimaryKey()); 128 var workflowEntityStatus = workflowControl.getWorkflowEntityStatusByEntityInstanceForUpdateUsingNames(PartyCancellationPolicyStatusConstants.Workflow_PARTY_CANCELLATION_POLICY_STATUS, 129 entityInstance); 130 var workflowDestination = orderStatusChoice == null? null: workflowControl.getWorkflowDestinationByName(workflowEntityStatus.getWorkflowStep(), orderStatusChoice); 131 132 if(workflowDestination != null || orderStatusChoice == null) { 133 workflowControl.transitionEntityInWorkflow(eea, workflowEntityStatus, workflowDestination, null, modifiedBy); 134 } else { 135 eea.addExecutionError(ExecutionErrors.UnknownPartyCancellationPolicyStatusChoice.name(), orderStatusChoice); 136 } 137 } 138 139}