Test Cases Added - Work Pending
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 80c61ab..ec77cf3 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -294,9 +294,12 @@
@frappe.whitelist()
def make_stock_entry(source_name, target_doc=None):
def update_item(obj, target, source_parent):
+ qty = flt(obj.qty) - flt(obj.ordered_qty) \
+ if flt(obj.qty) > flt(obj.ordered_qty) else 0
+ target.qty = qty
+ target.transfer_qty = qty
target.conversion_factor = 1
- target.qty = flt(obj.qty) - flt(obj.ordered_qty)
- target.transfer_qty = flt(obj.qty) - flt(obj.ordered_qty)
+
if source_parent.material_request_type == "Material Transfer":
target.t_warehouse = obj.warehouse
else:
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index 753c5b1..16abcf8 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -77,7 +77,7 @@
"stock_uom": "_Test UOM 1",
"transfer_qty": qty1,
"uom": "_Test UOM 1",
- "t_warehouse": "_Test Warehouse 1 - _TC",
+ "t_warehouse": warehouse or "_Test Warehouse 1 - _TC",
},
{
"conversion_factor": 1.0,
@@ -89,7 +89,7 @@
"stock_uom": "_Test UOM 1",
"transfer_qty": qty2,
"uom": "_Test UOM 1",
- "t_warehouse": "_Test Warehouse 1 - _TC",
+ "t_warehouse": warehouse or "_Test Warehouse 1 - _TC",
}
]
})
@@ -383,6 +383,56 @@
def _get_requested_qty(self, item_code, warehouse):
return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "indented_qty"))
+ def test_make_stock_entry_for_Material_Issue(self):
+ from erpnext.stock.doctype.material_request.material_request import make_stock_entry
+
+ mr = frappe.copy_doc(test_records[0]).insert()
+
+ self.assertRaises(frappe.ValidationError, make_stock_entry,
+ mr.name)
+
+ mr = frappe.get_doc("Material Request", mr.name)
+ mr.material_request_type = "Material Issue"
+ mr.submit()
+ se = make_stock_entry(mr.name)
+
+ self.assertEquals(se.doctype, "Stock Entry")
+ self.assertEquals(len(se.get("mtn_details")), len(mr.get("indent_details")))
+
+ def test_compleated_qty_for_issue(self):
+ def _get_requested_qty():
+ return flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
+ "warehouse": "_Test Warehouse - _TC"}, "indented_qty"))
+
+ from erpnext.stock.doctype.material_request.material_request import make_stock_entry
+
+ existing_requested_qty = _get_requested_qty()
+
+ mr = frappe.copy_doc(test_records[0])
+ mr.material_request_type = "Material Issue"
+ mr.submit()
+
+ #testing bin value after material request is submitted
+ self.assertEquals(_get_requested_qty(), existing_requested_qty + 54.0)
+
+ # receive items to allow issue
+ self._insert_stock_entry(60, 6, "_Test Warehouse - _TC")
+
+ # make stock entry against MR
+
+ se_doc = make_stock_entry(mr.name)
+ se_doc.fiscal_year = "_Test Fiscal Year 2014"
+ se_doc.get("mtn_details")[0].qty = 60.0
+ se_doc.insert()
+ se_doc.submit()
+
+ # check if per complete is as expected
+ mr.load_from_db()
+ self.assertEquals(mr.get("indent_details")[0].ordered_qty, 60.0)
+ self.assertEquals(mr.get("indent_details")[1].ordered_qty, 3.0)
+
+ #testing bin requested qty after issuing stock against material request
+ self.assertEquals(_get_requested_qty(), existing_requested_qty)
test_dependencies = ["Currency Exchange"]
test_records = frappe.get_test_records('Material Request')
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 839554a..f0af283 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -219,7 +219,7 @@
if not self.posting_date or not self.posting_time:
frappe.throw(_("Posting date and posting time is mandatory"))
- allow_negative_stock = cint(frappe.db.get_default("allow_negative_stock"))
+ allow_negative_stock = cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock"))
for d in self.get('mtn_details'):
d.transfer_qty = flt(d.transfer_qty)
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index eae1bf6..62cc397 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -87,7 +87,7 @@
stock_value_difference = 0.0
for sle in entries_to_fix:
- if sle.serial_no or not cint(frappe.db.get_default("allow_negative_stock")):
+ if sle.serial_no or not cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock")):
# validate negative stock for serialized items, fifo valuation
# or when negative stock is not allowed for moving average
if not validate_negative_stock(qty_after_transaction, sle):