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