SyncMadeEasy/force-app/main/default/classes/SyncBatchUtility.cls

328 lines
22 KiB
OpenEdge ABL

/**
* @description : Use for Generic Method
* @author : Satyam Mishra
* @group :
* @last modified on : 21-jan- 2025
* @last modified by : Satyam Mishra
**/
public with sharing class SyncBatchUtility {
public static String fetchAllDataWithLinkForNextPage(String shopifyUrlWithId, List<HIC_ShopifySync__HIC_Configuration__c > configurationList){
String USER_NAME = configurationList[0].HIC_ShopifySync__API_Key__c;
String PASSWORD = configurationList[0].HIC_ShopifySync__Private_Key_Password__c;
String shopifyUrl = configurationList[0].HIC_ShopifySync__Shopify_URL__c;
String store = configurationList[0].Name;
new HIC_ShopifyUtility(configurationList);
Http h = new Http();
HttpRequest req = new HttpRequest();
String responseBody;
String endPointValue = shopifyUrl + '/admin/'+shopifyUrlWithId;
req.setEndpoint(endPointValue);
req.setClientCertificateName('Shopify');
req.setHeader('X-Shopify-Access-Token', PASSWORD);
req.setHeader('content-type', 'application/json');
req.setMethod('GET');
req.setTimeout(120000);
try {
HttpResponse res ;
res = h.send(req);
responseBody = res.getBody();
if(res.getStatusCode() == 200){
WrapperforBatchResponse rs = new WrapperforBatchResponse();
rs.response = responseBody;
if(String.isNotBlank(res.getHeader('link'))){
rs.link = getPageInfo(res.getHeader('link'));
}else{
rs.link = null;
}
return JSON.serialize(rs);
}
}catch(Exception e){
return null;
}
return null;
}
public static string getPageInfo(String fulllink){
String finalLink = null;
list<String> listofrels = fulllink.split(',');
if(!listofrels.isEmpty() && listofrels.size() == 2){
list<String> listofLinkandRel = listofrels[1].split(';');
if(!listofLinkandRel.isEmpty() && listofLinkandRel[1].trim().equalsIgnoreCase('rel="next"')){
finalLink = listofLinkandRel[0].remove('<').remove('>').trim().split('page_info=')[1];
}else if(!listofLinkandRel.isEmpty()){
listofLinkandRel = listofrels[0].split(';');
if(listofLinkandRel[1].trim().equalsIgnoreCase('rel="next"')){
finalLink = listofLinkandRel[0].remove('<').remove('>').trim().split('page_info=')[1];
}
}
}else if(!listofrels.isEmpty() && listofrels.size() == 1){
list<String> listofLinkandRel = listofrels[0].split(';');
if(!listofLinkandRel.isEmpty() && listofLinkandRel[1].trim().equalsIgnoreCase('rel="next"')){
finalLink = listofLinkandRel[0].remove('<').remove('>').trim().split('page_info=')[1];
}
}
return finalLink;
}
public class WrapperforBatchResponse{
public String response;
public String link;
}
public static void updateErrorMassage( List<Database.upsertResult> updateResult, String objectName, List<sObject> objectList, Schema.SobjectField externalIdField, boolean IsWebhook, String store){
String isbatch = 'F';
if(Iswebhook){
isbatch = 'T';
}
list<HIC_ShopifySync__Error_Mapping__c> listofErrormailfield = new List<HIC_ShopifySync__Error_Mapping__c>();
String ErrorfieldMappingquery = 'select ' +CheckAccessibility.isAccessible('name,HIC_ShopifySync__Shopify_Field__c','HIC_ShopifySync__Error_Mapping__c') +' from HIC_ShopifySync__Error_Mapping__c where '+ CheckAccessibility.isAccessible('name','HIC_ShopifySync__Error_Mapping__c') + ' = \''+ objectName +'\' limit 1';
ErrorfieldMappingquery =String.escapeSingleQuotes(ErrorfieldMappingquery).remove('\\');
listofErrormailfield = Database.query(ErrorfieldMappingquery);
// Schema.SObjectType ObjectType = Schema.getGlobalDescribe().get(objectName);
Schema.SObjectType ObjectType = ((SObject)Type.forName(objectName).newInstance()).getSObjectType();
Map<String,SObjectField> fieldMap = ObjectType.getDescribe().fields.getmap();
Schema.SobjectField theField = null;
//use for add in shopify External Id to make it unique
if(!listofErrormailfield.isEmpty()){
theField = fieldMap.get(String.ValueOf(listofErrormailfield[0].HIC_ShopifySync__Shopify_Field__c));
}
list<HIC_ShopifySync__Error_Message__c> listoferrors = new list<HIC_ShopifySync__Error_Message__c>(); //List of errors message
list<HIC_ShopifySync__Shopify_Log__c> listofsuccesslog = new list<HIC_ShopifySync__Shopify_Log__c>(); //List of Shopify logs
for(Integer index = 0 ; index < updateResult.size() ; index ++){
//If record successfully upsert
if( !updateResult[index].isSuccess() ){
if(Schema.sObjectType.HIC_ShopifySync__Error_Message__c.isAccessible() && (Schema.sObjectType.HIC_ShopifySync__Error_Message__c.isCreateable()||Schema.sObjectType.HIC_ShopifySync__Error_Message__c.isUpdateable()) ){
// Error Message Object
HIC_ShopifySync__Error_Message__c errorobj = new HIC_ShopifySync__Error_Message__c();
errorobj.HIC_ShopifySync__Store__c = store;
if(CheckAccessibility.isUpdateable('name','HIC_ShopifySync__Error_Message__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()){
errorobj.name = objectName;
}
//Object Contact then modified Shopify's External ID
if(theField != null ){
if(CheckAccessibility.isUpsertable('HIC_ShopifySync__Important_Field__c','HIC_ShopifySync__Error_Message__c'))
errorobj.HIC_ShopifySync__Important_Field__c = String.valueOf(objectList[index].get(theField));
}
if(CheckAccessibility.isUpdateable('HIC_ShopifySync__shopify_id__c','HIC_ShopifySync__Error_Message__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()){
errorobj.HIC_ShopifySync__shopify_id__c = string.valueof(objectList[index].get(externalIdField)+isbatch);
}
if(CheckAccessibility.isUpdateable('HIC_ShopifySync__error_id__c','HIC_ShopifySync__Error_Message__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()){
errorobj.HIC_ShopifySync__error_id__c = string.valueof(objectName+objectList[index].get(externalIdField)+isbatch);
}
if(CheckAccessibility.isUpdateable('HIC_ShopifySync__delivered__c','HIC_ShopifySync__Error_Message__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()) {
errorobj.HIC_ShopifySync__delivered__c = false;
}
//Get Error message
string errorMsg = '';
for(Database.Error error : updateResult[index].getErrors()){
if(error.getFields() != null && !error.getFields().isEmpty()){
errorMsg += String.join(error.getFields(), ' ') + ' | ' + error.getMessage() + ',';
}else{
errorMsg += error.getMessage() + ',';
}
}
// sObjectType schemaType = Schema.getGlobalDescribe().get('HIC_ShopifySync__Error_Message__c') ;
sObjectType schemaType = ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType();
Map<String, SObjectField> fieldsMap = schemaType.getDescribe().fields.getMap();
if(CheckAccessibility.isUpdateable('HIC_ShopifySync__message__c','HIC_ShopifySync__Error_Message__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()){
errorobj.HIC_ShopifySync__message__c = errorMsg.removeEnd(',');
}
errorobj.HIC_ShopifySync__Iswebhook__c = Iswebhook;
if(!errorobj.HIC_ShopifySync__message__c.containsIgnoreCase('duplicate value found: HIC_ShopifySync__Shopify_Id__c duplicates value on record with id') && !errorobj.HIC_ShopifySync__message__c.containsIgnoreCase('unable to obtain exclusive access to this record')){
listoferrors.add(errorobj);
}
}
}else{
HIC_ShopifySync__Shopify_Log__c SuccessLog = new HIC_ShopifySync__Shopify_Log__c();
SuccessLog.HIC_ShopifySync__Store__c = store;
SuccessLog.HIC_ShopifySync__Is_Webhook__c = Iswebhook ;
SuccessLog.name = Objectname;
//Update Shopify's external Id before upsert Shopify logs
if(CheckAccessibility.isUpdateable('HIC_ShopifySync__shopify_id__c,HIC_ShopifySync__Error_id__c','HIC_ShopifySync__Error_Message__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()){
SuccessLog.HIC_ShopifySync__Error_id__c = string.valueof(objectList[index].get(externalIdField)+isbatch+Objectname);
SuccessLog.HIC_ShopifySync__shopify_id__c = string.valueof(objectList[index].get(externalIdField));
}
listofsuccesslog.add(SuccessLog);
}
}
//Upsert Error Messagge records
if(!listoferrors.isEmpty()){
if(Schema.sObjectType.HIC_ShopifySync__Error_Message__c.isAccessible() && Schema.sObjectType.HIC_ShopifySync__Error_Message__c.isCreateable()){
Schema.SObjectType objectType1 = Schema.getGlobalDescribe().get('HIC_ShopifySync__Error_Message__c');
Map<String, SObjectField> fieldMap1 = objectType1.getDescribe().fields.getMap();
Schema.SobjectField theField1 = fieldMap1.get('HIC_ShopifySync__Error_id__c');
if(CheckAccessibility.isUpsertable('HIC_ShopifySync__Error_id__c','HIC_ShopifySync__Error_Message__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()){
database.upsert(listoferrors, theField1);
}
}
}
//Upsert Success logs records
if(!listofsuccesslog.isEmpty()){
if(Schema.sObjectType.HIC_ShopifySync__Shopify_Log__c.isAccessible() && Schema.sObjectType.HIC_ShopifySync__Shopify_Log__c.isCreateable()){
Schema.SObjectType objectType1 = Schema.getGlobalDescribe().get('HIC_ShopifySync__Shopify_Log__c');
Map<String, SObjectField> fieldMap1 = objectType1.getDescribe().fields.getMap();
Schema.SobjectField theField1 = fieldMap1.get('HIC_ShopifySync__Error_id__c');
if(CheckAccessibility.isUpsertable('HIC_ShopifySync__Error_id__c','HIC_ShopifySync__Shopify_Log__c') && ((SObject)Type.forName('HIC_ShopifySync__Error_Message__c').newInstance()).getSObjectType().getDescribe().isCreateable()){
database.upsert(listofsuccesslog, theField1,False, AccessLevel.USER_MODE);
}
}
}
}
public static void fetchCustomer(String store, String updated_at_min, String updated_at_max ,List<HIC_ShopifySync__HIC_Configuration__c> listOfConfiguration){
List<HIC_ShopifySync__Object_Mapping__c> listOfRelatedObjects = [
SELECT Id, Name, HIC_ShopifySync__Resource__c, HIC_ShopifySync__Batch_Size__c,HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c, HIC_ShopifySync__JSON_Nested__c,
(SELECT Id, Name, HIC_ShopifySync__Object_Mapping__c, HIC_ShopifySync__Resource__c, HIC_ShopifySync__JSON_Nested__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c
FROM HIC_ShopifySync__Object_Mappings__r LIMIT 200),
(SELECT Id, HIC_ShopifySync__Default__c, HIC_ShopifySync__Key__c, HIC_ShopifySync__Value_Of__c FROM HIC_ShopifySync__Data_Mappings__r LIMIT 200)
FROM HIC_ShopifySync__Object_Mapping__c
WHERE HIC_ShopifySync__Resource__c = 'customers' AND HIC_ShopifySync__Store__c = :store ORDER BY HIC_ShopifySync__Preference__c ];
SyncShopifyBatch doInBatch = new SyncShopifyBatch('', false,store, updated_at_min , updated_at_max, 'customers',listOfRelatedObjects );
if(!Test.isRunningTest()){
Database.executeBatch(doInBatch, integer.valueOf(listOfRelatedObjects[0].HIC_ShopifySync__Batch_Size__c));
}else{
Database.executeBatch(doInBatch);
}
}
public static void fetchOrderAndOpportunity(String store, String updated_at_min, String updated_at_max, List<HIC_ShopifySync__HIC_Configuration__c> listOfConfiguration){
List<HIC_ShopifySync__Object_Mapping__c> listOfRelatedObjects = [
SELECT Id, Name, HIC_ShopifySync__Resource__c,HIC_ShopifySync__Batch_Size__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c, HIC_ShopifySync__JSON_Nested__c,
(SELECT Id, Name, HIC_ShopifySync__Object_Mapping__c, HIC_ShopifySync__Resource__c, HIC_ShopifySync__JSON_Nested__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c
FROM HIC_ShopifySync__Object_Mappings__r LIMIT 200),
(SELECT Id, HIC_ShopifySync__Default__c, HIC_ShopifySync__Key__c, HIC_ShopifySync__Value_Of__c FROM HIC_ShopifySync__Data_Mappings__r LIMIT 200)
FROM HIC_ShopifySync__Object_Mapping__c
WHERE HIC_ShopifySync__Resource__c = 'orders' AND HIC_ShopifySync__Store__c = :store ORDER BY HIC_ShopifySync__Preference__c ];
SyncShopifyBatch doInBatch = new SyncShopifyBatch('', false,store, '' , '', 'orders' ,listOfRelatedObjects );
if(!Test.isRunningTest()){
Database.executeBatch(doInBatch, integer.valueOf(listOfRelatedObjects[0].HIC_ShopifySync__Batch_Size__c));
}else{
Database.executeBatch(doInBatch);
}
}
public static void processSmartCollections(String store, String updated_at_min, String updated_at_max, List<HIC_ShopifySync__HIC_Configuration__c> listOfConfiguration){
List<HIC_ShopifySync__Object_Mapping__c> listOfRelatedObjects = [
SELECT Id, Name, HIC_ShopifySync__Resource__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Batch_Size__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c, HIC_ShopifySync__JSON_Nested__c,
(SELECT Id, Name, HIC_ShopifySync__Object_Mapping__c, HIC_ShopifySync__Resource__c, HIC_ShopifySync__JSON_Nested__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c
FROM HIC_ShopifySync__Object_Mappings__r LIMIT 200),
(SELECT Id, HIC_ShopifySync__Default__c, HIC_ShopifySync__Key__c, HIC_ShopifySync__Value_Of__c FROM HIC_ShopifySync__Data_Mappings__r LIMIT 200)
FROM HIC_ShopifySync__Object_Mapping__c
WHERE HIC_ShopifySync__Resource__c = 'collections' AND HIC_ShopifySync__Store__c = :store ORDER BY HIC_ShopifySync__Preference__c ];
SyncShopifyBatch doInBatch = new SyncShopifyBatch('', false,store, '' , '', 'collections',listOfRelatedObjects );
if(!Test.isRunningTest()){
Database.executeBatch(doInBatch, integer.valueOf(listOfRelatedObjects[0].HIC_ShopifySync__Batch_Size__c));
}else{
Database.executeBatch(doInBatch);
}
}
public static void processCustomCollections(String store, String updated_at_min, String updated_at_max, List<HIC_ShopifySync__HIC_Configuration__c> listOfConfiguration){
List<HIC_ShopifySync__Object_Mapping__c> listOfRelatedObjects = [
SELECT Id, Name, HIC_ShopifySync__Resource__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Batch_Size__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c, HIC_ShopifySync__JSON_Nested__c,
(SELECT Id, Name, HIC_ShopifySync__Object_Mapping__c, HIC_ShopifySync__Resource__c, HIC_ShopifySync__JSON_Nested__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c
FROM HIC_ShopifySync__Object_Mappings__r LIMIT 200),
(SELECT Id, HIC_ShopifySync__Default__c, HIC_ShopifySync__Key__c, HIC_ShopifySync__Value_Of__c FROM HIC_ShopifySync__Data_Mappings__r LIMIT 200)
FROM HIC_ShopifySync__Object_Mapping__c
WHERE HIC_ShopifySync__Resource__c = 'collections' AND HIC_ShopifySync__Store__c = :store ORDER BY HIC_ShopifySync__Preference__c ];
SyncShopifyBatch doInBatch = new SyncShopifyBatch('', false,store, '' , '', 'collections' ,listOfRelatedObjects );
if(!Test.isRunningTest()){
Database.executeBatch(doInBatch, integer.valueOf(listOfRelatedObjects[0].HIC_ShopifySync__Batch_Size__c));
}else{
Database.executeBatch(doInBatch);
}
}
public static void processCollect(String store, String updated_at_min, String updated_at_max, List<HIC_ShopifySync__HIC_Configuration__c> listOfConfiguration){
List<HIC_ShopifySync__Object_Mapping__c> listOfRelatedObjects = [
SELECT Id, Name, HIC_ShopifySync__Resource__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Batch_Size__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c, HIC_ShopifySync__JSON_Nested__c,
(SELECT Id, Name, HIC_ShopifySync__Object_Mapping__c, HIC_ShopifySync__Resource__c, HIC_ShopifySync__JSON_Nested__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c
FROM HIC_ShopifySync__Object_Mappings__r LIMIT 200),
(SELECT Id, HIC_ShopifySync__Default__c, HIC_ShopifySync__Key__c, HIC_ShopifySync__Value_Of__c FROM HIC_ShopifySync__Data_Mappings__r LIMIT 200)
FROM HIC_ShopifySync__Object_Mapping__c
WHERE HIC_ShopifySync__Resource__c = 'collections' AND HIC_ShopifySync__Store__c = :store ORDER BY HIC_ShopifySync__Preference__c ];
SyncShopifyBatch doInBatch = new SyncShopifyBatch('', false,store, '' , '', 'collections', listOfRelatedObjects );
if(!Test.isRunningTest()){
Database.executeBatch(doInBatch, integer.valueOf(listOfRelatedObjects[0].HIC_ShopifySync__Batch_Size__c));
}else{
Database.executeBatch(doInBatch);
}
}
public static void fetchLocationsAndInventoryLevels(String store, String updated_at_min, String updated_at_max, List<HIC_ShopifySync__HIC_Configuration__c> listOfConfiguration){
List<HIC_ShopifySync__Object_Mapping__c> listOfRelatedObjects = [
SELECT Id, Name, HIC_ShopifySync__Resource__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Batch_Size__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c, HIC_ShopifySync__JSON_Nested__c,
(SELECT Id, Name, HIC_ShopifySync__Object_Mapping__c, HIC_ShopifySync__Resource__c, HIC_ShopifySync__JSON_Nested__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c
FROM HIC_ShopifySync__Object_Mappings__r LIMIT 200),
(SELECT Id, HIC_ShopifySync__Default__c, HIC_ShopifySync__Key__c, HIC_ShopifySync__Value_Of__c FROM HIC_ShopifySync__Data_Mappings__r LIMIT 200)
FROM HIC_ShopifySync__Object_Mapping__c
WHERE HIC_ShopifySync__Resource__c = 'locations' AND HIC_ShopifySync__Store__c = :store ORDER BY HIC_ShopifySync__Preference__c ];
SyncShopifyBatch doInBatch = new SyncShopifyBatch('', false,store, '' , '', 'locations', listOfRelatedObjects );
if(!Test.isRunningTest()){
Database.executeBatch(doInBatch,integer.valueOf(listOfRelatedObjects[0].HIC_ShopifySync__Batch_Size__c));
}else{
Database.executeBatch(doInBatch);
}
}
public static void fetchDraftorders(String store, String updated_at_min, String updated_at_max, List<HIC_ShopifySync__HIC_Configuration__c> listOfConfiguration){
List<HIC_ShopifySync__Object_Mapping__c> listOfRelatedObjects = [
SELECT Id, Name, HIC_ShopifySync__Resource__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Batch_Size__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c, HIC_ShopifySync__JSON_Nested__c,
(SELECT Id, Name, HIC_ShopifySync__Object_Mapping__c, HIC_ShopifySync__Resource__c, HIC_ShopifySync__JSON_Nested__c, HIC_ShopifySync__Default__c,HIC_ShopifySync__Store__c, HIC_ShopifySync__Preference__c, HIC_ShopifySync__sObject_Name__c
FROM HIC_ShopifySync__Object_Mappings__r LIMIT 200),
(SELECT Id, HIC_ShopifySync__Default__c, HIC_ShopifySync__Key__c, HIC_ShopifySync__Value_Of__c FROM HIC_ShopifySync__Data_Mappings__r LIMIT 200)
FROM HIC_ShopifySync__Object_Mapping__c
WHERE HIC_ShopifySync__Resource__c = 'draft_orders' AND HIC_ShopifySync__Store__c = :store ORDER BY HIC_ShopifySync__Preference__c ];
SyncShopifyBatch doInBatch = new SyncShopifyBatch('', false,store, '' , '', 'draft_orders' ,listOfRelatedObjects );
if(!Test.isRunningTest()){
Database.executeBatch(doInBatch,integer.valueOf(listOfRelatedObjects[0].HIC_ShopifySync__Batch_Size__c));
}else{
Database.executeBatch(doInBatch);
}
}
}