From 9c3dca63fa252278eb9032bcb7f822cb3234e6d9 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 21 Jul 2015 13:27:18 +0530 Subject: [PATCH] Disallowed End of Life Items from getting selected in Production Orders and Stock Reconciliation --- .../doctype/production_order/production_order.js | 3 ++- .../doctype/production_order/production_order.py | 3 +++ .../doctype/production_order/test_production_order.py | 6 ++++++ .../doctype/stock_reconciliation/stock_reconciliation.js | 8 ++++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js index 17fa202a4d..50f46ca401 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.js +++ b/erpnext/manufacturing/doctype/production_order/production_order.js @@ -262,7 +262,8 @@ cur_frm.fields_dict['production_item'].get_query = function(doc) { return { filters:[ ['Item', 'is_pro_applicable', '=', 'Yes'], - ['Item', 'has_variants', '=', 'No'] + ['Item', 'has_variants', '=', 'No'], + ['Item', 'end_of_life', '>', frappe.datetime.now_datetime()] ] } } diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py index 93ce5e16f6..7a0921d513 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -9,6 +9,7 @@ from frappe import _ from frappe.model.document import Document from erpnext.manufacturing.doctype.bom.bom import validate_bom_no from dateutil.relativedelta import relativedelta +from erpnext.stock.doctype.item.item import validate_end_of_life class OverProductionError(frappe.ValidationError): pass class StockOverProductionError(frappe.ValidationError): pass @@ -329,6 +330,8 @@ class ProductionOrder(Document): if frappe.db.get_value("Item", self.production_item, "has_variants"): frappe.throw(_("Production Order cannot be raised against a Item Template")) + + validate_end_of_life(self.production_item) @frappe.whitelist() def get_item_details(item): diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.py b/erpnext/manufacturing/doctype/production_order/test_production_order.py index 34d584a94a..f9aa03194a 100644 --- a/erpnext/manufacturing/doctype/production_order/test_production_order.py +++ b/erpnext/manufacturing/doctype/production_order/test_production_order.py @@ -135,6 +135,12 @@ class TestProductionOrder(unittest.TestCase): prod_order.set_production_order_operations() self.assertEqual(prod_order.planned_operating_cost, cost*2) + def test_production_item(self): + item = frappe.get_doc("Item", "_Test FG Item") + item.end_of_life = + + prod_order = make_prod_order_test_record(item="_Test FG Item", qty=1, do_not_save=True) + def make_prod_order_test_record(**args): args = frappe._dict(args) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js index c0ae213b87..b394b71a22 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js @@ -98,3 +98,11 @@ cur_frm.cscript.company = function(doc, cdt, cdn) { cur_frm.cscript.posting_date = function(doc, cdt, cdn){ erpnext.get_fiscal_year(doc.company, doc.posting_date); } + +cur_frm.fields_dict.items.grid.get_field('item_code').get_query = function(doc, cdt, cdn) { + return { + filters:[ + ['Item', 'end_of_life', '>', frappe.datetime.now_datetime()] + ] + } +} \ No newline at end of file