You need to sign in to do that
Don't have an account?

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
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
Hi,
I have made changes in your code below:-
Let me know if it works for you or not.
However, your code is not bulk safe.
Hi
Thanks
For u r replay its shwoing the error in this line
Hi,
My mistake, could you please change it to :-
Let me know if you still have any issue.
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
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
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');
}
}
}
}
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
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;
}
}
}
}