You need to sign in to do that
Don't have an account?
nilesh walke 6
please help need code coverage
global with sharing class ReviewStepValidationHelper {
public ReviewStepValidationHelper(){}
global static List<String> validateReviewSteps(List<Id> stepIds, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Id IN: stepIds AND Template__c = false ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateProgramTemplates(Id programId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Program__c =: programId AND Template__c = true ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateAnnouncementTemplates(Id announcementId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Announcement__c =: announcementId AND Template__c = true ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateAnnouncementSteps(Id announcementId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Announcement__c =: announcementId AND Template__c = false ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateSteps(List<ReviewStep__c> steps, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
List<String> errors = new List<String>();
try{
List<Id> stepIds = new List<Id>();
Set<Id> weightedPanels = new Set<Id>();
Map<Id, String> panelNameMap = new Map<Id, String>();
Integer stepNumber = 0;
Boolean hasStepError = false;
Boolean weightError = false;
String stepName = '';
Decimal weight;
Decimal stepWeight = 0;
for(ReviewStep__c step: steps) {
if(validateSteps) {
if(step.StepNumber__c != stepNumber + 1) {
hasStepError = true;
} else {
stepNumber += 1;
}
}
stepName = step.Name;
stepWeight += step.Weight__c;
stepIds.add(step.Id);
weight = 0;
if(step.Review_Panels__r.size() > 0) {
for(ReviewPanel__c rp: step.Review_Panels__r) {
if(rp.Weight__c > 0) {
weightedPanels.add(rp.Id);
weight += rp.Weight__c;
}
if(validateReviewers) {
/*
if(rp.ReviewersCount__c < 1 && rp.Required__c){ // MinimumNumberOfReviewers__c
errors.add(step.Name + ' - ' + rp.PanelName__c + ': This panel is required and must have a minimum of 1 reviewer.');
}*/
//if(rp.ReviewersCount__c < rp.MinimumNumberOfReviewers__c){
// errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': This form only has ' + rp.ReviewersCount__c + ' of the required ' + rp.MinimumNumberOfReviewers__c + ' reviewers.');
//}
if(rp.EndDate__c == null && rp.DueInDays__c == null){
errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': A value for the Due in Days field is required.');
} else if(rp.EndDate__c != null && rp.EndDate__c < System.TODAY()) {
errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': The form due date(' + rp.EndDate__c + ') cannot be before the current date.');
}
}
panelNameMap.put(rp.Id, step.Name + ' - ' + rp.PanelName__c);
}
} else if(validateSteps && step.Name != 'Funding Decision Memo'){
errors.add('Setup Tab - ' + step.Name + ': At least one form is required for this review step.');
}
if(weight != 0 && weight != 100 && validateWeights) {
if(step.Weight__c != 0) {
errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% for a weighted step. It is currently ' + weight + '%.');
} else {
errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% or 0%. It is currently ' + weight + '%.');
}
} else if(step.Weight__c != 0 && weight != 100 && validateWeights) {
errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% for a weighted step. It is currently ' + weight + '%.');
}
}
System.debug('errors 1: '+errors);
if(validateSteps) {
if(validateWeights && stepWeight != 100) {
errors.add('Setup Tab - The total Review Step weight must equal 100%. It is currently ' + stepWeight + '%.');
}
if(hasStepError) {
errors.add('Setup Tab - Sequence of Review step must start from 1 and have no gaps.');
}
if(stepName != 'Funding Decision Memo') {
errors.add('Setup Tab - The Funding Decision Memo must always be the final step in the review process');
}
}
System.debug('errors 2: '+errors);
if(validateWeights) {
List<ReviewPanelCategory__c> categories = [SELECT Id, Name, Weight__c, ReviewPanel__c, ReviewPanel__r.PanelName__c, ReviewPanel__r.ReviewStep__r.Name, (SELECT MaxScore__c FROM ReviewCategoryQuestions__r) FROM ReviewPanelCategory__c WHERE ReviewPanel__r.ReviewStep__c IN: stepIds];
Map<Id, Decimal> weightMap = new Map<Id, Decimal>();
Decimal maxScore;
Boolean invalidScore;
Set<Id> panelsWithCategories = new Set<Id>();
for(ReviewPanelCategory__c category: categories) {
panelsWithCategories.add(category.ReviewPanel__c);
invalidScore = false;
if(!weightMap.containsKey(category.ReviewPanel__c)) {
weightMap.put(category.ReviewPanel__c, 0);
}
weightMap.put(category.ReviewPanel__c, weightMap.get(category.ReviewPanel__c) + category.Weight__c);
maxScore = 0;
for(ReviewPanelCategoryQuestion__c question: category.ReviewCategoryQuestions__r) {
maxScore += question.MaxScore__c;
if(question.MaxScore__c != 0 && category.Weight__c == 0) {
invalidScore = true;
}
}
if(invalidScore) {
errors.add('Setup Tab - ' + category.ReviewPanel__r.ReviewStep__r.Name + ' - ' + category.ReviewPanel__r.PanelName__c + ': A score cannot be associated to a question in the ' + category.Name + ' section because it does not have a weight.');
}
if(maxScore == 0 && category.Weight__c != 0) {
errors.add('Setup Tab - ' + category.ReviewPanel__r.ReviewStep__r.Name + ' - ' + category.ReviewPanel__r.PanelName__c + ': A score must be associated to at least one question in the ' + category.Name + ' section because it is weighted.');
}
}
System.debug('errors 3: '+errors);
for(Id key: panelNameMap.keySet()) {
if(!panelsWithCategories.contains(key)) {
errors.add('Setup Tab - ' + panelNameMap.get(key) + ': At least one section must be added to this form.');
}
}
if(weightMap.size() > 0) {
for(Id key: weightMap.keySet()) {
if(weightMap.get(key) != 100 && weightMap.get(key) != 0) {
errors.add('Setup Tab - ' + panelNameMap.get(key) + ': The total section weight must equal 100% or 0%. It is currently ' + weightMap.get(key) + '%.');
}
if(weightedPanels.contains(key) && weightMap.get(key) == 0) {
errors.add('Setup Tab - ' + panelNameMap.get(key) + ': A weighted form must contain weighted sections.');
}
}
} else {
for(Id panelId: weightedPanels) {
errors.add('Setup Tab - ' + panelNameMap.get(panelId) + ': A weighted form must contain weighted sections.');
}
}
System.debug('errors 4: '+errors);
}
System.debug('errors 5: '+errors);
return errors;
} catch(Exception e) {
errors.add(e.getMessage());
return errors;
}
}
public ReviewStepValidationHelper(){}
global static List<String> validateReviewSteps(List<Id> stepIds, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Id IN: stepIds AND Template__c = false ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateProgramTemplates(Id programId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Program__c =: programId AND Template__c = true ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateAnnouncementTemplates(Id announcementId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Announcement__c =: announcementId AND Template__c = true ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateAnnouncementSteps(Id announcementId, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
return validateSteps([SELECT Id, Name, StepNumber__c, Weight__c,
(SELECT Id, Name, Required__c, PanelName__c, MinimumNumberOfReviewers__c, EndDate__c, Weight__c, DueInDays__c FROM Review_Panels__r)
FROM ReviewStep__c WHERE Announcement__c =: announcementId AND Template__c = false ORDER BY StepNumber__c],
validateSteps,
validateWeights,
validateReviewers
);
}
global static List<String> validateSteps(List<ReviewStep__c> steps, Boolean validateSteps, Boolean validateWeights, Boolean validateReviewers) {
List<String> errors = new List<String>();
try{
List<Id> stepIds = new List<Id>();
Set<Id> weightedPanels = new Set<Id>();
Map<Id, String> panelNameMap = new Map<Id, String>();
Integer stepNumber = 0;
Boolean hasStepError = false;
Boolean weightError = false;
String stepName = '';
Decimal weight;
Decimal stepWeight = 0;
for(ReviewStep__c step: steps) {
if(validateSteps) {
if(step.StepNumber__c != stepNumber + 1) {
hasStepError = true;
} else {
stepNumber += 1;
}
}
stepName = step.Name;
stepWeight += step.Weight__c;
stepIds.add(step.Id);
weight = 0;
if(step.Review_Panels__r.size() > 0) {
for(ReviewPanel__c rp: step.Review_Panels__r) {
if(rp.Weight__c > 0) {
weightedPanels.add(rp.Id);
weight += rp.Weight__c;
}
if(validateReviewers) {
/*
if(rp.ReviewersCount__c < 1 && rp.Required__c){ // MinimumNumberOfReviewers__c
errors.add(step.Name + ' - ' + rp.PanelName__c + ': This panel is required and must have a minimum of 1 reviewer.');
}*/
//if(rp.ReviewersCount__c < rp.MinimumNumberOfReviewers__c){
// errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': This form only has ' + rp.ReviewersCount__c + ' of the required ' + rp.MinimumNumberOfReviewers__c + ' reviewers.');
//}
if(rp.EndDate__c == null && rp.DueInDays__c == null){
errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': A value for the Due in Days field is required.');
} else if(rp.EndDate__c != null && rp.EndDate__c < System.TODAY()) {
errors.add('Setup Tab - ' + step.Name + ' - ' + rp.PanelName__c + ': The form due date(' + rp.EndDate__c + ') cannot be before the current date.');
}
}
panelNameMap.put(rp.Id, step.Name + ' - ' + rp.PanelName__c);
}
} else if(validateSteps && step.Name != 'Funding Decision Memo'){
errors.add('Setup Tab - ' + step.Name + ': At least one form is required for this review step.');
}
if(weight != 0 && weight != 100 && validateWeights) {
if(step.Weight__c != 0) {
errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% for a weighted step. It is currently ' + weight + '%.');
} else {
errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% or 0%. It is currently ' + weight + '%.');
}
} else if(step.Weight__c != 0 && weight != 100 && validateWeights) {
errors.add('Setup Tab - ' + step.Name + ': The total Review Form weight must equal 100% for a weighted step. It is currently ' + weight + '%.');
}
}
System.debug('errors 1: '+errors);
if(validateSteps) {
if(validateWeights && stepWeight != 100) {
errors.add('Setup Tab - The total Review Step weight must equal 100%. It is currently ' + stepWeight + '%.');
}
if(hasStepError) {
errors.add('Setup Tab - Sequence of Review step must start from 1 and have no gaps.');
}
if(stepName != 'Funding Decision Memo') {
errors.add('Setup Tab - The Funding Decision Memo must always be the final step in the review process');
}
}
System.debug('errors 2: '+errors);
if(validateWeights) {
List<ReviewPanelCategory__c> categories = [SELECT Id, Name, Weight__c, ReviewPanel__c, ReviewPanel__r.PanelName__c, ReviewPanel__r.ReviewStep__r.Name, (SELECT MaxScore__c FROM ReviewCategoryQuestions__r) FROM ReviewPanelCategory__c WHERE ReviewPanel__r.ReviewStep__c IN: stepIds];
Map<Id, Decimal> weightMap = new Map<Id, Decimal>();
Decimal maxScore;
Boolean invalidScore;
Set<Id> panelsWithCategories = new Set<Id>();
for(ReviewPanelCategory__c category: categories) {
panelsWithCategories.add(category.ReviewPanel__c);
invalidScore = false;
if(!weightMap.containsKey(category.ReviewPanel__c)) {
weightMap.put(category.ReviewPanel__c, 0);
}
weightMap.put(category.ReviewPanel__c, weightMap.get(category.ReviewPanel__c) + category.Weight__c);
maxScore = 0;
for(ReviewPanelCategoryQuestion__c question: category.ReviewCategoryQuestions__r) {
maxScore += question.MaxScore__c;
if(question.MaxScore__c != 0 && category.Weight__c == 0) {
invalidScore = true;
}
}
if(invalidScore) {
errors.add('Setup Tab - ' + category.ReviewPanel__r.ReviewStep__r.Name + ' - ' + category.ReviewPanel__r.PanelName__c + ': A score cannot be associated to a question in the ' + category.Name + ' section because it does not have a weight.');
}
if(maxScore == 0 && category.Weight__c != 0) {
errors.add('Setup Tab - ' + category.ReviewPanel__r.ReviewStep__r.Name + ' - ' + category.ReviewPanel__r.PanelName__c + ': A score must be associated to at least one question in the ' + category.Name + ' section because it is weighted.');
}
}
System.debug('errors 3: '+errors);
for(Id key: panelNameMap.keySet()) {
if(!panelsWithCategories.contains(key)) {
errors.add('Setup Tab - ' + panelNameMap.get(key) + ': At least one section must be added to this form.');
}
}
if(weightMap.size() > 0) {
for(Id key: weightMap.keySet()) {
if(weightMap.get(key) != 100 && weightMap.get(key) != 0) {
errors.add('Setup Tab - ' + panelNameMap.get(key) + ': The total section weight must equal 100% or 0%. It is currently ' + weightMap.get(key) + '%.');
}
if(weightedPanels.contains(key) && weightMap.get(key) == 0) {
errors.add('Setup Tab - ' + panelNameMap.get(key) + ': A weighted form must contain weighted sections.');
}
}
} else {
for(Id panelId: weightedPanels) {
errors.add('Setup Tab - ' + panelNameMap.get(panelId) + ': A weighted form must contain weighted sections.');
}
}
System.debug('errors 4: '+errors);
}
System.debug('errors 5: '+errors);
return errors;
} catch(Exception e) {
errors.add(e.getMessage());
return errors;
}
}
Try Below test Class Please Mark It As Best Answer If It Helps
Thank You!