To display custom shipping methods at checkout based on the configuration record

_.extend(LiveOrderModel, {
		// @method getShipMethods
		// @param {Array<String>} order_fields
		// @returns {Array<OrderShipMethod>}
		getShipMethods: function getShipMethods(order_fields) {
			try {
				var shipmethods = _.map(order_fields.shipmethods, function (shipmethod) {
				var rate = Utils.toCurrency(shipmethod.rate.replace(/^D+/g, '')) || 0;
				return {
					internalid: shipmethod.shipmethod,
					name: shipmethod.name,
					shipcarrier: shipmethod.shipcarrier,
					rate: rate,
					rate_formatted: shipmethod.rate
				};
				});
				order_fields.nsShippMethods = shipmethods;
				var customerShipMethods = _.map(_.filter(Configuration.get('customshipmethods.setupshipmethod'), function (shipId) { return shipId.customersegment.indexOf(Configuration.get('customshipmethods.customerSegment')) > -1 }), function (shipId) { return parseInt(shipId.shipMethodID) });
				var profile = ProfileModel.get();
				console.error('customerShipMethods', JSON.stringify(customerShipMethods))
				if (profile.shippingitem && !_.find(customerShipMethods, function (id) { return parseInt(profile.shippingitem) === parseInt(id) })) {
						customerShipMethods.push(parseInt(profile.shippingitem))
				}
				console.error('customerShipMethods', JSON.stringify(customerShipMethods))
				return _.filter(shipmethods, function (ship) { return !!_.find(customerShipMethods, function (id) { return parseInt(id) === parseInt(ship.internalid) }) });
			} catch (error) {
				console.error('customerShipMethods error', JSON.stringify(error))
				return shipmethods || [];
			}
		},
		chunkSize: 6e4,
		customshipmethodObj: {},
		submit: _.wrap(LiveOrderModel.submit, function update(fn) {
			var result = fn.apply(this, _.toArray(arguments).slice(1));
			try {
				var soInternalID = result.internalid;
				if (soInternalID) {
					var shipmethod = ModelsInit.order.getFieldValues({ shipmethod: ['shipmethod'] });
					if (shipmethod && shipmethod.shipmethod && shipmethod.shipmethod.shipmethod) {
						var selectedShipMethod = shipmethod.shipmethod.shipmethod;
						var field_valuescust = this.getFieldValues({
							keys: ['shipmethods'],
							items: []
						});
						var currentShipMethods = this.getShipMethodsOnly();
						var customshipmethodset = _.findWhere(currentShipMethods, { internalid: selectedShipMethod });
						try {
							if (this.customshipmethodObj)
								var customshipmethodset = this.customshipmethodObj;
						} catch (err) {
							console.error('methodsCust', err)
						}
						if (customshipmethodset && customshipmethodset.rate) {
							if (result.summary) {
								result.summary.total = result.summary.total - result.summary.shippingcost;
								result.summary.shippingcost = customshipmethodset.rate || result.summary.shippingcost || 0;
								result.summary.total = result.summary.total + result.summary.shippingcost;
								result.summary.total_formatted = Utils.formatCurrency(result.summary.total);
								result.summary.shippingcost_formatted = Utils.formatCurrency(result.summary.shippingcost);
							}
						}
					}
				}
			} catch (err) {
				console.error('submit', err)
			}
			return result;
		})
	})
	Application.on('after:LiveOrder.get', function afterLiveOrderGet(Model, response) {
		try {
			if (ModelsInit.session.isLoggedIn2()) {
				var selectedShipMethod = response.shipmethod
				var currentShipMethods = response.shipmethods;
				var currentShipSummary = response.summary;
				try {
					var shipmethod = ModelsInit.order.getFieldValues({ shipmethod: ['shipmethod'] });
					if (shipmethod && shipmethod.shipmethod && shipmethod.shipmethod.shipmethod) {
						var selectedShipMethod = shipmethod.shipmethod.shipmethod;
						var currentShipMethods = Model.getShipMethodsOnly()
					}
				} catch (err) {
					console.error('LiveOrderModelShipping', err)
				}
				//cart update 18/04/2022 updating price in the cart, when a customer login after adding item to the cart.
				try {
					var Iswholsale2 = false;
					var custrecord = ModelsInit.session.customer.customFieldValues;
					var segfind = _.findWhere(custrecord, { name: "custentity_hidden_customersegment" });
					var segarray = segfind.value;
					var segValues = JSON.parse(segarray)
					_.each(segValues, function (each) {
						if (each.id === "67166") {
							Iswholsale2 = true;
						}
					})
					if (!ModelsInit.session.customer.guest && (Iswholsale2 === true)) {
						var wholsaleprice = Configuration.get("ProductConfig.wholesalePrice");
						wholsaleprice = !!wholsaleprice ? parseFloat(wholsaleprice).toFixed(2) : parseFloat('3').toFixed(2);
						response.lines.forEach(function (obj) {
							var order_item = obj.internalid;
							var onlineprice = obj.item.onlinecustomerprice_detail.onlinecustomerprice;
							try {
								var itemoptions = ModelsInit.order.getItemOption(order_item);
								function getIsPersonalized(itemoptions) {
									//Checking whether the item is personalized or not for setting the online price
									try {
										for (var i = 0; i < itemoptions.length; i++) {
											if (
												itemoptions[i].id === "CUSTCOL_JJ_PTC_395_PERSONALISEFONT" ||
												itemoptions[i].id === "CUSTCOL_JJ_PTC_395_PERSONALISETEXT" ||
												itemoptions[i].id === "CUSTCOL_JJ_PTC_395_PERSONALISESAYING"
											) {
												if (itemoptions[i].value) {
													return true;
												}
											}
										}
										return false;
									} catch (e) {
										console.error("getIsPersonalized", e);
										return false;
									}
								}
								var isPersonalized = getIsPersonalized(itemoptions);
								var order = nlapiGetWebContainer().getShoppingSession().getOrder();
								var optionMap;
								//Setting the price based on isPersonalized in custcol_jj_ptc_395_personaliseprice  is adding for non personalized items
								if (isPersonalized) {
									var order = nlapiGetWebContainer().getShoppingSession().getOrder();
									var optionMap;
									optionMap = {
										'custcol_jj_ptc_395_personaliseprice': wholsaleprice.toString() || '3.00'
									};
									var order_item1 = order.setItemOptions(order_item, optionMap)
									var optionMap1 = {
										'custcol_jj_ptc_395_personaliseonline': onlineprice.toString()
									};
									var order_item2 = order.setItemOptions(order_item1, optionMap1)
									var itemoptions1 = order.getItemOption(order_item2);
								}
							} catch (err) {
								console.error("itemoptionserr", JSON.stringify(err))
							}
						})
					}
				}
				catch (err) {
					console.error('LiveOrderModelItemlineupdate', err)
				}
				//cart update 18/04/2022
				if (response.summary) {
					if (selectedShipMethod) {
						var customshipmethodset = _.findWhere(currentShipMethods, { internalid: selectedShipMethod });
						if (customshipmethodset) {
							currentShipSummary.total = currentShipSummary.total - currentShipSummary.shippingcost;
							LiveOrderModel.customshipmethodObj = JSON.parse(JSON.stringify(customshipmethodset));
							currentShipSummary.shippingcost = customshipmethodset.rate || currentShipSummary.shippingcost || 0;
							currentShipSummary.total = currentShipSummary.total + currentShipSummary.shippingcost;
							currentShipSummary.total_formatted = Utils.formatCurrency(currentShipSummary.total);
							currentShipSummary.shippingcost_formatted = Utils.formatCurrency(currentShipSummary.shippingcost);
						}
					}
				}
			}
		} catch (err) {
			console.error('LiveOrderModelShippingget', err)
		}
	})

Leave a comment

Your email address will not be published. Required fields are marked *