fix(pos): validate product bundles while submitting pos invoice (#31615)
diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py
index 9649f80..6e3a076 100644
--- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py
+++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py
@@ -222,9 +222,6 @@
from erpnext.stock.stock_ledger import is_negative_stock_allowed
for d in self.get("items"):
- is_service_item = not (frappe.db.get_value("Item", d.get("item_code"), "is_stock_item"))
- if is_service_item:
- return
if d.serial_no:
self.validate_pos_reserved_serial_nos(d)
self.validate_delivered_serial_nos(d)
diff --git a/erpnext/selling/page/point_of_sale/pos_payment.js b/erpnext/selling/page/point_of_sale/pos_payment.js
index b4ece46..0a356b9 100644
--- a/erpnext/selling/page/point_of_sale/pos_payment.js
+++ b/erpnext/selling/page/point_of_sale/pos_payment.js
@@ -161,13 +161,13 @@
frappe.ui.form.on('POS Invoice', 'contact_mobile', (frm) => {
const contact = frm.doc.contact_mobile;
- const request_button = $(this.request_for_payment_field.$input[0]);
+ const request_button = $(this.request_for_payment_field?.$input[0]);
if (contact) {
request_button.removeClass('btn-default').addClass('btn-primary');
} else {
request_button.removeClass('btn-primary').addClass('btn-default');
- }
- });
+ }
+ });
frappe.ui.form.on('POS Invoice', 'coupon_code', (frm) => {
if (frm.doc.coupon_code && !frm.applying_pos_coupon_code) {