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