fix: check for duplicate in pos closing and pos merge log entry
diff --git a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py
index 655c4ec..115b415 100644
--- a/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py
+++ b/erpnext/accounts/doctype/pos_closing_entry/pos_closing_entry.py
@@ -21,8 +21,24 @@
if frappe.db.get_value("POS Opening Entry", self.pos_opening_entry, "status") != "Open":
frappe.throw(_("Selected POS Opening Entry should be open."), title=_("Invalid Opening Entry"))
+ self.validate_duplicate_pos_invoices()
self.validate_pos_invoices()
+ def validate_duplicate_pos_invoices(self):
+ pos_occurences = {}
+ for idx, inv in enumerate(self.pos_transactions, 1):
+ pos_occurences.setdefault(inv.pos_invoice, []).append(idx)
+
+ error_list = []
+ for key, value in pos_occurences.items():
+ if len(value) > 1:
+ error_list.append(
+ _("{} is added multiple times on rows: {}".format(frappe.bold(key), frappe.bold(value)))
+ )
+
+ if error_list:
+ frappe.throw(error_list, title=_("Duplicate POS Invoices found"), as_list=True)
+
def validate_pos_invoices(self):
invalid_rows = []
for d in self.pos_transactions:
diff --git a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py
index 3a237a4..b1e2208 100644
--- a/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py
+++ b/erpnext/accounts/doctype/pos_invoice_merge_log/pos_invoice_merge_log.py
@@ -17,6 +17,22 @@
def validate(self):
self.validate_customer()
self.validate_pos_invoice_status()
+ self.validate_duplicate_pos_invoices()
+
+ def validate_duplicate_pos_invoices(self):
+ pos_occurences = {}
+ for idx, inv in enumerate(self.pos_invoices, 1):
+ pos_occurences.setdefault(inv.pos_invoice, []).append(idx)
+
+ error_list = []
+ for key, value in pos_occurences.items():
+ if len(value) > 1:
+ error_list.append(
+ _("{} is added multiple times on rows: {}".format(frappe.bold(key), frappe.bold(value)))
+ )
+
+ if error_list:
+ frappe.throw(error_list, title=_("Duplicate POS Invoices found"), as_list=True)
def validate_customer(self):
if self.merge_invoices_based_on == "Customer Group":
@@ -425,6 +441,8 @@
if closing_entry:
closing_entry.set_status(update=True, status="Failed")
+ if type(error_message) == list:
+ error_message = frappe.json.dumps(error_message)
closing_entry.db_set("error_message", error_message)
raise