Name
global.CatalogTransactionCheckout
Description
Checks you out (orders the contents of your cart) and redirects you to the order summary screen. If running in two step checkout mode this is the first step, so instead of checking you out it instead puts you on the cart summary screen.
Script
gs.include('PrototypeServer');
gs.include('AbstractTransaction');
var CatalogTransactionCheckout = Class.create();
CatalogTransactionCheckout.prototype = Object.extendsObject(AbstractTransaction, {
execute: function() {
var catalog = this.request.getParameter("sysparm_catalog");
var catalogView = this.request.getParameter("sysparm_catalog_view");
var cartName = this.request.getParameter("sysparm_cart_name");
var parentID = this.request.getParameter("sysparm_parent_sys_id");
var parentTable = this.request.getParameter("sysparm_parent_table");
var paramRequestedFor = this.request.getParameter("sysparm_requested_for");
var viewName = this.request.getParameter("sysparm_view");
var params = {
"sysparm_parent_sys_id": parentID,
"sysparm_parent_table": parentTable,
"sysparm_view": viewName
};
var cart;
if (!JSUtil.nil(cartName))
cart = GlideappCart.get(cartName);
else
cart = GlideappCart.get();
if (!cart.getCartItems().hasNext()) {
gs.addInfoMessage(gs.getMessage("Cannot check out with an empty cart!"));
return gs.getSession().getStack().purge("com.glideapp.servicecatalog");
}
var requestForSysID = new global.GlobalServiceCatalogUtil().getRequestForSysID(parentTable, parentID) || paramRequestedFor;
if (JSUtil.notNil(requestForSysID))
cart.setRequestedFor(requestForSysID);
var twoStep = gs.getProperty("glide.sc.checkout.twostep", "false") == 'true' && !cart.checkAllItemsHaveRequestedFor();
if (twoStep) {
if (!this._validateCart(cart))
return;
if (!JSUtil.nil(cartName))
return SNC.CatalogURLGenerator.getRedirectPreviewOrderWithParams(catalog, catalogView, cartName, params);
else
return GlideappCatalogURLGenerator.getRedirectOneStageCheckoutWithParams(catalog, catalogView, params);
}
return this._checkout(catalog, catalogView, cartName);
},
_checkout: function(catalog, catalogView, cartName) {
try {
var view = this.request.getParameter("sysparm_view");
if (!view)
view = "ess";
var parentID = this.request.getParameter("sysparm_parent_sys_id");
var parentTable = this.request.getParameter("sysparm_parent_table");
var params = {};
params.sysparm_parent_sys_id = parentID;
params.sysparm_parent_table = parentTable;
var req = new GlideappRequestNew();
req.setParentParams(params);
var requestRecord;
var cart;
if (!JSUtil.nil(cartName)) {
requestRecord = req.copyCart(cartName);
cart = GlideappCart.get(cartName);
} else {
requestRecord = req.copyCart();
cart = GlideappCart.get();
}
var isNewOrderNow = gs.getProperty("glide.sc.enable_order_now", "false");
if (isNewOrderNow == 'true' && !JSUtil.nil(cartName) && cartName.startsWith('cart_')) {
var def_cart;
def_cart = GlideappCart.get();
// reset requested_for and special instructions property for default cart
def_cart.setRequestedFor(gs.getUserID());
def_cart.setSpecialInstructions('');
//for new order now, an entry was inserted in default cart, on successful checkout, that entry needs to be deleted
var id = gs.getSession().getProperty("default_cart_item");
if (!JSUtil.nil(id)) {
def_cart.remove(id);
gs.getSession().clearProperty("default_cart_item");
}
}
cart.empty();
return this._checkoutRedirect(view, catalog, catalogView, requestRecord);
} catch(e) {
var catalogExceptionUtils = new CatalogExceptionUtils();
if(catalogExceptionUtils.isCartException(e)) {
return catalogExceptionUtils.handleCartException(e);
}
gs.debug(e);
}
},
_checkoutRedirect: function(view, catalog, catalogView, requestRecord) {
// If an alternative redirect was specified, use it!
var altRedirect = this.request.getParameter("sysparm_redirect");
if (!GlideSecurityUtils.isURLWhiteListedStrict(altRedirect))
altRedirect = GlideSecurityUtils.enforceRelativeURL(altRedirect);
if (!gs.nil(altRedirect)) {
gs.addInfoMessage(gs.getMessage('Your request has been placed: {0}', '<a href="' + requestRecord.getLink() + '">' + requestRecord.number + '</a>'));
return altRedirect;
}
var checkoutForm = gs.getProperty("glide.sc.checkout.form", "com.glideapp.servicecatalog_checkout_view");
if (!checkoutForm) {
gs.addErrorMessage(gs.getMessage("Invalid or empty checkout form specified in property : glide.sc.checkout.form"));
return "home.do";
}
if (!view)
view = "";
var parentID = this.request.getParameter("sysparm_parent_sys_id");
var parentTable = this.request.getParameter("sysparm_parent_table");
var viewName = this.request.getParameter("sysparm_view");
var params = {
"sysparm_parent_sys_id": parentID,
"sysparm_parent_table": parentTable,
"sysparm_view": viewName
};
answer = GlideappCatalogURLGenerator.getCheckoutURLForPageWithParams(checkoutForm, requestRecord.sys_id, view, catalog, catalogView, params);
return answer;
},
_validateCart: function(cart) {
var msg = cart.validateCartItems();
if (msg != "valid") {
gs.addErrorMessage(msg);
var urlStack = j2js(gs.getSession().getStack());
this.response.sendRedirect(urlStack.pop());
return false;
}
return true;
}
});
Sys ID
8f3a2778c0a8002700fbde5ad148abe3