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}