Exemple #1
0
	def test_sales_invoice_gl_entry_without_aii(self):
		self.clear_stock_account_balance()
		set_perpetual_inventory(0)
		si = webnotes.bean(copy=test_records[1])
		si.insert()
		si.submit()
		
		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
			order by account asc""", si.doc.name, as_dict=1)
		
		self.assertTrue(gl_entries)
		
		expected_values = sorted([
			[si.doc.debit_to, 630.0, 0.0],
			[test_records[1][1]["income_account"], 0.0, 500.0],
			[test_records[1][2]["account_head"], 0.0, 80.0],
			[test_records[1][3]["account_head"], 0.0, 50.0],
		])
		
		for i, gle in enumerate(gl_entries):
			self.assertEquals(expected_values[i][0], gle.account)
			self.assertEquals(expected_values[i][1], gle.debit)
			self.assertEquals(expected_values[i][2], gle.credit)
			
		# cancel
		si.cancel()
		
		gle = webnotes.conn.sql("""select * from `tabGL Entry` 
			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
		
		self.assertFalse(gle)
	def test_gl_entries_without_auto_accounting_for_stock(self):
		set_perpetual_inventory(0)
		self.assertTrue(not cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")))
		
		wrapper = webnotes.bean(copy=test_records[0])
		wrapper.run_method("calculate_taxes_and_totals")
		wrapper.insert()
		wrapper.submit()
		wrapper.load_from_db()
		dl = wrapper.doclist
		
		expected_gl_entries = {
			"_Test Supplier - _TC": [0, 1512.30],
			"_Test Account Cost for Goods Sold - _TC": [1250, 0],
			"_Test Account Shipping Charges - _TC": [100, 0],
			"_Test Account Excise Duty - _TC": [140, 0],
			"_Test Account Education Cess - _TC": [2.8, 0],
			"_Test Account S&H Education Cess - _TC": [1.4, 0],
			"_Test Account CST - _TC": [29.88, 0],
			"_Test Account VAT - _TC": [156.25, 0],
			"_Test Account Discount - _TC": [0, 168.03],
		}
		gl_entries = webnotes.conn.sql("""select account, debit, credit from `tabGL Entry`
			where voucher_type = 'Purchase Invoice' and voucher_no = %s""", dl[0].name, as_dict=1)
		for d in gl_entries:
			self.assertEqual([d.debit, d.credit], expected_gl_entries.get(d.account))
Exemple #3
0
    def test_delivery_note_no_gl_entry(self):
        self.clear_stock_account_balance()
        set_perpetual_inventory(0)
        self.assertEqual(
            cint(
                webnotes.defaults.get_global_default(
                    "auto_accounting_for_stock")), 0)

        _insert_purchase_receipt()

        dn = webnotes.bean(copy=test_records[0])
        dn.insert()
        dn.submit()

        stock_value, stock_value_difference = webnotes.conn.get_value(
            "Stock Ledger Entry", {
                "voucher_type": "Delivery Note",
                "voucher_no": dn.doc.name,
                "item_code": "_Test Item"
            }, ["stock_value", "stock_value_difference"])
        self.assertEqual(stock_value, 0)
        self.assertEqual(stock_value_difference, -375)

        gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Delivery Note' and voucher_no=%s
			order by account desc""",
                                       dn.doc.name,
                                       as_dict=1)

        self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
    def test_sales_invoice_gl_entry_with_aii_non_stock_item(self):
        self.clear_stock_account_balance()
        set_perpetual_inventory()
        si_copy = webnotes.copy_doclist(test_records[1])
        si_copy[1]["item_code"] = "_Test Non Stock Item"
        si = webnotes.bean(si_copy)
        si.insert()
        si.submit()

        gl_entries = webnotes.conn.sql(
            """select account, debit, credit
			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
			order by account asc""",
            si.doc.name,
            as_dict=1,
        )
        self.assertTrue(gl_entries)

        expected_values = sorted(
            [
                [si.doc.debit_to, 630.0, 0.0],
                [test_records[1][1]["income_account"], 0.0, 500.0],
                [test_records[1][2]["account_head"], 0.0, 80.0],
                [test_records[1][3]["account_head"], 0.0, 50.0],
            ]
        )
        for i, gle in enumerate(gl_entries):
            self.assertEquals(expected_values[i][0], gle.account)
            self.assertEquals(expected_values[i][1], gle.debit)
            self.assertEquals(expected_values[i][2], gle.credit)

        set_perpetual_inventory(0)
	def test_material_issue_gl_entry(self):
		self._clear_stock_account_balance()
		set_perpetual_inventory()
		
		self._insert_material_receipt()
		
		mi = webnotes.bean(copy=test_records[1])
		mi.insert()
		mi.submit()
		
		self.check_stock_ledger_entries("Stock Entry", mi.doc.name, 
			[["_Test Item", "_Test Warehouse - _TC", -40.0]])
		
		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse", 
			"master_name": mi.doclist[1].s_warehouse})

		self.check_gl_entries("Stock Entry", mi.doc.name, 
			sorted([
				[stock_in_hand_account, 0.0, 4000.0], 
				["Stock Adjustment - _TC", 4000.0, 0.0]
			])
		)
		
		mi.cancel()
		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))			
		
		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))
			
		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse, 
			"item_code": mi.doclist[1].item_code}, "actual_qty"), 50)
			
		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse, 
			"item_code": mi.doclist[1].item_code}, "stock_value"), 5000)
	def test_planned_qty(self):
		set_perpetual_inventory(0)
		webnotes.conn.sql("delete from `tabStock Ledger Entry`")
		webnotes.conn.sql("""delete from `tabBin`""")
		webnotes.conn.sql("""delete from `tabGL Entry`""")
		
		pro_bean = webnotes.bean(copy = test_records[0])
		pro_bean.insert()
		pro_bean.submit()
		
		from stock.doctype.stock_entry.test_stock_entry import test_records as se_test_records
		mr1 = webnotes.bean(copy = se_test_records[0])
		mr1.insert()
		mr1.submit()
		
		mr2 = webnotes.bean(copy = se_test_records[0])
		mr2.doclist[1].item_code = "_Test Item Home Desktop 100"
		mr2.insert()
		mr2.submit()
		
		stock_entry = make_stock_entry(pro_bean.doc.name, "Manufacture/Repack")
		stock_entry = webnotes.bean(stock_entry)
		
		stock_entry.doc.fg_completed_qty = 4
		stock_entry.doc.posting_date = "2013-05-12"
		stock_entry.doc.fiscal_year = "_Test Fiscal Year 2013"
		stock_entry.run_method("get_items")
		stock_entry.submit()
		
		self.assertEqual(webnotes.conn.get_value("Production Order", pro_bean.doc.name, 
			"produced_qty"), 4)
		self.assertEqual(webnotes.conn.get_value("Bin", {"item_code": "_Test FG Item", 
			"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty"), 6)
			
		return pro_bean.doc.name
    def test_material_receipt_gl_entry(self):
        self._clear_stock_account_balance()
        set_perpetual_inventory()

        mr = webnotes.bean(copy=test_records[0])
        mr.insert()
        mr.submit()

        stock_in_hand_account = webnotes.conn.get_value(
            "Account", {
                "account_type": "Warehouse",
                "master_name": mr.doclist[1].t_warehouse
            })

        self.check_stock_ledger_entries(
            "Stock Entry", mr.doc.name,
            [["_Test Item", "_Test Warehouse - _TC", 50.0]])

        self.check_gl_entries(
            "Stock Entry", mr.doc.name,
            sorted([[stock_in_hand_account, 5000.0, 0.0],
                    ["Stock Adjustment - _TC", 0.0, 5000.0]]))

        mr.cancel()

        self.assertFalse(
            webnotes.conn.sql(
                """select * from `tabStock Ledger Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))

        self.assertFalse(
            webnotes.conn.sql(
                """select * from `tabGL Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
Exemple #8
0
    def test_delivery_note_no_gl_entry(self):
        self.clear_stock_account_balance()
        set_perpetual_inventory(0)
        self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 0)

        self._insert_purchase_receipt()

        dn = webnotes.bean(copy=test_records[0])
        dn.insert()
        dn.submit()

        stock_value, stock_value_difference = webnotes.conn.get_value(
            "Stock Ledger Entry",
            {"voucher_type": "Delivery Note", "voucher_no": dn.doc.name, "item_code": "_Test Item"},
            ["stock_value", "stock_value_difference"],
        )
        self.assertEqual(stock_value, 0)
        self.assertEqual(stock_value_difference, -375)

        gl_entries = webnotes.conn.sql(
            """select account, debit, credit
			from `tabGL Entry` where voucher_type='Delivery Note' and voucher_no=%s
			order by account desc""",
            dn.doc.name,
            as_dict=1,
        )

        self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
	def test_gl_entries_with_auto_accounting_for_stock(self):
		set_perpetual_inventory(1)
		self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 1)
		
		pi = webnotes.bean(copy=test_records[1])
		pi.run_method("calculate_taxes_and_totals")
		pi.insert()
		pi.submit()
		
		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
			order by account asc""", pi.doc.name, as_dict=1)
		self.assertTrue(gl_entries)
		
		expected_values = sorted([
			["_Test Supplier - _TC", 0, 720],
			["Stock Received But Not Billed - _TC", 750.0, 0],
			["_Test Account Shipping Charges - _TC", 100.0, 0],
			["_Test Account VAT - _TC", 120.0, 0],
			["Expenses Included In Valuation - _TC", 0, 250.0],
		])
		
		for i, gle in enumerate(gl_entries):
			self.assertEquals(expected_values[i][0], gle.account)
			self.assertEquals(expected_values[i][1], gle.debit)
			self.assertEquals(expected_values[i][2], gle.credit)
		
		set_perpetual_inventory(0)
	def test_warehouse_user(self):
		set_perpetual_inventory(0)
		from stock.utils import UserNotAllowedForWarehouse

		webnotes.bean("Profile", "*****@*****.**").get_controller()\
			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")

		webnotes.bean("Profile", "*****@*****.**").get_controller()\
			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
		
		webnotes.session.user = "******"
		st1 = webnotes.bean(copy=test_records[0])
		st1.doc.company = "_Test Company 1"
		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
		st1.insert()
		self.assertRaises(UserNotAllowedForWarehouse, st1.submit)

		webnotes.session.user = "******"
		st1 = webnotes.bean(copy=test_records[0])
		st1.doc.company = "_Test Company 1"
		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
		st1.insert()
		st1.submit()
		
		webnotes.session.user = "******"
Exemple #11
0
    def test_delivery_note_gl_entry_packing_item(self):
        self.clear_stock_account_balance()
        set_perpetual_inventory()

        self._insert_purchase_receipt()
        self._insert_purchase_receipt("_Test Item Home Desktop 100")

        dn = webnotes.bean(copy=test_records[0])
        dn.doclist[1].item_code = "_Test Sales BOM Item"
        dn.doclist[1].qty = 1

        stock_in_hand_account = webnotes.conn.get_value("Account", {"master_name": dn.doclist[1].warehouse})

        from accounts.utils import get_balance_on

        prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)

        dn.insert()
        dn.submit()

        gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
        self.assertTrue(gl_entries)

        expected_values = {stock_in_hand_account: [0.0, 525], "Cost of Goods Sold - _TC": [525.0, 0.0]}
        for i, gle in enumerate(gl_entries):
            self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))

            # check stock in hand balance
        bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
        self.assertEquals(bal, prev_bal - 525.0)

        dn.cancel()
        self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))

        set_perpetual_inventory(0)
	def test_material_receipt_gl_entry(self):
		self._clear_stock_account_balance()
		set_perpetual_inventory()
		
		mr = webnotes.bean(copy=test_records[0])
		mr.insert()
		mr.submit()
		
		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse", 
			"master_name": mr.doclist[1].t_warehouse})
		
		self.check_stock_ledger_entries("Stock Entry", mr.doc.name, 
			[["_Test Item", "_Test Warehouse - _TC", 50.0]])
			
		self.check_gl_entries("Stock Entry", mr.doc.name, 
			sorted([
				[stock_in_hand_account, 5000.0, 0.0], 
				["Stock Adjustment - _TC", 0.0, 5000.0]
			])
		)
		
		mr.cancel()
		
		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))			
		
		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""", mr.doc.name))
