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