From a97e700371f6583cb78f78edeb4fc53d0382acdc Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 11 Aug 2014 14:17:17 +0530 Subject: [PATCH] Add rejected serial nos in Purchase Receipt if auto-created based on series --- .../purchase_receipt_item.json | 4 ++- erpnext/stock/doctype/serial_no/serial_no.py | 27 +++++++++++++------ 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json index e5ae5166f9..0222e58da5 100755 --- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json +++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json @@ -426,6 +426,7 @@ "fieldname": "rejected_serial_no", "fieldtype": "Text", "label": "Rejected Serial No", + "no_copy": 1, "permlevel": 0, "print_hide": 1, "read_only": 0 @@ -508,6 +509,7 @@ "label": "Landed Cost Voucher Amount", "no_copy": 1, "permlevel": 0, + "print_hide": 1, "read_only": 1 }, { @@ -555,7 +557,7 @@ ], "idx": 1, "istable": 1, - "modified": "2014-08-08 13:15:06.362562", + "modified": "2014-08-11 12:48:13.509109", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt Item", diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index fe4af21d78..b07eab74fb 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -295,19 +295,30 @@ def make_serial_no(serial_no, sle): return sr.name def update_serial_nos_after_submit(controller, parentfield): - stock_ledger_entries = frappe.db.sql("""select voucher_detail_no, serial_no + stock_ledger_entries = frappe.db.sql("""select voucher_detail_no, serial_no, actual_qty, warehouse from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", (controller.doctype, controller.name), as_dict=True) if not stock_ledger_entries: return for d in controller.get(parentfield): - serial_no = None + update_rejected_serial_nos = True if (controller.doctype=="Purchase Receipt" and d.rejected_qty) else False + accepted_serial_nos_updated = False + warehouse = d.t_warehouse if controller.doctype == "Stock Entry" else d.warehouse + for sle in stock_ledger_entries: if sle.voucher_detail_no==d.name: - serial_no = sle.serial_no - break - - if d.serial_no != serial_no: - d.serial_no = serial_no - frappe.db.set_value(d.doctype, d.name, "serial_no", serial_no) + if not accepted_serial_nos_updated and d.qty and abs(sle.actual_qty)==d.qty \ + and sle.warehouse == warehouse and sle.serial_no != d.serial_no: + d.serial_no = sle.serial_no + frappe.db.set_value(d.doctype, d.name, "serial_no", sle.serial_no) + accepted_serial_nos_updated = True + if not update_rejected_serial_nos: + break + elif update_rejected_serial_nos and abs(sle.actual_qty)==d.rejected_qty \ + and sle.warehouse == d.rejected_warehouse and sle.serial_no != d.rejected_serial_no: + d.rejected_serial_no = sle.serial_no + frappe.db.set_value(d.doctype, d.name, "rejected_serial_no", sle.serial_no) + update_rejected_serial_nos = False + if accepted_serial_nos_updated: + break