109 lines
8.1 KiB
OpenEdge ABL
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());
|
|
}
|
|
}
|
|
}
|
|
} |