SyncMadeEasy/force-app/main/default/classes/UpdateCollectionAndCollects...

109 lines
8.1 KiB
OpenEdge ABL

/**
* ─────────────────────────────────────────────────────────────────────────────────────────────────┐
* This web service class is use for handle Shopify's Custom / Smart Collection and Collects webhook response.
* Trigger on Order delete.
* Shopify API Documentation: https://shopify.dev/docs/admin-api/rest/reference
* Create Shopify Store: https://www.shopify.com/signup?itcat=identity&itterm=create-new-store
* Shopify API Release 2020: https://www.shopify.in/partners/blog/shopify-api-release-january-2020
* What is Person Account in Salesforce ? https://help.salesforce.com/articleView?id=account_person.htm&type=5
* ──────────────────────────────────────────────────────────────────────────────────────────────────
* @author Sumit <sumit@hicShopify.com>
* ──────────────────────────────────────────────────────────────────────────────────────────────────
*/
@RestResource(URLMApping ='/UpdateCollectionAndCollectsFromShopify/*')
global with sharing class UpdateCollectionAndCollectsFromShopify{
@HTTPPost
global static void updateCollectionAndCollects(){
RestRequest request = RestContext.request;
String store = 'Default';
Map <String, String> params = request.params;
if(!params.isEmpty() && params.containsKey('store') && params.get('store') != null)
store = params.get('store');
list<HIC_ShopifySync__HIC_Configuration__c > configurationList = new list<HIC_ShopifySync__HIC_Configuration__c >();
String queryConfiguration = 'Select '+CheckAccessibility.isAccessible('name, HIC_ShopifySync__Shopify_URL__c,HIC_ShopifySync__Default_Field_Mapping__c,HIC_ShopifySync__Specify_Close_Date__c,HIC_ShopifySync__Batch_Is_Processing__c, HIC_ShopifySync__API_Key__c, HIC_ShopifySync__Private_Key_Password__c, HIC_ShopifySync__Opportunity__c, HIC_ShopifySync__Order__c, HIC_ShopifySync__Opportunity_Line_Item__c, HIC_ShopifySync__Order_Line_Item__c, HIC_ShopifySync__Order_Fulfillment__c, HIC_ShopifySync__Person_Account__c ','HIC_ShopifySync__HIC_Configuration__c')+' from HIC_ShopifySync__HIC_Configuration__c where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Store__c', 'HIC_ShopifySync__HIC_Configuration__c')+' = \''+store+'\' LIMIT 49999';
configurationList = database.query(queryConfiguration);
RestResponse response = RestContext.response;
String smartResponse = request.requestBody.toString().trim();
System.debug('smartResponse-->'+smartResponse);
String listType = 'List<' + 'HIC_ShopifySync__Collection__c' + '>';
String query = 'Select '+CheckAccessibility.isAccessible('HIC_ShopifySync__SF_Field__c, HIC_ShopifySync__Shopify_Fields__c, HIC_ShopifySync__Nested__c , HIC_ShopifySync__IsSFID__c, HIC_ShopifySync__Default_Value__c, HIC_ShopifySync__Is_Override__c','HIC_ShopifySync__HIC_Field_Mapping__c')+' from HIC_ShopifySync__HIC_Field_Mapping__c Where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Object_Name__c','HIC_ShopifySync__HIC_Field_Mapping__c') +' = \'HIC_ShopifySync__Collection__c\' AND '+CheckAccessibility.isAccessible('HIC_ShopifySync__Store__c','HIC_ShopifySync__HIC_Field_Mapping__c')+' = \''+store+'\' LIMIT 49999';
list<HIC_ShopifySync__HIC_Field_Mapping__c> collectionFieldsList = new list<HIC_ShopifySync__HIC_Field_Mapping__c>();
collectionFieldsList = database.query(query);
Map<String, Object> meta = (Map<String, Object>) JSON.deserializeUntyped(smartResponse);
if(meta.containsKey('rules')){
meta.put('rules',string.valueOf(JSON.serialize(meta.get('rules'))));
}
list<sobject> collectionListToupsert = (List<SObject>)Type.forName(listType).newInstance();
if(!collectionFieldsList.isEmpty() && !meta.isEmpty()){
String companyTimeZone = [SELECT Id, TimeZoneSidKey FROM Organization Limit 1][0].TimeZoneSidKey;
collectionListToupsert.add(HIC_ShopifyUtility.processFieldTypeAndMapping(collectionFieldsList,'HIC_ShopifySync__Collection__c',meta,configurationList,companyTimeZone));
}
set<String> setofcollection = new set<String>();
if(meta.containskey('id') && String.valueof(meta.get('id')) != '' && String.valueof(meta.get('id')) != null){
setofcollection.add(String.valueof(meta.get('id')));
}
list<HIC_ShopifySync__Collect__c> listtodeletecollects = new list<HIC_ShopifySync__Collect__c>();
HIC_ShopifySync__Collection__c collectionoBje = new HIC_ShopifySync__Collection__c();
collectionoBje.HIC_ShopifySync__Shopify_Id__c = String.valueof(meta.get('id'));
list<HIC_ShopifySync__Collection__c> listofcollection = new list<HIC_ShopifySync__Collection__c>();
if(!setofcollection.isEmpty()){
String collectsquery = 'Select '+CheckAccessibility.isAccessible('id,HIC_ShopifySync__Shopify_Id__c','HIC_ShopifySync__Collection__c') +' from HIC_ShopifySync__Collection__c Where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Shopify_Id__c','HIC_ShopifySync__Collect__c')+' in : setofcollection limit 1' ;
system.debug('collectsquery--> '+collectsquery);
listofcollection = database.query(collectsquery);
}
set<String> setofsfcollectionid = new set<String>();
if(!listofcollection.isEmpty()){
setofsfcollectionid.add(String.valueof(listofcollection[0].id));
}
if(!listofcollection.isEmpty()){
String collectsquery = 'Select '+CheckAccessibility.isAccessible('id,HIC_ShopifySync__Collection__c', 'HIC_ShopifySync__Collect__c') +' from HIC_ShopifySync__Collect__c Where '+CheckAccessibility.isAccessible('HIC_ShopifySync__Collection__c','HIC_ShopifySync__Collect__c')+' in : setofsfcollectionid limit 49999' ;
listtodeletecollects = database.query(collectsquery);
}
try{
if(!listtodeletecollects.isEmpty()){
if(CheckAccessibility.isDeletable('HIC_ShopifySync__Collect__c'))
database.delete (listtodeletecollects,false);
}
}catch(Exception e){
system.debug('Error: '+e.getMessage());
}
fetchCollectsForWebhooks callBatchAgain = new fetchCollectsForWebhooks(new list<String> {String.valueof(meta.get('id'))},store,true);
if(!Test.isRunningTest())
Database.executeBatch(callBatchAgain,1);
if(!collectionListToupsert.Isempty()){ //return null;
Schema.SObjectType objectType = Schema.getGlobalDescribe().get('HIC_ShopifySync__Collection__c');
Map<String, SObjectField> fieldMap = objectType.getDescribe().fields.getMap();
Schema.SobjectField theField = fieldMap.get('HIC_ShopifySync__Shopify_Id__c');
try{
if(!Test.isRunningTest()){
EmailErrorCSV.makeCsvAndSendInEmail(smartResponse,'HIC_ShopifySync__Collection__c',collectionListToupsert,theField,true,store);
if(meta.containsKey('rules') && meta.get('rules') != null){
HIC_ShopifyUtility.deleteSmartCollectionRules(new set<String> {String.valueof(meta.get('id'))});
HIC_ShopifyUtility.insertSmartCollectionRules(new Map<String,String> {String.valueof(meta.get('id')) => string.valueOf(meta.get('rules'))});
}
}
}catch(Exception e){
System.debug('Exception '+e.getMessage() + ' at '+ e.getLineNumber());
}
}
}
}