Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

redirect to new page after checkout from portal

RudhraKAM
Tera Guru

 

I have a requirement where upon adding items and checkout from the cart as of now Request is created and a info message is shown , i would like to redirect that to another page (sc_cart is cloned and we customized it as per our business need ) 

Can some one help me where to change that ? Below is the client script and server script of the widget

find_real_file.png

function ($scope, spUtil, $location, spModal, spAriaUtil) {
	var c = this;

	c.m = $scope.data.msgs;
	c.deliverTo = "";
	c.additionalDetails = "";

	$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");
		});
	};

	/*
	loop through c.data.cartItems and find any Cart Items where 
	price is > 500 and set c.hasPriceItem500 to TRUE
	price is > 3000 and set c.hasPriceItem3000 to TRUE
	this function is also run when items are removed from the cart
	*/
	itemPriceCheck(); 

	function itemPriceCheck() {
		c.hasPriceItem3000 = false;
		c.hasPriceItem500 = false;
		c.hasPriceItem1000 = false;
		c.isUdakLifeCare = false;

		var itemPrice = 0;

		c.data.cartItems.forEach(function(item) {
			itemPrice = parseInt(item.price);

			if (itemPrice > 500) {
				c.hasPriceItem500 = true;
			} else if (itemPrice < 500 && c.hasPriceItem500 != true) {
				c.hasPriceItem500 = false;
			}
			
			if(itemPrice > 1000){
				c.hasPriceItem1000 = true;
			}else if (itemPrice < 1000 && c.hasPriceItem1000 != true){
				c.hasPriceItem1000 = false;
			}

			if (itemPrice > 3000) {
				c.hasPriceItem3000 = true;
			}

			if (c.hasPriceItem3000 == true) {
				c.u_capital_purchase = true;
				setTimeout(function() {
					$("#u_capital_purchase").attr("disabled", true);
				}, 250);
			}

			if (c.hasPriceItem3000 == false) {
				c.u_capital_purchase = false;
				setTimeout(function() {
					$("#u_capital_purchase").removeAttr("disabled");
				}, 250);
			}
		});
		
		c.data.priceInt = c.data.cart.subtotal;
	}
	
	c.getCostCenterApprovers = function() {
		$('#u_udak_approver').select2("val","");
		c.data.action = "u_udak_approver";
		c.data.u_udak = c.u_udak;
		c.data.requested_for = c.requestedFor.value;
		c.data.show_u_udak_approver = c.u_udak;
		c.data.priceInt = c.data.cart.subtotal;
		
		c.server.update().then(function(response) {
			c.data.action = null;
			c.data.refQual = response.approvers_list;

			var udak_dv = response.udak_dv;

			if (c.hasPriceItem500 == true && c.u_udak.value && udak_dv.startsWith('55')) {
				c.u_capital_purchase = true;
				$("#u_capital_purchase").attr("disabled", true);
 			}else if(c.hasPriceItem1000 == true && c.u_udak.value && udak_dv.startsWith('09')){
 				c.u_capital_purchase = true;
 				$("#u_capital_purchase").attr("disabled", true);
 			}else if(c.hasPriceItem1000 == true && c.u_udak.value && udak_dv.startsWith('10')){
 				c.u_capital_purchase = true;
 				$("#u_capital_purchase").attr("disabled", true);
			}
			else if (!c.u_udak.value) {
				$("#u_capital_purchase").removeAttr("disabled");
			}
			
			if (c.hasPriceItem3000 == true) {
				c.u_capital_purchase = true;
				$("#u_capital_purchase").attr("disabled", true);
			}
		});
	};

	c.clearCapPurchase = function() {
		c.u_tracking_number = '';
		c.u_cip = '';
	};


	c.getLocationSetReqFor = function(ReqForChanged) {
		c.data.action = "get_location_set_reqfor";
		c.data.requested_for = c.requestedFor.value;
		c.data.field_change = ReqForChanged;
		c.server.update().then(function(response) {
			c.data.action = "set_location_reqfor";
			c.data.shipping_location = response.location;
			c.u_shipping_location = { 
				displayValue: response.location_dv, 
				value: response.location, 
				name: 'u_shipping_location'
			};
			if (ReqForChanged == 'true') {
				c.u_udak = { 
					displayValue: '', 
					value: '', 
					name: 'u_udak'
				};
				c.u_udak_approver = { 
					displayValue: '', 
					value: '', 
					name: 'u_udak_approver'
				};
				c.data.u_udak = null;
				c.data.u_udak_approver = null;
				c.data.show_u_udak_approver = false;
			}
			c.server.update().then(function(response) {
				c.data.action = null;
				c.data.field_change = null;
			});
		});
	};
	
	c.setLocationReqFor = function() {
		c.data.action = "set_location_reqfor";
		c.data.shipping_location = c.u_shipping_location.value;
		c.data.u_udak = c.u_udak;
		c.server.update().then(function(response) {
			c.data.action = null;
		});
	};

	c.fieldUpdated = function() {
		c.data.action = "u_udak";
		c.data.u_udak = c.u_udak;
		c.data.u_udak_approver = c.u_udak_approver;
		c.data.u_capital_purchase = c.u_capital_purchase;
		c.data.u_cip = c.u_cip;
		c.data.u_tracking_number = c.u_tracking_number;

		c.server.update().then(function(response) {
			c.data.action = null;
			c.data.u_udak = null;
			c.data._udak_approver = null;
			c.data.u_capital_purchase = null;
			c.data.u_cip = null;
			c.data.u_tracking_number = null;
		});
	};

	c.triggerCheckout = function($evt, twostepCheckout) {
		if (twostepCheckout) {
			$location.url('?id=sc_cart');
		//	$location.url('?id=cart_success');   I tried this but still not redirecting
			return;
		}

		$evt.stopPropagation();
		$evt.preventDefault();

		c.checkoutInProgress = true;
		c.data.action = "checkout";


		c.data.deliverTo = c.deliverTo;
		c.data.additionalDetails = c.additionalDetails;
		c.server.update().then(function(response) {
			c.data.action = null;

			c.checkoutInProgress = false;
			var requestData = $scope.data.requestData;
			issueMessage(requestData.number, requestData.table, requestData.sys_id);
			$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");

			itemPriceCheck();
		});
	};

	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);
				});

				itemPriceCheck();
			}
		});
	};

	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'
	};

	$scope.$on("field.change", function(evt, parms) {
		if (parms.field.name == 'requested_for')
			c.data.cart.requested_for = parms.newValue;
	});

	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);
	}

	$scope.$emit("$sp.service_catalog.cart.count", getItemCount());

	function getItemCount() {
		return c.data.cartItems.length || 0;
	}
}

 

