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
venkateshyadav1243venkateshyadav1243 

trigger for calculation

Hi

I have 2 objects, purchase order(parent) and callup orders(child) lookup relation

 

in my parent object there is field called quantity

for one parent object i can create money child object,

in child object there is one field call up order,here i can enter the quantity ,

what i have to do is,if quantity cross more in my child object i need through error,

and i need to show balance in one field

right now am able to show error messag but am not able to shw balance

can u please tell me where am missing this is the my trigger

 

 

trigger Total_callup_order_Quantity on Call_Up_Order__c (after insert,after update)
{
   
    set<id> saleid=new set<id>();
    List<Call_Up_Order__c> calup=new List<Call_Up_Order__c>();
    
    if(trigger.isInsert || trigger.isUpdate)
    {
        for(Call_Up_Order__c co:trigger.new)
        {
             system.debug('-------Quote Quantity-------'+co.Quote_Quantity__c);
            saleid.add(co.Sale_Confirmation_Order__c);
        }
    }
    calup=[select id,Quote_Quantity__c,Balance_qty__c,Opp_pdt_detail_Quantity__c,Sale_Confirmation_Order__c,Call_Up_Quantity__c from Call_Up_Order__c  where Sale_Confirmation_Order__c in:saleid];
    
    system.debug('@@@@@@@@@!!!!!!!!!'+calup);
    decimal sum=0;
    decimal sum1=0;
    for(Call_Up_Order__c cp:calup)
    {
    
        sum=sum+cp.Call_Up_Quantity__c;
        
        
        if(cp.Sale_Confirmation_Order__c !=null)
        {
       cp.Balance_qty__c=cp.Quote_Quantity__c-sum;
            
        }
        system.debug('balnace qty m'+cp.Balance_qty__c);
        system.debug('@@@@@@@@@@@@ summmmm'+sum);
        if(sum >cp.Quote_Quantity__c)
        {
            system.debug('@@@@@@@@@');
            Trigger.New[0].adderror('you can not add more Quantity');
        }
    }
}

 

 

regards

venkatesh

Best Answer chosen by Admin (Salesforce Developers) 
Satyendra RawatSatyendra Rawat

Hi Venkatesh,

Bellow code is working fine.

If you get any error let me know Satya Is here

 
trigger Total_callup_order_Quantity on Call_Up_Order__c (before insert,before update)
{

map<Id,List<Call_Up_Order__c>>mapOrderIdAllCallupOrder = new map<Id,List<Call_Up_Order__c>>();
map<Id,Decimal> mapNewCallUpQuantity = new map<Id,Decimal>();
for(Call_Up_Order__c callOrder:trigger.new)
{
if(mapOrderIdAllCallupOrder.containsKey(callOrder.Sale_Confirmation_Order__c))
{
mapOrderIdAllCallupOrder.get(callOrder.Sale_Confirmation_Order__c).add(callOrder);
Decimal totalQuantity = mapNewCallUpQuantity.get(callOrder.Sale_Confirmation_Order__c)+callOrder.Call_Up_Quantity__c;
mapNewCallUpQuantity.put(callOrder.Sale_Confirmation_Order__c,totalQuantity);
}
else
{
mapNewCallUpQuantity.put(callOrder.Sale_Confirmation_Order__c,callOrder.Call_Up_Quantity__c);
mapOrderIdAllCallupOrder.put(callOrder.Sale_Confirmation_Order__c,new List<Call_Up_Order__c>{callOrder});
}
}

List<Purchase_Order__c> lstSalesOrder = [Select Id,Quotation_Quantity__c, (select id,Quote_Quantity__c,Balance_qty__c,Opp_pdt_detail_Quantity__c,Sale_Confirmation_Order__c,Call_Up_Quantity__c from Call_Up_Orders__r) From Purchase_Order__c where Id in:mapOrderIdAllCallupOrder.keyset()];
for(Purchase_Order__c salesOrder:lstSalesOrder)
{
decimal iSalesQuantity = salesOrder.Quotation_Quantity__c;
decimal iCallQuantity = 0;
if(salesOrder.Call_Up_Orders__r !=null && salesOrder.Call_Up_Orders__r.size()>0)
{
for(Call_Up_Order__c callOrder : salesOrder.Call_Up_Orders__r)
{
iCallQuantity+=callOrder.Call_Up_Quantity__c;
}
}
iCallQuantity += mapNewCallUpQuantity.get(salesOrder.Id);
if(iSalesQuantity >0)
{

List<Call_Up_Order__c> lstSalesOrder1 = mapOrderIdAllCallupOrder.get(salesOrder.Id);
for(Call_Up_Order__c callOrder : lstSalesOrder1)
{
if(iCallQuantity > salesOrder.Quotation_Quantity__c)
{
callOrder.adderror('you can not add more Quantity');
}
callOrder.Balance_qty__c = iSalesQuantity- iCallQuantity;
}
}
}
}

All Answers

digamber.prasaddigamber.prasad

Hi,

 

I have made changes in your code below:-

 

trigger Total_callup_order_Quantity on Call_Up_Order__c (after insert,after update)
{
   
    set<id> saleid=new set<id>();
    List<Call_Up_Order__c> calup=new List<Call_Up_Order__c>();
    
    if(trigger.isInsert || trigger.isUpdate)
    {
        for(Call_Up_Order__c co:trigger.new)
        {
             system.debug('-------Quote Quantity-------'+co.Quote_Quantity__c);
            saleid.add(co.Sale_Confirmation_Order__c);
        }
    }
    calup=[select id,Quote_Quantity__c,Balance_qty__c,Opp_pdt_detail_Quantity__c,Sale_Confirmation_Order__c,Call_Up_Quantity__c from Call_Up_Order__c  where Sale_Confirmation_Order__c in:saleid];
    
    system.debug('@@@@@@@@@!!!!!!!!!'+calup);
    decimal sum=0;
    decimal sum1=0;
    for(Call_Up_Order__c cp:calup)
    {
    
        sum=sum+cp.Call_Up_Quantity__c;
        
        
        if(cp.Sale_Confirmation_Order__c !=null)
        {
			cp.Balance_qty__c=cp.Quote_Quantity__c-sum;
            
        }
        system.debug('balnace qty m'+cp.Balance_qty__c);
        system.debug('@@@@@@@@@@@@ summmmm'+sum);
        
    }
	
	if(sum >cp.Quote_Quantity__c)
	{
		system.debug('@@@@@@@@@');
		Trigger.New[0].Balance_qty__c = sum - Trigger.New[0].Quote_Quantity__c;
		Trigger.New[0].adderror('you can not add more Quantity');
	}
}

 

Let me know if it works for you or not.

 

However, your code is not bulk safe.

 

 

 

venkateshyadav1243venkateshyadav1243

Hi

Thanks

For u r replay its shwoing the error in this line

 

if(sum >cp.Quote_Quantity__c)
digamber.prasaddigamber.prasad

Hi,

 

My mistake, could you please change it to :-

 

if(sum >Trigger.new[0].Quote_Quantity__c)

Let me know if you still have any issue.

venkateshyadav1243venkateshyadav1243

Hi in debug log its shwoing the balance

but its not populating in the field

 


18:07:27.077 (77011000)|USER_DEBUG|[31]|DEBUG|balnace qty m99900

 

 

Regards

venkatesh

 

 
Satyendra RawatSatyendra Rawat

trigger Total_callup_order_Quantity on Call_Up_Order__c (after insert,after update)
{

    map<Id,List<Call_Up_Order__c>>mapOrderIdAllCallupOrder = new map<Id,List<Call_Up_Order__c>>();
   for(Call_Up_Order__c callOrder:trigger.new)
  {
   if(mapOrderIdAllCallupOrder.containsKey(callOrder.Sale_Confirmation_Order__c))
{
mapOrderIdAllCallupOrder.get(callOrder.Sale_Confirmation_Order__c).add(callOrder);
}
else
{
mapOrderIdAllCallupOrder.put(callOrder.Sale_Confirmation_Order__c,new List<Call_Up_Order__c>{callOrder});
}
}

List<Sale_Confirmation_Order__c>lstSalesOrder = [Select Id,quantity__c, (select id,Quote_Quantity__c,Balance_qty__c,Opp_pdt_detail_Quantity__c,Sale_Confirmation_Order__c,Call_Up_Quantity__c from Call_Up_Order__r) From Sale_Confirmation_Order__c where Id in:mapOrderIdAllCallupOrder.keyset()];
for(Sale_Confirmation_Order__c salesOrder:lstSalesOrder)
{
Integer iSalesQuantity = salesOrder.quantity__c;
Integer iCallQuantity = 0;
for(Call_Up_Order__c callOrder : salesOrder.Call_Up_Order__r)
{
iCallQuantity+=callOrder.Call_Up_Quantity__c;
}
if(iCallQuantity>iSalesQuantity)
{
List<Call_Up_Order__c>lstSalesOrder = mapOrderIdAllCallupOrder.get(salesOrder.Id);
for(Call_Up_Order__c callOrder : lstSalesOrder)
{
callOrder.Balance_qty__c = iCallQuantity - iSalesQuantity;
callOrder.adderror('you can not add more Quantity');
}
}
}
}

 

 

 

