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.order.server.logic; 018 019import com.echothree.model.control.order.common.exception.DuplicateOrderShipmentGroupSequenceException; 020import com.echothree.model.control.order.common.exception.UnknownDefaultOrderShipmentGroupException; 021import com.echothree.model.control.order.common.exception.UnknownOrderShipmentGroupException; 022import com.echothree.model.control.order.server.control.OrderControl; 023import com.echothree.model.control.order.server.control.OrderShipmentGroupControl; 024import com.echothree.model.data.contact.server.entity.PartyContactMechanism; 025import com.echothree.model.data.item.server.entity.ItemDeliveryType; 026import com.echothree.model.data.order.server.entity.Order; 027import com.echothree.model.data.order.server.entity.OrderShipmentGroup; 028import com.echothree.model.data.shipping.server.entity.ShippingMethod; 029import com.echothree.util.common.message.ExecutionErrors; 030import com.echothree.util.common.persistence.BasePK; 031import com.echothree.util.server.control.BaseLogic; 032import com.echothree.util.server.message.ExecutionErrorAccumulator; 033import com.echothree.util.server.persistence.EntityPermission; 034import javax.enterprise.context.ApplicationScoped; 035import javax.enterprise.inject.spi.CDI; 036import javax.inject.Inject; 037 038public class BaseOrderShipmentGroupLogic 039 extends BaseLogic { 040 041 @Inject 042 OrderControl orderControl; 043 044 @Inject 045 OrderShipmentGroupControl orderShipmentGroupControl; 046 047 protected BaseOrderShipmentGroupLogic() { 048 super(); 049 } 050 051 public OrderShipmentGroup createOrderShipmentGroup(final ExecutionErrorAccumulator eea, final Order order, Integer orderShipmentGroupSequence, 052 final ItemDeliveryType itemDeliveryType, final Boolean isDefault, final PartyContactMechanism partyContactMechanism, 053 final ShippingMethod shippingMethod, final Boolean holdUntilComplete, final BasePK createdBy) { 054 var orderStatus = orderControl.getOrderStatusForUpdate(order); 055 OrderShipmentGroup orderShipmentGroup = null; 056 057 if(orderShipmentGroupSequence == null) { 058 orderShipmentGroupSequence = orderStatus.getOrderShipmentGroupSequence() + 1; 059 orderStatus.setOrderShipmentGroupSequence(orderShipmentGroupSequence); 060 } else { 061 orderShipmentGroup = orderShipmentGroupControl.getOrderShipmentGroupBySequence(order, orderShipmentGroupSequence); 062 063 if(orderShipmentGroup == null) { 064 // If the orderShipmentGroupSequence is > the last one that was recorded in the OrderStatus, jump the 065 // one in OrderStatus forward - it should always record the greatest orderShipmentGroupSequence used. 066 if(orderShipmentGroupSequence > orderStatus.getOrderShipmentGroupSequence()) { 067 orderStatus.setOrderShipmentGroupSequence(orderShipmentGroupSequence); 068 } 069 } else { 070 handleExecutionError(DuplicateOrderShipmentGroupSequenceException.class, eea, ExecutionErrors.DuplicateOrderShipmentGroupSequence.name(), 071 order.getLastDetail().getOrderName(), orderShipmentGroupSequence.toString()); 072 } 073 } 074 075 if(orderShipmentGroup == null) { 076 orderShipmentGroup = orderShipmentGroupControl.createOrderShipmentGroup(order, orderShipmentGroupSequence, itemDeliveryType, isDefault, partyContactMechanism, 077 shippingMethod, holdUntilComplete, createdBy); 078 } 079 080 return orderShipmentGroup; 081 } 082 083 public OrderShipmentGroup getDefaultOrderShipmentGroup(final ExecutionErrorAccumulator eea, final Order order, 084 final ItemDeliveryType itemDeliveryType, final EntityPermission entityPermission) { 085 var orderShipmentGroup = orderShipmentGroupControl.getDefaultOrderShipmentGroup(order, itemDeliveryType, entityPermission); 086 087 if(orderShipmentGroup == null) { 088 handleExecutionError(UnknownDefaultOrderShipmentGroupException.class, eea, ExecutionErrors.UnknownDefaultOrderShipmentGroup.name(), 089 order.getLastDetail().getOrderName(), itemDeliveryType.getItemDeliveryTypeName()); 090 } 091 092 return orderShipmentGroup; 093 } 094 095 public OrderShipmentGroup getDefaultOrderShipmentGroup(final ExecutionErrorAccumulator eea, final Order order, 096 final ItemDeliveryType itemDeliveryType) { 097 return getDefaultOrderShipmentGroup(eea, order, itemDeliveryType, EntityPermission.READ_ONLY); 098 } 099 100 public OrderShipmentGroup getDefaultOrderShipmentGroupForUpdate(final ExecutionErrorAccumulator eea, final Order order, 101 final ItemDeliveryType itemDeliveryType) { 102 return getDefaultOrderShipmentGroup(eea, order, itemDeliveryType, EntityPermission.READ_WRITE); 103 } 104 105 public OrderShipmentGroup getOrderShipmentGroupBySequence(final ExecutionErrorAccumulator eea, final Order order, 106 final Integer orderShipmentGroupSequence, final EntityPermission entityPermission) { 107 var orderShipmentGroup = orderShipmentGroupControl.getOrderShipmentGroupBySequence(order, orderShipmentGroupSequence); 108 109 if(orderShipmentGroup == null) { 110 handleExecutionError(UnknownOrderShipmentGroupException.class, eea, ExecutionErrors.UnknownOrderShipmentGroup.name(), 111 order.getLastDetail().getOrderName(), orderShipmentGroupSequence); 112 } 113 114 return orderShipmentGroup; 115 } 116 117 public OrderShipmentGroup getOrderShipmentGroup(final ExecutionErrorAccumulator eea, final Order order, final Integer orderShipmentGroupSequence) { 118 return getOrderShipmentGroupBySequence(eea, order, orderShipmentGroupSequence, EntityPermission.READ_ONLY); 119 } 120 121 public OrderShipmentGroup getOrderShipmentGroupForUpdate(final ExecutionErrorAccumulator eea, final Order order, final Integer orderShipmentGroupSequence) { 122 return getOrderShipmentGroupBySequence(eea, order, orderShipmentGroupSequence, EntityPermission.READ_WRITE); 123 } 124 125}