185 lines
19 KiB
OpenEdge ABL
185 lines
19 KiB
OpenEdge ABL
global with sharing class FetchCheckouts implements Database.Batchable<Object>, Database.allowscallouts, Database.Stateful{
|
|
Type typLstSObject;
|
|
String linkForNextPage = ''; //Pagination link
|
|
Boolean isEnd = false;
|
|
String store = 'Default';
|
|
String updated_at_min = '';
|
|
String updated_at_max = '';
|
|
|
|
public List<HIC_ShopifySync__HIC_Configuration__c > configurationList;
|
|
|
|
global FetchCheckouts(String linkForNextPage,boolean isEnd){
|
|
this.linkForNextPage = linkForNextPage;
|
|
this.isEnd = isEnd;
|
|
}
|
|
|
|
global FetchCheckouts(String linkForNextPage,boolean isEnd, String store){
|
|
this.linkForNextPage = linkForNextPage;
|
|
this.isEnd = isEnd;
|
|
this.store = store;
|
|
}
|
|
|
|
global FetchCheckouts(String linkForNextPage,boolean isEnd, String store, String updated_at_min, String updated_at_max){
|
|
this.linkForNextPage = linkForNextPage;
|
|
this.isEnd = isEnd;
|
|
this.store = store;
|
|
this.updated_at_min = updated_at_min;
|
|
this.updated_at_max = updated_at_max;
|
|
}
|
|
global Iterable<Object> start(Database.BatchableContext bc){
|
|
String query = 'Select '+CheckAccessibility.isAccessible('HIC_ShopifySync__Chunk_Size__c,id,name,HIC_ShopifySync__ProductVariantBatchCompleted__c,HIC_ShopifySync__Inventory_Location__c,HIC_ShopifySync__Enable_Draft_Order__c,HIC_ShopifySync__AccountContactBatchCompleted__c,HIC_ShopifySync__Collection__c,HIC_ShopifySync__Number_of_pages_for_Account__c,HIC_ShopifySync__DraftOrderBatchCompleted__c,HIC_ShopifySync__OrderBatchCompleted__c,HIC_ShopifySync__InventoryBatchCompleted__c,HIC_ShopifySync__Shopify_URL__c,HIC_ShopifySync__Default_Field_Mapping__c,HIC_ShopifySync__Specify_Close_Date__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__Account_Contact__c, HIC_ShopifySync__Default_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 1';
|
|
configurationList = Database.query(query);
|
|
String checkoutResponse = '';
|
|
String JSONResponse = '';
|
|
|
|
if(!Test.isRunningTest()){
|
|
// Get Shopif's Checkouts and CheckoutlineItem JSON Response
|
|
if(String.isNotBlank(linkForNextPage) && !isEnd){
|
|
JSONResponse = HIC_ShopifyUtility.fetchAllDataWithLinkForNextPage('checkouts.json?limit='+configurationList[0].HIC_ShopifySync__Chunk_Size__c+'&page_info='+linkForNextPage, configurationList);
|
|
}else{
|
|
|
|
JSONResponse = HIC_ShopifyUtility.fetchAllDataWithLinkForNextPage('checkouts.json?limit='+configurationList[0].HIC_ShopifySync__Chunk_Size__c+(updated_at_min!=''?'&updated_at_min='+updated_at_min:'')+(updated_at_max!=''?'&updated_at_max='+updated_at_max:''), configurationList);
|
|
System.debug('JSONResponse---'+JSONResponse);
|
|
}
|
|
if(String.isNotBlank(JSONResponse)){
|
|
Map<String,Object> main = (Map<String,Object>) JSON.deserializeUntyped(JSONResponse);
|
|
if(!main.isEmpty() && main.containskey('response') && main.containskey('link') ){
|
|
if( main.get('response') != null)
|
|
checkoutResponse = String.valueof(main.get('response'));
|
|
|
|
if(main.get('link') != null){
|
|
linkForNextPage = String.valueof(main.get('link'));
|
|
}else{
|
|
isEnd = true;
|
|
}
|
|
}
|
|
}
|
|
}else{//satyam
|
|
checkoutResponse ='{ "checkouts": [{"buyer_accepts_marketing": false,"cart_token": "db6fad21d337afce5a65831662cf44bf","closed_at": null,"completed_at": null,"created_at": "2023-04-27T09:15:41-04:00","currency": "INR","presentment_currency": "INR","customer_locale": "en-IN","device_id": null,"email": null,"gateway": null,"id": 36668717957399,"landing_site": "/password","location_id": null,"note": null,"note_attributes": [],"phone": "+917048948110","referring_site": "","source_identifier": null,"source_url": null,"taxes_included": false,"token": "f608708ffd25236f7e3a55623158c0ec","total_weight": 0,"updated_at": "2023-04-27T09:15:41-04:00","user_id": null,"customer": {"id": 6900902297879,"email": null,"accepts_marketing": false,"created_at": "2023-04-27T09:15:41-04:00","updated_at": "2023-04-27T09:15:41-04:00","first_name": "Satyam","last_name": "Mishra","orders_count": 0,"state": "disabled","total_spent": "0.00","last_order_id": null,"note": null,"verified_email": true,"multipass_identifier": null,"tax_exempt": false,"tags": "","last_order_name": null,"currency": "INR","phone": "+917048948110","accepts_marketing_updated_at": "2023-04-27T09:15:41-04:00","marketing_opt_in_level": null,"tax_exemptions": [],"email_marketing_consent": null,"sms_marketing_consent": {"state": "not_subscribed","opt_in_level": "single_opt_in","consent_updated_at": null,"consent_collected_from": "SHOPIFY"},"admin_graphql_api_id": "gid://shopify/Customer/6900902297879", "default_address": { "id": 9148733325591, "customer_id": 6900902297879, "first_name": "Satyam", "last_name": "Mishra", "company": null, "address1": "street noida 68", "address2": "Pegasus one", "city": "Noida", "province": "Uttar Pradesh", "country": "India", "zip": "201308", "phone": null, "name": "Satyam Mishra", "province_code": "UP", "country_code": "IN", "country_name": "India", "default": true } }, "source": null, "source_name": "web", "name": "#36668717957399", "discount_codes": [], "total_discounts": "0.00","total_line_items_price": "100.00", "total_price": "118.00", "total_tax": "18.00", "subtotal_price": "100.00", "total_duties": null, "abandoned_checkout_url": "https://demoorg10satyam.myshopify.com/74610213143/checkouts/ac/db6fad21d337afce5a65831662cf44bf/recover?key=6518c7ed0ee9cf500c429f4006633024", "shipping_lines": [ { "code": "Standard", "price": "0.00", "source": "shopify","title": "Standard","presentment_title": "Standard","validation_context": null,"phone": null,"markup": "0.00", "carrier_identifier": null, "carrier_service_id": null, "api_client_id": 580111, "delivery_option_group": {"token": "9b5edb8a4c172b33fbb617dd46ab0281","type": "one_time_purchase"},"delivery_expectation_range": null, "delivery_expectation_type": null, "tax_lines": [] } ], "tax_lines": [ { "position": 1, "price": "18.00", "rate": 0.18, "title": "IGST", "source": null, "compare_at": "18.00", "zone": null, "channel_liable": false, "identifier": null } ], "shipping_address": { "first_name": "Satyam", "address1": "street noida 68", "phone": null, "city": "Noida", "zip": "201308", "province": "UP", "country": "IN", "last_name": "Mishra", "address2": "Pegasus one", "company": null, "latitude": null, "longitude": null, "name": "Satyam Mishra", "country_code": "IN", "province_code": "UP" }, "billing_address": { "first_name": "Satyam", "address1": "street noida 68", "phone": null, "city": "Noida", "zip": "201308", "province": "UP", "country": "IN", "last_name": "Mishra", "address2": "Pegasus one", "company": null, "latitude": null, "longitude": null, "name": "Satyam Mishra", "country_code": "IN", "province_code": "UP" }, "line_items": [ { "key": null, "destination_location_id": null, "fulfillment_service": "manual", "gift_card": false, "grams": 0, "origin_location_id": null, "presentment_title": "Cap", "presentment_variant_title": "Default Title", "product_id": 8251589230871, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "10", "taxable": true, "title": "Cap", "variant_id": 44935361200407, "variant_title": null, "variant_price": "100.00", "vendor": "demoorg10satyam", "unit_price_measurement": { "measured_type": "", "quantity_value": 0, "quantity_unit": "", "reference_value": 0, "reference_unit": "" }, "rank": null, "line_price": "100.00", "price": "100.00", "applied_discounts": [], "tax_lines": [ { "position": 0, "price": "18.00", "rate": 0.18, "title": "IGST", "source": null, "compare_at": "18.00", "zone": null, "channel_liable": false, "identifier": null } ] } ] }, { "buyer_accepts_marketing": false, "cart_token": "db6fad21d337afce5a65831662cf44bf", "closed_at": null, "completed_at": null, "created_at": "2023-04-27T09:15:41-04:00", "currency": "INR", "presentment_currency": "INR", "customer_locale": "en-IN", "device_id": null, "email": null, "gateway": null, "id": 36668717957399, "landing_site": "/password", "location_id": null, "note": null, "note_attributes": [], "phone": "+917048948110", "referring_site": "", "source_identifier": null, "source_url": null, "taxes_included": false, "token": "f608708ffd25236f7e3a55623158c0ec", "total_weight": 0, "updated_at": "2023-04-27T09:15:41-04:00", "user_id": null, "source": null, "source_name": "web", "name": "#36668717957399", "discount_codes": [], "total_discounts": "0.00", "total_line_items_price": "100.00", "total_price": "118.00", "total_tax": "18.00", "subtotal_price": "100.00", "total_duties": null, "abandoned_checkout_url": "https://demoorg10satyam.myshopify.com/74610213143/checkouts/ac/db6fad21d337afce5a65831662cf44bf/recover?key=6518c7ed0ee9cf500c429f4006633024", "shipping_lines": [ { "code": "Standard", "price": "0.00", "source": "shopify", "title": "Standard", "presentment_title": "Standard", "validation_context": null, "phone": null, "markup": "0.00", "carrier_identifier": null, "carrier_service_id": null, "api_client_id": 580111, "delivery_option_group": { "token": "9b5edb8a4c172b33fbb617dd46ab0281", "type": "one_time_purchase" }, "delivery_expectation_range": null, "delivery_expectation_type": null, "tax_lines": [] } ], "tax_lines": [ { "position": 1, "price": "18.00", "rate": 0.18, "title": "IGST", "source": null, "compare_at": "18.00", "zone": null, "channel_liable": false, "identifier": null } ], "shipping_address": { "first_name": "Satyam", "address1": "street noida 68", "phone": null, "city": "Noida", "zip": "201308", "province": "UP", "country": "IN", "last_name": "Mishra", "address2": "Pegasus one", "company": null, "latitude": null, "longitude": null, "name": "Satyam Mishra", "country_code": "IN", "province_code": "UP" }, "billing_address": { "first_name": "Satyam", "address1": "street noida 68", "phone": null, "city": "Noida", "zip": "201308", "province": "UP", "country": "IN", "last_name": "Mishra", "address2": "Pegasus one", "company": null, "latitude": null, "longitude": null, "name": "Satyam Mishra", "country_code": "IN", "province_code": "UP" }, "line_items": [ { "key": null, "destination_location_id": null, "fulfillment_service": "manual", "gift_card": false, "grams": 0, "origin_location_id": null, "presentment_title": "Cap", "presentment_variant_title": "Default Title", "product_id": 8251589230871, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "10", "taxable": true, "title": "Cap", "variant_id": 44935361200407, "variant_title": null, "variant_price": "100.00", "vendor": "demoorg10satyam", "unit_price_measurement": { "measured_type": "", "quantity_value": 0, "quantity_unit": "", "reference_value": 0, "reference_unit": "" }, "rank": null, "line_price": "100.00", "price": "100.00", "applied_discounts": [], "tax_lines": [ { "position": 0, "price": "18.00", "rate": 0.18, "title": "IGST", "source": null, "compare_at": "18.00", "zone": null, "channel_liable": false, "identifier": null } ] } ] } ] }'; }
|
|
|
|
|
|
Map<String, Object> meta = (Map<String, Object>) JSON.deserializeUntyped(checkoutResponse);
|
|
List<Object> objectList = (List<Object>)meta.get('checkouts');
|
|
return objectList ;
|
|
}
|
|
global void execute(Database.BatchableContext bc , List<Object> Scope){
|
|
|
|
List<Object> listOfCheckLines = new List<Object>();
|
|
typLstSObject = Type.ForName('List<HIC_ShopifySync__Checkout_LineItem__c>');
|
|
//List<SObject> checkOutLineListToupsert = (List<SObject>)typLstSObject.NewInstance();
|
|
List<Object> listofallCheckLines = new List<Object>();
|
|
Map<String,Object> shopifyidvsAccountid = new Map<String,Object>();
|
|
List<Object> CheckoutList = new List<Object>();
|
|
for(Object checkObj : Scope ){
|
|
Map<String,Object> CheckoutMap = (Map<String,Object>)checkObj ;
|
|
String checkoutId = '';
|
|
if(CheckoutMap != null && !CheckoutMap.isEmpty() && CheckoutMap.containskey('id')){
|
|
checkoutId = String.valueOf(CheckoutMap.get('id'));
|
|
}
|
|
if(CheckoutMap != null && !CheckoutMap.isEmpty() && CheckoutMap.containskey('line_items')){
|
|
//Map<String, Object> lineMap = (Map<String, Object>)CheckoutMap.get('line_items');
|
|
//if(lineMap != null && !lineMap.isEmpty() && lineMap.containskey('line_items'))
|
|
listOfCheckLines = (list<Object>)CheckoutMap.get('line_items');
|
|
Map<String, Object> chekLineObj = new Map<String, Object>();
|
|
for(Object checkLine : listOfCheckLines){
|
|
chekLineObj = (Map<String, Object>)checkLine;
|
|
chekLineObj.put('id', checkoutId+'-'+chekLineObj.get('variant_id'));
|
|
chekLineObj.put('checkout_id', checkoutId);
|
|
listofallCheckLines.add(chekLineObj);
|
|
}
|
|
//listofallCheckLines.addAll(listOfCheckLines);
|
|
Map<String,Object> accMap = new Map<String,Object> ();
|
|
if(CheckoutMap.containsKey('customer')){
|
|
accMap = (Map<String,Object>)CheckoutMap.get('customer');
|
|
}
|
|
else{
|
|
accMap.put('id', 'Missing Account');
|
|
CheckoutMap.put('customer', accMap);
|
|
}
|
|
if(CheckoutMap.containsKey('company')){
|
|
//accMap = (Map<String,Object>)CheckoutMap.get('company');
|
|
}
|
|
else{
|
|
Map<String, String> companyMap = new Map<String, String>();
|
|
companyMap.put('id', 'business missing account');
|
|
CheckoutMap.put('company', companyMap);
|
|
}
|
|
if(accMap != null && !accMap.isEmpty() && accMap.containsKey('id')){
|
|
if(Schema.sObjectType.Account.fields.getMap().containsKey( 'ispersonaccount' )){
|
|
if (configurationList[0].HIC_ShopifySync__Person_Account__c ){
|
|
|
|
if(!(String.valueOf(accMap.get('id'))).contains('Person '))
|
|
ShopifyIdvsAccountId.put('Person '+String.valueof(accMap.get('id')),CheckoutMap.get('customer'));
|
|
|
|
}else if(!configurationList[0].HIC_ShopifySync__Person_Account__c ){
|
|
|
|
if(!(String.valueOf(accMap.get('id'))).contains('Business '))
|
|
ShopifyIdvsAccountId.put('Business '+String.valueof(accMap.get('id')),CheckoutMap.get('customer'));
|
|
}
|
|
}else{
|
|
if(!(String.valueOf(accMap.get('id'))).contains('Business '))
|
|
ShopifyIdvsAccountId.put('Business '+String.valueof(accMap.get('id')),CheckoutMap.get('customer'));
|
|
}
|
|
}
|
|
}
|
|
|
|
CheckoutList.add(CheckoutMap);
|
|
system.debug('CheckoutList----'+CheckoutList);
|
|
}
|
|
|
|
if(!ShopifyidvsAccountid.isEmpty() && ShopifyidvsAccountid != null){
|
|
if(!Test.isRunningTest() && configurationList[0].HIC_ShopifySync__Person_Account__c){
|
|
//HIC_ShopifyUtility.initializeAccount(ShopifyidvsAccountid, 'Account', true,configurationList);
|
|
HIC_ShopifyUtility.InitializeAccount(ShopifyIdvsAccountId, configurationList, store);
|
|
}else{
|
|
//HIC_ShopifyUtility.initializeAccount(ShopifyidvsAccountid, 'Account', false,configurationList);
|
|
HIC_ShopifyUtility.InitializeAccount(ShopifyIdvsAccountId, configurationList, store);
|
|
}
|
|
}else{
|
|
shopifyidvsAccountid.put('Missing Account', JSON.deserializeUntyped('{"id":"Missing Account"}'));
|
|
//HIC_ShopifyUtility.initializeAccount(ShopifyidvsAccountid, 'Account', false,configurationList);
|
|
HIC_ShopifyUtility.InitializeAccount(ShopifyIdvsAccountId, configurationList, store);
|
|
}
|
|
List<HIC_ShopifySync__HIC_Field_Mapping__c> checkLineFieldsList = new List<HIC_ShopifySync__HIC_Field_Mapping__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__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__Checkout_LineItem__c\' AND '+CheckAccessibility.isAccessible('HIC_ShopifySync__Store__c','HIC_ShopifySync__HIC_Field_Mapping__c')+' = \''+store+'\' LIMIT 49999';
|
|
checkLineFieldsList = database.query(query);
|
|
List<HIC_ShopifySync__HIC_Field_Mapping__c> checkoutFieldsList = new List<HIC_ShopifySync__HIC_Field_Mapping__c>();
|
|
query = '';
|
|
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__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__Checkout__c\' AND '+CheckAccessibility.isAccessible('HIC_ShopifySync__Store__c','HIC_ShopifySync__HIC_Field_Mapping__c')+' = \''+store+'\' LIMIT 49999';
|
|
checkoutFieldsList = database.query(query);
|
|
try{
|
|
if(!checkoutFieldsList.isEmpty() && !Scope.isEmpty()) {
|
|
HIC_ShopifyUtility.processSobjectList(checkoutFieldsList,Scope,'HIC_ShopifySync__Checkout__c','HIC_ShopifySync__Shopify_Id__c',configurationList,false,store);
|
|
|
|
}
|
|
}catch(Exception e){
|
|
system.debug(e.getMessage()+' at line '+ e.getLineNumber());
|
|
system.debug('error-- '+e);
|
|
}
|
|
|
|
|
|
/*if(!Test.isRunningTest()){
|
|
checkOutLineListToupsert.addAll(HIC_ShopifyUtility.fillObjectValues(checkLineFieldsList,'HIC_ShopifySync__Checkout_LineItem__c',listofallCheckLines, configurationList));
|
|
}*/
|
|
try{
|
|
if(!checkLineFieldsList.isEmpty() && !listofallCheckLines.isEmpty()) {
|
|
HIC_ShopifyUtility.processSobjectList(checkLineFieldsList,listofallCheckLines,'HIC_ShopifySync__Checkout_LineItem__c','HIC_ShopifySync__Shopify_Id__c', configurationList,false,store);
|
|
}
|
|
}catch(Exception e){
|
|
system.debug(e.getMessage()+' at line '+ e.getLineNumber());
|
|
system.debug('error-- '+e);
|
|
}
|
|
|
|
|
|
}
|
|
global void finish(Database.BatchableContext bc){
|
|
|
|
if(!isEnd){
|
|
if(!Test.isRunningTest()){
|
|
//Call Batch Again
|
|
FetchCheckouts callBatchAgain = new FetchCheckouts(linkForNextPage,false,store,updated_at_min,updated_at_max);
|
|
Database.executeBatch(callBatchAgain,1);
|
|
}
|
|
}
|
|
}
|
|
} |