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.accounting.server.logic; 018 019import com.echothree.model.control.accounting.common.exception.DuplicateTransactionTimeException; 020import com.echothree.model.control.accounting.common.exception.UnknownTransactionTimeException; 021import com.echothree.model.control.accounting.common.exception.UnknownTransactionTimeTypeNameException; 022import com.echothree.model.control.accounting.common.transfer.TransactionTimeTransfer; 023import com.echothree.model.control.accounting.server.control.TransactionTimeControl; 024import com.echothree.model.data.accounting.server.entity.Transaction; 025import com.echothree.model.data.accounting.server.entity.TransactionTime; 026import com.echothree.model.data.accounting.server.entity.TransactionTimeType; 027import com.echothree.model.data.user.server.entity.UserVisit; 028import com.echothree.util.common.message.ExecutionErrors; 029import com.echothree.util.common.persistence.BasePK; 030import com.echothree.util.server.control.BaseLogic; 031import com.echothree.util.server.message.ExecutionErrorAccumulator; 032import java.util.List; 033import javax.enterprise.context.ApplicationScoped; 034import javax.inject.Inject; 035 036@ApplicationScoped 037public class TransactionTimeLogic 038 extends BaseLogic { 039 040 @Inject 041 TransactionTimeControl transactionTimeControl; 042 043 protected TransactionTimeLogic() { 044 super(); 045 } 046 047 public TransactionTimeType getTransactionTimeTypeByName(final ExecutionErrorAccumulator eea, final String transactionTimeTypeName) { 048 var transactionTimeType = transactionTimeControl.getTransactionTimeTypeByName(transactionTimeTypeName); 049 050 if(transactionTimeType == null) { 051 handleExecutionError(UnknownTransactionTimeTypeNameException.class, eea, ExecutionErrors.UnknownTransactionTimeTypeName.name(), transactionTimeTypeName); 052 } 053 054 return transactionTimeType; 055 } 056 057 public void createTransactionTime(final ExecutionErrorAccumulator eea, final Transaction transaction, final String transactionTimeTypeName, final Long time, final BasePK partyPK) { 058 var transactionTimeType = transactionTimeControl.getTransactionTimeTypeByName(transactionTimeTypeName); 059 060 if(eea == null || !eea.hasExecutionErrors()) { 061 if(transactionTimeControl.transactionTimeExists(transaction, transactionTimeType)) { 062 handleExecutionError(DuplicateTransactionTimeException.class, eea, ExecutionErrors.DuplicateTransactionTime.name(), 063 transaction.getLastDetail().getTransactionName(), transactionTimeTypeName); 064 } else { 065 transactionTimeControl.createTransactionTime(transaction, transactionTimeType, time, partyPK); 066 } 067 } 068 } 069 070 public void updateTransactionTime(final ExecutionErrorAccumulator eea, final Transaction transaction, final String transactionTimeTypeName, final Long time, final BasePK partyPK) { 071 var transactionTimeType = transactionTimeControl.getTransactionTimeTypeByName(transactionTimeTypeName); 072 073 if(eea == null || !eea.hasExecutionErrors()) { 074 var transactionTimeValue = transactionTimeControl.getTransactionTimeValueForUpdate(transaction, transactionTimeType); 075 076 if(transactionTimeValue == null) { 077 handleExecutionError(UnknownTransactionTimeException.class, eea, ExecutionErrors.UnknownTransactionTime.name(), 078 transaction.getLastDetail().getTransactionName(), transactionTimeTypeName); 079 } else { 080 transactionTimeValue.setTime(time); 081 transactionTimeControl.updateTransactionTimeFromValue(transactionTimeValue, partyPK); 082 } 083 } 084 } 085 086 public void createOrUpdateTransactionTimeIfNotNull(final ExecutionErrorAccumulator eea, final Transaction transaction, final String transactionTimeTypeName, final Long time, 087 final BasePK partyPK) { 088 if(time != null) { 089 createOrUpdateTransactionTime(eea, transaction, transactionTimeTypeName, time, partyPK); 090 } 091 } 092 093 public void createOrUpdateTransactionTime(final ExecutionErrorAccumulator eea, final Transaction transaction, final String transactionTimeTypeName, final Long time, 094 final BasePK partyPK) { 095 var transactionTimeType = getTransactionTimeTypeByName(eea, transactionTimeTypeName); 096 097 if(eea == null || !eea.hasExecutionErrors()) { 098 var transactionTimeValue = transactionTimeControl.getTransactionTimeValueForUpdate(transaction, transactionTimeType); 099 100 if(transactionTimeValue == null) { 101 transactionTimeControl.createTransactionTime(transaction, transactionTimeType, time, partyPK); 102 } else { 103 transactionTimeValue.setTime(time); 104 transactionTimeControl.updateTransactionTimeFromValue(transactionTimeValue, partyPK); 105 } 106 } 107 } 108 109 private TransactionTime getTransactionTimeEntity(final ExecutionErrorAccumulator eea, final Transaction transaction, final String transactionTimeTypeName) { 110 var transactionTimeType = getTransactionTimeTypeByName(eea, transactionTimeTypeName); 111 TransactionTime result = null; 112 113 if(eea == null || !eea.hasExecutionErrors()) { 114 result = transactionTimeControl.getTransactionTimeForUpdate(transaction, transactionTimeType); 115 116 if(result == null) { 117 handleExecutionError(UnknownTransactionTimeException.class, eea, ExecutionErrors.UnknownTransactionTime.name(), 118 transaction.getLastDetail().getTransactionName(), transactionTimeTypeName); 119 } 120 } 121 122 return result; 123 } 124 125 public Long getTransactionTime(final ExecutionErrorAccumulator eea, final Transaction transaction, final String transactionTimeTypeName) { 126 var transactionTime = getTransactionTimeEntity(eea, transaction, transactionTimeTypeName); 127 128 return transactionTime == null ? null : transactionTime.getTime(); 129 } 130 131 public TransactionTimeTransfer getTransactionTimeTransfer(final ExecutionErrorAccumulator eea, final UserVisit userVisit, final Transaction transaction, final String transactionTimeTypeName) { 132 var transactionTime = getTransactionTimeEntity(eea, transaction, transactionTimeTypeName); 133 134 return transactionTime == null ? null : transactionTimeControl.getTransactionTimeTransfer(userVisit, transactionTime); 135 } 136 137 public List<TransactionTimeTransfer> getTransactionTimeTransfersByOrder(final ExecutionErrorAccumulator eea, final UserVisit userVisit, final Transaction transaction) { 138 return transactionTimeControl.getTransactionTimeTransfersByTransaction(userVisit, transaction); 139 } 140 141 public void deleteTransactionTime(final ExecutionErrorAccumulator eea, final Transaction transaction, final String transactionTimeTypeName, final BasePK deletedBy) { 142 var transactionTimeType = getTransactionTimeTypeByName(eea, transactionTimeTypeName); 143 144 if(eea == null || !eea.hasExecutionErrors()) { 145 var transactionTime = transactionTimeControl.getTransactionTimeForUpdate(transaction, transactionTimeType); 146 147 if(transactionTime == null) { 148 handleExecutionError(UnknownTransactionTimeException.class, eea, ExecutionErrors.UnknownTransactionTime.name(), 149 transaction.getLastDetail().getTransactionName(), transactionTimeTypeName); 150 } else { 151 transactionTimeControl.deleteTransactionTime(transactionTime, deletedBy); 152 } 153 } 154 } 155 156}