diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py index 3cd285d045..caf3291534 100644 --- a/stock/doctype/stock_entry/test_stock_entry.py +++ b/stock/doctype/stock_entry/test_stock_entry.py @@ -160,7 +160,21 @@ class TestStockEntry(unittest.TestCase): self.assertEquals(expected_gl_entries[i][1], gle.debit) self.assertEquals(expected_gl_entries[i][2], gle.credit) - def test_sales_invoice_return_of_non_packing_item(self): + def _clear_stock(self): + webnotes.conn.sql("delete from `tabStock Ledger Entry`") + webnotes.conn.sql("""delete from `tabBin`""") + + def _insert_material_receipt(self): + self._clear_stock() + material_receipt = webnotes.bean(copy=test_records[0]) + material_receipt.insert() + material_receipt.submit() + + def _get_actual_qty(self): + return flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", + "warehouse": "_Test Warehouse"}, "actual_qty")) + + def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty): from stock.doctype.stock_entry.stock_entry import NotUpdateStockError from accounts.doctype.sales_invoice.test_sales_invoice \ @@ -174,39 +188,36 @@ class TestStockEntry(unittest.TestCase): se = webnotes.bean(copy=test_records[0]) se.doc.purpose = "Sales Return" se.doc.sales_invoice_no = si.doc.name - se.doclist[1].qty = 2.0 + se.doclist[1].qty = returned_qty + se.doclist[1].transfer_qty = returned_qty self.assertRaises(NotUpdateStockError, se.insert) - webnotes.conn.sql("delete from `tabStock Ledger Entry`") - webnotes.conn.sql("""delete from `tabBin`""") - material_receipt = webnotes.bean(copy=test_records[0]) - material_receipt.insert() - material_receipt.submit() + self._insert_material_receipt() # check currency available qty in bin - actual_qty_0 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", - "warehouse": "_Test Warehouse"}, "actual_qty")) + actual_qty_0 = self._get_actual_qty() # insert a pos invoice with update stock si = webnotes.bean(copy=sales_invoice_test_records[1]) si.doc.is_pos = si.doc.update_stock = 1 si.doclist[1].warehouse = "_Test Warehouse" + si.doclist[1].item_code = item_code si.insert() si.submit() # check available bin qty after invoice submission - actual_qty_1 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", - "warehouse": "_Test Warehouse"}, "actual_qty")) - self.assertEquals(actual_qty_0 - 5, actual_qty_1) + actual_qty_1 = self._get_actual_qty() + + self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1) # check if item is validated se = webnotes.bean(copy=test_records[0]) se.doc.purpose = "Sales Return" se.doc.sales_invoice_no = si.doc.name se.doc.posting_date = "2013-03-10" - se.doclist[1].item_code = "_Test Item Home Desktop 100" - se.doclist[1].qty = 2.0 - se.doclist[1].transfer_qty = 2.0 + se.doclist[1].item_code = "_Test Item Home Desktop 200" + se.doclist[1].qty = returned_qty + se.doclist[1].transfer_qty = returned_qty # check if stock entry gets submitted self.assertRaises(webnotes.DoesNotExistError, se.insert) @@ -216,68 +227,91 @@ class TestStockEntry(unittest.TestCase): se.doc.purpose = "Sales Return" se.doc.posting_date = "2013-03-10" se.doc.sales_invoice_no = si.doc.name - se.doclist[1].qty = 2.0 - se.doclist[1].transfer_qty = 2.0 + se.doclist[1].qty = returned_qty + se.doclist[1].transfer_qty = returned_qty + # in both cases item code remains _Test Item when returning se.insert() se.submit() # check if available qty is increased - actual_qty_2 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", - "warehouse": "_Test Warehouse"}, "actual_qty")) - self.assertEquals(actual_qty_1 + 2, actual_qty_2) + actual_qty_2 = self._get_actual_qty() + + self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2) + + def test_sales_invoice_return_of_non_packing_item(self): + self._test_sales_invoice_return("_Test Item", 5, 2) def test_sales_invoice_return_of_packing_item(self): - webnotes.conn.sql("delete from `tabStock Ledger Entry`") - webnotes.conn.sql("""delete from `tabBin`""") - material_receipt = webnotes.bean(copy=test_records[0]) - material_receipt.insert() - material_receipt.submit() + self._test_sales_invoice_return("_Test Sales BOM Item", 25, 20) - # check currency available qty in bin - actual_qty_0 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", - "warehouse": "_Test Warehouse"}, "actual_qty")) + def _test_delivery_note_return(self, item_code, delivered_qty, returned_qty): + self._insert_material_receipt() - from accounts.doctype.sales_invoice.test_sales_invoice \ - import test_records as sales_invoice_test_records - - # insert a pos invoice with update stock - si = webnotes.bean(copy=sales_invoice_test_records[1]) - si.doc.is_pos = si.doc.update_stock = 1 - si.doclist[1].item_code = "_Test Sales BOM Item" - si.doclist[1].warehouse = "_Test Warehouse" - si.insert() - si.submit() + actual_qty_0 = self._get_actual_qty() - # check available bin qty after invoice submission - actual_qty_1 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", - "warehouse": "_Test Warehouse"}, "actual_qty")) - self.assertEquals(actual_qty_0 - 25, actual_qty_1) + # insert and submit delivery note + from stock.doctype.delivery_note.test_delivery_note \ + import test_records as delivery_note_test_records + dn = webnotes.bean(copy=delivery_note_test_records[0]) + dn.doclist[1].item_code = item_code + dn.insert() + dn.submit() + actual_qty_1 = self._get_actual_qty() + + self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1) + + # insert and submit stock entry for sales return se = webnotes.bean(copy=test_records[0]) se.doc.purpose = "Sales Return" - se.doc.posting_date = "2013-03-10" - se.doc.sales_invoice_no = si.doc.name - se.doclist[1].qty = 20.0 - se.doclist[1].transfer_qty = 20.0 - se.insert() + se.doc.delivery_note_no = dn.doc.name + se.doc.posting_date = "2013-03-01" + se.doclist[1].qty = se.doclist[1].transfer_qty = returned_qty + se.insert() se.submit() - # check if available qty is increased - actual_qty_2 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item", - "warehouse": "_Test Warehouse"}, "actual_qty")) - self.assertEquals(actual_qty_1 + 20, actual_qty_2) + actual_qty_2 = self._get_actual_qty() + self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2) + def test_delivery_note_return_of_non_packing_item(self): + self._test_delivery_note_return("_Test Item", 5, 2) + + def test_delivery_note_return_of_packing_item(self): + self._test_delivery_note_return("_Test Sales BOM Item", 25, 20) + + def test_purchase_receipt_return(self): + self._clear_stock() + + actual_qty_0 = self._get_actual_qty() + + from stock.doctype.purchase_receipt.test_purchase_receipt \ + import test_records as purchase_receipt_test_records + + # submit purchase receipt + pr = webnotes.bean(copy=purchase_receipt_test_records[0]) + pr.insert() + pr.submit() + + actual_qty_1 = self._get_actual_qty() + + self.assertEquals(actual_qty_0 + 10, actual_qty_1) + + # submit purchase return + se = webnotes.bean(copy=test_records[0]) + se.doc.purpose = "Purchase Return" + se.doc.purchase_receipt_no = pr.doc.name + se.doc.posting_date = "2013-03-01" + se.doclist[1].qty = se.doclist[1].transfer_qty = 5 + se.doclist[1].s_warehouse = "_Test Warehouse" + se.insert() + se.submit() + + actual_qty_2 = self._get_actual_qty() + + self.assertEquals(actual_qty_1 - 5, actual_qty_2) - # def test_delivery_note_return_of_non_packing_item(self): - # pass - # - # def test_delivery_note_return_of_packing_item(self): - # pass - # - # def test_purchase_receipt_return(self): - # pass test_records = [ [