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