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