Created
April 14, 2016 11:40
-
-
Save adrianmi8/1f58efc1543b1ac02ddfef960f6fa06a to your computer and use it in GitHub Desktop.
UPS - create from case
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 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