function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Akshata ShahAkshata Shah 

Hello Friends, Please help me in apex trigger.

I have two custom object Resource__c and Leave__c. Leave__c has lookup with Resource__c.
In Resource there are two custom field Total_Allocated_Paid_Leaves__C and Total_Used_Paid_Leaves__c.
Where Leave__c object has one custom field Leaves__c.
I want trigger on
If i entered +ve value in Leaves__c (Leave__c's field) it will add in Total_Allocated_Paid_Leaves__C (Resouce__c's field)
and if i enterd -ve value in  Leaves__c (Leave__c's field) it will add in otal_Used_Paid_Leaves__c.
Best Answer chosen by Akshata Shah
Rishabh Bansal 23Rishabh Bansal 23
Hi Akshata,

Please find the below snippet code:-
Set<Id> resourceIds = new Set<Id>();
    for(Leave__c leave : Trigger.New){
        resourceIds.add(leave.Resource__c );
    }
    Map<Id,Resource__c> resourceMap = new Map<Resource__c >([SELECT  Id,Total_Allocated_Paid_Leaves__C,Total_Used_Paid_Leaves__c FROM Resource__c WHERE Resource__c IN: resourceIds]);
    for(Leave__c leave : Trigger.New){
        if(leave.Leaves__c > 0){
            resourceMap.get(leave.Resource__c).Total_Allocated_Paid_Leaves__C = resourceMap.get(leave.Resource__c).Total_Allocated_Paid_Leaves__C + leave.Leaves__c;
        }else{
            resourceMap.get(leave.Resource__c).Total_Used_Paid_Leaves__c = resourceMap.get(leave.Resource__c).Total_Used_Paid_Leaves__c + leave.Leaves__c;
        }
    }
    update resourceMap.values();

Thanks,
Rishabh Bansal

All Answers

Rishabh Bansal 23Rishabh Bansal 23
Hi Akshata,

Please find the below snippet code:-
Set<Id> resourceIds = new Set<Id>();
    for(Leave__c leave : Trigger.New){
        resourceIds.add(leave.Resource__c );
    }
    Map<Id,Resource__c> resourceMap = new Map<Resource__c >([SELECT  Id,Total_Allocated_Paid_Leaves__C,Total_Used_Paid_Leaves__c FROM Resource__c WHERE Resource__c IN: resourceIds]);
    for(Leave__c leave : Trigger.New){
        if(leave.Leaves__c > 0){
            resourceMap.get(leave.Resource__c).Total_Allocated_Paid_Leaves__C = resourceMap.get(leave.Resource__c).Total_Allocated_Paid_Leaves__C + leave.Leaves__c;
        }else{
            resourceMap.get(leave.Resource__c).Total_Used_Paid_Leaves__c = resourceMap.get(leave.Resource__c).Total_Used_Paid_Leaves__c + leave.Leaves__c;
        }
    }
    update resourceMap.values();

Thanks,
Rishabh Bansal
This was selected as the best answer
Oshin AgrawalOshin Agrawal
Hi Please find the below code:
trigger LeaveTrigger on Leave__c (after update) 
{
    Map<id,double> mapleavevalue = new Map<id,double>();
    List<resource1__c> lstresrce = new list<resource1__c> ();
    for(Leave__c l : trigger.new)
    {
        double currentvalue = l.Leave__c;
        double previousvalue = trigger.oldmap.get(l.id).leave__c;
        if(currentvalue != previousvalue)
        {
            if(!mapleavevalue.containsKey(l.id))
            {
                mapleavevalue.put(l.id,l.Leave__c);
            }
        }
    }
    if(mapleavevalue.size() > 0)
    {
        for(resource1__c r : [SELECT id,TotalAllocated_Paid_Leaves__c,Total_Used_Paid_Leaves__c,Leaves__c 
                              fROM resource1__c WHERE Leaves__c in: mapleavevalue.keySet()])
        {
            double leavestobeupdated = mapleavevalue.get(r.Leaves__c);
            if(leavestobeupdated > 0)
            {
                r.TotalAllocated_Paid_Leaves__c = r.TotalAllocated_Paid_Leaves__c + leavestobeupdated;
            }
            else
                r.total_Used_Paid_Leaves__c = r.total_Used_Paid_Leaves__c + leavestobeupdated;
            lstresrce.add(r);
        }
    }
   if(lstresrce.size()> 0)
   {
       update lstresrce;
   }
}

I hope this works for you. If it does, please like it and mark as Best Answer to help others too.
Thank you.
Akshata ShahAkshata Shah
Thank you Rishabh Bansal.