Beispiel #1
0
	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)
Beispiel #2
0
    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)
Beispiel #4
0
	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")
Beispiel #5
0
    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")))
Beispiel #9
0
    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)
Beispiel #13
0
	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)
Beispiel #14
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)
Beispiel #15
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)