diff --git a/posnext/public/js/pos_controller.js b/posnext/public/js/pos_controller.js index b057780..656326a 100644 --- a/posnext/public/js/pos_controller.js +++ b/posnext/public/js/pos_controller.js @@ -902,6 +902,14 @@ posnext.PointOfSale.Controller = class { } } async save_and_checkout() { + if (!this.frm.doc.items || this.frm.doc.items.length === 0) { + frappe.show_alert({ + message: __('Please add items to cart before checkout.'), + indicator: 'red' + }); + frappe.utils.play_sound("error"); + return; + } if (this.frm.is_dirty()) { if(this.settings.custom_add_reference_details){ const dialog = new frappe.ui.Dialog({ @@ -911,13 +919,11 @@ posnext.PointOfSale.Controller = class { fieldtype: 'Data', label: __('Reference Number'), fieldname: 'reference_no', - reqd: 1 }, { fieldtype: 'Data', label: __('Reference Name'), fieldname: 'reference_name', - reqd: 1 } ], primary_action_label: __('Proceed to Payment'), diff --git a/posnext/public/js/pos_item_cart.js b/posnext/public/js/pos_item_cart.js index 9a45b33..6331626 100644 --- a/posnext/public/js/pos_item_cart.js +++ b/posnext/public/js/pos_item_cart.js @@ -399,7 +399,18 @@ this.highlight_checkout_btn(true); this.$component.on('click', '.checkout-btn-held', function() { if ($(this).attr('style').indexOf('--blue-500') == -1) return; - if(!cur_frm.doc.customer && me.mobile_number_based_customer){ + + // Check for empty cart + if (!cur_frm.doc.items || cur_frm.doc.items.length === 0) { + frappe.show_alert({ + message: __('Please add items to cart before holding.'), + indicator: 'red' + }); + frappe.utils.play_sound("error"); + return; + } + + if(!cur_frm.doc.customer && me.mobile_number_based_customer) { let d = new frappe.ui.Dialog({ title: 'Enter Mobile Number', fields: [ @@ -420,94 +431,29 @@ this.highlight_checkout_btn(true); primary_action_label: 'Continue', primary_action: function(values) { if(values['mobile_number'].length !== me.settings.custom_mobile_number_length){ - frappe.throw("Mobile Number Length is " + me.settings.custom_mobile_number_length.toString()) + frappe.throw("Mobile Number Length is " + me.settings.custom_mobile_number_length.toString()); } - frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.create_customer", - args: { - customer: values['mobile_number'] - }, - freeze: true, - freeze_message: "Creating Customer....", - callback: async function(){ - const frm = me.events.get_frm(); - frappe.dom.freeze(); - frappe.model.set_value(frm.doc.doctype, frm.doc.name, 'customer', values['mobile_number']); - frm.script_manager.trigger('customer', frm.doc.doctype, frm.doc.name).then(() => { - frappe.run_serially([ - () => me.fetch_customer_details(values['mobile_number']), - () => me.events.customer_details_updated(me.customer_info), - () => me.update_customer_section(), - () => frappe.dom.unfreeze() - ]); - }) - me.events.save_draft_invoice() - - d.hide(); - } - }) + if (me.settings.custom_add_reference_details) { + me.show_reference_dialog(values['mobile_number']); + } else { + me.hold_invoice(values['mobile_number']); + } + d.hide(); } }); - var mobile_number_numpad_div = d.wrapper.find(".mobile_number_numpad") - mobile_number_numpad_div.append(` -