public with sharing class TRAEstimateValidation {
public static List<CloudbyzITPM__Task_Resource_Assignment__c> newTRAList = new List<CloudbyzITPM__Task_Resource_Assignment__c >();
//public static List<CloudbyzITPM__Task_Resource_Assignment__c> oldTRAList = new List<CloudbyzITPM__Task_Resource_Assignment__c >();
public static void beforeInsertOperation(List<CloudbyzITPM__Task_Resource_Assignment__c> newTRAList) {
Set<Id> taskIdSet = new Set<Id>();
for(CloudbyzITPM__Task_Resource_Assignment__c traRec : newTRAList) {
taskIdSet.add(traRec.CloudbyzITPM__Task__c);
}
if(taskIdSet.size() > 0) {
//system.debug('In Task:'+taskIdSet);
Decimal totalEstimate = 0; // Total Estimate
List<CloudbyzITPM__Task__c> taskList = [select Id,CloudbyzITPM__Estimate__c, (select Allocated_Hours__c from CloudbyzITPM__Task_Resource_Assignments__r )
from CloudbyzITPM__Task__c where Id IN: taskIdSet];
for(CloudbyzITPM__Task__c taskRec : taskList) {
//System.debug('task rec'+taskRec);
for(CloudbyzITPM__Task_Resource_Assignment__c traRec : taskRec.CloudbyzITPM__Task_Resource_Assignments__r) {
totalEstimate += ((traRec.Allocated_Hours__c != null) ? traRec.Allocated_Hours__c : 0);
//System.debug('Total Estimate:-' + totalEstimate);
if(totalEstimate > taskRec.CloudbyzITPM__Estimate__c){
System.debug('Task estimate' + taskRec.CloudbyzITPM__Estimate__c + ' ' + 'Total Estimate :-'+ totalEstimate );
traRec.addError('Total Task Resource Assignments Allocation hours is greater than Task Estimate');
System.debug('Before insert or update done');
}
}
}
}
}
}
Trigger
trigger TRAEstimateValidation on CloudbyzITPM__Task_Resource_Assignment__c (before insert,before update) {
CloudbyzITPM__Task_Resource_Assignment__c tra = new CloudbyzITPM__Task_Resource_Assignment__c ();
if(Trigger.isBefore && (Trigger.isInsert)){
TRAEstimateValidation.beforeInsertOperation(Trigger.new);
}
if(trigger.isUpdate && trigger.isBefore) {
if(CheckRecursionforPM.runOnce()){
TRAEstimateValidation.beforeInsertOperation(Trigger.old);
}
}
}