Skip to content

Instantly share code, notes, and snippets.

@adrianmi8
Created April 14, 2016 11:36
Show Gist options
  • Save adrianmi8/a272c6bde3d7c179a3373ae504a9eb69 to your computer and use it in GitHub Desktop.
Save adrianmi8/a272c6bde3d7c179a3373ae504a9eb69 to your computer and use it in GitHub Desktop.
One Click Case Label Generation
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