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.item.server.transfer; 018 019import com.echothree.model.control.accounting.server.control.AccountingControl; 020import com.echothree.model.control.inventory.server.control.InventoryControl; 021import com.echothree.model.control.item.common.ItemPriceTypes; 022import com.echothree.model.control.item.common.ItemProperties; 023import com.echothree.model.control.item.common.transfer.ItemPriceTransfer; 024import com.echothree.model.control.item.server.control.ItemControl; 025import com.echothree.model.control.uom.server.control.UomControl; 026import com.echothree.model.data.item.server.entity.ItemFixedPrice; 027import com.echothree.model.data.item.server.entity.ItemPrice; 028import com.echothree.model.data.item.server.entity.ItemVariablePrice; 029import com.echothree.model.data.user.server.entity.UserVisit; 030import com.echothree.util.common.form.TransferProperties; 031import com.echothree.util.common.transfer.HistoryTransfer; 032import com.echothree.util.common.transfer.ListWrapper; 033import com.echothree.util.server.persistence.Session; 034import com.echothree.util.server.string.AmountUtils; 035import com.echothree.util.server.transfer.HistoryCache; 036import java.util.ArrayList; 037import java.util.List; 038import javax.enterprise.context.RequestScoped; 039 040@RequestScoped 041public class ItemPriceTransferCache 042 extends BaseItemTransferCache<ItemPrice, ItemPriceTransfer> 043 implements HistoryCache<ItemPrice, ItemPriceTransfer> { 044 045 AccountingControl accountingControl = Session.getModelController(AccountingControl.class); 046 InventoryControl inventoryControl = Session.getModelController(InventoryControl.class); 047 ItemControl itemControl = Session.getModelController(ItemControl.class); 048 UomControl uomControl = Session.getModelController(UomControl.class); 049 050 TransferProperties transferProperties; 051 boolean filterItem; 052 boolean filterInventoryCondition; 053 boolean filterUnitOfMeasureType; 054 boolean filterCurrency; 055 boolean filterUnformattedUnitPrice; 056 boolean filterUnitPrice; 057 boolean filterUnformattedMinimumUnitPrice; 058 boolean filterMinimumUnitPrice; 059 boolean filterUnformattedMaximumUnitPrice; 060 boolean filterMaximumUnitPrice; 061 boolean filterUnformattedUnitPriceIncrement; 062 boolean filterUnitPriceIncrement; 063 boolean filterUnformattedFromTime; 064 boolean filterFromTime; 065 boolean filterUnformattedThruTime; 066 boolean filterThruTime; 067 068 /** Creates a new instance of ItemPriceTransferCache */ 069 protected ItemPriceTransferCache() { 070 super(); 071 072 transferProperties = session.getTransferProperties(); 073 if(transferProperties != null) { 074 var properties = transferProperties.getProperties(ItemPriceTransfer.class); 075 076 if(properties != null) { 077 filterItem = !properties.contains(ItemProperties.ITEM); 078 filterInventoryCondition = !properties.contains(ItemProperties.INVENTORY_CONDITION); 079 filterUnitOfMeasureType = !properties.contains(ItemProperties.UNIT_OF_MEASURE_TYPE); 080 filterCurrency = !properties.contains(ItemProperties.CURRENCY); 081 filterUnformattedUnitPrice = !properties.contains(ItemProperties.UNFORMATTED_UNIT_PRICE); 082 filterUnitPrice = !properties.contains(ItemProperties.UNIT_PRICE); 083 filterUnformattedMinimumUnitPrice = !properties.contains(ItemProperties.UNFORMATTED_MINIMUM_UNIT_PRICE); 084 filterMinimumUnitPrice = !properties.contains(ItemProperties.MINIMUM_UNIT_PRICE); 085 filterUnformattedMaximumUnitPrice = !properties.contains(ItemProperties.UNFORMATTED_MAXIMUM_UNIT_PRICE); 086 filterMaximumUnitPrice = !properties.contains(ItemProperties.MAXIMUM_UNIT_PRICE); 087 filterUnformattedUnitPriceIncrement = !properties.contains(ItemProperties.UNFORMATTED_UNIT_PRICE_INCREMENT); 088 filterUnitPriceIncrement = !properties.contains(ItemProperties.UNIT_PRICE_INCREMENT); 089 filterUnformattedFromTime = !properties.contains(ItemProperties.UNFORMATTED_FROM_TIME); 090 filterFromTime = !properties.contains(ItemProperties.FROM_TIME); 091 filterUnformattedThruTime = !properties.contains(ItemProperties.UNFORMATTED_THRU_TIME); 092 filterThruTime = !properties.contains(ItemProperties.THRU_TIME); 093 } 094 } 095 } 096 097 private ItemPriceTransfer getItemPriceTransfer(final UserVisit userVisit, ItemPrice itemPrice, ItemFixedPrice itemFixedPrice, ItemVariablePrice itemVariablePrice) { 098 var item = itemPrice.getItem(); 099 var itemTransfer = filterItem ? null : itemControl.getItemTransfer(userVisit, item); 100 var inventoryCondition = filterInventoryCondition ? null : itemPrice.getInventoryCondition(); 101 var inventoryConditionTransfer = inventoryCondition == null ? null : inventoryControl.getInventoryConditionTransfer(userVisit, inventoryCondition); 102 var unitOfMeasureType = filterUnitOfMeasureType ? null : itemPrice.getUnitOfMeasureType(); 103 var unitOfMeasureTypeTransfer = unitOfMeasureType == null ? null : uomControl.getUnitOfMeasureTypeTransfer(userVisit, unitOfMeasureType); 104 var currency = itemPrice.getCurrency(); 105 var currencyTransfer = filterCurrency ? null : accountingControl.getCurrencyTransfer(userVisit, currency); 106 Long unformattedUnitPrice = null; 107 String unitPrice = null; 108 Long unformattedMinimumUnitPrice = null; 109 String minimumUnitPrice = null; 110 Long unformattedMaximumUnitPrice = null; 111 String maximumUnitPrice = null; 112 Long unformattedUnitPriceIncrement = null; 113 String unitPriceIncrement = null; 114 115 if(itemFixedPrice != null) { 116 unformattedUnitPrice = filterUnformattedUnitPrice ? null : itemFixedPrice.getUnitPrice(); 117 unitPrice = filterUnitPrice ? null : AmountUtils.getInstance().formatPriceUnit(currency, itemFixedPrice.getUnitPrice()); 118 } 119 120 if(itemVariablePrice != null) { 121 unformattedMinimumUnitPrice = filterUnformattedMinimumUnitPrice ? null : itemVariablePrice.getMinimumUnitPrice(); 122 minimumUnitPrice = filterMinimumUnitPrice ? null : AmountUtils.getInstance().formatPriceUnit(currency, itemVariablePrice.getMinimumUnitPrice()); 123 unformattedMaximumUnitPrice = filterUnformattedMinimumUnitPrice ? null : itemVariablePrice.getMaximumUnitPrice(); 124 maximumUnitPrice = filterMaximumUnitPrice ? null : AmountUtils.getInstance().formatPriceUnit(currency, itemVariablePrice.getMaximumUnitPrice()); 125 unformattedUnitPriceIncrement = filterUnformattedUnitPriceIncrement ? null : itemVariablePrice.getUnitPriceIncrement(); 126 unitPriceIncrement = filterUnitPriceIncrement ? null : AmountUtils.getInstance().formatPriceUnit(currency, itemVariablePrice.getUnitPriceIncrement()); 127 } 128 129 return new ItemPriceTransfer(itemTransfer, inventoryConditionTransfer, unitOfMeasureTypeTransfer, currencyTransfer, 130 unformattedUnitPrice, unitPrice, unformattedMinimumUnitPrice, minimumUnitPrice, unformattedMaximumUnitPrice, maximumUnitPrice, 131 unformattedUnitPriceIncrement, unitPriceIncrement); 132 } 133 134 @Override 135 public ListWrapper<HistoryTransfer<ItemPriceTransfer>> getHistory(final UserVisit userVisit, ItemPrice itemPrice) { 136 List<HistoryTransfer<ItemPriceTransfer>> historyTransfers = null; 137 var itemPriceTypeName = itemPrice.getItem().getLastDetail().getItemPriceType().getItemPriceTypeName(); 138 139 if(ItemPriceTypes.FIXED.name().equals(itemPriceTypeName)) { 140 var itemFixedPriceHistory = itemControl.getItemFixedPriceHistory(itemPrice); 141 142 historyTransfers = new ArrayList<>(itemFixedPriceHistory.size()); 143 144 for(var itemFixedPrice : itemFixedPriceHistory) { 145 var unformattedFromTime = filterUnformattedFromTime ? null : itemFixedPrice.getFromTime(); 146 var fromTime = filterFromTime ? null : formatTypicalDateTime(userVisit, itemFixedPrice.getFromTime()); 147 var unformattedThruTime = filterUnformattedThruTime ? null : itemFixedPrice.getThruTime(); 148 var thruTime = filterThruTime ? null : formatTypicalDateTime(userVisit, itemFixedPrice.getThruTime()); 149 150 historyTransfers.add(new HistoryTransfer<>(getItemPriceTransfer(userVisit, itemPrice, itemFixedPrice, null), 151 unformattedFromTime, fromTime, unformattedThruTime, thruTime)); 152 } 153 } else if(ItemPriceTypes.VARIABLE.name().equals(itemPriceTypeName)) { 154 var itemVariablePriceHistory = itemControl.getItemVariablePriceHistory(itemPrice); 155 156 historyTransfers = new ArrayList<>(itemVariablePriceHistory.size()); 157 158 for(var itemVariablePrice : itemVariablePriceHistory) { 159 var unformattedFromTime = filterUnformattedFromTime ? null : itemVariablePrice.getFromTime(); 160 var fromTime = filterFromTime ? null : formatTypicalDateTime(userVisit, itemVariablePrice.getFromTime()); 161 var unformattedThruTime = filterUnformattedThruTime ? null : itemVariablePrice.getThruTime(); 162 var thruTime = filterThruTime ? null : formatTypicalDateTime(userVisit, itemVariablePrice.getThruTime()); 163 164 historyTransfers.add(new HistoryTransfer<>(getItemPriceTransfer(userVisit, itemPrice, null, itemVariablePrice), 165 unformattedFromTime, fromTime, unformattedThruTime, thruTime)); 166 } 167 } 168 169 return new ListWrapper<>(historyTransfers); 170 } 171 172 @Override 173 public ItemPriceTransfer getTransfer(UserVisit userVisit, ItemPrice itemPrice) { 174 var itemPriceTransfer = get(itemPrice); 175 176 if(itemPriceTransfer == null) { 177 ItemFixedPrice itemFixedPrice = null; 178 ItemVariablePrice itemVariablePrice = null; 179 var itemPriceTypeName = itemPrice.getItem().getLastDetail().getItemPriceType().getItemPriceTypeName(); 180 181 if(ItemPriceTypes.FIXED.name().equals(itemPriceTypeName)) { 182 itemFixedPrice = itemControl.getItemFixedPrice(itemPrice); 183 } else if(ItemPriceTypes.VARIABLE.name().equals(itemPriceTypeName)) { 184 itemVariablePrice = itemControl.getItemVariablePrice(itemPrice); 185 } 186 187 itemPriceTransfer = getItemPriceTransfer(userVisit, itemPrice, itemFixedPrice, itemVariablePrice); 188 189 put(userVisit, itemPrice, itemPriceTransfer); 190 } 191 192 return itemPriceTransfer; 193 } 194 195}