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.workrequirement.server.transfer;
018
019import com.echothree.model.control.core.server.control.CoreControl;
020import com.echothree.model.control.uom.server.control.UomControl;
021import com.echothree.model.control.workeffort.common.transfer.WorkEffortTransfer;
022import com.echothree.model.control.workeffort.server.control.WorkEffortControl;
023import com.echothree.model.control.workrequirement.common.workflow.WorkRequirementStatusConstants;
024import com.echothree.model.control.workflow.common.transfer.WorkflowEntityStatusTransfer;
025import com.echothree.model.control.workflow.server.control.WorkflowControl;
026import com.echothree.model.control.workrequirement.common.WorkRequirementOptions;
027import com.echothree.model.control.workrequirement.common.transfer.WorkRequirementScopeTransfer;
028import com.echothree.model.control.workrequirement.common.transfer.WorkRequirementTransfer;
029import com.echothree.model.control.workrequirement.server.control.WorkRequirementControl;
030import com.echothree.model.data.core.server.entity.EntityInstance;
031import com.echothree.model.data.user.server.entity.UserVisit;
032import com.echothree.model.data.workrequirement.server.entity.WorkRequirement;
033import com.echothree.model.data.workrequirement.server.entity.WorkRequirementDetail;
034import com.echothree.util.common.transfer.ListWrapper;
035import com.echothree.util.server.persistence.Session;
036import java.util.Set;
037
038public class WorkRequirementTransferCache
039        extends BaseWorkRequirementTransferCache<WorkRequirement, WorkRequirementTransfer> {
040    
041    CoreControl coreControl = Session.getModelController(CoreControl.class);
042    UomControl uomControl = Session.getModelController(UomControl.class);
043    WorkEffortControl workEffortControl = Session.getModelController(WorkEffortControl.class);
044    WorkflowControl workflowControl = Session.getModelController(WorkflowControl.class);
045    boolean includeWorkAssignments;
046    boolean includeWorkTimes;
047    
048    /** Creates a new instance of WorkRequirementTransferCache */
049    public WorkRequirementTransferCache(UserVisit userVisit, WorkRequirementControl workRequirementControl) {
050        super(userVisit, workRequirementControl);
051
052        var options = session.getOptions();
053        if(options != null) {
054            includeWorkAssignments = options.contains(WorkRequirementOptions.WorkRequirementIncludeWorkAssignments);
055            includeWorkTimes = options.contains(WorkRequirementOptions.WorkRequirementIncludeWorkTimes);
056        }
057        
058        setIncludeEntityInstance(true);
059    }
060    
061    public WorkRequirementTransfer getWorkRequirementTransfer(WorkRequirement workRequirement) {
062        WorkRequirementTransfer workRequirementTransfer = get(workRequirement);
063        
064        if(workRequirementTransfer == null) {
065            WorkRequirementDetail workRequirementDetail = workRequirement.getLastDetail();
066            String workRequirementName = workRequirementDetail.getWorkRequirementName();
067            WorkEffortTransfer workEffort = workEffortControl.getWorkEffortTransfer(userVisit, workRequirementDetail.getWorkEffort());
068            WorkRequirementScopeTransfer workRequirementScope = workRequirementControl.getWorkRequirementScopeTransfer(userVisit, workRequirementDetail.getWorkRequirementScope());
069            Long unformattedStartTime = workRequirementDetail.getStartTime();
070            String startTime = formatTypicalDateTime(unformattedStartTime);
071            Long unformattedRequiredTime = workRequirementDetail.getRequiredTime();
072            String requiredTime = formatTypicalDateTime(unformattedRequiredTime);
073
074            EntityInstance entityInstance = coreControl.getEntityInstanceByBasePK(workRequirement.getPrimaryKey());
075            WorkflowEntityStatusTransfer workRequirementStatus = workflowControl.getWorkflowEntityStatusTransferByEntityInstanceUsingNames(userVisit,
076                    WorkRequirementStatusConstants.Workflow_WORK_REQUIREMENT_STATUS, entityInstance);
077
078            workRequirementTransfer = new WorkRequirementTransfer(workRequirementName, workEffort, workRequirementScope, unformattedStartTime, startTime,
079                    unformattedRequiredTime, requiredTime, workRequirementStatus);
080            put(workRequirement, workRequirementTransfer);
081
082            if(includeWorkAssignments) {
083                workRequirementTransfer.setWorkAssignments(new ListWrapper<>(workRequirementControl.getWorkAssignmentTransfersByWorkRequirement(userVisit, workRequirement)));
084            }
085
086            if(includeWorkTimes) {
087                workRequirementTransfer.setWorkTimes(new ListWrapper<>(workRequirementControl.getWorkTimeTransfersByWorkRequirement(userVisit, workRequirement)));
088            }
089        }
090        
091        return workRequirementTransfer;
092    }
093    
094}