Created
April 14, 2016 11:38
-
-
Save adrianmi8/9488050de1aafeed480df083c424bbec to your computer and use it in GitHub Desktop.
UPS - mass ship to contacts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public with sharing class NewUPSShipmentsContactCtrl { | |
private ApexPages.StandardSetController standardController; | |
private Id bulkShipmentId; | |
private String batchId; | |
private static final String SERVICE_TYPE = 'UPS'; | |
private final BulkShipmentSettings__c settings; | |
private Set<Id> contactsIds; | |
public String statusMessage {get; set;} | |
public static final String workingObject = 'Contact'; | |
public Boolean startPoller {get; set;} | |
private Boolean validationComplete {get; set;} | |
private Boolean hasValidationErrors {get; set;} | |
private Boolean hasProcessingErrors {get; set;} | |
private String previousStatus {get; set;} | |
private static final String VALIDATION_COMPLETE = 'VALIDATION_COMPLETED'; | |
private static final String PROCESSING_COMPLETE = 'PROCESSING_COMPLETED'; | |
private static final String ERROR_STATUS = 'ERROR'; | |
private static final String SUCCESS_STATUS = 'SUCCESS'; | |
public NewUPSShipmentsContactCtrl(ApexPages.StandardSetController controller) { | |
standardController = controller; | |
contactsIds = new Set<Id>(); | |
for (sObject c : standardController.getSelected()) { | |
contactsIds.add(c.Id); | |
} | |
settings = BulkShipmentSettings__c.getInstance(SERVICE_TYPE); | |
hasValidationErrors = false; | |
hasProcessingErrors = false; | |
validationComplete = false; | |
} | |
public void processBulkShipment() { | |
createBulkShippingObjects(); | |
this.batchId = zkups.BulkShipmentInterface.validateBulkShipment(this.bulkShipmentId, true); | |
startPoller = true; | |
this.statusMessage = 'Shipments creation process has been initiated.'; | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, this.statusMessage)); | |
} | |
public PageReference checkBatchStatus() { | |
hasValidationErrors = false; | |
if (validationComplete) { | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'Shipments validation has been completed.')); | |
} | |
List<zkups__BulkShipmentStatus__c> statuses = [ | |
SELECT zkups__Status__c, zkups__StatusMessage__c | |
FROM zkups__BulkShipmentStatus__c | |
WHERE zkups__BatchId__c = :this.batchId]; | |
if ( ! statuses.isEmpty() ) { | |
this.previousStatus = statuses.get(0).zkups__Status__c; | |
if (previousStatus == ERROR_STATUS) { | |
this.statusMessage = statuses.get(0).zkups__StatusMessage__c; | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, this.statusMessage)); | |
startPoller = false; | |
return null; | |
} else if(previousStatus == VALIDATION_COMPLETE ) { | |
validationComplete = true; | |
List<zkups__QueuedShipmentStatus__c> errorsList = [ | |
SELECT zkups__StatusMessage__c | |
FROM zkups__QueuedShipmentStatus__c | |
WHERE zkups__BatchId__c = :this.batchId AND | |
zkups__Status__c = 'ERROR' | |
LIMIT 100]; | |
if ( ! errorsList.isEmpty() ) { | |
hasValidationErrors = true; | |
startPoller = false; | |
String errorMessage = ''; | |
for (zkups__QueuedShipmentStatus__c err : errorsList) { | |
errorMessage = errorMessage + err.zkups__StatusMessage__c + '<br/>'; | |
} | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Validation Error: ' + errorMessage)); | |
return null; | |
} | |
if ( ! hasValidationErrors ) { | |
this.batchId = zkups.BulkShipmentInterface.processBulkShipment(this.bulkShipmentId); | |
} | |
} else if(previousStatus == PROCESSING_COMPLETE) { | |
List<zkups__QueuedShipmentStatus__c> errorsList = [ | |
SELECT zkups__StatusMessage__c | |
FROM zkups__QueuedShipmentStatus__c | |
WHERE zkups__BatchId__c = :this.batchId AND | |
zkups__Status__c = 'ERROR' | |
LIMIT 100]; | |
if ( ! errorsList.isEmpty() ) { | |
hasValidationErrors = true; | |
startPoller = false; | |
String errorMessage = ''; | |
for (zkups__QueuedShipmentStatus__c err : errorsList) { | |
errorMessage = errorMessage + err.zkups__StatusMessage__c + '<br/>'; | |
} | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Creation Error: ' + errorMessage)); | |
return null; | |
} | |
if ( ! hasValidationErrors) { | |
return new PageReference('/003'); | |
} | |
} | |
return null; | |
} else { | |
return null; | |
} | |
} | |
public void createBulkShippingObjects() { | |
List<zkups__UPSShipmatePreference__c> shipmateList = [ | |
SELECT zkups__CompanyName__c, zkups__ShippingIsResidential__c, zkups__ShippingCity__c, | |
zkups__ShippingCountry__c, zkups__SenderEMailDefault__c, zkups__SenderPhoneDefault__c, | |
zkups__ShippingState__c, zkups__ShippingStreet__c, zkups__ShippingPostalCode__c, | |
zkups__LabelImageTypeDefault__c | |
FROM zkups__UPSShipmatePreference__c | |
WHERE Name = :settings.ShipmatePreferenceName__c | |
LIMIT 1]; | |
if ( ! shipmateList.isEmpty() ) { | |
// 1. zkups__BulkShipment__c object | |
zkups__BulkShipment__c bulkShipment = new zkups__BulkShipment__c ( | |
zkups__ShipmatePreference__c = shipmateList.get(0).Id | |
); | |
insert bulkShipment; | |
// save id | |
this.bulkShipmentId = bulkShipment.Id; | |
List<Contact> currentContacts = [ | |
SELECT MailingCity, Account.Name, MailingCountry, | |
Email, FirstName, LastName, | |
Phone, MailingState, MailingStreet, | |
MailingPostalCode | |
FROM Contact | |
WHERE Id IN :contactsIds | |
LIMIT 20000]; | |
// 2. zkups__QueuedShipment__c object | |
List<zkups__QueuedShipment__c> queuedShipmentsToInsert = new List<zkups__QueuedShipment__c>(); | |
for (Contact con : currentContacts) { | |
zkups__QueuedShipment__c queuedShipment = new zkups__QueuedShipment__c ( | |
zkups__BulkShipment__c = bulkShipment.Id, | |
zkups__LabelImageType__c = shipmateList.get(0).zkups__LabelImageTypeDefault__c, | |
zkups__ServiceType__c = 'Domestic: UPS Ground', | |
zkups__PackagingType__c = settings.DefaultPackagingType__c, | |
zkups__WeightDimensionUnits__c = settings.DimensionUnits__c, | |
// sender info | |
zkups__SenderName__c = shipmateList.get(0).zkups__CompanyName__c, | |
zkups__SenderIsResidential__c = shipmateList.get(0).zkups__ShippingIsResidential__c, | |
zkups__SenderCity__c = shipmateList.get(0).zkups__ShippingCity__c, | |
zkups__SenderCompany__c = shipmateList.get(0).zkups__CompanyName__c, | |
zkups__SenderCountry__c = shipmateList.get(0).zkups__ShippingCountry__c, | |
zkups__SenderEmail__c = shipmateList.get(0).zkups__SenderEMailDefault__c, | |
zkups__SenderPhone__c = shipmateList.get(0).zkups__SenderPhoneDefault__c, | |
zkups__SenderState__c = shipmateList.get(0).zkups__ShippingState__c, | |
zkups__SenderStreet__c = shipmateList.get(0).zkups__ShippingStreet__c, | |
zkups__SenderPostalCode__c = shipmateList.get(0).zkups__ShippingPostalCode__c, | |
// recipient info | |
zkups__RecipientIsResidential__c = false, | |
zkups__RecipientCity__c = con.MailingCity, | |
zkups__RecipientCompany__c = con.Account.Name, | |
zkups__RecipientCountry__c = con.MailingCountry, | |
zkups__RecipientEmail__c = con.Email, | |
zkups__RecipientName__c = con.FirstName + ' ' + con.LastName, | |
zkups__RecipientPhone__c = con.Phone, | |
zkups__RecipientState__c = con.MailingState, | |
zkups__RecipientStreet__c = con.MailingStreet, | |
zkups__RecipientPostalCode__c = con.MailingPostalCode, | |
zkups__PaymentType__c = settings.PaymentType__c, | |
zkups__Contact__c = con.Id | |
); | |
queuedShipmentsToInsert.add(queuedShipment); | |
} | |
insert queuedShipmentsToInsert; | |
// 3. zkups__QueuedPackage__c object | |
List<zkups__QueuedPackage__c> queuedPackagesToInsert = new List<zkups__QueuedPackage__c>(); | |
for (zkups__QueuedShipment__c qs : queuedShipmentsToInsert) { | |
zkups__QueuedPackage__c queuedPackage = new zkups__QueuedPackage__c ( | |
zkups__DeclaredValue__c = settings.DefaultDeclaredValue__c, | |
zkups__Weight__c = settings.DefaultWeight__c, | |
zkups__QueuedShipment__c = qs.Id | |
); | |
queuedPackagesToInsert.add(queuedPackage); | |
} | |
insert queuedPackagesToInsert; | |
} else { | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, ' Invalid Shipmate Preferences. ')); | |
} | |
} | |
private Map<String, String> serviceTypeMapping = new Map<String, String>{ | |
'Next Day Air Early AM' =>'Domestic: UPS Next Day Air Early A.M.', | |
'Next Day Air' => 'Domestic: UPS Next Day Air', | |
'Next Day Air Saver' => 'Domestic: UPS Next Day Air Saver', | |
'Second Day Air AM' => 'Domestic: UPS 2nd Day Air A.M.', | |
'Second Day Air' => 'Domestic: UPS 2nd Day Air', | |
'Three Day Select' => 'Domestic: UPS 3 Day Select', | |
'Ground' => 'Domestic: UPS Ground' | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment