Service Portal - Checkout page issue
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-06-2024 05:10 AM
Hi All,
As I am new to Jelly scripting in SP, i wanted a help from you all. There is field called -'Special Instruction' over cart checkout page. This field is visible when we order something from Desktop UI but it is not visible if we order anything from Service Portal.
I have checked the Widget related to cart checkout but couldn't find much on that. I am pasting the Server code and the client code. Can some please let me know why the field is not visible even though it is passed from client to server in the widget.
Client Code:
function ($scope, $q, spUtil, $location, spModal, spAriaUtil, spColesCart) {
var c = this;
c.m = $scope.data.msgs;
c.deliverTo = "";
c.additionalDetails = "";
c.lmDisabled = lmDisabled;
c.gmDisabled = gmDisabled;
c.dDisabled = dDisabled;
c.mdDisabled = mdDisabled;
c.generateApprovals = generateApprovals;
c.approvalsRequired = approvalsRequired;
c.generateApprovals();
$scope.$on("$sp.service_catalog.cart.update", function() {
$scope.server.update().then(function() {
$scope.$emit("$sp.service_catalog.cart.count", getItemCount());
});
});
c.updateQuantity = function(item) {
spAriaUtil.sendLiveMessage(c.data.msgs.updatedMsq + " " + item.name + " " + c.data.msgs.quantityToMsg + " " + item.quantity);
c.server.get({
action: "update_quantity",
itemID: item.sys_id,
quantity: item.quantity
}).then(function(response) {
$rootScope.$broadcast("$sp.service_catalog.cart.update");
});
}
c.triggerCheckout = function($evt, checkoutForm, twostepCheckout) {
if (twostepCheckout) {
$location.url('?id=sc_cart');
return;
}
$evt.stopPropagation();
$evt.preventDefault();
c.checkoutInProgress = true;
if(!checkoutForm.$valid) {
spUtil.addErrorMessage("Please complete all required fields");
c.checkoutInProgress = false;
return;
}
c.data.action = "checkout";
c.data.deliverTo = c.deliverTo;
c.data.additionalDetails = c.additionalDetails;
c.server.update().then(function(response) {
console.log(c.additionalParams);
c.data.action = null;
c.checkoutInProgress = false;
var requestData = $scope.data.requestData;
issueMessage(requestData.number, requestData.table, requestData.sys_id);
spColesCart.updateRequest(requestData.sys_id, c.additionalParams);
$rootScope.$broadcast("$sp.service_catalog.cart.update");
});
}
c.removeItem = function($evt, item) {
$evt.stopPropagation();
$evt.preventDefault();
$scope.server.get({
cartName: "DEFAULT",
action: "remove_item",
removeItemID: item.sys_id
}).then(function(response) {
c.data.cart = response.data.cart;
c.data.cartItems = response.data.cartItems;
spAriaUtil.sendLiveMessage(item.name + " " + c.data.msgs.itemRemovedMsg);
$rootScope.$broadcast("$sp.service_catalog.cart.update");
c.generateApprovals(c.data.cart);
});
}
c.clearCart = function() {
spModal.confirm(c.data.msgs.clearCartConfirmationMsg).then(function(confirmed) {
if (confirmed) {
c.server.get({
action: "clear_cart"
}).then(function(response) {
c.data.cart = response.data.cart;
c.data.cartItems = response.data.cartItems
$rootScope.$broadcast("$sp.service_catalog.cart.update");
spUtil.addTrivialMessage(c.data.msgs.cartEmptiedMsg);
c.generateApprovals(c.data.cart);
});
}
});
}
c.editItem = function(itemID) {
c.server.get({
itemID: itemID,
action: "edit_item"
}).then(function(response) {
var myModalCtrl;
var unregister = $scope.$on('$sp.service_catalog.cart.update', function(){
myModalCtrl.close();
});
var myModal = angular.copy(response.data.editVariablesModal);
myModal.options.afterOpen = function(ctrl){
myModalCtrl = ctrl;
};
myModal.options.afterClose = function() {
unregister();
c.editVariablesModal = null;
myModalCtrl = null;
};
c.editVariablesModal = myModal;
})
}
c.saveBundle = function() {
var saveCartModalCtrl;
var unregister = $scope.$on('$sp.service_catalog.cart.save_cart', function(){
saveCartModalCtrl.close();
});
var saveCartModal = angular.copy(c.data.saveCartModal);
saveCartModal.options.afterOpen = function(ctrl){
saveCartModalCtrl = ctrl;
};
saveCartModal.options.afterClose = function() {
unregister();
c.saveCartModal = null;
saveCartModalCtrl = null;
};
c.saveCartModal = saveCartModal;
}
c.requestedFor = {
displayValue: c.data.cart.requested_for_display_name,
value: c.data.cart.requested_for,
name: 'requested_for'
};
c.requestedLocation = {
displayValue: c.data.additionalParams.requested_location_display_name,
value: c.data.additionalParams.requested_location,
address: c.data.additionalParams.requested_location_address,
name: 'requested_location'
}
c.additionalParams = {
requestedFor: c.requestedFor,
requestedLocation: c.requestedLocation,
costCenter: "",
requiredBy: "",
newUserCheck: false,
newUser: "",
lmApprover: {
displayValue: "",
value: "",
name: "lm_approver",
mandatory: false
},
gmApprover: {
displayValue: "",
value: "",
name: "gm_approver",
mandatory: false
},
dApprover: {
displayValue: "",
value: "",
name: "d_approver",
mandatory: false
},
mdApprover: {
displayValue: "",
value: "",
name: "md_approver",
mandatory: false
},
itApprover: {
displayValue: "",
value: "",
name: "it_approver",
mandatory: false
},
projectCheck: false,
productCode: "",
projectCode: "",
projectInfo: "",
justification: ""
};
$scope.$on("field.change", function(evt, parms) {
if (parms.field.name == 'requested_for') {
c.data.cart.requested_for = parms.newValue;
c.server.get({
action: "update_requested_for",
userID: parms.newValue
}).then(function(res) {
c.generateApprovals(c.data.cart);
c.requestedLocation.value = res.data.additionalParams.requested_location
c.requestedLocation.displayValue = res.data.additionalParams.requested_location_display_name
c.requestedLocation.address = res.data.additionalParams.requested_location_address
});
}
if(parms.field.name == 'requested_location') {
c.server.get({
action: "update_location",
locationID: parms.newValue
}).then(function(res) {
c.requestedLocation.address = res.data.additionalParams.requested_location_address;
});
}
if(parms.field.name == 'lm_approver') {
// c.additionalParams.lmApprover.value = parms.newValue;
spColesCart.requireLMApproval(c.data.cart).then(function(result) {
if (result.data.result.value) {
c.additionalParams.lmApprover.mandatory = result.data.result.approval_required;
c.additionalParams.lmApprover.value = result.data.result.value;
c.additionalParams.lmApprover.displayValue = result.data.result.displayValue;
}
});
spColesCart.requireGMApproval(c.data.cart, parms.newValue).then(function(result) {
if (result.data.result.value) {
c.additionalParams.gmApprover.mandatory = result.data.result.approval_required;
c.additionalParams.gmApprover.value = result.data.result.value;
c.additionalParams.gmApprover.displayValue = result.data.result.displayValue;
}
});
spColesCart.requireDApproval(c.data.cart, parms.newValue).then(function(result) {
if (result.data.result.value) {
if (result.data.result.approvalLevel == '1') c.additionalParams.dApprover.mandatory = false;
else c.additionalParams.dApprover.mandatory = result.data.result.approval_required;
c.additionalParams.dApprover.value = result.data.result.value;
c.additionalParams.dApprover.displayValue = result.data.result.displayValue;
}
});
spColesCart.requireMDApproval(c.data.cart, parms.newValue).then(function(result) {
if (result.data.result.value) {
c.additionalParams.mdApprover.mandatory = result.data.result.approval_required;
c.additionalParams.mdApprover.value = result.data.result.value;
c.additionalParams.mdApprover.displayValue = result.data.result.displayValue;
}
});
}
});
function issueMessage(n, table, sys_id) {
var page = table == 'sc_request' ? 'sc_request' : 'ticket';
var t = c.m.createdMsg + " " + n + " - ";
t += c.m.trackMsg;
t += ' <a href="?id=' + page + '&table=' + table + '&sys_id=' + sys_id + '">' + c.m.clickMsg + '</a>';
spUtil.addInfoMessage(t);
}
function generateApprovals() {
spColesCart.requireStoreApproval(c.data.cart).then(function(result) {
c.data.cart.requireStoreApproval = result.data.result.approval_required;
// initialise each of the approval fields
c.additionalParams.lmApprover.mandatory = false;
c.additionalParams.lmApprover.value = '';
c.additionalParams.lmApprover.displayValue = '';
c.additionalParams.gmApprover.mandatory = false;
c.additionalParams.gmApprover.value = '';
c.additionalParams.gmApprover.displayValue = '';
c.additionalParams.dApprover.mandatory = false;
c.additionalParams.dApprover.value = '';
c.additionalParams.dApprover.displayValue = '';
c.additionalParams.mdApprover.mandatory = false;
c.additionalParams.mdApprover.value = '';
c.additionalParams.mdApprover.displayValue = '';
spColesCart.requireLMApproval(c.data.cart).then(function(result) {
if (result.data.result.value) {
if (result.data.result.approvalLevel != '1' && result.data.result.approvalLevel != '2' && result.data.result.approvalLevel != '3') {
c.additionalParams.lmApprover.mandatory = result.data.result.approval_required;
c.additionalParams.lmApprover.value = result.data.result.value;
c.additionalParams.lmApprover.displayValue = result.data.result.displayValue;
}
}
spColesCart.requireITApproval(c.data.cart).then(function(result) {
c.additionalParams.itApprover.mandatory = result.data.result.approval_required;
});
});
spColesCart.requireGMApproval(c.data.cart, c.additionalParams.lmApprover.value).then(function(result) {
if (result.data.result.value) {
if (result.data.result.approvalLevel != '1' && result.data.result.approvalLevel != '2') {
c.additionalParams.gmApprover.mandatory = result.data.result.approval_required;
c.additionalParams.gmApprover.value = result.data.result.value;
c.additionalParams.gmApprover.displayValue = result.data.result.displayValue;
}
}
});
spColesCart.requireDApproval(c.data.cart, c.additionalParams.lmApprover.value).then(function(result) {
if (result.data.result.value) {
if (result.data.result.approvalLevel != '1') {
c.additionalParams.dApprover.mandatory = result.data.result.approval_required;
c.additionalParams.dApprover.value = result.data.result.value;
c.additionalParams.dApprover.displayValue = result.data.result.displayValue;
}
}
});
spColesCart.requireMDApproval(c.data.cart, c.additionalParams.lmApprover.value).then(function(result) {
if (result.data.result.value) {
c.additionalParams.mdApprover.mandatory = result.data.result.approval_required;
c.additionalParams.mdApprover.value = result.data.result.value;
c.additionalParams.mdApprover.displayValue = result.data.result.displayValue;
}
});
});
}
function approvalsRequired() {
return (c.additionalParams.lmApprover.mandatory || c.additionalParams.gmApprover.mandatory || c.additionalParams.dApprover.mandatory || c.additionalParams.mdApprover.mandatory);
}
function lmDisabled() {
return (c.data.cart.requireStoreApproval || !c.additionalParams.lmApprover.value) ? false : true;
}
function gmDisabled() {
return (c.additionalParams.gmApprover.mandatory && !c.additionalParams.gmApprover.value) ? false : true;
}
function dDisabled() {
return (c.additionalParams.dApprover.mandatory && !c.additionalParams.dApprover.value) ? false : true;
}
function mdDisabled() {
return (c.additionalParams.mdApprover.mandatory && !c.additionalParams.mdApprover.value) ? false : true;
}
$scope.$emit("$sp.service_catalog.cart.count", getItemCount());
function getItemCount() {
return c.data.cartItems.length || 0;
}
}
Server Code:
(function() {
var m = data.msgs = {};
m.createdMsg = gs.getMessage("Created");
m.trackMsg = gs.getMessage("track using 'Requests' in the header or");
m.clickMsg = gs.getMessage("click here to view");
m.cartEmptiedMsg = gs.getMessage("Your cart has been emptied");
m.itemRemovedMsg = gs.getMessage("has been removed from your cart");
m.updatedMsq = gs.getMessage("Updated");
m.quantityToMsg = gs.getMessage("quantity to");
m.clearCartConfirmationMsg = gs.getMessage("Are you sure you want to empty your cart?");
var userID = gs.getUser().getID();
var cart = new SPCart(input.cartName, userID);
var additionalParams = {};
var approvalParams = {};
var grUser = new GlideRecord('sys_user');
grUser.get(gs.getUser().getID());
approvalParams.lm_approver = grUser.manager.sys_id.toString();
approvalParams.lm_approver_display_name = grUser.manager.getDisplayValue();
additionalParams.requested_location = grUser.location.sys_id.toString();
additionalParams.requested_location_display_name = grUser.location.getDisplayValue();
additionalParams.requested_location_address = parseAddress(grUser.location);
if (input && input.action === "edit_item") {
data.editVariablesModal = $sp.getWidget('widget-modal', {embeddedWidgetId: 'sp-variable-editor', embeddedWidgetOptions: {sys_id: input.itemID, table: "sc_cart_item", showItemTitle: true, isOrdering: true}});
return;
}
if (input && input.action === "update_quantity") {
var cartItemGR = new GlideRecord("sc_cart_item");
if (cartItemGR.get(input.itemID)) {
cartItemGR.setValue("quantity", input.quantity);
cartItemGR.update();
}
}
if (input && input.action === "update_requested_for") {
var userGR = new GlideRecord("sys_user");
userGR.get(input.userID);
approvalParams.lm_approver = grUser.manager.sys_id.toString();
approvalParams.lm_approver_display_name = grUser.manager.getDisplayValue();
additionalParams.requested_location_display_name = userGR.location.getDisplayValue();
additionalParams.requested_location = userGR.location.sys_id.toString();
additionalParams.requested_location_address = parseAddress(userGR.location);
}
if(input && input.action === "update_location") {
var locGR = new GlideRecord("cmn_location");
locGR.get(input.locationID);
additionalParams.requested_location_address = parseAddress(locGR);
}
if (input && input.action === "checkout") {
cart.setSpecialInstructions(input.additionalDetails);
cart.setRequestedFor(input.cart.requested_for);
cart.setDeliveryAddress(input.deliverTo);
var request = cart.placeOrder();
data.requestData = {
number: request.getValue("number"),
table: request.getTableName(),
sys_id: request.getUniqueValue()
};
cart.setSpecialInstructions("");
cart.setRequestedFor(userID);
cart.setDeliveryAddress("");
}
if (input && input.action === "remove_item") {
var itemGR = new GlideRecord('sc_cart_item');
if (itemGR.get(input.removeItemID))
itemGR.deleteRecord();
}
if (input && input.action === "clear_cart") {
cart.clearCart();
}
if (input && input.action === "save_cart") {
var newCart = new SPCart(input.newCartName, userID);
newCart.loadCart(cart.getCartID());
}
data.sys_properties = {
twostep_checkout: gs.getProperty("glide.sc.checkout.twostep", "false") == 'true'
};
var cartID = cart.getCartID();
data.saveCartModal = $sp.getWidget('widget-modal', {embeddedWidgetId: 'sc_save_bundle', embeddedWidgetOptions: {}});
data.cart = cart.getCartObj();
data.cart.sys_id = cartID.toString();
data.cartItems = cart.getItems();
data.approvalParams = approvalParams;
data.additionalParams = additionalParams;
function parseAddress(loc) {
var address = '';
var streetOK = loc.street != null && loc.street != '';
var cityOK = loc.city != null && loc.city != '';
var stateOK = loc.state != null && loc.state != '';
var zipOK = loc.zip != null && loc.zip != '';
if (streetOK || cityOK || stateOK || zipOK) {
address += addValue(loc.street, '\n', cityOK || stateOK || zipOK);
address += addValue(loc.city, ', ', stateOK || zipOK);
address += addValue(loc.state, ', ', zipOK);
address += addValue(loc.zip, ', ', true);
address += addValue('\n'+loc.country, '', false);
}
return address;
}
function addValue(value, extra, cond) {
var returnValue = '';
if (value != '') {
returnValue += value;
if (cond)
returnValue += extra;
}
return returnValue;
}
})();