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.vendor.server.transfer; 018 019import com.echothree.model.control.cancellationpolicy.server.control.CancellationPolicyControl; 020import com.echothree.model.control.comment.common.CommentConstants; 021import com.echothree.model.control.core.server.control.EntityInstanceControl; 022import com.echothree.model.control.item.common.ItemDescriptionTypes; 023import com.echothree.model.control.item.server.control.ItemControl; 024import com.echothree.model.control.item.server.logic.ItemDescriptionLogic; 025import com.echothree.model.control.returnpolicy.server.control.ReturnPolicyControl; 026import com.echothree.model.control.vendor.common.VendorOptions; 027import com.echothree.model.control.vendor.common.transfer.VendorItemTransfer; 028import com.echothree.model.control.vendor.common.workflow.VendorItemStatusConstants; 029import com.echothree.model.control.vendor.server.control.VendorControl; 030import com.echothree.model.control.workflow.server.control.WorkflowControl; 031import com.echothree.model.data.user.server.entity.UserVisit; 032import com.echothree.model.data.vendor.server.entity.VendorItem; 033import com.echothree.util.common.transfer.ListWrapper; 034import com.echothree.util.server.persistence.Session; 035import javax.enterprise.context.RequestScoped; 036 037@RequestScoped 038public class VendorItemTransferCache 039 extends BaseVendorTransferCache<VendorItem, VendorItemTransfer> { 040 041 CancellationPolicyControl cancellationPolicyControl = Session.getModelController(CancellationPolicyControl.class); 042 EntityInstanceControl entityInstanceControl = Session.getModelController(EntityInstanceControl.class); 043 ItemControl itemControl = Session.getModelController(ItemControl.class); 044 ReturnPolicyControl returnPolicyControl = Session.getModelController(ReturnPolicyControl.class); 045 WorkflowControl workflowControl = Session.getModelController(WorkflowControl.class); 046 VendorControl vendorControl = Session.getModelController(VendorControl.class); 047 048 ItemDescriptionLogic itemDescriptionLogic = ItemDescriptionLogic.getInstance(); 049 050 boolean includeVendorItemCosts; 051 boolean includePurchasingComments; 052 053 /** Creates a new instance of VendorItemTransferCache */ 054 protected VendorItemTransferCache() { 055 super(); 056 057 var options = session.getOptions(); 058 if(options != null) { 059 includeVendorItemCosts = options.contains(VendorOptions.VendorItemIncludeVendorItemCosts); 060 includePurchasingComments = options.contains(VendorOptions.VendorItemIncludePurchasingComments); 061 setIncludeEntityAttributeGroups(options.contains(VendorOptions.VendorItemIncludeEntityAttributeGroups)); 062 setIncludeTagScopes(options.contains(VendorOptions.VendorItemIncludeTagScopes)); 063 } 064 065 setIncludeEntityInstance(true); 066 } 067 068 public VendorItemTransfer getVendorItemTransfer(UserVisit userVisit, VendorItem vendorItem) { 069 var vendorItemTransfer = get(vendorItem); 070 071 if(vendorItemTransfer == null) { 072 var vendorItemDetail = vendorItem.getLastDetail(); 073 var item = vendorItemDetail.getItem(); 074 var itemTransfer = itemControl.getItemTransfer(userVisit, item); 075 var vendor = vendorControl.getVendorTransfer(userVisit, vendorItemDetail.getVendorParty()); 076 var vendorItemName = vendorItemDetail.getVendorItemName(); 077 var description = vendorItemDetail.getDescription(); 078 var priority = vendorItemDetail.getPriority(); 079 var cancellationPolicy = vendorItemDetail.getCancellationPolicy(); 080 var cancellationPolicyTransfer = cancellationPolicy == null? null: cancellationPolicyControl.getCancellationPolicyTransfer(userVisit, cancellationPolicy); 081 var returnPolicy = vendorItemDetail.getReturnPolicy(); 082 var returnPolicyTransfer = returnPolicy == null? null: returnPolicyControl.getReturnPolicyTransfer(userVisit, returnPolicy); 083 084 if(description == null) { 085 description = itemDescriptionLogic.getBestStringUsingNames(null, ItemDescriptionTypes.PURCHASE_ORDER_DESCRIPTION.name(), item, getParty(userVisit)); 086 } 087 088 var entityInstance = entityInstanceControl.getEntityInstanceByBasePK(vendorItem.getPrimaryKey()); 089 var vendorItemStatusTransfer = workflowControl.getWorkflowEntityStatusTransferByEntityInstanceUsingNames(userVisit, 090 VendorItemStatusConstants.Workflow_VENDOR_ITEM_STATUS, entityInstance); 091 092 vendorItemTransfer = new VendorItemTransfer(itemTransfer, vendor, vendorItemName, description, priority, cancellationPolicyTransfer, 093 returnPolicyTransfer, vendorItemStatusTransfer); 094 put(userVisit, vendorItem, vendorItemTransfer); 095 096 if(includeVendorItemCosts) { 097 vendorItemTransfer.setVendorItemCosts(new ListWrapper<>(vendorControl.getVendorItemCostTransfersByVendorItem(userVisit, vendorItem))); 098 } 099 100 if(includePurchasingComments) { 101 setupComments(userVisit, null, entityInstance, vendorItemTransfer, CommentConstants.CommentType_VENDOR_ITEM_PURCHASING); 102 } 103 } 104 105 return vendorItemTransfer; 106 } 107 108}