(function() {
	var m = data.msgs = {};
	m.createdMsg = gs.getMessage("Created");
	m.trackMsg = gs.getMessage("track using 'View My Tickets' 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);

	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 == "u_udak_approver") {
		var costCenter = input.u_udak.value;
		var price = input.priceInt;
		var userFor = input.requested_for;

		var cc = new GlideRecord('cmn_cost_center');
		cc.get('sys_id', costCenter);
		data.udak_dv = cc.code.toString();
		
		if(!userFor){
			userFor = gs.getUserID();
		}

		var mgrID = '';
		var userGR = new GlideRecord('sys_user');
		userGR.get(userFor);
		if(userGR.isValidRecord()){
			mgrID = ''+userGR.manager;
		}

		var approverID = [];
		var cca = new GlideRecord('u_cost_center_approvers');
		cca.addQuery('cost_center',costCenter);
		cca.addQuery('approval_limit_int', '>=', price);
		cca.addQuery('approver.active', true);
		cca.orderBy('approval_limit_int');
		cca.query();

		var tierCost = -1;
		while(cca.next()){
			// Per STRY0049708, only include the lowest capable tier
			// But also check if Manager can approve and make sure he/she is in list
			var apprCost = parseInt(cca.getValue('approval_limit_int'));
			var apprID = ''+cca.approver.sys_id;
			if(tierCost == -1 || apprCost <= tierCost){
				approverID.push(apprID);
				tierCost = apprCost;
			}else if(apprID == mgrID){
				approverID.push(mgrID);
				break;	
			}
		}
		data.approvers_list = 'sys_idIN' + approverID.join(',');
	}

	if(input && input.action === "get_location_set_reqfor") {
		if (input.requested_for != '') {
			var scCartGet = new GlideRecord('sc_cart');  
			scCartGet.addQuery('user', gs.getUserID());
			scCartGet.addQuery('name', 'DEFAULT');
			scCartGet.query();
			if(scCartGet.next()) {
				if(scCartGet.u_location.sys_id.toString() != '' && input.field_change == "false") {
					data.location = scCartGet.u_location.sys_id.toString();  
					data.location_dv = scCartGet.u_location.name.toString();
				}
				else {
					var user = new GlideRecord('sys_user');  
					if (user.get(input.requested_for)) {
						data.location = user.location.sys_id.toString();  
						data.location_dv = user.location.name.toString();
						
						var scCart = new GlideRecord('sc_cart');  
						scCart.addQuery('user', gs.getUserID());
						scCart.addQuery('name', 'DEFAULT');
						scCart.query();
						if(scCart.next()) {
							scCart.requested_for = input.requested_for;
							scCart.update();
						}
					}
				}
			}
		}
		else {
			var scCartBlank = new GlideRecord('sc_cart');  
			scCartBlank.addQuery('user', gs.getUserID());
			scCartBlank.addQuery('name', 'DEFAULT');
			scCartBlank.query();
			if(scCartBlank.next()) {
				scCartBlank.requested_for = gs.getUserID();
				scCartBlank.update();
			}
		}
	}
	
	if(input && input.action === "set_location_reqfor") {
		var scCartLocation = new GlideRecord('sc_cart');  
		scCartLocation.addQuery('user', gs.getUserID());
		scCartLocation.addQuery('name', 'DEFAULT');
		scCartLocation.query();
		if(scCartLocation.next()) {
			scCartLocation.u_location = input.shipping_location;
			scCartLocation.update();
		}
		
		addUdakInfoToCart();
	}


	if(input && input.action === "u_udak") {
		addUdakInfoToCart();
	}

	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("");
		
		var scClearCartLocation = new GlideRecord('sc_cart');  
		scClearCartLocation.addQuery('user', gs.getUserID());
		scClearCartLocation.addQuery('name', 'DEFAULT');
		scClearCartLocation.query();
		if(scClearCartLocation.next()) {
			scClearCartLocation.u_location = '';
			scClearCartLocation.update();
		}
	}

	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.cartItems = cart.getItems();
	
	function addUdakInfoToCart() {
		var u_location = '';
		var u_udak = '';
		var u_udak_approver = '';
		var u_cip = '';
		var u_tracking_number = '';
		
		if (input.shipping_location) {
			u_location = input.shipping_location;
		}
		if (input.u_udak) {
			u_udak = input.u_udak.value;
		}
		if (input.u_udak_approver) {
			u_udak_approver = input.u_udak_approver.value;
		}
		if (input.u_cip) {
			u_cip = input.u_cip.value;
		}
		if (input.u_tracking_number) {
			u_tracking_number = input.u_tracking_number;
		}

		if(u_udak == undefined){
			u_udak = '';
		}
		if(u_udak_approver == undefined){
			u_udak_approver = '';
		}
		if(input.u_capital_purchase == true){
			if(u_cip == undefined) {
				u_cip = '';
			}
			if(u_tracking_number == undefined){
				u_tracking_number = '';
			}
		}

		var cart_item = new GlideRecord('sc_cart_item');
		cart_item.addQuery('cart.user', gs.getUserID());
		cart_item.addQuery('cart.name', 'DEFAULT');
		cart_item.addQuery('active', 'true');
		cart_item.query();

		//If found, add the field/value pairs to the 'hints' parameter for the cart
		while(cart_item.next()) {
			//Send the values to the request record
			var hintVal = 'u_udakIS' + u_udak + '^u_udak_approverIS' + u_udak_approver + '^u_capital_purchaseIS' + input.u_capital_purchase + '^u_cipIS' + u_cip + '^u_tracking_numberIS' + u_tracking_number + '^locationIS' + u_location;
			cart_item.hints = '<hints><entry key="sysparm_processing_hint" value="setfield:request.u_cartpop=' + hintVal + '"/></hints>';
			cart_item.update();
		}
	}
})();
9 REPLIES 9

tried that still  having that delay

Hi,

try 

document.location = your url

 

Regards,

Munender

Hi,

try 

document.location = your url

 

Regards,

Munender

RudhraKAM
Tera Guru

I tried that as well 

 

"document.location = your url"

Kim Sullivan
Tera Guru

@RudhraKAM - did you ever resolve this?  I am trying to do the same thing.