Service Portal - Checkout page issue

Rooma1
Tera Contributor

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

 

})();

0 REPLIES 0