From c46c1f0288c882bf282768ef534d81ad2cb98bae Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 18 Apr 2016 17:46:36 +0530 Subject: [PATCH] [fix] Rejected serial nos in purchase invoice --- .../purchase_invoice/test_purchase_invoice.py | 19 +++++++++++++++++-- .../purchase_invoice_item.json | 9 +++++---- .../purchase_common/purchase_common.py | 2 +- erpnext/stock/doctype/serial_no/serial_no.py | 3 ++- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 9afcd21b90..91d3ae4dad 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -397,6 +397,17 @@ class TestPurchaseInvoice(unittest.TestCase): rm_supp_cost = sum([d.amount for d in pi.get("supplied_items")]) self.assertEquals(pi.get("items")[0].rm_supp_cost, flt(rm_supp_cost, 2)) + + def test_rejected_serial_no(self): + pi = make_purchase_invoice(item_code="_Test Serialized Item With Series", received_qty=2, qty=1, + rejected_qty=1, rate=500, update_stock=1, + rejected_warehouse = "_Test Rejected Warehouse - _TC") + + self.assertEquals(frappe.db.get_value("Serial No", pi.get("items")[0].serial_no, "warehouse"), + pi.get("items")[0].warehouse) + + self.assertEquals(frappe.db.get_value("Serial No", pi.get("items")[0].rejected_serial_no, + "warehouse"), pi.get("items")[0].rejected_warehouse) def make_purchase_invoice(**args): pi = frappe.new_doc("Purchase Invoice") @@ -419,19 +430,23 @@ def make_purchase_invoice(**args): pi.conversion_rate = args.conversion_rate or 1 pi.is_return = args.is_return pi.return_against = args.return_against - pi.is_subcontracted = args.is_subcontracted + pi.is_subcontracted = args.is_subcontracted or "No" pi.supplier_warehouse = "_Test Warehouse 1 - _TC" pi.append("items", { "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse or "_Test Warehouse - _TC", "qty": args.qty or 5, + "received_qty": args.received_qty or 0, + "rejected_qty": args.rejected_qty or 0, "rate": args.rate or 50, "conversion_factor": 1.0, "serial_no": args.serial_no, "stock_uom": "_Test UOM", "cost_center": "_Test Cost Center - _TC", - "project": args.project + "project": args.project, + "rejected_warehouse": args.rejected_warehouse or "", + "rejected_serial_no": args.rejected_serial_no or "" }) if not args.do_not_save: pi.insert() diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json index f9f76605f0..85996459e2 100755 --- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json +++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json @@ -973,17 +973,17 @@ "collapsible": 0, "fieldname": "rejected_serial_no", "fieldtype": "Text", - "hidden": 1, + "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, "label": "Rejected Serial No", "length": 0, - "no_copy": 0, + "no_copy": 1, "permlevel": 0, "precision": "", - "print_hide": 0, + "print_hide": 1, "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, @@ -1545,12 +1545,13 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-04-07 16:38:30.502386", + "modified": "2016-04-18 08:08:53.056818", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice Item", "owner": "Administrator", "permissions": [], + "quick_entry": 0, "read_only": 0, "read_only_onload": 0, "sort_field": "modified", diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py index 1c3fe1e577..cd28c88e8d 100644 --- a/erpnext/buying/doctype/purchase_common/purchase_common.py +++ b/erpnext/buying/doctype/purchase_common/purchase_common.py @@ -51,7 +51,7 @@ class PurchaseCommon(BuyingController): item_code = %s and warehouse = %s""", (d.item_code, d.warehouse), as_dict=1) f_lst ={'projected_qty': bin and flt(bin[0]['projected_qty']) or 0, 'ordered_qty': 0, 'received_qty' : 0} - if d.doctype == 'Purchase Receipt Item': + if d.doctype in ('Purchase Receipt Item', 'Purchase Invoice Item'): f_lst.pop('received_qty') for x in f_lst : if d.meta.get_field(x): diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index 42e8d1b70a..71ce0f8803 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -303,7 +303,8 @@ def update_serial_nos_after_submit(controller, parentfield): if not stock_ledger_entries: return for d in controller.get(parentfield): - update_rejected_serial_nos = True if (controller.doctype=="Purchase Receipt" and d.rejected_qty) else False + update_rejected_serial_nos = True if (controller.doctype in ("Purchase Receipt", "Purchase Invoice") + and d.rejected_qty) else False accepted_serial_nos_updated = False warehouse = d.t_warehouse if controller.doctype == "Stock Entry" else d.warehouse