You need to sign in to do that
Don't have an account?
Jsingh
hi
I have custom object for Quote,opportunitylineitem,product and so on....
my requirement is to -1.only one quote should be synced with opportunity.
2.first delete the opportunity product list than add the line item
of synced Quote.
3.The quote line item for that(synced) quote should be populated
into the related opportunity product(opplineitem)
Relation ship in my objects are
Quote-----Opportunity--Masterdetail and lookup
Quote----Quotelineitem--Master Detail
Quotelineitem----Opportunity-- lookup
OpportunityProduct-------Quotelineitem--look up
OpportunityProduct----Opportunity--Masterdetail
OpportunityProduct-----Product-- lookup
i had achieved first(1) and second(2) but not third(3).i had written code for third condition also
but it is not working.
my handler and trigger is here
HANDLER
public class Mytestclassforupdatelineitem {
public static void UpdateSyncedOpportunity(List<Quote__c> lstQuotes) {
system.debug('lstQuotes : ' +lstQuotes);
List<Opportunity__c> lstOpportunitiesToUpdate = new List<Opportunity__c>();
Set<string> setOpportunityIDs = new Set<string>();
List<OpportunitylineItem__c> lstOppLineItems = new List<OpportunitylineItem__c>();
for(Quote__c quote: lstQuotes) {
Opportunity__c opp = new Opportunity__c();
opp.Id = quote.Opportunity__c;
opp.SyncedQuote__c = quote.id;
lstOpportunitiesToUpdate.add(opp);
setOpportunityIDs.add(quote.Opportunity__c);
}
if(lstOpportunitiesToUpdate.size() > 0){
update lstOpportunitiesToUpdate;
}
system.debug('setOpportunityIDs : ' +setOpportunityIDs);
if(setOpportunityIDs.size() > 0){
lstOppLineItems = [select id, name, Quantity__c from OpportunitylineItem__c where Opportunityproducts__c =: setOpportunityIDs ];
}
if(lstOppLineItems != null && lstOppLineItems.size() > 0){
delete lstOppLineItems;
}
}
public static void UpdateSyncedOpportunityLineItems(List<Quote__c> lstQuotes) {
system.debug('lstQuotes in UpdateSyncedOpportunityLineItems : ' +lstQuotes);
// set to store the opportunity id's for associated quotes on which sync is set as true
Set<Id> setOpportunityIDs = new Set<Id>();
Set<Id> setSyncedQuoteIDs = new Set<Id>();
List <Quote__c> lstAllAssociatedQuotes = new List<Quote__c>();
for(Quote__c quote: lstQuotes) {
setOpportunityIDs.add(quote.Opportunity__c);
setSyncedQuoteIDs.add(quote.id);
}
system.debug('setOpportunityIDs : ' +setOpportunityIDs);
if(setOpportunityIDs.size() > 0){
lstAllAssociatedQuotes = [select id, Name, Opportunity__c,IsSyncing__c from Quote__c where Opportunity__c =: setOpportunityIDs];
}
System.debug('lstAllAssociatedQuotes :'+lstAllAssociatedQuotes);
List<Quote__c> lstQuotesToUpdate = new List<Quote__c>();
if(lstAllAssociatedQuotes.size() > 0){
for(Quote__c qt : lstAllAssociatedQuotes){
for(Quote__c syncedqt : lstQuotes){
if(syncedqt.Opportunity__c == qt.Opportunity__c &&
syncedqt.id != qt.id && qt.IsSyncing__c == true){
qt.IsSyncing__c = false;
lstQuotesToUpdate.add(qt);
}
}
}
}
if(lstQuotesToUpdate.size() > 0){
update lstQuotesToUpdate;
}
//code to add opportunity line item from quoteline item
List<OpportunitylineItem__c> lstofoppitems = new List<OpportunitylineItem__c>(); //list for opportunitylineitem
List<Quote_Line_Items__c> lstofQlineitem = New List<Quote_Line_Items__c>();//list for quotelineitem
if(setSyncedQuoteIDs.size() > 0){
lstofQlineitem=[Select ID,Name,Opportunity__c,Quote_Name__c,Product__c,Quantity__c,UnitPrice__c From Quote_Line_Items__c where Id =:setSyncedQuoteIDs];
}
//store the the lineitems which are associated with synced quote
system.debug('listofquotelineitem:'+lstofQlineitem);
//creating instance for quotelineitem and paas the list of associated quotelineitem with synced quote and
// in for loop create the instance for opplineitem and assign value in opportunity line item
if(lstofQlineitem != null && lstofQlineitem.size() > 0){
for(Quote_Line_Items__c quotelineitems : lstofQlineitem){
system.debug('quotelineitems'+ quotelineitems);
OpportunitylineItem__c opplineitem = new OpportunitylineItem__c();
opplineitem.UnitPrice__c = quotelineitems.UnitPrice__c;
opplineitem.Name = quotelineitems.Name;
opplineitem.Quantity__c = quotelineitems.Quantity__c;
opplineitem.ProductCode__c = quotelineitems.Product__c;
opplineitem.Opportunityproducts__c= quotelineitems.Opportunity__c;
opplineitem.QuoteLineItems__c = quotelineitems.id;
}
if( lstofoppitems == null && lstofoppitems.size() > 0){
insert lstofoppitems;
system.debug('listofopportunitylineitem:'+ lstofoppitems);
}
}
}
}
Trigger
trigger mytesttriggerforupdatelineitem on Quote__c (after update) {
if (trigger.isAfter && trigger.isUpdate ){// check if trigger is isAfter and isUpdate
List <Quote__c> lstToBeModifiedQuotes = new List<Quote__c>();
for(Quote__c qt : trigger.new){ // check for value change of isSynced
Quote__c oldquote = trigger.OldMap.get(qt.id);//get the quote with old values
if(qt.IsSyncing__c != oldquote.IsSyncing__c && qt.IsSyncing__c == true){ //check with oldvalues and new values
lstToBeModifiedQuotes.add(qt);
}
}
system.debug('lstToBeModifiedQuotes : ' +lstToBeModifiedQuotes);
if(lstToBeModifiedQuotes.size() > 0){
Mytestclassforupdatelineitem.UpdateSyncedOpportunity(lstToBeModifiedQuotes);
Mytestclassforupdatelineitem.UpdateSyncedOpportunityLineItems(lstToBeModifiedQuotes);
}
}
}
Thanks
Add Opportunity product from Quote line item
hi
I have custom object for Quote,opportunitylineitem,product and so on....
my requirement is to -1.only one quote should be synced with opportunity.
2.first delete the opportunity product list than add the line item
of synced Quote.
3.The quote line item for that(synced) quote should be populated
into the related opportunity product(opplineitem)
Relation ship in my objects are
Quote-----Opportunity--Masterdetail and lookup
Quote----Quotelineitem--Master Detail
Quotelineitem----Opportunity-- lookup
OpportunityProduct-------Quotelineitem--look up
OpportunityProduct----Opportunity--Masterdetail
OpportunityProduct-----Product-- lookup
i had achieved first(1) and second(2) but not third(3).i had written code for third condition also
but it is not working.
my handler and trigger is here
HANDLER
public class Mytestclassforupdatelineitem {
public static void UpdateSyncedOpportunity(List<Quote__c> lstQuotes) {
system.debug('lstQuotes : ' +lstQuotes);
List<Opportunity__c> lstOpportunitiesToUpdate = new List<Opportunity__c>();
Set<string> setOpportunityIDs = new Set<string>();
List<OpportunitylineItem__c> lstOppLineItems = new List<OpportunitylineItem__c>();
for(Quote__c quote: lstQuotes) {
Opportunity__c opp = new Opportunity__c();
opp.Id = quote.Opportunity__c;
opp.SyncedQuote__c = quote.id;
lstOpportunitiesToUpdate.add(opp);
setOpportunityIDs.add(quote.Opportunity__c);
}
if(lstOpportunitiesToUpdate.size() > 0){
update lstOpportunitiesToUpdate;
}
system.debug('setOpportunityIDs : ' +setOpportunityIDs);
if(setOpportunityIDs.size() > 0){
lstOppLineItems = [select id, name, Quantity__c from OpportunitylineItem__c where Opportunityproducts__c =: setOpportunityIDs ];
}
if(lstOppLineItems != null && lstOppLineItems.size() > 0){
delete lstOppLineItems;
}
}
public static void UpdateSyncedOpportunityLineItems(List<Quote__c> lstQuotes) {
system.debug('lstQuotes in UpdateSyncedOpportunityLineItems : ' +lstQuotes);
// set to store the opportunity id's for associated quotes on which sync is set as true
Set<Id> setOpportunityIDs = new Set<Id>();
Set<Id> setSyncedQuoteIDs = new Set<Id>();
List <Quote__c> lstAllAssociatedQuotes = new List<Quote__c>();
for(Quote__c quote: lstQuotes) {
setOpportunityIDs.add(quote.Opportunity__c);
setSyncedQuoteIDs.add(quote.id);
}
system.debug('setOpportunityIDs : ' +setOpportunityIDs);
if(setOpportunityIDs.size() > 0){
lstAllAssociatedQuotes = [select id, Name, Opportunity__c,IsSyncing__c from Quote__c where Opportunity__c =: setOpportunityIDs];
}
System.debug('lstAllAssociatedQuotes :'+lstAllAssociatedQuotes);
List<Quote__c> lstQuotesToUpdate = new List<Quote__c>();
if(lstAllAssociatedQuotes.size() > 0){
for(Quote__c qt : lstAllAssociatedQuotes){
for(Quote__c syncedqt : lstQuotes){
if(syncedqt.Opportunity__c == qt.Opportunity__c &&
syncedqt.id != qt.id && qt.IsSyncing__c == true){
qt.IsSyncing__c = false;
lstQuotesToUpdate.add(qt);
}
}
}
}
if(lstQuotesToUpdate.size() > 0){
update lstQuotesToUpdate;
}
//code to add opportunity line item from quoteline item
List<OpportunitylineItem__c> lstofoppitems = new List<OpportunitylineItem__c>(); //list for opportunitylineitem
List<Quote_Line_Items__c> lstofQlineitem = New List<Quote_Line_Items__c>();//list for quotelineitem
if(setSyncedQuoteIDs.size() > 0){
lstofQlineitem=[Select ID,Name,Opportunity__c,Quote_Name__c,Product__c,Quantity__c,UnitPrice__c From Quote_Line_Items__c where Id =:setSyncedQuoteIDs];
}
//store the the lineitems which are associated with synced quote
system.debug('listofquotelineitem:'+lstofQlineitem);
//creating instance for quotelineitem and paas the list of associated quotelineitem with synced quote and
// in for loop create the instance for opplineitem and assign value in opportunity line item
if(lstofQlineitem != null && lstofQlineitem.size() > 0){
for(Quote_Line_Items__c quotelineitems : lstofQlineitem){
system.debug('quotelineitems'+ quotelineitems);
OpportunitylineItem__c opplineitem = new OpportunitylineItem__c();
opplineitem.UnitPrice__c = quotelineitems.UnitPrice__c;
opplineitem.Name = quotelineitems.Name;
opplineitem.Quantity__c = quotelineitems.Quantity__c;
opplineitem.ProductCode__c = quotelineitems.Product__c;
opplineitem.Opportunityproducts__c= quotelineitems.Opportunity__c;
opplineitem.QuoteLineItems__c = quotelineitems.id;
}
if( lstofoppitems == null && lstofoppitems.size() > 0){
insert lstofoppitems;
system.debug('listofopportunitylineitem:'+ lstofoppitems);
}
}
}
}
Trigger
trigger mytesttriggerforupdatelineitem on Quote__c (after update) {
if (trigger.isAfter && trigger.isUpdate ){// check if trigger is isAfter and isUpdate
List <Quote__c> lstToBeModifiedQuotes = new List<Quote__c>();
for(Quote__c qt : trigger.new){ // check for value change of isSynced
Quote__c oldquote = trigger.OldMap.get(qt.id);//get the quote with old values
if(qt.IsSyncing__c != oldquote.IsSyncing__c && qt.IsSyncing__c == true){ //check with oldvalues and new values
lstToBeModifiedQuotes.add(qt);
}
}
system.debug('lstToBeModifiedQuotes : ' +lstToBeModifiedQuotes);
if(lstToBeModifiedQuotes.size() > 0){
Mytestclassforupdatelineitem.UpdateSyncedOpportunity(lstToBeModifiedQuotes);
Mytestclassforupdatelineitem.UpdateSyncedOpportunityLineItems(lstToBeModifiedQuotes);
}
}
}
Thanks