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.