Skip to content

Instantly share code, notes, and snippets.

@adrianmi8
Created April 14, 2016 11:38
Show Gist options
  • Save adrianmi8/9488050de1aafeed480df083c424bbec to your computer and use it in GitHub Desktop.
Save adrianmi8/9488050de1aafeed480df083c424bbec to your computer and use it in GitHub Desktop.
UPS - mass ship to contacts
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