Created
April 14, 2016 11:36
-
-
Save adrianmi8/a272c6bde3d7c179a3373ae504a9eb69 to your computer and use it in GitHub Desktop.
One Click Case Label Generation
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 NewShipmentCaseController { | |
private ApexPages.StandardController standardController; | |
private Id bulkShipmentId; | |
private String batchId; | |
private static final String SERVICE_TYPE_FEDEX = 'FedEx'; | |
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 NewShipmentCaseController(ApexPages.StandardController standardController) { | |
this.standardController = standardController; | |
this.caseId = standardController.getId(); | |
settings = BulkShipmentSettings__c.getInstance(SERVICE_TYPE_FEDEX); | |
hasValidationErrors = false; | |
hasProcessingErrors = false; | |
validationComplete = false; | |
} | |
public void processBulkShipment() { | |
createBulkShippingObjects(); | |
this.batchId = zkfedex.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<zkfedex__BulkShipmentStatus__c> statuses = [ | |
SELECT zkfedex__Status__c, zkfedex__StatusMessage__c | |
FROM zkfedex__BulkShipmentStatus__c | |
WHERE zkfedex__BatchId__c = :this.batchId]; | |
if ( ! statuses.isEmpty() ) { | |
this.previousStatus = statuses.get(0).zkfedex__Status__c; | |
if (previousStatus == ERROR_STATUS) { | |
this.statusMessage = statuses.get(0).zkfedex__StatusMessage__c; | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, this.statusMessage)); | |
startPoller = false; | |
return null; | |
} else if(previousStatus == VALIDATION_COMPLETE ) { | |
validationComplete = true; | |
List<zkfedex__QueuedShipmentStatus__c> errorsList = [ | |
SELECT zkfedex__StatusMessage__c | |
FROM zkfedex__QueuedShipmentStatus__c | |
WHERE zkfedex__BatchId__c = :this.batchId AND | |
zkfedex__Status__c = 'ERROR' | |
LIMIT 100]; | |
if ( ! errorsList.isEmpty() ) { | |
hasValidationErrors = true; | |
startPoller = false; | |
String errorMessage = ''; | |
for (zkfedex__QueuedShipmentStatus__c err : errorsList) { | |
errorMessage = errorMessage + err.zkfedex__StatusMessage__c + '<br/>'; | |
} | |
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Validation Error: ' + errorMessage)); | |
return null; | |
} | |
if ( ! hasValidationErrors ) { | |
this.batchId = zkfedex.BulkShipmentInterface.processBulkShipment(this.bulkShipmentId); | |
} | |
} else if(previousStatus == PROCESSING_COMPLETE) { | |
List<zkfedex__QueuedShipmentStatus__c> errorsList = [ | |
SELECT zkfedex__StatusMessage__c | |
FROM zkfedex__QueuedShipmentStatus__c | |
WHERE zkfedex__BatchId__c = :this.batchId AND | |
zkfedex__Status__c = 'ERROR' | |
LIMIT 100]; | |
if ( ! errorsList.isEmpty() ) { | |
hasValidationErrors = true; | |
startPoller = false; | |
String errorMessage = ''; | |
for (zkfedex__QueuedShipmentStatus__c err : errorsList) { | |
errorMessage = errorMessage + err.zkfedex__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<zkfedex__ShipmatePreference__c> caseShipmateList = [ | |
SELECT zkfedex__CompanyName__c, zkfedex__ShippingIsResidential__c, zkfedex__ShippingCity__c, | |
zkfedex__ShippingCountry__c, zkfedex__SenderEMailDefault__c, zkfedex__SenderPhoneDefault__c, | |
zkfedex__ShippingState__c, zkfedex__ShippingStreet__c, zkfedex__ShippingPostalCode__c, | |
zkfedex__DropoffTypeDefault__c, zkfedex__LabelImageTypeDefault__c | |
FROM zkfedex__ShipmatePreference__c | |
WHERE Name = :settings.ShipmatePreferenceName__c | |
LIMIT 1]; | |
if ( ! caseShipmateList.isEmpty() ) { | |
// 1. zkfedex__BulkShipment__c object | |
zkfedex__BulkShipment__c bulkShipment = new zkfedex__BulkShipment__c ( | |
zkfedex__ShipmatePreference__c = caseShipmateList.get(0).Id | |
); | |
insert bulkShipment; | |
// save id | |
this.bulkShipmentId = bulkShipment.Id; | |
// create CustomAddressSource__c object? | |
List<zkfedex__CustomAddressSource__c> customAddressSourceList = [ | |
SELECT Id | |
FROM zkfedex__CustomAddressSource__c | |
WHERE zkfedex__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. zkfedex__QueuedShipment__c object | |
zkfedex__QueuedShipment__c queuedShipment = new zkfedex__QueuedShipment__c ( | |
zkfedex__BulkShipment__c = bulkShipment.Id, | |
zkfedex__ShipDate__c = Date.today(), | |
zkfedex__DropoffType__c = dropoffTypeMap.get(caseShipmateList.get(0).zkfedex__DropoffTypeDefault__c), | |
zkfedex__LabelImageType__c = caseShipmateList.get(0).zkfedex__LabelImageTypeDefault__c, | |
zkfedex__ServiceType__c = 'Domestic: FedEx First Overnight', | |
zkfedex__PackagingType__c = settings.DefaultPackagingType__c, | |
zkfedex__WeightDimensionUnits__c = settings.DimensionUnits__c, | |
// sender info | |
zkfedex__SenderName__c = caseShipmateList.get(0).zkfedex__CompanyName__c, | |
zkfedex__SenderIsResidential__c = caseShipmateList.get(0).zkfedex__ShippingIsResidential__c, | |
zkfedex__SenderCity__c = caseShipmateList.get(0).zkfedex__ShippingCity__c, | |
zkfedex__SenderCompany__c = caseShipmateList.get(0).zkfedex__CompanyName__c, | |
zkfedex__SenderCountry__c = caseShipmateList.get(0).zkfedex__ShippingCountry__c, | |
zkfedex__SenderEmail__c = caseShipmateList.get(0).zkfedex__SenderEMailDefault__c, | |
zkfedex__SenderPhone__c = caseShipmateList.get(0).zkfedex__SenderPhoneDefault__c, | |
zkfedex__SenderState__c = caseShipmateList.get(0).zkfedex__ShippingState__c, | |
zkfedex__SenderStreet__c = caseShipmateList.get(0).zkfedex__ShippingStreet__c, | |
zkfedex__SenderPostalCode__c = caseShipmateList.get(0).zkfedex__ShippingPostalCode__c, | |
// recipient info | |
zkfedex__RecipientIsResidential__c = currentCase.Is_Residential__c, | |
zkfedex__RecipientCity__c = currentCase.Recipient_City__c, | |
zkfedex__RecipientCompany__c = currentCase.Recipient_Company_Name__c, | |
zkfedex__RecipientCountry__c = currentCase.Recipient_Country__c, | |
zkfedex__RecipientEmail__c = currentCase.Recipient_Email__c, | |
zkfedex__RecipientName__c = currentCase.Recipient_Name__c, | |
zkfedex__RecipientPhone__c = currentCase.Recipient_Phone__c, | |
zkfedex__RecipientState__c = currentCase.Recipient_State__c, | |
zkfedex__RecipientStreet__c = currentCase.Recipient_Street__c, | |
zkfedex__RecipientPostalCode__c = currentCase.Recipient_Postal_Code__c, | |
zkfedex__PaymentType__c = settings.PaymentType__c, | |
zkfedex__CustomAddressSource__c = customAddressSourceList.get(0).id, | |
zkfedex__CustomAddressSourceRecordId__c = caseId | |
); | |
insert queuedShipment; | |
// 3. zkfedex__QueuedPackage__c object | |
zkfedex__QueuedPackage__c queuedPackage = new zkfedex__QueuedPackage__c ( | |
zkfedex__DeclaredValue__c = settings.DefaultDeclaredValue__c, | |
zkfedex__Weight__c = settings.DefaultWeight__c, | |
zkfedex__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 Shipmate Preferences. ')); | |
} | |
} | |
private Map<String, String> serviceTypeMapping = new Map<String, String>{ | |
'First Overnight' => 'Domestic: FedEx First Overnight', | |
'Priority Overnight' => 'Domestic: FedEx Priority Overnight', | |
'Standard Overnight' => 'Domestic: FedEx Standard Overnight', | |
'2 Day AM' => 'Domestic: FedEx 2Day A.M.', | |
'2 DAy' => 'Domestic: FedEx 2Day', | |
'Express Saver' => 'Domestic: FedEx Express Saver', | |
'Ground' => 'Domestic: FedEx Ground', | |
'Home Delivery (Ground)' => 'Domestic: FedEx Home Delivery' | |
}; | |
private Map<String,String> dropoffTypeMap = new Map<String,String> { | |
'BUSINESS_SERVICE_CENTER' => 'Business Service Center', | |
'DROP_BOX' => 'Drop Box', | |
'REGULAR_PICKUP' => 'Regular Pickup', | |
'REQUEST_COURIER' => 'Request Courier', | |
'STATION' => 'Station' | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment