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.workrequirement.server.transfer; 018 019import com.echothree.model.control.selector.server.control.SelectorControl; 020import com.echothree.model.control.sequence.server.control.SequenceControl; 021import com.echothree.model.control.uom.common.UomConstants; 022import com.echothree.model.control.uom.server.control.UomControl; 023import com.echothree.model.control.workeffort.server.control.WorkEffortControl; 024import com.echothree.model.control.workrequirement.common.WorkRequirementOptions; 025import com.echothree.model.control.workrequirement.common.transfer.WorkRequirementScopeTransfer; 026import com.echothree.model.control.workrequirement.server.control.WorkRequirementControl; 027import com.echothree.model.data.user.server.entity.UserVisit; 028import com.echothree.model.data.workrequirement.server.entity.WorkRequirementScope; 029import com.echothree.util.common.transfer.ListWrapper; 030import com.echothree.util.server.persistence.Session; 031import javax.enterprise.context.RequestScoped; 032 033@RequestScoped 034public class WorkRequirementScopeTransferCache 035 extends BaseWorkRequirementTransferCache<WorkRequirementScope, WorkRequirementScopeTransfer> { 036 037 SelectorControl selectorControl = Session.getModelController(SelectorControl.class); 038 SequenceControl sequenceControl = Session.getModelController(SequenceControl.class); 039 UomControl uomControl = Session.getModelController(UomControl.class); 040 WorkEffortControl workEffortControl = Session.getModelController(WorkEffortControl.class); 041 WorkRequirementControl workRequirementControl = Session.getModelController(WorkRequirementControl.class); 042 043 boolean includeWorkRequirements; 044 045 /** Creates a new instance of WorkRequirementScopeTransferCache */ 046 protected WorkRequirementScopeTransferCache() { 047 var options = session.getOptions(); 048 if(options != null) { 049 includeWorkRequirements = options.contains(WorkRequirementOptions.WorkRequirementScopeIncludeWorkRequirements); 050 } 051 052 setIncludeEntityInstance(true); 053 } 054 055 public WorkRequirementScopeTransfer getWorkRequirementScopeTransfer(UserVisit userVisit, WorkRequirementScope workRequirementScope) { 056 var workRequirementScopeTransfer = get(workRequirementScope); 057 058 if(workRequirementScopeTransfer == null) { 059 var workRequirementScopeDetail = workRequirementScope.getLastDetail(); 060 var workEffortScopeTransfer = workEffortControl.getWorkEffortScopeTransfer(userVisit, workRequirementScopeDetail.getWorkEffortScope()); 061 var workRequirementTypeTransfer = workRequirementControl.getWorkRequirementTypeTransfer(userVisit, workRequirementScopeDetail.getWorkRequirementType()); 062 var workRequirementSequence = workRequirementScopeDetail.getWorkRequirementSequence(); 063 var workRequirementSequenceTransfer = workRequirementSequence == null? null: sequenceControl.getSequenceTransfer(userVisit, workRequirementSequence); 064 var workTimeSequence = workRequirementScopeDetail.getWorkTimeSequence(); 065 var workTimeSequenceTransfer = workTimeSequence == null? null: sequenceControl.getSequenceTransfer(userVisit, workTimeSequence); 066 var workAssignmentSelector = workRequirementScopeDetail.getWorkAssignmentSelector(); 067 var workAssignmentSelectorTransfer = workAssignmentSelector == null? null: selectorControl.getSelectorTransfer(userVisit, workAssignmentSelector); 068 var timeUnitOfMeasureKind = uomControl.getUnitOfMeasureKindByUnitOfMeasureKindUseTypeUsingNames(UomConstants.UnitOfMeasureKindUseType_TIME); 069 var estimatedTimeAllowed = formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, workRequirementScopeDetail.getEstimatedTimeAllowed()); 070 var maximumTimeAllowed = formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, workRequirementScopeDetail.getMaximumTimeAllowed()); 071 072 workRequirementScopeTransfer = new WorkRequirementScopeTransfer(workEffortScopeTransfer, workRequirementTypeTransfer, 073 workRequirementSequenceTransfer, workTimeSequenceTransfer, workAssignmentSelectorTransfer, estimatedTimeAllowed, 074 maximumTimeAllowed); 075 put(userVisit, workRequirementScope, workRequirementScopeTransfer); 076 077 if(includeWorkRequirements) { 078 workRequirementScopeTransfer.setWorkRequirements(new ListWrapper<>(workRequirementControl.getWorkRequirementTransfersByWorkRequirementScope(userVisit, workRequirementScope))); 079 } 080 } 081 082 return workRequirementScopeTransfer; 083 } 084 085}