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.content.server.transfer; 018 019import javax.inject.Inject; 020import com.echothree.model.control.accounting.server.control.AccountingControl; 021import com.echothree.model.control.content.common.ContentOptions; 022import com.echothree.model.control.content.common.ContentProperties; 023import com.echothree.model.control.content.common.transfer.ContentCatalogItemTransfer; 024import com.echothree.model.control.content.server.control.ContentControl; 025import com.echothree.model.control.inventory.server.control.InventoryControl; 026import com.echothree.model.control.item.common.ItemPriceTypes; 027import com.echothree.model.control.item.server.control.ItemControl; 028import com.echothree.model.control.uom.server.control.UomControl; 029import com.echothree.model.data.content.server.entity.ContentCatalogItem; 030import com.echothree.model.data.user.server.entity.UserVisit; 031import com.echothree.util.common.form.TransferProperties; 032import com.echothree.util.server.string.AmountUtils; 033import javax.enterprise.context.RequestScoped; 034 035@RequestScoped 036public class ContentCatalogItemTransferCache 037 extends BaseContentTransferCache<ContentCatalogItem, ContentCatalogItemTransfer> { 038 039 @Inject 040 AccountingControl accountingControl; 041 042 @Inject 043 ContentControl contentControl; 044 045 @Inject 046 InventoryControl inventoryControl; 047 048 @Inject 049 ItemControl itemControl; 050 051 @Inject 052 UomControl uomControl; 053 054 AmountUtils amountUtils = AmountUtils.getInstance(); 055 056 TransferProperties transferProperties; 057 boolean filterContentCatalog; 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 filterEntityInstance; 071 072 /** Creates a new instance of ContentCatalogItemTransferCache */ 073 protected ContentCatalogItemTransferCache() { 074 super(); 075 076 var options = session.getOptions(); 077 if(options != null) { 078 setIncludeEntityAttributeGroups(options.contains(ContentOptions.ContentCatalogItemIncludeEntityAttributeGroups)); 079 setIncludeTagScopes(options.contains(ContentOptions.ContentCatalogItemIncludeTagScopes)); 080 } 081 082 transferProperties = session.getTransferProperties(); 083 if(transferProperties != null) { 084 var properties = transferProperties.getProperties(ContentCatalogItemTransfer.class); 085 086 if(properties != null) { 087 filterContentCatalog = !properties.contains(ContentProperties.CONTENT_CATALOG); 088 filterItem = !properties.contains(ContentProperties.ITEM); 089 filterInventoryCondition = !properties.contains(ContentProperties.INVENTORY_CONDITION); 090 filterUnitOfMeasureType = !properties.contains(ContentProperties.UNIT_OF_MEASURE_TYPE); 091 filterCurrency = !properties.contains(ContentProperties.CURRENCY); 092 filterUnformattedUnitPrice = !properties.contains(ContentProperties.UNFORMATTED_UNIT_PRICE); 093 filterUnitPrice = !properties.contains(ContentProperties.UNIT_PRICE); 094 filterUnformattedMinimumUnitPrice = !properties.contains(ContentProperties.UNFORMATTED_MINIMUM_UNIT_PRICE); 095 filterMinimumUnitPrice = !properties.contains(ContentProperties.MINIMUM_UNIT_PRICE); 096 filterUnformattedMaximumUnitPrice = !properties.contains(ContentProperties.UNFORMATTED_MAXIMUM_UNIT_PRICE); 097 filterMaximumUnitPrice = !properties.contains(ContentProperties.MAXIMUM_UNIT_PRICE); 098 filterUnformattedUnitPriceIncrement = !properties.contains(ContentProperties.UNFORMATTED_UNIT_PRICE_INCREMENT); 099 filterUnitPriceIncrement = !properties.contains(ContentProperties.UNIT_PRICE_INCREMENT); 100 filterEntityInstance = !properties.contains(ContentProperties.ENTITY_INSTANCE); 101 } 102 } 103 104 setIncludeEntityInstance(!filterEntityInstance); 105 } 106 107 public ContentCatalogItemTransfer getContentCatalogItemTransfer(UserVisit userVisit, ContentCatalogItem contentCatalogItem) { 108 var contentCatalogItemTransfer = get(contentCatalogItem); 109 110 if(contentCatalogItemTransfer == null) { 111 var contentCatalog = filterContentCatalog ? null : contentControl.getContentCatalogTransfer(userVisit, contentCatalogItem.getContentCatalog()); 112 var item = contentCatalogItem.getItem(); 113 var itemTransfer = filterItem ? null : itemControl.getItemTransfer(userVisit, item); 114 var inventoryConditionTransfer = inventoryControl.getInventoryConditionTransfer(userVisit, contentCatalogItem.getInventoryCondition()); 115 var unitOfMeasureTypeTransfer = filterUnitOfMeasureType ? null : uomControl.getUnitOfMeasureTypeTransfer(userVisit, contentCatalogItem.getUnitOfMeasureType()); 116 var currency = contentCatalogItem.getCurrency(); 117 var currencyTransfer = filterCurrency ? null : accountingControl.getCurrencyTransfer(userVisit, currency); 118 Long unformattedUnitPrice = null; 119 String unitPrice = null; 120 Long unformattedMinimumUnitPrice = null; 121 String minimumUnitPrice = null; 122 Long unformattedMaximumUnitPrice = null; 123 String maximumUnitPrice = null; 124 Long unformattedUnitPriceIncrement = null; 125 String unitPriceIncrement = null; 126 127 var itemPriceTypeName = item.getLastDetail().getItemPriceType().getItemPriceTypeName(); 128 if(ItemPriceTypes.FIXED.name().equals(itemPriceTypeName)) { 129 if(!filterUnformattedUnitPrice || !filterUnitPrice) { 130 var contentCatalogItemFixedPrice = contentControl.getContentCatalogItemFixedPrice(contentCatalogItem); 131 132 if(contentCatalogItemFixedPrice != null) { 133 var rawUnitPrice = contentCatalogItemFixedPrice.getUnitPrice(); 134 135 unformattedUnitPrice = filterUnformattedUnitPrice ? null : rawUnitPrice; 136 unitPrice = filterUnitPrice ? null : amountUtils.formatPriceUnit(currency, rawUnitPrice); 137 } 138 } 139 } else if(ItemPriceTypes.VARIABLE.name().equals(itemPriceTypeName)) { 140 if(!filterUnformattedMinimumUnitPrice || !filterMinimumUnitPrice || !filterUnformattedMaximumUnitPrice || !filterMaximumUnitPrice 141 || !filterUnformattedUnitPriceIncrement || !filterUnitPriceIncrement) { 142 var contentCatalogItemVariablePrice = contentControl.getContentCatalogItemVariablePrice(contentCatalogItem); 143 144 if(contentCatalogItemVariablePrice != null) { 145 var rawMinimumUnitPrice = contentCatalogItemVariablePrice.getMinimumUnitPrice(); 146 var rawMaximumUnitPrice = contentCatalogItemVariablePrice.getMaximumUnitPrice(); 147 var rawUnitPriceIncrement = contentCatalogItemVariablePrice.getUnitPriceIncrement(); 148 149 unformattedMinimumUnitPrice = filterUnformattedMinimumUnitPrice ? null : rawMinimumUnitPrice; 150 minimumUnitPrice = filterMinimumUnitPrice ? null : amountUtils.formatPriceUnit(currency, rawMinimumUnitPrice); 151 unformattedMaximumUnitPrice = filterUnformattedMaximumUnitPrice ? null : rawMaximumUnitPrice; 152 maximumUnitPrice = filterMaximumUnitPrice ? null : amountUtils.formatPriceUnit(currency, rawMaximumUnitPrice); 153 unformattedUnitPriceIncrement = filterUnformattedUnitPriceIncrement ? null : rawUnitPriceIncrement; 154 unitPriceIncrement = filterUnitPriceIncrement ? null : amountUtils.formatPriceUnit(currency, rawUnitPriceIncrement); 155 } 156 } 157 } 158 159 contentCatalogItemTransfer = new ContentCatalogItemTransfer(contentCatalog, itemTransfer, inventoryConditionTransfer, unitOfMeasureTypeTransfer, 160 currencyTransfer, unformattedUnitPrice, unitPrice, unformattedMinimumUnitPrice, minimumUnitPrice, unformattedMaximumUnitPrice, 161 maximumUnitPrice, unformattedUnitPriceIncrement, unitPriceIncrement); 162 put(userVisit, contentCatalogItem, contentCatalogItemTransfer); 163 } 164 165 return contentCatalogItemTransfer; 166 } 167 168}