Let me know if you face any problem further (In above trigger API name of parent assuming)

 

I hope above code helpful for you 

venkateshyadav1243venkateshyadav1243

Hi

Its througing this error

 

 


Error: Compile Error: Didn't understand relationship 'Call_Up_Order__r' in FROM part of query call. If you are attempting to use a custom relationship, be sure to append the '__r' after the custom relationship name. Please reference your WSDL or the describe call for the appropriate names. at line 17 column 41

 

 

 

 

trigger Total_callup_order_Quantity on Call_Up_Order__c (after insert,after update)
{

    map<Id,List<Call_Up_Order__c>>mapOrderIdAllCallupOrder = new map<Id,List<Call_Up_Order__c>>();
   for(Call_Up_Order__c callOrder:trigger.new)
  {
   if(mapOrderIdAllCallupOrder.containsKey(callOrder.Sale_Confirmation_Order__c))
{
mapOrderIdAllCallupOrder.get(callOrder.Sale_Confirmation_Order__c).add(callOrder);
}
else
{
mapOrderIdAllCallupOrder.put(callOrder.Sale_Confirmation_Order__c,new List<Call_Up_Order__c>{callOrder});
}
}

List<Purchase_Order__c> lstSalesOrder = [Select Id,quantity__c, (select id,Quote_Quantity__c,Balance_qty__c,Opp_pdt_detail_Quantity__c,Sale_Confirmation_Order__c,Call_Up_Quantity__c from Call_Up_Order__r) From Purchase_Order__c where Id in:mapOrderIdAllCallupOrder.keyset()];
for(Purchase_Order__c salesOrder:lstSalesOrder)
{
decimal iSalesQuantity = salesOrder.quantity__c;
decimal iCallQuantity = 0;
for(Call_Up_Order__c callOrder : salesOrder.Call_Up_Order__r)
{
iCallQuantity+=callOrder.Call_Up_Quantity__c;
}
if(iCallQuantity>iSalesQuantity)
{
List<Call_Up_Order__c> lstSalesOrder1 = mapOrderIdAllCallupOrder.get(salesOrder.Id);
for(Call_Up_Order__c callOrder : lstSalesOrder1)
{
callOrder.Balance_qty__c = iCallQuantity - iSalesQuantity;
callOrder.adderror('you can not add more Quantity');
}
}
}
}

venkateshyadav1243venkateshyadav1243

Hi satya

 

i changes according to my logic its working ,but its working only in update its not firing in creation

 

this is code.

 

