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.warehouse.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.contact.server.control.ContactControl; 022import com.echothree.model.control.document.server.control.DocumentControl; 023import com.echothree.model.control.party.common.PartyOptions; 024import com.echothree.model.control.party.common.transfer.DateTimeFormatTransfer; 025import com.echothree.model.control.party.common.transfer.LanguageTransfer; 026import com.echothree.model.control.party.common.transfer.PartyGroupTransfer; 027import com.echothree.model.control.party.common.transfer.PartyTypeTransfer; 028import com.echothree.model.control.party.common.transfer.PersonTransfer; 029import com.echothree.model.control.party.common.transfer.TimeZoneTransfer; 030import com.echothree.model.control.party.server.control.PartyControl; 031import com.echothree.model.control.printer.server.control.PrinterControl; 032import com.echothree.model.control.scale.server.control.ScaleControl; 033import com.echothree.model.control.warehouse.common.WarehouseOptions; 034import com.echothree.model.control.warehouse.common.transfer.WarehouseTransfer; 035import com.echothree.model.control.warehouse.common.transfer.WarehouseTypeTransfer; 036import com.echothree.model.control.warehouse.server.control.WarehouseControl; 037import com.echothree.model.data.accounting.server.entity.Currency; 038import com.echothree.model.data.party.server.entity.DateTimeFormat; 039import com.echothree.model.data.party.server.entity.Language; 040import com.echothree.model.data.party.server.entity.Party; 041import com.echothree.model.data.party.server.entity.PartyDetail; 042import com.echothree.model.data.party.server.entity.PartyGroup; 043import com.echothree.model.data.party.server.entity.Person; 044import com.echothree.model.data.party.server.entity.TimeZone; 045import com.echothree.model.data.user.server.entity.UserVisit; 046import com.echothree.model.data.warehouse.server.entity.Warehouse; 047import com.echothree.util.common.transfer.ListWrapper; 048import com.echothree.util.server.persistence.Session; 049 050public class WarehouseTransferCache 051 extends BaseWarehouseTransferCache<Party, WarehouseTransfer> { 052 053 AccountingControl accountingControl = Session.getModelController(AccountingControl.class); 054 ContactControl contactControl = Session.getModelController(ContactControl.class); 055 DocumentControl documentControl = Session.getModelController(DocumentControl.class); 056 PartyControl partyControl = Session.getModelController(PartyControl.class); 057 PrinterControl printerControl = Session.getModelController(PrinterControl.class); 058 ScaleControl scaleControl = Session.getModelController(ScaleControl.class); 059 060 boolean includeLocationsCount; 061 boolean includeLocations; 062 boolean includePartyAliases; 063 boolean includePartyContactMechanisms; 064 boolean includePartyDocuments; 065 boolean includePartyPrinterGroupUses; 066 boolean includePartyScaleUses; 067 068 /** Creates a new instance of WarehouseTransferCache */ 069 public WarehouseTransferCache(UserVisit userVisit, WarehouseControl warehouseControl) { 070 super(userVisit, warehouseControl); 071 072 var options = session.getOptions(); 073 if(options != null) { 074 includeLocationsCount = options.contains(WarehouseOptions.WarehouseIncludeLocationsCount); 075 includeLocations = options.contains(WarehouseOptions.WarehouseIncludeLocations); 076 setIncludeKey(options.contains(PartyOptions.PartyIncludeKey) || options.contains(WarehouseOptions.WarehouseIncludeKey)); 077 setIncludeGuid(options.contains(PartyOptions.PartyIncludeGuid) || options.contains(WarehouseOptions.WarehouseIncludeGuid)); 078 includePartyAliases = options.contains(PartyOptions.PartyIncludePartyAliases); 079 includePartyContactMechanisms = options.contains(PartyOptions.PartyIncludePartyContactMechanisms); 080 includePartyDocuments = options.contains(PartyOptions.PartyIncludePartyDocuments); 081 includePartyPrinterGroupUses = options.contains(PartyOptions.PartyIncludePartyPrinterGroupUses); 082 includePartyScaleUses = options.contains(PartyOptions.PartyIncludePartyScaleUses); 083 setIncludeEntityAttributeGroups(options.contains(WarehouseOptions.WarehouseIncludeEntityAttributeGroups)); 084 setIncludeTagScopes(options.contains(WarehouseOptions.WarehouseIncludeTagScopes)); 085 } 086 087 setIncludeEntityInstance(true); 088 } 089 090 public WarehouseTransfer getWarehouseTransfer(Warehouse warehouse) { 091 return getWarehouseTransfer(warehouse.getParty()); 092 } 093 094 public WarehouseTransfer getWarehouseTransfer(Party party) { 095 WarehouseTransfer warehouseTransfer = get(party); 096 097 if(warehouseTransfer == null) { 098 PartyDetail partyDetail = party.getLastDetail(); 099 String partyName = partyDetail.getPartyName(); 100 PartyTypeTransfer partyTypeTransfer = partyControl.getPartyTypeTransfer(userVisit, partyDetail.getPartyType()); 101 Language preferredLanguage = partyDetail.getPreferredLanguage(); 102 LanguageTransfer preferredLanguageTransfer = preferredLanguage == null ? null : partyControl.getLanguageTransfer(userVisit, preferredLanguage); 103 Currency preferredCurrency = partyDetail.getPreferredCurrency(); 104 CurrencyTransfer preferredCurrencyTransfer = preferredCurrency == null ? null : accountingControl.getCurrencyTransfer(userVisit, preferredCurrency); 105 TimeZone preferredTimeZone = partyDetail.getPreferredTimeZone(); 106 TimeZoneTransfer preferredTimeZoneTransfer = preferredTimeZone == null ? null : partyControl.getTimeZoneTransfer(userVisit, preferredTimeZone); 107 DateTimeFormat preferredDateTimeFormat = partyDetail.getPreferredDateTimeFormat(); 108 DateTimeFormatTransfer preferredDateTimeFormatTransfer = preferredDateTimeFormat == null ? null : partyControl.getDateTimeFormatTransfer(userVisit, preferredDateTimeFormat); 109 Person person = partyControl.getPerson(party); 110 PersonTransfer personTransfer = person == null ? null : partyControl.getPersonTransfer(userVisit, person); 111 PartyGroup partyGroup = partyControl.getPartyGroup(party); 112 PartyGroupTransfer partyGroupTransfer = partyGroup == null ? null : partyControl.getPartyGroupTransfer(userVisit, partyGroup); 113 Warehouse warehouse = warehouseControl.getWarehouse(party); 114 String warehouseName = warehouse.getWarehouseName(); 115 WarehouseTypeTransfer warehouseTypeTransfer = warehouseControl.getWarehouseTypeTransfer(userVisit, warehouse.getWarehouseType()); 116 Boolean isDefault = warehouse.getIsDefault(); 117 Integer sortOrder = warehouse.getSortOrder(); 118 119 warehouseTransfer = new WarehouseTransfer(partyName, partyTypeTransfer, preferredLanguageTransfer, preferredCurrencyTransfer, 120 preferredTimeZoneTransfer, preferredDateTimeFormatTransfer, personTransfer, partyGroupTransfer, warehouseName, 121 warehouseTypeTransfer, isDefault, sortOrder); 122 put(party, warehouseTransfer); 123 124 if(includeLocationsCount) { 125 warehouseTransfer.setLocationsCount(warehouseControl.countLocationsByWarehouseParty(party)); 126 } 127 128 if(includeLocations) { 129 warehouseTransfer.setLocations(new ListWrapper<>(warehouseControl.getLocationTransfersByWarehouseParty(userVisit, party))); 130 } 131 132 if(includePartyAliases) { 133 warehouseTransfer.setPartyAliases(new ListWrapper<>(partyControl.getPartyAliasTransfersByParty(userVisit, party))); 134 } 135 136 if(includePartyContactMechanisms) { 137 warehouseTransfer.setPartyContactMechanisms(new ListWrapper<>(contactControl.getPartyContactMechanismTransfersByParty(userVisit, party))); 138 } 139 140 if(includePartyDocuments) { 141 warehouseTransfer.setPartyDocuments(new ListWrapper<>(documentControl.getPartyDocumentTransfersByParty(userVisit, party))); 142 } 143 144 if(includePartyPrinterGroupUses) { 145 warehouseTransfer.setPartyPrinterGroupUses(new ListWrapper<>(printerControl.getPartyPrinterGroupUseTransfersByParty(userVisit, party))); 146 } 147 148 if(includePartyScaleUses) { 149 warehouseTransfer.setPartyScaleUses(new ListWrapper<>(scaleControl.getPartyScaleUseTransfersByParty(userVisit, party))); 150 } 151 } 152 153 return warehouseTransfer; 154 } 155 156}