Exemple #13
0
    def test_repack_no_change_in_valuation(self):
        self._clear_stock_account_balance()
        set_perpetual_inventory()

        self._insert_material_receipt()

        repack = webnotes.bean(copy=test_records[3])
        repack.insert()
        repack.submit()

        self.check_stock_ledger_entries(
            "Stock Entry",
            repack.doc.name,
            [
                ["_Test Item", "_Test Warehouse - _TC", -50.0],
                ["_Test Item Home Desktop 100", "_Test Warehouse - _TC", 1],
            ],
        )

        gl_entries = webnotes.conn.sql(
            """select account, debit, credit
			from `tabGL Entry` where voucher_type='Stock Entry' and voucher_no=%s
			order by account desc""",
            repack.doc.name,
            as_dict=1,
        )
        self.assertFalse(gl_entries)

        set_perpetual_inventory(0)
Exemple #14
0
	def test_material_issue_gl_entry(self):
		self._clear_stock_account_balance()
		set_perpetual_inventory()

		self._insert_material_receipt()

		mi = webnotes.bean(copy=test_records[1])
		mi.insert()
		mi.submit()

		self.check_stock_ledger_entries("Stock Entry", mi.doc.name,
			[["_Test Item", "_Test Warehouse - _TC", -40.0]])

		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse",
			"master_name": mi.doclist[1].s_warehouse})

		self.check_gl_entries("Stock Entry", mi.doc.name,
			sorted([
				[stock_in_hand_account, 0.0, 4000.0],
				["Stock Adjustment - _TC", 4000.0, 0.0]
			])
		)

		mi.cancel()
		self.assertFalse(webnotes.conn.sql("""select * from `tabStock Ledger Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))

		self.assertFalse(webnotes.conn.sql("""select * from `tabGL Entry`
			where voucher_type='Stock Entry' and voucher_no=%s""", mi.doc.name))

		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
			"item_code": mi.doclist[1].item_code}, "actual_qty"), 50)

		self.assertEquals(webnotes.conn.get_value("Bin", {"warehouse": mi.doclist[1].s_warehouse,
			"item_code": mi.doclist[1].item_code}, "stock_value"), 5000)
	def test_gl_entries_with_aia_for_non_stock_items(self):
		set_perpetual_inventory()
		self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 1)
		
		pi = webnotes.bean(copy=test_records[1])
		pi.doclist[1].item_code = "_Test Non Stock Item"
		pi.doclist[1].expense_head = "_Test Account Cost for Goods Sold - _TC"
		pi.doclist.pop(2)
		pi.doclist.pop(3)
		pi.run_method("calculate_taxes_and_totals")
		pi.insert()
		pi.submit()
		
		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
			order by account asc""", pi.doc.name, as_dict=1)
		self.assertTrue(gl_entries)
		
		expected_values = sorted([
			["_Test Supplier - _TC", 0, 620],
			["_Test Account Cost for Goods Sold - _TC", 500.0, 0],
			["_Test Account VAT - _TC", 120.0, 0],
		])
		
		for i, gle in enumerate(gl_entries):
			self.assertEquals(expected_values[i][0], gle.account)
			self.assertEquals(expected_values[i][1], gle.debit)
			self.assertEquals(expected_values[i][2], gle.credit)
		set_perpetual_inventory(0)
    def test_sales_invoice_gl_entry_with_aii_non_stock_item(self):
        self.clear_stock_account_balance()
        set_perpetual_inventory()
        si_copy = webnotes.copy_doclist(test_records[1])
        si_copy[1]["item_code"] = "_Test Non Stock Item"
        si = webnotes.bean(si_copy)
        si.insert()
        si.submit()

        gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
			order by account asc""",
                                       si.doc.name,
                                       as_dict=1)
        self.assertTrue(gl_entries)

        expected_values = sorted([
            [si.doc.debit_to, 630.0, 0.0],
            [test_records[1][1]["income_account"], 0.0, 500.0],
            [test_records[1][2]["account_head"], 0.0, 80.0],
            [test_records[1][3]["account_head"], 0.0, 50.0],
        ])
        for i, gle in enumerate(gl_entries):
            self.assertEquals(expected_values[i][0], gle.account)
            self.assertEquals(expected_values[i][1], gle.debit)
            self.assertEquals(expected_values[i][2], gle.credit)

        set_perpetual_inventory(0)
Exemple #17
0
	def test_pos_gl_entry_with_aii(self):
		self.clear_stock_account_balance()
		set_perpetual_inventory()
		
		self._insert_purchase_receipt()
		self._insert_pos_settings()
		
		pos = webnotes.copy_doclist(test_records[1])
		pos[0]["is_pos"] = 1
		pos[0]["update_stock"] = 1
		pos[0]["posting_time"] = "12:05"
		pos[0]["cash_bank_account"] = "_Test Account Bank Account - _TC"
		pos[0]["paid_amount"] = 600.0

		si = webnotes.bean(copy=pos)
		si.insert()
		si.submit()
		
		# check stock ledger entries
		sle = webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
			where voucher_type = 'Sales Invoice' and voucher_no = %s""", 
			si.doc.name, as_dict=1)[0]
		self.assertTrue(sle)
		self.assertEquals([sle.item_code, sle.warehouse, sle.actual_qty], 
			["_Test Item", "_Test Warehouse - _TC", -1.0])
		
		# check gl entries
		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
			order by account asc, debit asc""", si.doc.name, as_dict=1)
		self.assertTrue(gl_entries)
		# print gl_entries
		
		stock_in_hand = webnotes.conn.get_value("Account", {"master_name": "_Test Warehouse - _TC"})
				
		expected_gl_entries = sorted([
			[si.doc.debit_to, 630.0, 0.0],
			[pos[1]["income_account"], 0.0, 500.0],
			[pos[2]["account_head"], 0.0, 80.0],
			[pos[3]["account_head"], 0.0, 50.0],
			[stock_in_hand, 0.0, 75.0],
			[pos[1]["expense_account"], 75.0, 0.0],
			[si.doc.debit_to, 0.0, 600.0],
			["_Test Account Bank Account - _TC", 600.0, 0.0]
		])
		for i, gle in enumerate(gl_entries):
			self.assertEquals(expected_gl_entries[i][0], gle.account)
			self.assertEquals(expected_gl_entries[i][1], gle.debit)
			self.assertEquals(expected_gl_entries[i][2], gle.credit)
		
		si.cancel()
		gle = webnotes.conn.sql("""select * from `tabGL Entry` 
			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
		
		self.assertFalse(gle)
		
		self.assertFalse(get_stock_and_account_difference([stock_in_hand]))
		
		set_perpetual_inventory(0)
