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