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.training.server.transfer; 018 019import com.echothree.model.control.training.common.TrainingOptions; 020import com.echothree.model.control.training.common.transfer.TrainingClassTransfer; 021import com.echothree.model.control.training.server.control.TrainingControl; 022import com.echothree.model.control.uom.common.UomConstants; 023import com.echothree.model.control.uom.server.control.UomControl; 024import com.echothree.model.control.workeffort.common.transfer.WorkEffortScopeTransfer; 025import com.echothree.model.control.workeffort.server.control.WorkEffortControl; 026import com.echothree.model.data.training.server.entity.TrainingClass; 027import com.echothree.model.data.training.server.entity.TrainingClassDetail; 028import com.echothree.model.data.training.server.entity.TrainingClassTranslation; 029import com.echothree.model.data.uom.server.entity.UnitOfMeasureKind; 030import com.echothree.model.data.user.server.entity.UserVisit; 031import com.echothree.model.data.workeffort.server.entity.WorkEffortScope; 032import com.echothree.util.common.transfer.ListWrapper; 033import com.echothree.util.server.persistence.Session; 034import com.echothree.util.server.string.PercentUtils; 035import com.echothree.util.server.string.UnitOfMeasureUtils; 036import java.util.Set; 037 038public class TrainingClassTransferCache 039 extends BaseTrainingTransferCache<TrainingClass, TrainingClassTransfer> { 040 041 UomControl uomControl = Session.getModelController(UomControl.class); 042 WorkEffortControl workEffortControl = Session.getModelController(WorkEffortControl.class); 043 boolean includeTrainingClassSections; 044 boolean includePartyTrainingClasses; 045 046 /** Creates a new instance of TrainingClassTransferCache */ 047 public TrainingClassTransferCache(UserVisit userVisit, TrainingControl trainingControl) { 048 super(userVisit, trainingControl); 049 050 var options = session.getOptions(); 051 if(options != null) { 052 includeTrainingClassSections = options.contains(TrainingOptions.TrainingClassIncludeTrainingClassSections); 053 includePartyTrainingClasses = options.contains(TrainingOptions.TrainingClassIncludePartyTrainingClasses); 054 } 055 056 setIncludeEntityInstance(true); 057 } 058 059 public TrainingClassTransfer getTrainingClassTransfer(TrainingClass trainingClass) { 060 TrainingClassTransfer trainingClassTransfer = get(trainingClass); 061 062 if(trainingClassTransfer == null) { 063 TrainingClassDetail trainingClassDetail = trainingClass.getLastDetail(); 064 String trainingClassName = trainingClassDetail.getTrainingClassName(); 065 UnitOfMeasureKind timeUnitOfMeasureKind = uomControl.getUnitOfMeasureKindByUnitOfMeasureKindUseTypeUsingNames(UomConstants.UnitOfMeasureKindUseType_TIME); 066 UnitOfMeasureUtils unitOfMeasureUtils = UnitOfMeasureUtils.getInstance(); 067 Long unformattedEstimatedReadingTime = trainingClassDetail.getEstimatedReadingTime(); 068 String estimatedReadingTime = unitOfMeasureUtils.formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, unformattedEstimatedReadingTime); 069 Long unformattedReadingTimeAllowed = trainingClassDetail.getReadingTimeAllowed(); 070 String readingTimeAllowed = unitOfMeasureUtils.formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, unformattedReadingTimeAllowed); 071 Long unformattedEstimatedTestingTime = trainingClassDetail.getEstimatedTestingTime(); 072 String estimatedTestingTime = unitOfMeasureUtils.formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, unformattedEstimatedTestingTime); 073 Long unformattedTestingTimeAllowed = trainingClassDetail.getTestingTimeAllowed(); 074 String testingTimeAllowed = unitOfMeasureUtils.formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, unformattedTestingTimeAllowed); 075 Long unformattedRequiredCompletionTime = trainingClassDetail.getRequiredCompletionTime(); 076 String requiredCompletionTime = unitOfMeasureUtils.formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, unformattedRequiredCompletionTime); 077 WorkEffortScope workEffortScope = trainingClassDetail.getWorkEffortScope(); 078 WorkEffortScopeTransfer workEffortScopeTransfer = workEffortScope == null ? null : workEffortControl.getWorkEffortScopeTransfer(userVisit, workEffortScope); 079 Integer unformattedDefaultPercentageToPass = trainingClassDetail.getDefaultPercentageToPass(); 080 String defaultPercentageToPass = PercentUtils.getInstance().formatFractionalPercent(unformattedDefaultPercentageToPass); 081 Integer overallQuestionCount = trainingClassDetail.getOverallQuestionCount(); 082 Long unformattedTestingValidityTime = trainingClassDetail.getTestingValidityTime(); 083 String testingValidityTime = unitOfMeasureUtils.formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, unformattedTestingValidityTime); 084 Long unformattedExpiredRetentionTime = trainingClassDetail.getExpiredRetentionTime(); 085 String expiredRetentionTime = unitOfMeasureUtils.formatUnitOfMeasure(userVisit, timeUnitOfMeasureKind, unformattedExpiredRetentionTime); 086 Boolean alwaysReassignOnExpiration = trainingClassDetail.getAlwaysReassignOnExpiration(); 087 Boolean isDefault = trainingClassDetail.getIsDefault(); 088 Integer sortOrder = trainingClassDetail.getSortOrder(); 089 TrainingClassTranslation trainingClassTranslation = trainingControl.getBestTrainingClassTranslation(trainingClass, getLanguage()); 090 String description = trainingClassTranslation == null ? trainingClassName : trainingClassTranslation.getDescription(); 091 092 trainingClassTransfer = new TrainingClassTransfer(trainingClassName, unformattedEstimatedReadingTime, estimatedReadingTime, 093 unformattedReadingTimeAllowed, readingTimeAllowed, unformattedEstimatedTestingTime, estimatedTestingTime, unformattedTestingTimeAllowed, 094 testingTimeAllowed, unformattedRequiredCompletionTime, requiredCompletionTime, workEffortScopeTransfer, unformattedDefaultPercentageToPass, 095 defaultPercentageToPass, overallQuestionCount, unformattedTestingValidityTime, testingValidityTime, unformattedExpiredRetentionTime, 096 expiredRetentionTime, alwaysReassignOnExpiration, isDefault, sortOrder, description); 097 put(trainingClass, trainingClassTransfer); 098 099 if(includeTrainingClassSections) { 100 trainingClassTransfer.setTrainingClassSections(new ListWrapper<>(trainingControl.getTrainingClassSectionTransfers(userVisit, trainingClass))); 101 } 102 103 if(includePartyTrainingClasses) { 104 trainingClassTransfer.setPartyTrainingClasses(new ListWrapper<>(trainingControl.getPartyTrainingClassTransfersByTrainingClass(userVisit, trainingClass))); 105 } 106 } 107 108 return trainingClassTransfer; 109 } 110 111}