Last active
August 24, 2023 09:35
-
-
Save junaideqbal/03619ba83551d96c34ef4cfd4b459863 to your computer and use it in GitHub Desktop.
Sync 2 Salesforce Objects
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public with sharing class SyncLineItemandOppProduct { | |
public static Boolean triggeredFromLineItem = true; | |
public static Boolean isOppProductUpdateCall = true; | |
public static Boolean syncRecursion = true; | |
private List<Schema.FieldSetMember> lineItemFieldSetMemberList; | |
private List<Schema.FieldSetMember> opProductFieldSetMemberList; | |
public static List<Schema.FieldSetMember> readFieldSet(String fieldSetName, String ObjectName) { | |
Map<String, Schema.SObjectType> GlobalDescribeMap = Schema.getGlobalDescribe(); | |
Schema.SObjectType SObjectTypeObj = GlobalDescribeMap.get(ObjectName); | |
Schema.DescribeSObjectResult DescribeSObjectResultObj = SObjectTypeObj.getDescribe(); | |
Schema.FieldSet fieldSetObj = DescribeSObjectResultObj.FieldSets.getMap().get(fieldSetName); | |
return fieldSetObj.getFields(); | |
} | |
public void createOppLineItem(Map<Id,Opp_Product__c> opProducts) { | |
List<OpportunityLineItem> lineItemsToInsert = new List<OpportunityLineItem>(); | |
List<Opp_Product__c> oppProductsToUpdate = new List<Opp_Product__c>(); | |
lineItemFieldSetMemberList = readFieldSet('OppProductToOpportunityLineItem','OpportunityLineItem'); | |
opProductFieldSetMemberList = readFieldSet('OppProductToOpportunityLineItem','Opp_Product__c'); | |
Set<Id> productIds = new Set<Id>(); | |
for (Opp_Product__c oProduct : opProducts.values()) { | |
productIds.add(oProduct.Product__c); | |
} | |
List<PricebookEntry> bookEntries = [ | |
Select Id, Product2Id, IsActive, CurrencyIsoCode | |
From PricebookEntry | |
Where IsActive = true AND Product2Id IN :productIds]; | |
for (Opp_Product__c oProduct : opProducts.values()) { | |
PricebookEntry matchingEntry = null; | |
for (PricebookEntry entry : bookEntries) { | |
if (entry.Product2Id == oProduct.Product__c && entry.CurrencyIsoCode == oProduct.CurrencyIsoCode) { | |
matchingEntry = entry; | |
break; | |
} | |
} | |
if (matchingEntry != null) { | |
OpportunityLineItem lineItem = new OpportunityLineItem(); | |
for (Integer i = 0; i < opProductFieldSetMemberList.size(); i++) { | |
lineItem.put(lineItemFieldSetMemberList[i].getFieldPath(), oProduct.get(opProductFieldSetMemberList[i].getFieldPath())); | |
} | |
// lineItem.UnitPrice = oProduct.Unit_Price__c; | |
// lineItem.Quantity = oProduct.Annual_Quantity__c; | |
lineItem.Product2Id = oProduct.Product__c; | |
lineItem.OpportunityId = oProduct.Opportunity__c; | |
lineItem.PricebookEntryId = matchingEntry.id; | |
lineItem.opp_product__c = oProduct.Id; | |
lineItemsToInsert.add(lineItem); | |
} | |
} | |
insert lineItemsToInsert; | |
for (OpportunityLineItem lineItem : lineItemsToInsert) { | |
Opp_Product__c clonedOppProduct = opProducts.get(lineItem.opp_product__c).clone(true,true); | |
clonedOppProduct.opportunity_product__c = lineItem.id; | |
oppProductsToUpdate.add(clonedOppProduct); | |
} | |
isOppProductUpdateCall = false; | |
update oppProductsToUpdate; | |
} | |
public void updateOppLineItem(List<Opp_Product__c> opProducts) { | |
lineItemFieldSetMemberList = readFieldSet('OppProductToOpportunityLineItem','OpportunityLineItem'); | |
opProductFieldSetMemberList = readFieldSet('OppProductToOpportunityLineItem','Opp_Product__c'); | |
List<OpportunityLineItem> lineItems = new List<OpportunityLineItem>(); | |
for (Opp_Product__c opProduct : opProducts) { | |
OpportunityLineItem lineItem = new OpportunityLineItem(); | |
lineItem.id = opProduct.opportunity_product__c; | |
// lineItem.UnitPrice = opProduct.Unit_Price__c; | |
// lineItem.Quantity = opProduct.Annual_Quantity__c; | |
for (Integer i = 0; i < opProductFieldSetMemberList.size(); i++) { | |
lineItem.put(lineItemFieldSetMemberList[i].getFieldPath(), opProduct.get(opProductFieldSetMemberList[i].getFieldPath())); | |
} | |
lineItems.add(lineItem); | |
} | |
update lineItems; | |
} | |
public void createOppProduct(Map<Id,OpportunityLineItem> lineItems) { | |
List<Opp_Product__c> oppProductsToInsert = new List<Opp_Product__c>(); | |
List<OpportunityLineItem> lineItemsToUpdate = new List<OpportunityLineItem>(); | |
lineItemFieldSetMemberList = readFieldSet('LineItemToOppProduct','OpportunityLineItem'); | |
opProductFieldSetMemberList = readFieldSet('LineItemToOppProduct','Opp_Product__c'); | |
for (OpportunityLineItem lineItem : lineItems.values()) { | |
Opp_Product__c opProduct = new Opp_Product__c(); | |
// opProduct.Unit_Price__c = lineItem.UnitPrice; | |
// opProduct.CurrencyIsoCode = lineItem.CurrencyIsoCode; | |
// opProduct.Annual_Quantity__c = lineItem.Quantity; | |
for (Integer i = 0; i < opProductFieldSetMemberList.size(); i++) { | |
opProduct.put(opProductFieldSetMemberList[i].getFieldPath(), lineItem.get(lineItemFieldSetMemberList[i].getFieldPath())); | |
} | |
opProduct.Status__c = 'Evaluation'; | |
opProduct.Product__c = lineItem.Product2Id; | |
opProduct.Opportunity__c = lineItem.OpportunityId; | |
opProduct.opportunity_product__c = lineItem.id; | |
oppProductsToInsert.add(opProduct); | |
} | |
insert oppProductsToInsert; | |
for (Opp_Product__c opProduct : oppProductsToInsert) { | |
OpportunityLineItem clonedLineItem = lineItems.get(opProduct.opportunity_product__c).clone(true,true); | |
clonedLineItem.opp_product__c = opProduct.id; | |
lineItemsToUpdate.add(clonedLineItem); | |
} | |
update lineItemsToUpdate; | |
} | |
public void updateOppProduct(List<OpportunityLineItem> lineItems) { | |
List<Opp_Product__c> oppProductsToUpdate = new List<Opp_Product__c>(); | |
lineItemFieldSetMemberList = readFieldSet('LineItemToOppProduct','OpportunityLineItem'); | |
opProductFieldSetMemberList = readFieldSet('LineItemToOppProduct','Opp_Product__c'); | |
for (OpportunityLineItem lineItem : lineItems) { | |
Opp_Product__c opProduct = new Opp_Product__c(); | |
opProduct.id = lineItem.opp_product__c; | |
opProduct.Status__c = 'Evaluation'; | |
// opProduct.Unit_Price__c = lineItem.UnitPrice; | |
// opProduct.CurrencyIsoCode = lineItem.CurrencyIsoCode; | |
// opProduct.Annual_Quantity__c = lineItem.Quantity; | |
for (Integer i = 0; i < opProductFieldSetMemberList.size(); i++) { | |
opProduct.put(opProductFieldSetMemberList[i].getFieldPath(), lineItem.get(lineItemFieldSetMemberList[i].getFieldPath())); | |
} | |
oppProductsToUpdate.add(opProduct); | |
} | |
isOppProductUpdateCall = false; | |
update oppProductsToUpdate; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment