Skip to content

Instantly share code, notes, and snippets.

@junaideqbal
Last active August 24, 2023 09:35
Show Gist options
  • Save junaideqbal/03619ba83551d96c34ef4cfd4b459863 to your computer and use it in GitHub Desktop.
Save junaideqbal/03619ba83551d96c34ef4cfd4b459863 to your computer and use it in GitHub Desktop.
Sync 2 Salesforce Objects
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