trigger Total_callup_order_Quantity on Call_Up_Order__c (before insert,before update)
{

    map<Id,List<Call_Up_Order__c>>mapOrderIdAllCallupOrder = new map<Id,List<Call_Up_Order__c>>();
   for(Call_Up_Order__c callOrder:trigger.new)
  {
   if(mapOrderIdAllCallupOrder.containsKey(callOrder.Sale_Confirmation_Order__c))
{
mapOrderIdAllCallupOrder.get(callOrder.Sale_Confirmation_Order__c).add(callOrder);
}
else
{
mapOrderIdAllCallupOrder.put(callOrder.Sale_Confirmation_Order__c,new List<Call_Up_Order__c>{callOrder});
}
}

List<Purchase_Order__c> lstSalesOrder = [Select Id,Quotation_Quantity__c, (select id,Quote_Quantity__c,Balance_qty__c,Opp_pdt_detail_Quantity__c,Sale_Confirmation_Order__c,Call_Up_Quantity__c from Call_Up_Orders__r) From Purchase_Order__c where Id in:mapOrderIdAllCallupOrder.keyset()];
for(Purchase_Order__c salesOrder:lstSalesOrder)
{
decimal iSalesQuantity = salesOrder.Quotation_Quantity__c;
decimal iCallQuantity = 0;
for(Call_Up_Order__c callOrder : salesOrder.Call_Up_Orders__r)
{
iCallQuantity+=callOrder.Call_Up_Quantity__c;
}
if(iSalesQuantity >0)
{

List<Call_Up_Order__c> lstSalesOrder1 = mapOrderIdAllCallupOrder.get(salesOrder.Id);
for(Call_Up_Order__c callOrder : lstSalesOrder1)
{
callOrder.Balance_qty__c = iSalesQuantity- iCallQuantity;
//callOrder.adderror('you can not add more Quantity');
}
}
if(iCallQuantity > salesOrder.Quotation_Quantity__c)
{
List<Call_Up_Order__c> lstSalesOrder2 = mapOrderIdAllCallupOrder.get(salesOrder.Id);
for(Call_Up_Order__c callOrder : lstSalesOrder2)
{
//callOrder.Balance_qty__c = iSalesQuantity- iCallQuantity;
callOrder.adderror('you can not add more Quantity');
}
}
}
}

 

 

regards

venkatesh

Satyendra RawatSatyendra Rawat

Hi Venkatesh,

Bellow code is working fine.

If you get any error let me know Satya Is here

 
trigger Total_callup_order_Quantity on Call_Up_Order__c (before insert,before update)
{

map<Id,List<Call_Up_Order__c>>mapOrderIdAllCallupOrder = new map<Id,List<Call_Up_Order__c>>();
map<Id,Decimal> mapNewCallUpQuantity = new map<Id,Decimal>();
for(Call_Up_Order__c callOrder:trigger.new)
{
if(mapOrderIdAllCallupOrder.containsKey(callOrder.Sale_Confirmation_Order__c))
{
mapOrderIdAllCallupOrder.get(callOrder.Sale_Confirmation_Order__c).add(callOrder);
Decimal totalQuantity = mapNewCallUpQuantity.get(callOrder.Sale_Confirmation_Order__c)+callOrder.Call_Up_Quantity__c;
mapNewCallUpQuantity.put(callOrder.Sale_Confirmation_Order__c,totalQuantity);
}
else
{
mapNewCallUpQuantity.put(callOrder.Sale_Confirmation_Order__c,callOrder.Call_Up_Quantity__c);
mapOrderIdAllCallupOrder.put(callOrder.Sale_Confirmation_Order__c,new List<Call_Up_Order__c>{callOrder});
}
}

List<Purchase_Order__c> lstSalesOrder = [Select Id,Quotation_Quantity__c, (select id,Quote_Quantity__c,Balance_qty__c,Opp_pdt_detail_Quantity__c,Sale_Confirmation_Order__c,Call_Up_Quantity__c from Call_Up_Orders__r) From Purchase_Order__c where Id in:mapOrderIdAllCallupOrder.keyset()];
for(Purchase_Order__c salesOrder:lstSalesOrder)
{
decimal iSalesQuantity = salesOrder.Quotation_Quantity__c;
decimal iCallQuantity = 0;
if(salesOrder.Call_Up_Orders__r !=null && salesOrder.Call_Up_Orders__r.size()>0)
{
for(Call_Up_Order__c callOrder : salesOrder.Call_Up_Orders__r)
{
iCallQuantity+=callOrder.Call_Up_Quantity__c;
}
}
iCallQuantity += mapNewCallUpQuantity.get(salesOrder.Id);
if(iSalesQuantity >0)
{

List<Call_Up_Order__c> lstSalesOrder1 = mapOrderIdAllCallupOrder.get(salesOrder.Id);
for(Call_Up_Order__c callOrder : lstSalesOrder1)
{
if(iCallQuantity > salesOrder.Quotation_Quantity__c)
{
callOrder.adderror('you can not add more Quantity');
}
callOrder.Balance_qty__c = iSalesQuantity- iCallQuantity;
}
}
}
}

This was selected as the best answer