Exemple #18
0
	def test_pos_gl_entry_with_aii(self):
		self.clear_stock_account_balance()
		set_perpetual_inventory()
		
		self._insert_purchase_receipt()
		self._insert_pos_settings()
		
		pos = webnotes.copy_doclist(test_records[1])
		pos[0]["is_pos"] = 1
		pos[0]["update_stock"] = 1
		pos[0]["posting_time"] = "12:05"
		pos[0]["cash_bank_account"] = "_Test Account Bank Account - _TC"
		pos[0]["paid_amount"] = 600.0

		si = webnotes.bean(copy=pos)
		si.insert()
		si.submit()
		
		# check stock ledger entries
		sle = webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
			where voucher_type = 'Sales Invoice' and voucher_no = %s""", 
			si.doc.name, as_dict=1)[0]
		self.assertTrue(sle)
		self.assertEquals([sle.item_code, sle.warehouse, sle.actual_qty], 
			["_Test Item", "_Test Warehouse - _TC", -1.0])
		
		# check gl entries
		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
			order by account asc, debit asc""", si.doc.name, as_dict=1)
		self.assertTrue(gl_entries)
		# print gl_entries
		
		stock_in_hand = webnotes.conn.get_value("Account", {"master_name": "_Test Warehouse - _TC"})
				
		expected_gl_entries = sorted([
			[si.doc.debit_to, 630.0, 0.0],
			[pos[1]["income_account"], 0.0, 500.0],
			[pos[2]["account_head"], 0.0, 80.0],
			[pos[3]["account_head"], 0.0, 50.0],
			[stock_in_hand, 0.0, 75.0],
			[pos[1]["expense_account"], 75.0, 0.0],
			[si.doc.debit_to, 0.0, 600.0],
			["_Test Account Bank Account - _TC", 600.0, 0.0]
		])
		for i, gle in enumerate(gl_entries):
			self.assertEquals(expected_gl_entries[i][0], gle.account)
			self.assertEquals(expected_gl_entries[i][1], gle.debit)
			self.assertEquals(expected_gl_entries[i][2], gle.credit)
		
		si.cancel()
		gle = webnotes.conn.sql("""select * from `tabGL Entry` 
			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
		
		self.assertFalse(gle)
		
		self.assertFalse(get_stock_and_account_difference([stock_in_hand]))
		
		set_perpetual_inventory(0)
Exemple #19
0
	def test_si_gl_entry_with_aii_and_update_stock_with_warehouse_but_no_account(self):
		self.clear_stock_account_balance()
		set_perpetual_inventory()
		webnotes.delete_doc("Account", "_Test Warehouse No Account - _TC")
		
		# insert purchase receipt
		from stock.doctype.purchase_receipt.test_purchase_receipt import test_records \
			as pr_test_records
		pr = webnotes.bean(copy=pr_test_records[0])
		pr.doc.naming_series = "_T-Purchase Receipt-"
		pr.doclist[1].warehouse = "_Test Warehouse No Account - _TC"
		pr.run_method("calculate_taxes_and_totals")
		pr.insert()
		pr.submit()
		
		si_doclist = webnotes.copy_doclist(test_records[1])
		si_doclist[0]["update_stock"] = 1
		si_doclist[0]["posting_time"] = "12:05"
		si_doclist[1]["warehouse"] = "_Test Warehouse No Account - _TC"

		si = webnotes.bean(copy=si_doclist)
		si.insert()
		si.submit()
		
		# check stock ledger entries
		sle = webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
			where voucher_type = 'Sales Invoice' and voucher_no = %s""", 
			si.doc.name, as_dict=1)[0]
		self.assertTrue(sle)
		self.assertEquals([sle.item_code, sle.warehouse, sle.actual_qty], 
			["_Test Item", "_Test Warehouse No Account - _TC", -1.0])
		
		# check gl entries
		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
			order by account asc, debit asc""", si.doc.name, as_dict=1)
		self.assertTrue(gl_entries)
		
		expected_gl_entries = sorted([
			[si.doc.debit_to, 630.0, 0.0],
			[si_doclist[1]["income_account"], 0.0, 500.0],
			[si_doclist[2]["account_head"], 0.0, 80.0],
			[si_doclist[3]["account_head"], 0.0, 50.0],
		])
		for i, gle in enumerate(gl_entries):
			self.assertEquals(expected_gl_entries[i][0], gle.account)
			self.assertEquals(expected_gl_entries[i][1], gle.debit)
			self.assertEquals(expected_gl_entries[i][2], gle.credit)
				
		si.cancel()
		gle = webnotes.conn.sql("""select * from `tabGL Entry` 
			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
		
		self.assertFalse(gle)
		set_perpetual_inventory(0)
	def test_delivery_note_gl_entry(self):
		self.clear_stock_account_balance()
		set_perpetual_inventory()
		self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 1)
		webnotes.conn.set_value("Item", "_Test Item", "valuation_method", "FIFO")
		
		_insert_purchase_receipt()
		
		dn = webnotes.bean(copy=test_records[0])
		dn.doclist[1].expense_account = "Cost of Goods Sold - _TC"
		dn.doclist[1].cost_center = "Main - _TC"

		stock_in_hand_account = webnotes.conn.get_value("Account", 
			{"master_name": dn.doclist[1].warehouse})
		
		from accounts.utils import get_balance_on
		prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)

		dn.insert()
		dn.submit()
		
		gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
		self.assertTrue(gl_entries)
		expected_values = {
			stock_in_hand_account: [0.0, 375.0],
			"Cost of Goods Sold - _TC": [375.0, 0.0]
		}
		for i, gle in enumerate(gl_entries):
			self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))
		
		# check stock in hand balance
		bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
		self.assertEquals(bal, prev_bal - 375.0)
				
		# back dated purchase receipt
		pr = webnotes.bean(copy=pr_test_records[0])
		pr.doc.posting_date = "2013-01-01"
		pr.doclist[1].import_rate = 100
		pr.doclist[1].amount = 100
		
		pr.insert()
		pr.submit()
		
		gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
		self.assertTrue(gl_entries)
		expected_values = {
			stock_in_hand_account: [0.0, 666.65],
			"Cost of Goods Sold - _TC": [666.65, 0.0]
		}
		for i, gle in enumerate(gl_entries):
			self.assertEquals([gle.debit, gle.credit], expected_values.get(gle.account))
					
		dn.cancel()
		self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
		set_perpetual_inventory(0)
Exemple #21
0
	def test_si_gl_entry_with_aii_and_update_stock_with_warehouse_but_no_account(self):
		self.clear_stock_account_balance()
		set_perpetual_inventory()
		webnotes.delete_doc("Account", "_Test Warehouse No Account - _TC")
		
		# insert purchase receipt
		from stock.doctype.purchase_receipt.test_purchase_receipt import test_records \
			as pr_test_records
		pr = webnotes.bean(copy=pr_test_records[0])
		pr.doc.naming_series = "_T-Purchase Receipt-"
		pr.doclist[1].warehouse = "_Test Warehouse No Account - _TC"
		pr.run_method("calculate_taxes_and_totals")
		pr.insert()
		pr.submit()
		
		si_doclist = webnotes.copy_doclist(test_records[1])
		si_doclist[0]["update_stock"] = 1
		si_doclist[0]["posting_time"] = "12:05"
		si_doclist[1]["warehouse"] = "_Test Warehouse No Account - _TC"

		si = webnotes.bean(copy=si_doclist)
		si.insert()
		si.submit()
		
		# check stock ledger entries
		sle = webnotes.conn.sql("""select * from `tabStock Ledger Entry` 
			where voucher_type = 'Sales Invoice' and voucher_no = %s""", 
			si.doc.name, as_dict=1)[0]
		self.assertTrue(sle)
		self.assertEquals([sle.item_code, sle.warehouse, sle.actual_qty], 
			["_Test Item", "_Test Warehouse No Account - _TC", -1.0])
		
		# check gl entries
		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Sales Invoice' and voucher_no=%s
			order by account asc, debit asc""", si.doc.name, as_dict=1)
		self.assertTrue(gl_entries)
		
		expected_gl_entries = sorted([
			[si.doc.debit_to, 630.0, 0.0],
			[si_doclist[1]["income_account"], 0.0, 500.0],
			[si_doclist[2]["account_head"], 0.0, 80.0],
			[si_doclist[3]["account_head"], 0.0, 50.0],
		])
		for i, gle in enumerate(gl_entries):
			self.assertEquals(expected_gl_entries[i][0], gle.account)
			self.assertEquals(expected_gl_entries[i][1], gle.debit)
			self.assertEquals(expected_gl_entries[i][2], gle.credit)
				
		si.cancel()
		gle = webnotes.conn.sql("""select * from `tabGL Entry` 
			where voucher_type='Sales Invoice' and voucher_no=%s""", si.doc.name)
		
		self.assertFalse(gle)
		set_perpetual_inventory(0)
Exemple #22
0
    def test_jv_against_stock_account(self):
        from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
        set_perpetual_inventory()

        jv = webnotes.bean(copy=test_records[0])
        jv.doclist[1].account = "_Test Warehouse - _TC"
        jv.insert()

        from accounts.general_ledger import StockAccountInvalidTransaction
        self.assertRaises(StockAccountInvalidTransaction, jv.submit)

        set_perpetual_inventory(0)
	def test_jv_against_stock_account(self):
		from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
		set_perpetual_inventory()
		
		jv = webnotes.bean(copy=test_records[0])
		jv.doclist[1].account = "_Test Warehouse - _TC"
		jv.insert()
		
		from accounts.general_ledger import StockAccountInvalidTransaction
		self.assertRaises(StockAccountInvalidTransaction, jv.submit)

		set_perpetual_inventory(0)
Exemple #24
0
	def test_warehouse_company_validation(self):
		set_perpetual_inventory(0)
		self._clear_stock_account_balance()
		webnotes.bean("Profile", "*****@*****.**").get_controller()\
			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
		webnotes.session.user = "******"

		from stock.utils import InvalidWarehouseCompany
		st1 = webnotes.bean(copy=test_records[0])
		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
		st1.insert()
		self.assertRaises(InvalidWarehouseCompany, st1.submit)
		
		webnotes.session.user = "******"
    def test_warehouse_company_validation(self):
        set_perpetual_inventory(0)
        self._clear_stock_account_balance()
        webnotes.bean("Profile", "*****@*****.**").get_controller()\
         .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
        webnotes.session.user = "******"

        from stock.utils import InvalidWarehouseCompany
        st1 = webnotes.bean(copy=test_records[0])
        st1.doclist[1].t_warehouse = "_Test Warehouse 2 - _TC1"
        st1.insert()
        self.assertRaises(InvalidWarehouseCompany, st1.submit)

        webnotes.session.user = "******"
Exemple #26
0
    def test_material_transfer_gl_entry(self):
        self._clear_stock_account_balance()
        set_perpetual_inventory()

        self._insert_material_receipt()

        mtn = webnotes.bean(copy=test_records[2])
        mtn.insert()
        mtn.submit()

        self.check_stock_ledger_entries(
            "Stock Entry",
            mtn.doc.name,
            [["_Test Item", "_Test Warehouse - _TC", -45.0], ["_Test Item", "_Test Warehouse 1 - _TC", 45.0]],
        )

        stock_in_hand_account = webnotes.conn.get_value(
            "Account", {"account_type": "Warehouse", "master_name": mtn.doclist[1].s_warehouse}
        )

        fixed_asset_account = webnotes.conn.get_value(
            "Account", {"account_type": "Warehouse", "master_name": mtn.doclist[1].t_warehouse}
        )

        self.check_gl_entries(
            "Stock Entry",
            mtn.doc.name,
            sorted([[stock_in_hand_account, 0.0, 4500.0], [fixed_asset_account, 4500.0, 0.0]]),
        )

        mtn.cancel()
        self.assertFalse(
            webnotes.conn.sql(
                """select * from `tabStock Ledger Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""",
                mtn.doc.name,
            )
        )

        self.assertFalse(
            webnotes.conn.sql(
                """select * from `tabGL Entry` 
			where voucher_type='Stock Entry' and voucher_no=%s""",
                mtn.doc.name,
            )
        )
	def test_delivery_note_no_gl_entry(self):
		self.clear_stock_account_balance()
		set_perpetual_inventory(0)
		self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 0)
		
		_insert_purchase_receipt()
		
		dn = webnotes.bean(copy=test_records[0])
		dn.insert()
		dn.submit()
		
		stock_value, stock_value_difference = webnotes.conn.get_value("Stock Ledger Entry", 
			{"voucher_type": "Delivery Note", "voucher_no": dn.doc.name, 
				"item_code": "_Test Item"}, ["stock_value", "stock_value_difference"])
		self.assertEqual(stock_value, 0)
		self.assertEqual(stock_value_difference, -375)
			
		self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
Exemple #28
0
	def test_repack_no_change_in_valuation(self):
		self._clear_stock_account_balance()
		set_perpetual_inventory()

		self._insert_material_receipt()

		repack = webnotes.bean(copy=test_records[3])
		repack.insert()
		repack.submit()

		self.check_stock_ledger_entries("Stock Entry", repack.doc.name,
			[["_Test Item", "_Test Warehouse - _TC", -50.0],
				["_Test Item Home Desktop 100", "_Test Warehouse - _TC", 1]])

		gl_entries = webnotes.conn.sql("""select account, debit, credit
			from `tabGL Entry` where voucher_type='Stock Entry' and voucher_no=%s
			order by account desc""", repack.doc.name, as_dict=1)
		self.assertFalse(gl_entries)

		set_perpetual_inventory(0)
Exemple #29
0
    def test_repack_with_change_in_valuation(self):
        self._clear_stock_account_balance()
        set_perpetual_inventory()

        self._insert_material_receipt()

        repack = webnotes.bean(copy=test_records[3])
        repack.doclist[2].incoming_rate = 6000
        repack.insert()
        repack.submit()

        stock_in_hand_account = webnotes.conn.get_value(
            "Account", {"account_type": "Warehouse", "master_name": repack.doclist[2].t_warehouse}
        )

        self.check_gl_entries(
            "Stock Entry",
            repack.doc.name,
            sorted([[stock_in_hand_account, 1000.0, 0.0], ["Stock Adjustment - _TC", 0.0, 1000.0]]),
        )
        set_perpetual_inventory(0)
Exemple #30
0
	def test_repack_with_change_in_valuation(self):
		self._clear_stock_account_balance()
		set_perpetual_inventory()

		self._insert_material_receipt()

		repack = webnotes.bean(copy=test_records[3])
		repack.doclist[2].incoming_rate = 6000
		repack.insert()
		repack.submit()

		stock_in_hand_account = webnotes.conn.get_value("Account", {"account_type": "Warehouse",
			"master_name": repack.doclist[2].t_warehouse})

		self.check_gl_entries("Stock Entry", repack.doc.name,
			sorted([
				[stock_in_hand_account, 1000.0, 0.0],
				["Stock Adjustment - _TC", 0.0, 1000.0],
			])
		)
		set_perpetual_inventory(0)
Exemple #31
0
    def test_planned_qty(self):
        set_perpetual_inventory(0)
        webnotes.conn.sql("delete from `tabStock Ledger Entry`")
        webnotes.conn.sql("""delete from `tabBin`""")
        webnotes.conn.sql("""delete from `tabGL Entry`""")

        pro_bean = webnotes.bean(copy=test_records[0])
        pro_bean.insert()
        pro_bean.submit()

        from stock.doctype.stock_entry.test_stock_entry import test_records as se_test_records
        mr1 = webnotes.bean(copy=se_test_records[0])
        mr1.insert()
        mr1.submit()

        mr2 = webnotes.bean(copy=se_test_records[0])
        mr2.doclist[1].item_code = "_Test Item Home Desktop 100"
        mr2.insert()
        mr2.submit()

        stock_entry = make_stock_entry(pro_bean.doc.name, "Manufacture/Repack")
        stock_entry = webnotes.bean(stock_entry)

        stock_entry.doc.fg_completed_qty = 4
        stock_entry.doc.posting_date = "2013-05-12"
        stock_entry.doc.fiscal_year = "_Test Fiscal Year 2013"
        stock_entry.run_method("get_items")
        stock_entry.submit()

        self.assertEqual(
            webnotes.conn.get_value("Production Order", pro_bean.doc.name,
                                    "produced_qty"), 4)
        self.assertEqual(
            webnotes.conn.get_value(
                "Bin", {
                    "item_code": "_Test FG Item",
                    "warehouse": "_Test Warehouse 1 - _TC"
                }, "planned_qty"), 6)

        return pro_bean.doc.name
Exemple #32
0
    def test_delivery_note_gl_entry_packing_item(self):
        self.clear_stock_account_balance()
        set_perpetual_inventory()

        _insert_purchase_receipt()
        _insert_purchase_receipt("_Test Item Home Desktop 100")

        dn = webnotes.bean(copy=test_records[0])
        dn.doclist[1].item_code = "_Test Sales BOM Item"
        dn.doclist[1].qty = 1

        stock_in_hand_account = webnotes.conn.get_value(
            "Account", {"master_name": dn.doclist[1].warehouse})

        from accounts.utils import get_balance_on
        prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)

        dn.insert()
        dn.submit()

        gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
        self.assertTrue(gl_entries)

        expected_values = {
            stock_in_hand_account: [0.0, 525],
            "Cost of Goods Sold - _TC": [525.0, 0.0]
        }
        for i, gle in enumerate(gl_entries):
            self.assertEquals([gle.debit, gle.credit],
                              expected_values.get(gle.account))

        # check stock in hand balance
        bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
        self.assertEquals(bal, prev_bal - 525.0)

        dn.cancel()
        self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))

        set_perpetual_inventory(0)
    def test_warehouse_user(self):
        set_perpetual_inventory(0)
        from stock.utils import UserNotAllowedForWarehouse

        webnotes.bean("Profile", "*****@*****.**").get_controller()\
         .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")

        webnotes.bean("Profile", "*****@*****.**").get_controller()\
         .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
        webnotes.session.user = "******"
        st1 = webnotes.bean(copy=test_records[0])
        st1.doc.company = "_Test Company 1"
        st1.doclist[1].t_warehouse = "_Test Warehouse 2 - _TC1"
        st1.insert()
        self.assertRaises(UserNotAllowedForWarehouse, st1.submit)

        webnotes.session.user = "******"
        st1 = webnotes.bean(copy=test_records[0])
        st1.doc.company = "_Test Company 1"
        st1.doclist[1].t_warehouse = "_Test Warehouse 2 - _TC1"
        st1.insert()
        st1.submit()

        webnotes.session.user = "******"
Exemple #34
0
 def tearDown(self):
     set_perpetual_inventory(0)
     if hasattr(self, "old_default_company"):
         webnotes.conn.set_default("company", self.old_default_company)
 def tearDown(self):
     set_perpetual_inventory(0)
     if hasattr(self, "old_default_company"):
         webnotes.conn.set_default("company", self.old_default_company)
Exemple #36
0
    def test_delivery_note_gl_entry(self):
        self.clear_stock_account_balance()
        set_perpetual_inventory()
        self.assertEqual(
            cint(
                webnotes.defaults.get_global_default(
                    "auto_accounting_for_stock")), 1)
        webnotes.conn.set_value("Item", "_Test Item", "valuation_method",
                                "FIFO")

        _insert_purchase_receipt()

        dn = webnotes.bean(copy=test_records[0])
        dn.doclist[1].expense_account = "Cost of Goods Sold - _TC"
        dn.doclist[1].cost_center = "Main - _TC"

        stock_in_hand_account = webnotes.conn.get_value(
            "Account", {"master_name": dn.doclist[1].warehouse})

        from accounts.utils import get_balance_on
        prev_bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)

        dn.insert()
        dn.submit()

        gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
        self.assertTrue(gl_entries)
        expected_values = {
            stock_in_hand_account: [0.0, 375.0],
            "Cost of Goods Sold - _TC": [375.0, 0.0]
        }
        for i, gle in enumerate(gl_entries):
            self.assertEquals([gle.debit, gle.credit],
                              expected_values.get(gle.account))

        # check stock in hand balance
        bal = get_balance_on(stock_in_hand_account, dn.doc.posting_date)
        self.assertEquals(bal, prev_bal - 375.0)

        # back dated purchase receipt
        pr = webnotes.bean(copy=pr_test_records[0])
        pr.doc.posting_date = "2013-01-01"
        pr.doclist[1].import_rate = 100
        pr.doclist[1].amount = 100

        pr.insert()
        pr.submit()

        gl_entries = get_gl_entries("Delivery Note", dn.doc.name)
        self.assertTrue(gl_entries)
        expected_values = {
            stock_in_hand_account: [0.0, 666.65],
            "Cost of Goods Sold - _TC": [666.65, 0.0]
        }
        for i, gle in enumerate(gl_entries):
            self.assertEquals([gle.debit, gle.credit],
                              expected_values.get(gle.account))

        dn.cancel()
        self.assertFalse(get_gl_entries("Delivery Note", dn.doc.name))
        set_perpetual_inventory(0)