Skip to content

Instantly share code, notes, and snippets.

@adrianmi8
Created April 14, 2016 11:40
Show Gist options
  • Save adrianmi8/1f58efc1543b1ac02ddfef960f6fa06a to your computer and use it in GitHub Desktop.
Save adrianmi8/1f58efc1543b1ac02ddfef960f6fa06a to your computer and use it in GitHub Desktop.
UPS - create from case
public with sharing class NewUPSShipmentCaseController {
private ApexPages.StandardController standardController;
private Id bulkShipmentId;
private String batchId;
private static final String SERVICE_TYPE = 'UPS';
private final BulkShipmentSettings__c settings;
public Id caseId {get; set;}
public Case currentCase {get; set;}
public String statusMessage {get;set;}
public static final String workingObject = 'Case';
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 NewUPSShipmentCaseController(ApexPages.StandardController standardController) {
this.standardController = standardController;
this.caseId = standardController.getId();
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 = 'Shipment 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, 'Shipment 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('/' + this.caseId);
}
}
return null;
} else {
return null;
}
}
public void createBulkShippingObjects() {
List<zkups__UPSShipmatePreference__c> caseShipmateList = [
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 ( ! caseShipmateList.isEmpty() ) {
// 1. zkups__BulkShipment__c object
zkups__BulkShipment__c bulkShipment = new zkups__BulkShipment__c (
zkups__ShipmatePreference__c = caseShipmateList.get(0).Id
);
insert bulkShipment;
// save id
this.bulkShipmentId = bulkShipment.Id;
List<zkups__CustomAddressSource__c> customAddressSourceList = [
SELECT Id
FROM zkups__CustomAddressSource__c
WHERE zkups__CustomAddressSourceObject__c = :workingObject
LIMIT 1];
currentCase = [
SELECT Is_Residential__c, Recipient_City__c, Recipient_Company_Name__c,
Recipient_Country__c, Recipient_Email__c, Recipient_Name__c,
Recipient_Phone__c, Recipient_State__c, Recipient_Street__c,
Recipient_Postal_Code__c
FROM Case
WHERE Id = :caseId];
if ( ! customAddressSourceList.isEmpty() ) {
// 2. zkups__QueuedShipment__c object
zkups__QueuedShipment__c queuedShipment = new zkups__QueuedShipment__c (
zkups__BulkShipment__c = bulkShipment.Id,
zkups__LabelImageType__c = caseShipmateList.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 = caseShipmateList.get(0).zkups__CompanyName__c,
zkups__SenderIsResidential__c = caseShipmateList.get(0).zkups__ShippingIsResidential__c,
zkups__SenderCity__c = caseShipmateList.get(0).zkups__ShippingCity__c,
zkups__SenderCompany__c = caseShipmateList.get(0).zkups__CompanyName__c,
zkups__SenderCountry__c = caseShipmateList.get(0).zkups__ShippingCountry__c,
zkups__SenderEmail__c = caseShipmateList.get(0).zkups__SenderEMailDefault__c,
zkups__SenderPhone__c = caseShipmateList.get(0).zkups__SenderPhoneDefault__c,
zkups__SenderState__c = caseShipmateList.get(0).zkups__ShippingState__c,
zkups__SenderStreet__c = caseShipmateList.get(0).zkups__ShippingStreet__c,
zkups__SenderPostalCode__c = caseShipmateList.get(0).zkups__ShippingPostalCode__c,
// recipient info
// you can set it from custom address source or from case directly
zkups__RecipientIsResidential__c = currentCase.Is_Residential__c,
zkups__RecipientCity__c = currentCase.Recipient_City__c,
zkups__RecipientCompany__c = currentCase.Recipient_Company_Name__c,
zkups__RecipientCountry__c = currentCase.Recipient_Country__c,
zkups__RecipientEmail__c = currentCase.Recipient_Email__c,
zkups__RecipientName__c = currentCase.Recipient_Name__c,
zkups__RecipientPhone__c = currentCase.Recipient_Phone__c,
zkups__RecipientState__c = currentCase.Recipient_State__c,
zkups__RecipientStreet__c = currentCase.Recipient_Street__c,
zkups__RecipientPostalCode__c = currentCase.Recipient_Postal_Code__c,
zkups__PaymentType__c = settings.PaymentType__c,
zkups__CustomAddressSource__c = customAddressSourceList.get(0).id,
zkups__CustomAddressSourceRecordId__c = caseId);
insert queuedShipment;
// 3. zkups__QueuedPackage__c object
zkups__QueuedPackage__c queuedPackage = new zkups__QueuedPackage__c (
zkups__DeclaredValue__c = settings.DefaultDeclaredValue__c,
zkups__Weight__c = settings.DefaultWeight__c,
zkups__QueuedShipment__c = queuedShipment.Id
);
insert queuedPackage;
} else {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, ' Invalid Custom Address Source. '));
}
} else {
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, ' Invalid Preference. '));
}
}
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