def test_completed_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("items")[0].qty = 54.0 se_doc.insert() se_doc.submit() # check if per complete is as expected mr.load_from_db() self.assertEquals(mr.get("items")[0].ordered_qty, 54.0) self.assertEquals(mr.get("items")[1].ordered_qty, 3.0) #testing bin requested qty after issuing stock against material request self.assertEquals(_get_requested_qty(), existing_requested_qty)
def test_incorrect_mapping_of_stock_entry(self): # submit material request of type Purchase mr = frappe.copy_doc(test_records[0]) mr.material_request_type = "Transfer" mr.insert() 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.update({ "posting_date": "2013-03-01", "posting_time": "00:00", "fiscal_year": "_Test Fiscal Year 2013", }) se_doc.get("mtn_details")[0].update({ "qty": 60.0, "transfer_qty": 60.0, "s_warehouse": "_Test Warehouse - _TC", "t_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) se_doc.get("mtn_details")[1].update({ "qty": 3.0, "transfer_qty": 3.0, "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_incorrect_mapping_of_stock_entry(self): # submit material request of type Purchase mr = frappe.copy_doc(test_records[0]) mr.material_request_type = "Transfer" mr.insert() 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.update({ "posting_date": "2013-03-01", "posting_time": "00:00", "fiscal_year": "_Test Fiscal Year 2013", }) se_doc.get("mtn_details")[0].update({ "qty": 60.0, "transfer_qty": 60.0, "s_warehouse": "_Test Warehouse - _TC", "t_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) se_doc.get("mtn_details")[1].update({ "qty": 3.0, "transfer_qty": 3.0, "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_incorrect_mapping_of_stock_entry(self): # submit material request of type Transfer mr = frappe.copy_doc(test_records[0]) mr.material_request_type = "Material Transfer" mr.insert() mr.submit() se_doc = make_stock_entry(mr.name) se_doc.update( { "posting_date": "2013-03-01", "posting_time": "00:00", "fiscal_year": "_Test Fiscal Year 2013", } ) se_doc.get("items")[0].update( { "qty": 60.0, "transfer_qty": 60.0, "s_warehouse": "_Test Warehouse - _TC", "t_warehouse": "_Test Warehouse 1 - _TC", "basic_rate": 1.0, } ) se_doc.get("items")[1].update( { "item_code": "_Test Item Home Desktop 100", "qty": 3.0, "transfer_qty": 3.0, "s_warehouse": "_Test Warehouse 1 - _TC", "basic_rate": 1.0, } ) # check for stopped status of Material Request se = frappe.copy_doc(se_doc) self.assertRaises(frappe.MappingMismatchError, se.insert) # submit material request of type Transfer mr = frappe.copy_doc(test_records[0]) mr.material_request_type = "Material Issue" mr.insert() mr.submit() se_doc = make_stock_entry(mr.name) self.assertEqual(se_doc.get("items")[0].s_warehouse, "_Test Warehouse - _TC")
def test_over_transfer_qty_allowance(self): mr = frappe.new_doc("Material Request") mr.company = "_Test Company" mr.scheduled_date = today() mr.append( "items", { "item_code": "_Test FG Item", "item_name": "_Test FG Item", "qty": 10, "schedule_date": today(), "uom": "_Test UOM 1", "warehouse": "_Test Warehouse - _TC", }, ) mr.material_request_type = "Material Transfer" mr.insert() mr.submit() frappe.db.set_value("Stock Settings", None, "mr_qty_allowance", 20) # map a stock entry se_doc = make_stock_entry(mr.name) se_doc.update({ "posting_date": today(), "posting_time": "00:00", }) se_doc.get("items")[0].update({ "qty": 13, "transfer_qty": 12.0, "s_warehouse": "_Test Warehouse - _TC", "t_warehouse": "_Test Warehouse 1 - _TC", "basic_rate": 1.0, }) # make available the qty in _Test Warehouse 1 before transfer sr = frappe.new_doc("Stock Reconciliation") sr.company = "_Test Company" sr.purpose = "Opening Stock" sr.append( "items", { "item_code": "_Test FG Item", "warehouse": "_Test Warehouse - _TC", "qty": 20, "valuation_rate": 0.01, }, ) sr.insert() sr.submit() se = frappe.copy_doc(se_doc) se.insert() self.assertRaises(frappe.ValidationError) se.items[0].qty = 12 se.submit()
def test_make_stock_entry(self): 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 Transfer" mr.submit() se = make_stock_entry(mr.name) self.assertEqual(se.doctype, "Stock Entry") self.assertEqual(len(se.get("items")), len(mr.get("items")))
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.assertEqual(se.doctype, "Stock Entry") self.assertEqual(len(se.get("items")), len(mr.get("items")))
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("items")), len(mr.get("items")))
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, 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.doctype, "Stock Entry") self.assertEquals(len(se.get("mtn_details")), len(mr.get("indent_details")))
def test_make_stock_entry(self): from erpnext.stock.doctype.material_request.material_request import make_stock_entry mr = frappe.bean(copy=test_records[0]).insert() self.assertRaises(frappe.ValidationError, make_stock_entry, mr.doc.name) mr = frappe.bean("Material Request", mr.doc.name) mr.doc.material_request_type = "Transfer" mr.submit() se = make_stock_entry(mr.doc.name) self.assertEquals(se[0]["doctype"], "Stock Entry") self.assertEquals(len(se), len(mr.doclist))
def test_customer_provided_parts_mr(self): 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") mr = make_material_request(item_code='CUST-0987', material_request_type='Customer Provided') se = make_stock_entry(mr.name) se.insert() se.submit() self.assertEqual(se.get("items")[0].amount, 0) self.assertEqual(se.get("items")[0].material_request, mr.name) mr = frappe.get_doc("Material Request", mr.name) mr.submit() current_requested_qty = self._get_requested_qty("_Test Customer", "_Test Warehouse - _TC") self.assertEqual(mr.per_ordered, 100) self.assertEqual(existing_requested_qty, current_requested_qty)
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) mr = make_material_request(item_code='CUST-0987', material_request_type='Customer Provided') se = make_stock_entry(mr.name) se.insert() se.submit() self.assertEqual(se.get("items")[0].amount, 0) self.assertEqual(se.get("items")[0].material_request, mr.name) mr = frappe.get_doc("Material Request", mr.name) mr.submit() self.assertEqual(mr.per_ordered, 100)
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_item2 = self._get_requested_qty("_Test Item Home Desktop 200", "_Test Warehouse - _TC") # submit material request of type Purchase mr = frappe.copy_doc(test_records[0]) mr.material_request_type = "Material Transfer" mr.insert() mr.submit() # check if per complete is None mr.load_from_db() self.assertEquals(mr.per_ordered, 0) self.assertEquals(mr.get("items")[0].ordered_qty, 0) self.assertEquals(mr.get("items")[1].ordered_qty, 0) # 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", "posting_time": "00:00", "fiscal_year": "_Test Fiscal Year 2013", }) se_doc.get("items")[0].update({ "qty": 54.0, "transfer_qty": 54.0, "s_warehouse": "_Test Warehouse 1 - _TC", "basic_rate": 1.0 }) se_doc.get("items")[1].update({ "qty": 3.0, "transfer_qty": 3.0, "s_warehouse": "_Test Warehouse 1 - _TC", "basic_rate": 1.0 }) # 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.update_status('Stopped') self.assertRaises(frappe.InvalidStatusError, se.submit) self.assertRaises(frappe.InvalidStatusError, se.cancel) 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.assertEquals(mr.per_ordered, 100) self.assertEquals(mr.get("items")[0].ordered_qty, 54.0) self.assertEquals(mr.get("items")[1].ordered_qty, 3.0) 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") self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1) self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2) # check if per complete is as expected for Stock Entry cancelled se.cancel() mr.load_from_db() self.assertEquals(mr.per_ordered, 0) self.assertEquals(mr.get("items")[0].ordered_qty, 0) self.assertEquals(mr.get("items")[1].ordered_qty, 0) 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") self.assertEquals(current_requested_qty_item1, existing_requested_qty_item1 + 54.0) self.assertEquals(current_requested_qty_item2, existing_requested_qty_item2 + 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" mr.insert() mr.submit() # check if per complete is None self.assertEquals(mr.per_ordered, None) self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0) self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0) self._test_requested_qty(54.0, 3.0) # 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", "posting_time": "00:00", "fiscal_year": "_Test Fiscal Year 2013", }) se_doc.get("mtn_details")[0].update({ "qty": 60.0, "transfer_qty": 60.0, "s_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) se_doc.get("mtn_details")[1].update({ "qty": 3.0, "transfer_qty": 3.0, "s_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) # 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.update_status('Stopped') self.assertRaises(frappe.InvalidStatusError, se.submit) self.assertRaises(frappe.InvalidStatusError, se.cancel) 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.assertEquals(mr.per_ordered, 100) self.assertEquals(mr.get("indent_details")[0].ordered_qty, 60.0) self.assertEquals(mr.get("indent_details")[1].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.assertEquals(mr.per_ordered, 0) self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0) self.assertEquals(mr.get("indent_details")[1].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" mr.insert() mr.submit() # check if per complete is None self.assertEquals(mr.per_ordered, None) self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0) self.assertEquals(mr.get("indent_details")[1].ordered_qty, 0) self._test_requested_qty(54.0, 3.0) # 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", "posting_time": "00:00", "fiscal_year": "_Test Fiscal Year 2013", }) se_doc.get("mtn_details")[0].update({ "qty": 60.0, "transfer_qty": 60.0, "s_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) se_doc.get("mtn_details")[1].update({ "qty": 3.0, "transfer_qty": 3.0, "s_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) # 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.update_status('Stopped') self.assertRaises(frappe.InvalidStatusError, se.submit) self.assertRaises(frappe.InvalidStatusError, se.cancel) 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.assertEquals(mr.per_ordered, 100) self.assertEquals(mr.get("indent_details")[0].ordered_qty, 60.0) self.assertEquals(mr.get("indent_details")[1].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.assertEquals(mr.per_ordered, 0) self.assertEquals(mr.get("indent_details")[0].ordered_qty, 0) self.assertEquals(mr.get("indent_details")[1].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.bean(copy=test_records[0]) mr.doc.material_request_type = "Transfer" mr.insert() mr.submit() # check if per complete is None self._test_expected(mr.doclist, [{"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 se_doclist = make_stock_entry(mr.doc.name) se_doclist[0].update({ "posting_date": "2013-03-01", "posting_time": "00:00", "fiscal_year": "_Test Fiscal Year 2013", }) se_doclist[1].update({ "qty": 60.0, "transfer_qty": 60.0, "s_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) se_doclist[2].update({ "qty": 3.0, "transfer_qty": 3.0, "s_warehouse": "_Test Warehouse 1 - _TC", "incoming_rate": 1.0 }) # 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.bean(copy=se_doclist) se.insert() mr.obj.update_status('Stopped') self.assertRaises(frappe.ValidationError, se.submit) self.assertRaises(frappe.ValidationError, se.cancel) mr.obj.update_status('Submitted') se = frappe.bean(copy=se_doclist) se.insert() se.submit() # check if per complete is as expected mr.load_from_db() self._test_expected(mr.doclist, [{"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.doclist, [{"per_ordered": 0}, {"ordered_qty": 0}, {"ordered_qty": 0}]) self._test_requested_qty(54.0, 3.0)