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