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}