|
|
|
@@ -7,7 +7,8 @@
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
import frappe, unittest, erpnext
|
|
|
|
import frappe, unittest, erpnext
|
|
|
|
from frappe.utils import flt, today
|
|
|
|
from frappe.utils import flt, today
|
|
|
|
from erpnext.stock.doctype.material_request.material_request import raise_work_orders
|
|
|
|
from erpnext.stock.doctype.material_request.material_request \
|
|
|
|
|
|
|
|
import raise_work_orders, make_stock_entry, make_purchase_order, make_supplier_quotation
|
|
|
|
from erpnext.stock.doctype.item.test_item import create_item
|
|
|
|
from erpnext.stock.doctype.item.test_item import create_item
|
|
|
|
|
|
|
|
|
|
|
|
class TestMaterialRequest(unittest.TestCase):
|
|
|
|
class TestMaterialRequest(unittest.TestCase):
|
|
|
|
@@ -15,8 +16,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
erpnext.set_perpetual_inventory(0)
|
|
|
|
erpnext.set_perpetual_inventory(0)
|
|
|
|
|
|
|
|
|
|
|
|
def test_make_purchase_order(self):
|
|
|
|
def test_make_purchase_order(self):
|
|
|
|
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mr = frappe.copy_doc(test_records[0]).insert()
|
|
|
|
mr = frappe.copy_doc(test_records[0]).insert()
|
|
|
|
|
|
|
|
|
|
|
|
self.assertRaises(frappe.ValidationError, make_purchase_order,
|
|
|
|
self.assertRaises(frappe.ValidationError, make_purchase_order,
|
|
|
|
@@ -30,8 +29,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
self.assertEqual(len(po.get("items")), len(mr.get("items")))
|
|
|
|
self.assertEqual(len(po.get("items")), len(mr.get("items")))
|
|
|
|
|
|
|
|
|
|
|
|
def test_make_supplier_quotation(self):
|
|
|
|
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()
|
|
|
|
mr = frappe.copy_doc(test_records[0]).insert()
|
|
|
|
|
|
|
|
|
|
|
|
self.assertRaises(frappe.ValidationError, make_supplier_quotation, mr.name)
|
|
|
|
self.assertRaises(frappe.ValidationError, make_supplier_quotation, mr.name)
|
|
|
|
@@ -45,12 +42,9 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_make_stock_entry(self):
|
|
|
|
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()
|
|
|
|
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.name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mr = frappe.get_doc("Material Request", mr.name)
|
|
|
|
mr = frappe.get_doc("Material Request", mr.name)
|
|
|
|
mr.material_request_type = "Material Transfer"
|
|
|
|
mr.material_request_type = "Material Transfer"
|
|
|
|
@@ -198,14 +192,7 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
mr.insert()
|
|
|
|
mr.insert()
|
|
|
|
mr.submit()
|
|
|
|
mr.submit()
|
|
|
|
|
|
|
|
|
|
|
|
# check if per complete is None
|
|
|
|
|
|
|
|
mr.load_from_db()
|
|
|
|
|
|
|
|
self.assertEqual(mr.per_ordered, 0)
|
|
|
|
|
|
|
|
self.assertEqual(mr.get("items")[0].ordered_qty, 0)
|
|
|
|
|
|
|
|
self.assertEqual(mr.get("items")[1].ordered_qty, 0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# map a purchase order
|
|
|
|
# map a purchase order
|
|
|
|
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
|
|
|
|
|
|
|
|
po_doc = make_purchase_order(mr.name)
|
|
|
|
po_doc = make_purchase_order(mr.name)
|
|
|
|
po_doc.supplier = "_Test Supplier"
|
|
|
|
po_doc.supplier = "_Test Supplier"
|
|
|
|
po_doc.transaction_date = "2013-07-07"
|
|
|
|
po_doc.transaction_date = "2013-07-07"
|
|
|
|
@@ -276,10 +263,8 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
|
|
|
|
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 - 54.0)
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 + 54.0)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 - 3.0)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 + 3.0)
|
|
|
|
|
|
|
|
|
|
|
|
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# map a stock entry
|
|
|
|
# map a stock entry
|
|
|
|
se_doc = make_stock_entry(mr.name)
|
|
|
|
se_doc = make_stock_entry(mr.name)
|
|
|
|
@@ -331,8 +316,8 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
|
|
|
|
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 - 27.0)
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 + 27.0)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 - 1.5)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 + 1.5)
|
|
|
|
|
|
|
|
|
|
|
|
# check if per complete is as expected for Stock Entry cancelled
|
|
|
|
# check if per complete is as expected for Stock Entry cancelled
|
|
|
|
se.cancel()
|
|
|
|
se.cancel()
|
|
|
|
@@ -344,8 +329,8 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
|
|
|
|
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 - 54.0)
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 + 54.0)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 - 3.0)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 + 3.0)
|
|
|
|
|
|
|
|
|
|
|
|
def test_completed_qty_for_over_transfer(self):
|
|
|
|
def test_completed_qty_for_over_transfer(self):
|
|
|
|
existing_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
existing_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
@@ -357,14 +342,7 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
mr.insert()
|
|
|
|
mr.insert()
|
|
|
|
mr.submit()
|
|
|
|
mr.submit()
|
|
|
|
|
|
|
|
|
|
|
|
# check if per complete is None
|
|
|
|
|
|
|
|
mr.load_from_db()
|
|
|
|
|
|
|
|
self.assertEqual(mr.per_ordered, 0)
|
|
|
|
|
|
|
|
self.assertEqual(mr.get("items")[0].ordered_qty, 0)
|
|
|
|
|
|
|
|
self.assertEqual(mr.get("items")[1].ordered_qty, 0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# map a stock entry
|
|
|
|
# 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 = make_stock_entry(mr.name)
|
|
|
|
se_doc.update({
|
|
|
|
se_doc.update({
|
|
|
|
@@ -425,8 +403,8 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item1 = self._get_requested_qty("_Test Item Home Desktop 100", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
current_requested_qty_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC")
|
|
|
|
|
|
|
|
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 - 54.0)
|
|
|
|
self.assertEqual(current_requested_qty_item1, existing_requested_qty_item1 + 54.0)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 - 3.0)
|
|
|
|
self.assertEqual(current_requested_qty_item2, existing_requested_qty_item2 + 3.0)
|
|
|
|
|
|
|
|
|
|
|
|
def test_incorrect_mapping_of_stock_entry(self):
|
|
|
|
def test_incorrect_mapping_of_stock_entry(self):
|
|
|
|
# submit material request of type Transfer
|
|
|
|
# submit material request of type Transfer
|
|
|
|
@@ -435,9 +413,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
mr.insert()
|
|
|
|
mr.insert()
|
|
|
|
mr.submit()
|
|
|
|
mr.submit()
|
|
|
|
|
|
|
|
|
|
|
|
# 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 = make_stock_entry(mr.name)
|
|
|
|
se_doc.update({
|
|
|
|
se_doc.update({
|
|
|
|
"posting_date": "2013-03-01",
|
|
|
|
"posting_date": "2013-03-01",
|
|
|
|
@@ -468,8 +443,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
mr.insert()
|
|
|
|
mr.insert()
|
|
|
|
mr.submit()
|
|
|
|
mr.submit()
|
|
|
|
|
|
|
|
|
|
|
|
# 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 = make_stock_entry(mr.name)
|
|
|
|
self.assertEqual(se_doc.get("items")[0].s_warehouse, "_Test Warehouse - _TC")
|
|
|
|
self.assertEqual(se_doc.get("items")[0].s_warehouse, "_Test Warehouse - _TC")
|
|
|
|
|
|
|
|
|
|
|
|
@@ -483,8 +456,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "indented_qty"))
|
|
|
|
return flt(frappe.db.get_value("Bin", {"item_code": item_code, "warehouse": warehouse}, "indented_qty"))
|
|
|
|
|
|
|
|
|
|
|
|
def test_make_stock_entry_for_material_issue(self):
|
|
|
|
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()
|
|
|
|
mr = frappe.copy_doc(test_records[0]).insert()
|
|
|
|
|
|
|
|
|
|
|
|
self.assertRaises(frappe.ValidationError, make_stock_entry,
|
|
|
|
self.assertRaises(frappe.ValidationError, make_stock_entry,
|
|
|
|
@@ -503,8 +474,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
return flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
|
|
|
|
return flt(frappe.db.get_value("Bin", {"item_code": "_Test Item Home Desktop 100",
|
|
|
|
"warehouse": "_Test Warehouse - _TC"}, "indented_qty"))
|
|
|
|
"warehouse": "_Test Warehouse - _TC"}, "indented_qty"))
|
|
|
|
|
|
|
|
|
|
|
|
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
existing_requested_qty = _get_requested_qty()
|
|
|
|
existing_requested_qty = _get_requested_qty()
|
|
|
|
|
|
|
|
|
|
|
|
mr = frappe.copy_doc(test_records[0])
|
|
|
|
mr = frappe.copy_doc(test_records[0])
|
|
|
|
@@ -594,8 +563,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_multi_uom_for_purchase(self):
|
|
|
|
def test_multi_uom_for_purchase(self):
|
|
|
|
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mr = frappe.copy_doc(test_records[0])
|
|
|
|
mr = frappe.copy_doc(test_records[0])
|
|
|
|
mr.material_request_type = 'Purchase'
|
|
|
|
mr.material_request_type = 'Purchase'
|
|
|
|
item = mr.items[0]
|
|
|
|
item = mr.items[0]
|
|
|
|
@@ -637,7 +604,6 @@ class TestMaterialRequest(unittest.TestCase):
|
|
|
|
self.assertEqual(mr.per_ordered, 100)
|
|
|
|
self.assertEqual(mr.per_ordered, 100)
|
|
|
|
|
|
|
|
|
|
|
|
def test_customer_provided_parts_mr(self):
|
|
|
|
def test_customer_provided_parts_mr(self):
|
|
|
|
from erpnext.stock.doctype.material_request.material_request import make_stock_entry
|
|
|
|
|
|
|
|
create_item('CUST-0987', is_customer_provided_item = 1, customer = '_Test Customer', is_purchase_item = 0)
|
|
|
|
create_item('CUST-0987', is_customer_provided_item = 1, customer = '_Test Customer', is_purchase_item = 0)
|
|
|
|
existing_requested_qty = self._get_requested_qty("_Test Customer", "_Test Warehouse - _TC")
|
|
|
|
existing_requested_qty = self._get_requested_qty("_Test Customer", "_Test Warehouse - _TC")
|
|
|
|
|
|
|
|
|
|
|
|
|