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