testcase fixes #478
diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py
index 2c16a1d..57e73d0 100644
--- a/erpnext/selling/doctype/lead/lead.py
+++ b/erpnext/selling/doctype/lead/lead.py
@@ -77,13 +77,13 @@
def set_missing_values(source, target):
if source.company_name:
- target[0].customer_type = "Company"
- target[0].customer_name = source.company_name
+ target.customer_type = "Company"
+ target.customer_name = source.company_name
else:
- target[0].customer_type = "Individual"
- target[0].customer_name = source.lead_name
+ target.customer_type = "Individual"
+ target.customer_name = source.lead_name
- target[0].customer_group = frappe.db.get_default("customer_group")
+ target.customer_group = frappe.db.get_default("customer_group")
doclist = get_mapped_doc("Lead", source_name,
{"Lead": {
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index 45a9d0b..f5c2050 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -105,8 +105,8 @@
def set_missing_values(source, target):
if customer:
- target[0].customer = customer.name
- target[0].customer_name = customer.customer_name
+ target.customer = customer.name
+ target.customer_name = customer.customer_name
si = frappe.get_doc(target)
si.ignore_permissions = ignore_permissions
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index 756f540..2b3a5fa 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -29,84 +29,84 @@
so_items[d.sales_order_no][d.item_code] = flt(d.qty)
else:
so_items[d.sales_order_no][d.item_code] += flt(d.qty)
-
+
for so_no in so_items.keys():
for item in so_items[so_no].keys():
- already_indented = frappe.db.sql("""select sum(ifnull(qty, 0))
- from `tabMaterial Request Item`
- where item_code = %s and sales_order_no = %s and
+ already_indented = frappe.db.sql("""select sum(ifnull(qty, 0))
+ from `tabMaterial Request Item`
+ where item_code = %s and sales_order_no = %s and
docstatus = 1 and parent != %s""", (item, so_no, self.name))
already_indented = already_indented and flt(already_indented[0][0]) or 0
-
- actual_so_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item`
+
+ actual_so_qty = frappe.db.sql("""select sum(ifnull(qty, 0)) from `tabSales Order Item`
where parent = %s and item_code = %s and docstatus = 1""", (so_no, item))
actual_so_qty = actual_so_qty and flt(actual_so_qty[0][0]) or 0
-
+
if actual_so_qty and (flt(so_items[so_no][item]) + already_indented > actual_so_qty):
frappe.throw("You can raise indent of maximum qty: %s for item: %s against sales order: %s\
\n Anyway, you can add more qty in new row for the same item."
% (actual_so_qty - already_indented, item, so_no))
-
+
def validate_schedule_date(self):
for d in self.get('indent_details'):
if d.schedule_date < self.transaction_date:
frappe.throw(_("Expected Date cannot be before Material Request Date"))
-
+
# Validate
# ---------------------
def validate(self):
super(MaterialRequest, self).validate()
-
+
self.validate_schedule_date()
self.validate_uom_is_integer("uom", "qty")
-
+
if not self.status:
self.status = "Draft"
from erpnext.utilities import validate_status
validate_status(self.status, ["Draft", "Submitted", "Stopped", "Cancelled"])
-
+
self.validate_value("material_request_type", "in", ["Purchase", "Transfer"])
pc_obj = frappe.get_doc('Purchase Common')
pc_obj.validate_for_items(self)
-
+
# self.validate_qty_against_so()
# NOTE: Since Item BOM and FG quantities are combined, using current data, it cannot be validated
# Though the creation of Material Request from a Production Plan can be rethought to fix this
-
+
def update_bin(self, is_submit, is_stopped):
""" Update Quantity Requested for Purchase in Bin for Material Request of type 'Purchase'"""
-
+
from erpnext.stock.utils import update_bin
for d in self.get('indent_details'):
if frappe.db.get_value("Item", d.item_code, "is_stock_item") == "Yes":
if not d.warehouse:
- frappe.throw("Please Enter Warehouse for Item %s as it is stock item"
+ frappe.throw("Please Enter Warehouse for Item %s as it is stock item"
% cstr(d.item_code))
-
+
qty =flt(d.qty)
if is_stopped:
qty = (d.qty > d.ordered_qty) and flt(flt(d.qty) - flt(d.ordered_qty)) or 0
-
+
args = {
"item_code": d.item_code,
"warehouse": d.warehouse,
"indented_qty": (is_submit and 1 or -1) * flt(qty),
"posting_date": self.transaction_date
}
- update_bin(args)
-
+ update_bin(args)
+
def on_submit(self):
frappe.db.set(self, 'status', 'Submitted')
self.update_bin(is_submit = 1, is_stopped = 0)
-
+
def check_modified_date(self):
- mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""",
+ mod_db = frappe.db.sql("""select modified from `tabMaterial Request` where name = %s""",
self.name)
date_diff = frappe.db.sql("""select TIMEDIFF('%s', '%s')"""
% (mod_db[0][0], cstr(self.modified)))
-
+
if date_diff and date_diff[0][0]:
frappe.throw(cstr(self.doctype) + " => " + cstr(self.name) + " has been modified. Please Refresh.")
@@ -115,93 +115,93 @@
# Step 1:=> Update Bin
self.update_bin(is_submit = (status == 'Submitted') and 1 or 0, is_stopped = 1)
- # Step 2:=> Set status
+ # Step 2:=> Set status
frappe.db.set(self, 'status', cstr(status))
-
+
# Step 3:=> Acknowledge User
msgprint(self.doctype + ": " + self.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
-
+
def on_cancel(self):
# Step 1:=> Get Purchase Common Obj
pc_obj = frappe.get_doc('Purchase Common')
-
+
# Step 2:=> Check for stopped status
pc_obj.check_for_stopped_status(self.doctype, self.name)
-
+
# Step 3:=> Check if Purchase Order has been submitted against current Material Request
pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.name, detail_doctype = 'Purchase Order Item')
# Step 4:=> Update Bin
self.update_bin(is_submit = 0, is_stopped = (cstr(self.status) == 'Stopped') and 1 or 0)
-
+
# Step 5:=> Set Status
frappe.db.set(self,'status','Cancelled')
-
+
def update_completed_qty(self, mr_items=None):
if self.material_request_type != "Transfer":
return
-
+
item_doclist = self.get("indent_details")
-
+
if not mr_items:
mr_items = [d.name for d in item_doclist]
-
+
per_ordered = 0.0
for d in item_doclist:
if d.name in mr_items:
- d.ordered_qty = flt(frappe.db.sql("""select sum(transfer_qty)
- from `tabStock Entry Detail` where material_request = %s
- and material_request_item = %s and docstatus = 1""",
+ d.ordered_qty = flt(frappe.db.sql("""select sum(transfer_qty)
+ from `tabStock Entry Detail` where material_request = %s
+ and material_request_item = %s and docstatus = 1""",
(self.name, d.name))[0][0])
frappe.db.set_value(d.doctype, d.name, "ordered_qty", d.ordered_qty)
-
+
# note: if qty is 0, its row is still counted in len(item_doclist)
# hence adding 1 to per_ordered
if (d.ordered_qty > d.qty) or not d.qty:
per_ordered += 1.0
elif d.qty > 0:
per_ordered += flt(d.ordered_qty / flt(d.qty))
-
+
self.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered)
-
+
def update_completed_qty(doc, method):
if doc.doctype == "Stock Entry":
material_request_map = {}
-
+
for d in doc.get("mtn_details"):
if d.material_request:
material_request_map.setdefault(d.material_request, []).append(d.material_request_item)
-
+
for mr_name, mr_items in material_request_map.items():
mr_obj = frappe.get_doc("Material Request", mr_name)
mr_doctype = frappe.get_meta("Material Request")
-
+
if mr_obj.status in ["Stopped", "Cancelled"]:
- frappe.throw(_("Material Request") + ": %s, " % mr_obj.name
+ frappe.throw(_("Material Request") + ": %s, " % mr_obj.name
+ _(mr_doctype.get_label("status")) + " = %s. " % _(mr_obj.status)
+ _("Cannot continue."), exc=frappe.InvalidStatusError)
-
+
_update_requested_qty(doc, mr_obj, mr_items)
-
+
# update ordered percentage and qty
mr_obj.update_completed_qty(mr_items)
-
+
def _update_requested_qty(doc, mr_obj, mr_items):
"""update requested qty (before ordered_qty is updated)"""
from erpnext.stock.utils import update_bin
for mr_item_name in mr_items:
mr_item = mr_obj.get("indent_details", {"name": mr_item_name})
- se_detail = doc.get("mtn_details", {"material_request": mr_obj.name,
+ se_detail = doc.get("mtn_details", {"material_request": mr_obj.name,
"material_request_item": mr_item_name})
-
+
if mr_item and se_detail:
mr_item = mr_item[0]
se_detail = se_detail[0]
mr_item.ordered_qty = flt(mr_item.ordered_qty)
mr_item.qty = flt(mr_item.qty)
se_detail.transfer_qty = flt(se_detail.transfer_qty)
-
+
if se_detail.docstatus == 2 and mr_item.ordered_qty > mr_item.qty \
and se_detail.transfer_qty == mr_item.ordered_qty:
add_indented_qty = mr_item.qty
@@ -210,7 +210,7 @@
add_indented_qty = mr_item.qty - mr_item.ordered_qty
else:
add_indented_qty = se_detail.transfer_qty
-
+
update_bin({
"item_code": se_detail.item_code,
"warehouse": se_detail.t_warehouse,
@@ -221,7 +221,7 @@
def set_missing_values(source, target_doc):
po = frappe.get_doc(target_doc)
po.run_method("set_missing_values")
-
+
def update_item(obj, target, source_parent):
target.conversion_factor = 1
target.qty = flt(obj.qty) - flt(obj.ordered_qty)
@@ -232,18 +232,18 @@
doclist = get_mapped_doc("Material Request", source_name, {
"Material Request": {
- "doctype": "Purchase Order",
+ "doctype": "Purchase Order",
"validation": {
"docstatus": ["=", 1],
"material_request_type": ["=", "Purchase"]
}
- },
+ },
"Material Request Item": {
- "doctype": "Purchase Order Item",
+ "doctype": "Purchase Order Item",
"field_map": [
- ["name", "prevdoc_detail_docname"],
- ["parent", "prevdoc_docname"],
- ["parenttype", "prevdoc_doctype"],
+ ["name", "prevdoc_detail_docname"],
+ ["parent", "prevdoc_docname"],
+ ["parenttype", "prevdoc_doctype"],
["uom", "stock_uom"],
["uom", "uom"]
],
@@ -252,7 +252,7 @@
}, target_doc, set_missing_values)
return doclist.as_dict()
-
+
@frappe.whitelist()
def make_purchase_order_based_on_supplier(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc
@@ -261,44 +261,44 @@
import json
target_doc = frappe.get_doc(json.loads(target_doc))
target_doc = target_doc.get({"parentfield": ["!=", "po_details"]})
-
+
material_requests, supplier_items = get_material_requests_based_on_supplier(source_name)
-
+
def postprocess(source, target_doc):
target_doc[0].supplier = source_name
set_missing_values(source, target_doc)
-
+
po_items = target_doc.get({"parentfield": "po_details"})
target_doc = target_doc.get({"parentfield": ["!=", "po_details"]}) + \
- [d for d in po_items
+ [d for d in po_items
if d.get("item_code") in supplier_items and d.get("qty") > 0]
-
+
return target_doc
-
+
for mr in material_requests:
target_doc = get_mapped_doc("Material Request", mr, {
"Material Request": {
- "doctype": "Purchase Order",
- },
+ "doctype": "Purchase Order",
+ },
"Material Request Item": {
- "doctype": "Purchase Order Item",
+ "doctype": "Purchase Order Item",
"field_map": [
- ["name", "prevdoc_detail_docname"],
- ["parent", "prevdoc_docname"],
- ["parenttype", "prevdoc_doctype"],
+ ["name", "prevdoc_detail_docname"],
+ ["parent", "prevdoc_docname"],
+ ["parenttype", "prevdoc_doctype"],
["uom", "stock_uom"],
["uom", "uom"]
],
"postprocess": update_item
}
}, target_doc, postprocess)
-
+
return target_doc.as_dict()
-
+
def get_material_requests_based_on_supplier(supplier):
- supplier_items = [d[0] for d in frappe.db.get_values("Item",
+ supplier_items = [d[0] for d in frappe.db.get_values("Item",
{"default_supplier": supplier})]
- material_requests = frappe.db.sql_list("""select distinct mr.name
+ material_requests = frappe.db.sql_list("""select distinct mr.name
from `tabMaterial Request` mr, `tabMaterial Request Item` mr_item
where mr.name = mr_item.parent
and mr_item.item_code in (%s)
@@ -308,59 +308,59 @@
and mr.status != 'Stopped'""" % ', '.join(['%s']*len(supplier_items)),
tuple(supplier_items))
return material_requests, supplier_items
-
+
@frappe.whitelist()
def make_supplier_quotation(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc
doclist = get_mapped_doc("Material Request", source_name, {
"Material Request": {
- "doctype": "Supplier Quotation",
+ "doctype": "Supplier Quotation",
"validation": {
"docstatus": ["=", 1],
"material_request_type": ["=", "Purchase"]
}
- },
+ },
"Material Request Item": {
- "doctype": "Supplier Quotation Item",
+ "doctype": "Supplier Quotation Item",
"field_map": {
- "name": "prevdoc_detail_docname",
- "parent": "prevdoc_docname",
+ "name": "prevdoc_detail_docname",
+ "parent": "prevdoc_docname",
"parenttype": "prevdoc_doctype"
}
}
}, target_doc, set_missing_values)
return doclist.as_dict()
-
+
@frappe.whitelist()
def make_stock_entry(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc
-
+
def update_item(obj, target, source_parent):
target.conversion_factor = 1
target.qty = flt(obj.qty) - flt(obj.ordered_qty)
target.transfer_qty = flt(obj.qty) - flt(obj.ordered_qty)
-
+
def set_missing_values(source, target):
- target[0].purpose = "Material Transfer"
+ target.purpose = "Material Transfer"
se = frappe.get_doc(target)
se.run_method("get_stock_and_rate")
doclist = get_mapped_doc("Material Request", source_name, {
"Material Request": {
- "doctype": "Stock Entry",
+ "doctype": "Stock Entry",
"validation": {
"docstatus": ["=", 1],
"material_request_type": ["=", "Transfer"]
}
- },
+ },
"Material Request Item": {
- "doctype": "Stock Entry Detail",
+ "doctype": "Stock Entry Detail",
"field_map": {
- "name": "material_request_item",
- "parent": "material_request",
- "uom": "stock_uom",
+ "name": "material_request_item",
+ "parent": "material_request",
+ "uom": "stock_uom",
"warehouse": "t_warehouse"
},
"postprocess": update_item
diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py
index 6d10d40..f27fadb 100644
--- a/erpnext/stock/doctype/material_request/test_material_request.py
+++ b/erpnext/stock/doctype/material_request/test_material_request.py
@@ -17,89 +17,89 @@
mr = frappe.copy_doc(test_records[0]).insert()
- self.assertRaises(frappe.ValidationError, make_purchase_order,
+ self.assertRaises(frappe.ValidationError, make_purchase_order,
mr.name)
mr = frappe.get_doc("Material Request", mr.name)
mr.submit()
po = make_purchase_order(mr.name)
-
+
self.assertEquals(po[0]["doctype"], "Purchase Order")
self.assertEquals(len(po), len(mr))
-
+
def test_make_supplier_quotation(self):
from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
mr = frappe.copy_doc(test_records[0]).insert()
- self.assertRaises(frappe.ValidationError, make_supplier_quotation,
+ self.assertRaises(frappe.ValidationError, make_supplier_quotation,
mr.name)
mr = frappe.get_doc("Material Request", mr.name)
mr.submit()
sq = make_supplier_quotation(mr.name)
-
+
self.assertEquals(sq[0]["doctype"], "Supplier Quotation")
self.assertEquals(len(sq), len(mr))
-
-
+
+
def test_make_stock_entry(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,
+ self.assertRaises(frappe.ValidationError, make_stock_entry,
mr.name)
mr = frappe.get_doc("Material Request", mr.name)
mr.material_request_type = "Transfer"
mr.submit()
se = make_stock_entry(mr.name)
-
+
self.assertEquals(se[0]["doctype"], "Stock Entry")
self.assertEquals(len(se), len(mr))
-
+
def _test_expected(self, doc, expected_values):
for i, expected in enumerate(expected_values):
for fieldname, val in expected.items():
- self.assertEquals(val, doc[i].get(fieldname))
-
+ self.assertEquals(val, doc.get(fieldname))
+
def _test_requested_qty(self, qty1, qty2):
self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty1)
self.assertEqual(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 200",
"warehouse": "_Test Warehouse - _TC"}, "indented_qty")), qty2)
-
+
def _insert_stock_entry(self, qty1, qty2):
se = frappe.get_doc({
- "company": "_Test Company",
- "doctype": "Stock Entry",
- "posting_date": "2013-03-01",
- "posting_time": "00:00:00",
+ "company": "_Test Company",
+ "doctype": "Stock Entry",
+ "posting_date": "2013-03-01",
+ "posting_time": "00:00:00",
"purpose": "Material Receipt",
"fiscal_year": "_Test Fiscal Year 2013",
"mtn_details": [
{
- "conversion_factor": 1.0,
- "doctype": "Stock Entry Detail",
+ "conversion_factor": 1.0,
+ "doctype": "Stock Entry Detail",
"item_code": "_Test Item Home Desktop 100",
- "parentfield": "mtn_details",
+ "parentfield": "mtn_details",
"incoming_rate": 100,
- "qty": qty1,
- "stock_uom": "_Test UOM 1",
- "transfer_qty": qty1,
+ "qty": qty1,
+ "stock_uom": "_Test UOM 1",
+ "transfer_qty": qty1,
"uom": "_Test UOM 1",
"t_warehouse": "_Test Warehouse 1 - _TC",
},
{
- "conversion_factor": 1.0,
- "doctype": "Stock Entry Detail",
+ "conversion_factor": 1.0,
+ "doctype": "Stock Entry Detail",
"item_code": "_Test Item Home Desktop 200",
- "parentfield": "mtn_details",
+ "parentfield": "mtn_details",
"incoming_rate": 100,
- "qty": qty2,
- "stock_uom": "_Test UOM 1",
- "transfer_qty": qty2,
+ "qty": qty2,
+ "stock_uom": "_Test UOM 1",
+ "transfer_qty": qty2,
"uom": "_Test UOM 1",
"t_warehouse": "_Test Warehouse 1 - _TC",
}
@@ -107,20 +107,20 @@
})
se.insert()
se.submit()
-
+
def test_completed_qty_for_purchase(self):
frappe.db.sql("""delete from `tabBin`""")
-
+
# submit material request of type Purchase
mr = frappe.copy_doc(test_records[0])
mr.insert()
mr.submit()
-
+
# check if per complete is None
self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
-
+
self._test_requested_qty(54.0, 3.0)
-
+
# map a purchase order
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
po_doc = make_purchase_order(mr.name)
@@ -131,34 +131,34 @@
po_doc.get("po_details")[0]["schedule_date"] = "2013-07-09"
po_doc.get("po_details")[1]["schedule_date"] = "2013-07-09"
-
+
# check for stopped status of Material Request
po = frappe.copy_doc(po_doc)
po.insert()
- mr.obj.update_status('Stopped')
+ mr.update_status('Stopped')
self.assertRaises(frappe.ValidationError, po.submit)
self.assertRaises(frappe.ValidationError, po.cancel)
- mr.obj.update_status('Submitted')
+ mr.update_status('Submitted')
po = frappe.copy_doc(po_doc)
po.insert()
po.submit()
-
+
# check if per complete is as expected
mr.load_from_db()
self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
self._test_requested_qty(27.0, 1.5)
-
+
po.cancel()
# check if per complete is as expected
mr.load_from_db()
self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
self._test_requested_qty(54.0, 3.0)
-
+
def test_completed_qty_for_transfer(self):
frappe.db.sql("""delete from `tabBin`""")
frappe.db.sql("""delete from `tabStock Ledger Entry`""")
-
+
# submit material request of type Purchase
mr = frappe.copy_doc(test_records[0])
mr.material_request_type = "Transfer"
@@ -167,11 +167,11 @@
# check if per complete is None
self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
-
+
self._test_requested_qty(54.0, 3.0)
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
-
+
# map a stock entry
se_doc = make_stock_entry(mr.name)
se_doc.update({
@@ -191,37 +191,37 @@
"s_warehouse": "_Test Warehouse 1 - _TC",
"incoming_rate": 1.0
})
-
+
# make available the qty in _Test Warehouse 1 before transfer
self._insert_stock_entry(27.0, 1.5)
-
+
# check for stopped status of Material Request
se = frappe.copy_doc(se_doc)
se.insert()
- mr.obj.update_status('Stopped')
+ mr.update_status('Stopped')
self.assertRaises(frappe.ValidationError, se.submit)
self.assertRaises(frappe.ValidationError, se.cancel)
-
- mr.obj.update_status('Submitted')
+
+ mr.update_status('Submitted')
se = frappe.copy_doc(se_doc)
se.insert()
se.submit()
-
+
# check if per complete is as expected
mr.load_from_db()
self._test_expected(mr, [{"per_ordered": 50}, {"ordered_qty": 27.0}, {"ordered_qty": 1.5}])
self._test_requested_qty(27.0, 1.5)
-
+
# check if per complete is as expected for Stock Entry cancelled
se.cancel()
mr.load_from_db()
self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
self._test_requested_qty(54.0, 3.0)
-
+
def test_completed_qty_for_over_transfer(self):
frappe.db.sql("""delete from `tabBin`""")
frappe.db.sql("""delete from `tabStock Ledger Entry`""")
-
+
# submit material request of type Purchase
mr = frappe.copy_doc(test_records[0])
mr.material_request_type = "Transfer"
@@ -230,9 +230,9 @@
# check if per complete is None
self._test_expected(mr, [{"per_ordered": None}, {"ordered_qty": None}, {"ordered_qty": None}])
-
+
self._test_requested_qty(54.0, 3.0)
-
+
# map a stock entry
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
@@ -257,30 +257,30 @@
# make available the qty in _Test Warehouse 1 before transfer
self._insert_stock_entry(60.0, 3.0)
-
+
# check for stopped status of Material Request
se = frappe.copy_doc(se_doc)
se.insert()
- mr.obj.update_status('Stopped')
+ mr.update_status('Stopped')
self.assertRaises(frappe.ValidationError, se.submit)
self.assertRaises(frappe.ValidationError, se.cancel)
-
- mr.obj.update_status('Submitted')
+
+ mr.update_status('Submitted')
se = frappe.copy_doc(se_doc)
se.insert()
se.submit()
-
+
# check if per complete is as expected
mr.load_from_db()
self._test_expected(mr, [{"per_ordered": 100}, {"ordered_qty": 60.0}, {"ordered_qty": 3.0}])
self._test_requested_qty(0.0, 0.0)
-
+
# check if per complete is as expected for Stock Entry cancelled
se.cancel()
mr.load_from_db()
self._test_expected(mr, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}])
self._test_requested_qty(54.0, 3.0)
-
+
def test_incorrect_mapping_of_stock_entry(self):
# submit material request of type Purchase
mr = frappe.copy_doc(test_records[0])
@@ -290,7 +290,7 @@
# map a stock entry
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
-
+
se_doc = make_stock_entry(mr.name)
se_doc.update({
"posting_date": "2013-03-01",
@@ -310,11 +310,11 @@
"s_warehouse": "_Test Warehouse 1 - _TC",
"incoming_rate": 1.0
})
-
+
# check for stopped status of Material Request
se = frappe.copy_doc(se_doc)
self.assertRaises(frappe.MappingMismatchError, se.insert)
-
+
def test_warehouse_company_validation(self):
from erpnext.stock.utils import InvalidWarehouseCompany
mr = frappe.copy_doc(test_records[0])
@@ -322,4 +322,4 @@
self.assertRaises(InvalidWarehouseCompany, mr.insert)
test_dependencies = ["Currency Exchange"]
-test_records = frappe.get_test_records('Material Request')
\ No newline at end of file
+test_records = frappe.get_test_records('Material Request')