示例#1
0
    def run_purchase_receipt_test(self, purchase_receipt, debit_account,
                                  credit_account, stock_value):
        from webnotes.model.doclist import DocList
        dl = webnotes.insert(DocList(purchase_receipt))

        from controllers.tax_controller import TaxController
        tax_controller = TaxController(dl.doc, dl.doclist)
        tax_controller.item_table_field = "purchase_receipt_details"
        tax_controller.calculate_taxes_and_totals()
        dl.doc = tax_controller.doc
        dl.doclist = tax_controller.doclist

        dl.submit()
        dl.load_from_db()

        gle = webnotes.conn.sql(
            """select account, ifnull(debit, 0), ifnull(credit, 0)
			from `tabGL Entry` where voucher_no = %s""", dl.doclist[0].name)

        gle_map = dict(((entry[0], entry) for entry in gle))

        self.assertEquals(gle_map[debit_account],
                          (debit_account, stock_value, 0.0))
        self.assertEquals(gle_map[credit_account],
                          (credit_account, 0.0, stock_value))
	def atest_gl_entries(self):
		from webnotes.model.doclist import DocList
		controller = webnotes.insert(DocList(purchase_invoice_doclist))
		
		from controllers.tax_controller import TaxController
		tax_controller = TaxController(controller.doc, controller.doclist)
		tax_controller.item_table_field = "entries"
		tax_controller.calculate_taxes_and_totals()

		controller.doc = tax_controller.doc
		controller.doclist = tax_controller.doclist

		controller.submit()
		controller.load_from_db()
		dl = controller.doclist
		
		expected_values = {
			"East Wind Inc. - %s" % abbr : [0, 1512.30],
			"Shipping Charges - %s" % abbr : [100, 0],
			"Excise Duty - %s" % abbr : [140, 0],
			"Education Cess - %s" % abbr : [2.8, 0],
			"S&H Education Cess - %s" % abbr : [1.4, 0],
			"CST - %s" % abbr : [29.88, 0],
			"VAT - Test - %s" % abbr : [156.25, 0],
			"Discount - %s" % abbr : [0, 168.03],
			"Stock Received But Not Billed - %s" % abbr : [1475, 0],
			"Expenses Included In Valuation - %s" % abbr : [0, 225]
		}
		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"], expected_values.get(d['account'])[0])
			self.assertEqual(d["credit"], expected_values.get(d['account'])[1])
	def test_purchase_invoice_having_zero_amount_items(self):
		from webnotes.model.doclist import DocList
		sample_purchase_invoice_doclist = [] + purchase_invoice_doclist
		
		# set rate and amount as 0
		sample_purchase_invoice_doclist[1]["import_rate"] = 0
		sample_purchase_invoice_doclist[2]["import_rate"] = 0
		
		
		controller = webnotes.insert(DocList(sample_purchase_invoice_doclist))
		controller.load_from_db()
		
		from controllers.tax_controller import TaxController
		tax_controller = TaxController(controller.doc, controller.doclist)
		tax_controller.item_table_field = "entries"
		tax_controller.calculate_taxes_and_totals()
		
		controller.doc = tax_controller.doc
		controller.doclist = tax_controller.doclist
		
		controller.save()
		controller.load_from_db()
		dl = controller.doclist
		
		# test net total
		self.assertEqual(dl[0].net_total, 0)
		
		# test tax amounts and totals
		expected_values = [
			["Shipping Charges - %s" % abbr, 100, 100],
			["Customs Duty - %s" % abbr, 0, 100],
			["Excise Duty - %s" % abbr, 0, 100],
			["Education Cess - %s" % abbr, 0, 100],
			["S&H Education Cess - %s" % abbr, 0, 100],
			["CST - %s" % abbr, 2, 102],
			["VAT - Test - %s" % abbr, 0, 102],
			["Discount - %s" % abbr, -10.2, 91.8],
		]
		for i, tax in enumerate(dl.get({"parentfield": "purchase_tax_details"})):
			# print tax.account_head, tax.tax_amount, tax.total
			self.assertEqual(tax.account_head, expected_values[i][0])
			self.assertEqual(tax.tax_amount, expected_values[i][1])
			self.assertEqual(tax.total, expected_values[i][2])
		
		# test item tax amount
		expected_values = [
			["Home Desktop 100", 0],
			["Home Desktop 200", 0]
		]
		for i, item in enumerate(dl.get({"parentfield": "purchase_invoice_items"})):
			self.assertEqual(item.item_code, expected_values[i][0])
			self.assertEqual(item.item_tax_amount, expected_values[i][1])
示例#4
0
    def test_purchase_invoice_having_zero_amount_items(self):
        from webnotes.model.doclist import DocList
        sample_purchase_invoice_doclist = [] + purchase_invoice_doclist

        # set rate and amount as 0
        sample_purchase_invoice_doclist[1]["import_rate"] = 0
        sample_purchase_invoice_doclist[2]["import_rate"] = 0

        controller = webnotes.insert(DocList(sample_purchase_invoice_doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController
        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test net total
        self.assertEqual(dl[0].net_total, 0)

        # test tax amounts and totals
        expected_values = [
            ["Shipping Charges - %s" % abbr, 100, 100],
            ["Customs Duty - %s" % abbr, 0, 100],
            ["Excise Duty - %s" % abbr, 0, 100],
            ["Education Cess - %s" % abbr, 0, 100],
            ["S&H Education Cess - %s" % abbr, 0, 100],
            ["CST - %s" % abbr, 2, 102],
            ["VAT - Test - %s" % abbr, 0, 102],
            ["Discount - %s" % abbr, -10.2, 91.8],
        ]
        for i, tax in enumerate(dl.get({"parentfield":
                                        "purchase_tax_details"})):
            # print tax.account_head, tax.tax_amount, tax.total
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])

        # test item tax amount
        expected_values = [["Home Desktop 100", 0], ["Home Desktop 200", 0]]
        for i, item in enumerate(
                dl.get({"parentfield": "purchase_invoice_items"})):
            self.assertEqual(item.item_code, expected_values[i][0])
            self.assertEqual(item.item_tax_amount, expected_values[i][1])
	def test_purchase_invoice(self):
		from webnotes.model.doclist import DocList
		controller = webnotes.insert(DocList(purchase_invoice_doclist))
		controller.load_from_db()
		
		from controllers.tax_controller import TaxController
		tax_controller = TaxController(controller.doc, controller.doclist)
		tax_controller.item_table_field = "entries"
		tax_controller.calculate_taxes_and_totals()
		
		controller.doc = tax_controller.doc
		controller.doclist = tax_controller.doclist
		
		controller.save()
		controller.load_from_db()
		dl = controller.doclist

		# test net total
		self.assertEqual(dl[0].net_total, 1250)
		
		# test tax amounts and totals
		expected_values = [
			["Shipping Charges - %s" % abbr, 100, 1350],
			["Customs Duty - %s" % abbr, 125, 1350],
			["Excise Duty - %s" % abbr, 140, 1490],
			["Education Cess - %s" % abbr, 2.8, 1492.8],
			["S&H Education Cess - %s" % abbr, 1.4, 1494.2],
			["CST - %s" % abbr, 29.88, 1524.08],
			["VAT - Test - %s" % abbr, 156.25, 1680.33],
			["Discount - %s" % abbr, -168.03, 1512.30],
		]		
		for i, tax in enumerate(dl.get({"parentfield": "purchase_tax_details"})):
			# print tax.account_head, tax.tax_amount, tax.total
			self.assertEqual(tax.account_head, expected_values[i][0])
			self.assertEqual(tax.tax_amount, expected_values[i][1])
			self.assertEqual(tax.total, expected_values[i][2])
		
		# test item tax amount
		expected_values = [
			["Home Desktop 100", 90],
			["Home Desktop 200", 135]
		]
		for i, item in enumerate(dl.get({"parentfield": "purchase_invoice_items"})):
			self.assertEqual(item.item_code, expected_values[i][0])
			self.assertEqual(item.item_tax_amount, expected_values[i][1])
示例#6
0
    def test_purchase_invoice(self):
        from webnotes.model.doclist import DocList
        controller = webnotes.insert(DocList(purchase_invoice_doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController
        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test net total
        self.assertEqual(dl[0].net_total, 1250)

        # test tax amounts and totals
        expected_values = [
            ["Shipping Charges - %s" % abbr, 100, 1350],
            ["Customs Duty - %s" % abbr, 125, 1350],
            ["Excise Duty - %s" % abbr, 140, 1490],
            ["Education Cess - %s" % abbr, 2.8, 1492.8],
            ["S&H Education Cess - %s" % abbr, 1.4, 1494.2],
            ["CST - %s" % abbr, 29.88, 1524.08],
            ["VAT - Test - %s" % abbr, 156.25, 1680.33],
            ["Discount - %s" % abbr, -168.03, 1512.30],
        ]
        for i, tax in enumerate(dl.get({"parentfield":
                                        "purchase_tax_details"})):
            # print tax.account_head, tax.tax_amount, tax.total
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])

        # test item tax amount
        expected_values = [["Home Desktop 100", 90], ["Home Desktop 200", 135]]
        for i, item in enumerate(
                dl.get({"parentfield": "purchase_invoice_items"})):
            self.assertEqual(item.item_code, expected_values[i][0])
            self.assertEqual(item.item_tax_amount, expected_values[i][1])
示例#7
0
	def run_purchase_receipt_test(self, purchase_receipt, debit_account, 
			credit_account, stock_value):
		dl = webnotes.insert(DocList(purchase_receipt))
		
		from controllers.tax_controller import TaxController
		tax_controller = TaxController(dl.doc, dl.doclist)
		tax_controller.item_table_field = "purchase_receipt_details"
		tax_controller.calculate_taxes_and_totals()
		dl.doc = tax_controller.doc
		dl.doclist = tax_controller.doclist
		
		dl.submit()
		dl.load_from_db()
		
		gle = webnotes.conn.sql("""select account, ifnull(debit, 0), ifnull(credit, 0)
			from `tabGL Entry` where voucher_no = %s""", dl.doclist[0].name)
		
		gle_map = dict(((entry[0], entry) for entry in gle))
		
		self.assertEquals(gle_map[debit_account], (debit_account, stock_value, 0.0))
		self.assertEquals(gle_map[credit_account], (credit_account, 0.0, stock_value))
示例#8
0
    def atest_gl_entries(self):
        from webnotes.model.doclist import DocList
        controller = webnotes.insert(DocList(purchase_invoice_doclist))

        from controllers.tax_controller import TaxController
        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.submit()
        controller.load_from_db()
        dl = controller.doclist

        expected_values = {
            "East Wind Inc. - %s" % abbr: [0, 1512.30],
            "Shipping Charges - %s" % abbr: [100, 0],
            "Excise Duty - %s" % abbr: [140, 0],
            "Education Cess - %s" % abbr: [2.8, 0],
            "S&H Education Cess - %s" % abbr: [1.4, 0],
            "CST - %s" % abbr: [29.88, 0],
            "VAT - Test - %s" % abbr: [156.25, 0],
            "Discount - %s" % abbr: [0, 168.03],
            "Stock Received But Not Billed - %s" % abbr: [1475, 0],
            "Expenses Included In Valuation - %s" % abbr: [0, 225]
        }
        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"], expected_values.get(d['account'])[0])
            self.assertEqual(d["credit"], expected_values.get(d['account'])[1])
示例#9
0
    def test_usd_sales_invoice_with_inclusive_tax(self):
        # print
        # print "-"*80
        # print "test_usd_sales_invoice_with_inclusive_tax"
        # print "-"*80

        # Note: below values were obtained through manual calculation and verified by test

        doclist = [
            # parent
            {
                "doctype": "Sales Invoice",
                "debit_to": "West Wind Inc. - %s" % abbr,
                "customer_name": "West Wind Inc.",
                "naming_series": "INV",
                "posting_date": nowdate(),
                "company": company,
                "fiscal_year": webnotes.conn.get_default("fiscal_year"),
                "currency": "USD",
                "price_list_currency": "USD",
                "conversion_rate": 50.0,
                "plc_conversion_rate": 50.0,
                "grand_total_export": 0
            },
            # items
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 100",
                "qty": 10,
                "export_rate": 50,
                "adj_rate": 10,
                "parentfield": "sales_invoice_items",
                "uom": "Nos",
                "item_tax_rate": json.dumps({"Excise Duty - %s" % abbr: 10})
            },
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 200",
                "qty": 5,
                "export_rate": 150,
                "adj_rate": 20,
                "parentfield": "sales_invoice_items",
                "uom": "Nos"
            },
            # taxes
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Excise Duty - %s" % abbr,
                "rate": 12,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "Education Cess - %s" % abbr,
                "rate": 2,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "S&H Education Cess - %s" % abbr,
                "rate": 1,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "CST - %s" % abbr,
                "rate": 2,
                "row_id": 3,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "VAT - Test - %s" % abbr,
                "rate": 12.5,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Customs Duty - %s" % abbr,
                "rate": 10,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "Actual",
                "account_head": "Shipping Charges - %s" % abbr,
                "rate": 100,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "adj_rate - %s" % abbr,
                "rate": -10,
                "row_id": 7,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
        ]

        controller = webnotes.insert(DocList(doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController
        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test item values calculation
        expected_values = [
            {
                "item_code": "Home Desktop 100",
                "ref_rate": 55.5556,
                "adj_rate": 10,
                "export_amount": 500,
                "base_ref_rate": 2222.1156,
                "basic_rate": 1999.904,
                "amount": 19999.04
            },
            {
                "item_code": "Home Desktop 200",
                "ref_rate": 187.5,
                "adj_rate": 20,
                "export_amount": 750,
                "base_ref_rate": 7375.664,
                "basic_rate": 5900.5312,
                "amount": 29502.66
            },
        ]
        for i, item in enumerate(dl.get({"parentfield":
                                         "sales_invoice_items"})):
            for key, val in expected_values[i].items():
                self.assertEqual(item.fields.get(key), val)

        # test tax amounts and totals
        expected_values = [
            ["Excise Duty - %s" % abbr, 5540.22, 55041.92, 0, 1250],
            ["Education Cess - %s" % abbr, 110.81, 55152.73, 0, 1250],
            ["S&H Education Cess - %s" % abbr, 55.4, 55208.13, 0, 1250],
            ["CST - %s" % abbr, 1104.16, 56312.29, 0, 1250],
            ["VAT - Test - %s" % abbr, 6187.71, 62500, 0, 1250],
            ["Customs Duty - %s" % abbr, 4950.17, 67450.17, 99.01, 1349.01],
            ["Shipping Charges - %s" % abbr, 5000, 72450.17, 100, 1449.01],
            ["adj_rate - %s" % abbr, -7245.01, 65205.16, -144.9, 1304.11],
        ]
        for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
            # print tax.account_head, tax.tax_amount, tax.total, tax.tax_amount_print, \
            # 	tax.total_print
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])
            # self.assertEqual(tax.tax_amount_print, expected_values[i][3])
            self.assertEqual(tax.total_print, expected_values[i][4])

        # test net total
        self.assertEqual(dl[0].net_total, 49501.7)
        self.assertEqual(dl[0].net_total_print, 1250)

        # # test grand total
        self.assertEqual(dl[0].grand_total, 65205.16)
        self.assertEqual(dl[0].grand_total_export, 1304.11)
示例#10
0
    def test_sales_invoice_with_inclusive_tax(self):
        doclist = [
            # parent
            {
                "doctype": "Sales Invoice",
                "debit_to": "West Wind Inc. - %s" % abbr,
                "customer_name": "West Wind Inc.",
                "naming_series": "INV",
                "posting_date": nowdate(),
                "company": company,
                "fiscal_year": webnotes.conn.get_default("fiscal_year"),
                "currency": webnotes.conn.get_default("currency"),
                "price_list_currency": webnotes.conn.get_default("currency"),
                "conversion_rate": 1.0,
                "plc_conversion_rate": 1.0,
                "grand_total_export": 0
            },
            # items
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 100",
                "qty": 10,
                "export_rate": 62.503,
                "parentfield": "sales_invoice_items",
                "uom": "Nos",
                "item_tax_rate": json.dumps({"Excise Duty - %s" % abbr: 10})
            },
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 200",
                "qty": 5,
                "export_rate": 190.6608,
                "parentfield": "sales_invoice_items",
                "uom": "Nos"
            },
            # taxes
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Excise Duty - %s" % abbr,
                "rate": 12,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "Education Cess - %s" % abbr,
                "rate": 2,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "S&H Education Cess - %s" % abbr,
                "rate": 1,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "CST - %s" % abbr,
                "rate": 2,
                "row_id": 3,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "VAT - Test - %s" % abbr,
                "rate": 12.5,
                "parentfield": "other_charges",
                "included_in_print_rate": 1
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Customs Duty - %s" % abbr,
                "rate": 10,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "Actual",
                "account_head": "Shipping Charges - %s" % abbr,
                "rate": 100,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "adj_rate - %s" % abbr,
                "rate": -10,
                "row_id": 7,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr
            },
        ]

        controller = webnotes.insert(DocList(doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController
        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test item values calculation
        expected_values = [
            {
                "item_code": "Home Desktop 100",
                "ref_rate": 62.503,
                "adj_rate": 0,
                "export_amount": 625.03,
                "base_ref_rate": 50,
                "basic_rate": 50,
                "amount": 500
            },
            {
                "item_code": "Home Desktop 200",
                "ref_rate": 190.6608,
                "adj_rate": 0,
                "export_amount": 953.3,
                "base_ref_rate": 150,
                "basic_rate": 150,
                "amount": 750
            },
        ]
        for i, item in enumerate(dl.get({"parentfield":
                                         "sales_invoice_items"})):
            for key, val in expected_values[i].items():
                self.assertEqual(item.fields.get(key), val)

        # test tax amounts and totals
        expected_values = [
            ["Excise Duty - %s" % abbr, 140, 1390, 0, 1578.33],
            ["Education Cess - %s" % abbr, 2.8, 1392.8, 0, 1578.33],
            ["S&H Education Cess - %s" % abbr, 1.4, 1394.2, 0, 1578.33],
            ["CST - %s" % abbr, 27.88, 1422.08, 0, 1578.33],
            ["VAT - Test - %s" % abbr, 156.25, 1578.33, 0, 1578.33],
            ["Customs Duty - %s" % abbr, 125, 1703.33, 125, 1703.33],
            ["Shipping Charges - %s" % abbr, 100, 1803.33, 100, 1803.33],
            ["adj_rate - %s" % abbr, -180.33, 1623, -180.33, 1623],
        ]
        for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
            # print tax.account_head, tax.tax_amount, tax.total, tax.tax_amount_print, \
            # 	tax.total_print
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])
            # self.assertEqual(tax.tax_amount_print, expected_values[i][3])
            self.assertEqual(tax.total_print, expected_values[i][4])

        # test net total
        self.assertEqual(dl[0].net_total, 1250)
        self.assertEqual(dl[0].net_total_print, 1578.33)

        # # test grand total
        self.assertEqual(dl[0].grand_total, 1623)
        self.assertEqual(dl[0].grand_total_export, 1623)
示例#11
0
    def test_sales_invoice(self):
        from webnotes.model.doclist import DocList
        doclist = [] + [d.copy() for d in sales_invoice_doclist]
        controller = webnotes.insert(DocList(doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController
        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test net total
        self.assertEqual(dl[0].net_total, 1250)

        # test item values calculation
        expected_values = [
            {
                "item_code": "Home Desktop 100",
                "ref_rate": 50,
                "adj_rate": 0,
                "export_amount": 500,
                "base_ref_rate": 50,
                "basic_rate": 50,
                "amount": 500
            },
            {
                "item_code": "Home Desktop 200",
                "ref_rate": 150,
                "adj_rate": 0,
                "export_amount": 750,
                "base_ref_rate": 150,
                "basic_rate": 150,
                "amount": 750
            },
        ]
        for i, item in enumerate(dl.get({"parentfield":
                                         "sales_invoice_items"})):
            for key, val in expected_values[i].items():
                self.assertEqual(item.fields.get(key), val)

        # test tax amounts and totals
        expected_values = [
            ["Shipping Charges - %s" % abbr, 100, 1350],
            ["Customs Duty - %s" % abbr, 125, 1475],
            ["Excise Duty - %s" % abbr, 140, 1615],
            ["Education Cess - %s" % abbr, 2.8, 1617.8],
            ["S&H Education Cess - %s" % abbr, 1.4, 1619.2],
            ["CST - %s" % abbr, 32.38, 1651.58],
            ["VAT - Test - %s" % abbr, 156.25, 1807.83],
            ["adj_rate - %s" % abbr, -180.78, 1627.05],
        ]
        for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
            # print tax.account_head, tax.tax_amount, tax.total
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])
示例#12
0
    def test_usd_sales_invoice_with_inclusive_tax(self):
        # print
        # print "-"*80
        # print "test_usd_sales_invoice_with_inclusive_tax"
        # print "-"*80

        # Note: below values were obtained through manual calculation and verified by test

        doclist = [
            # parent
            {
                "doctype": "Sales Invoice",
                "debit_to": "West Wind Inc. - %s" % abbr,
                "customer_name": "West Wind Inc.",
                "naming_series": "INV",
                "posting_date": nowdate(),
                "company": company,
                "fiscal_year": webnotes.conn.get_default("fiscal_year"),
                "currency": "USD",
                "price_list_currency": "USD",
                "conversion_rate": 50.0,
                "plc_conversion_rate": 50.0,
                "grand_total_export": 0,
            },
            # items
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 100",
                "qty": 10,
                "export_rate": 50,
                "adj_rate": 10,
                "parentfield": "sales_invoice_items",
                "uom": "Nos",
                "item_tax_rate": json.dumps({"Excise Duty - %s" % abbr: 10}),
            },
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 200",
                "qty": 5,
                "export_rate": 150,
                "adj_rate": 20,
                "parentfield": "sales_invoice_items",
                "uom": "Nos",
            },
            # taxes
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Excise Duty - %s" % abbr,
                "rate": 12,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "Education Cess - %s" % abbr,
                "rate": 2,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "S&H Education Cess - %s" % abbr,
                "rate": 1,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "CST - %s" % abbr,
                "rate": 2,
                "row_id": 3,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "VAT - Test - %s" % abbr,
                "rate": 12.5,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Customs Duty - %s" % abbr,
                "rate": 10,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "Actual",
                "account_head": "Shipping Charges - %s" % abbr,
                "rate": 100,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "adj_rate - %s" % abbr,
                "rate": -10,
                "row_id": 7,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
        ]

        controller = webnotes.insert(DocList(doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController

        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test item values calculation
        expected_values = [
            {
                "item_code": "Home Desktop 100",
                "ref_rate": 55.5556,
                "adj_rate": 10,
                "export_amount": 500,
                "base_ref_rate": 2222.1156,
                "basic_rate": 1999.904,
                "amount": 19999.04,
            },
            {
                "item_code": "Home Desktop 200",
                "ref_rate": 187.5,
                "adj_rate": 20,
                "export_amount": 750,
                "base_ref_rate": 7375.664,
                "basic_rate": 5900.5312,
                "amount": 29502.66,
            },
        ]
        for i, item in enumerate(dl.get({"parentfield": "sales_invoice_items"})):
            for key, val in expected_values[i].items():
                self.assertEqual(item.fields.get(key), val)

                # test tax amounts and totals
        expected_values = [
            ["Excise Duty - %s" % abbr, 5540.22, 55041.92, 0, 1250],
            ["Education Cess - %s" % abbr, 110.81, 55152.73, 0, 1250],
            ["S&H Education Cess - %s" % abbr, 55.4, 55208.13, 0, 1250],
            ["CST - %s" % abbr, 1104.16, 56312.29, 0, 1250],
            ["VAT - Test - %s" % abbr, 6187.71, 62500, 0, 1250],
            ["Customs Duty - %s" % abbr, 4950.17, 67450.17, 99.01, 1349.01],
            ["Shipping Charges - %s" % abbr, 5000, 72450.17, 100, 1449.01],
            ["adj_rate - %s" % abbr, -7245.01, 65205.16, -144.9, 1304.11],
        ]
        for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
            # print tax.account_head, tax.tax_amount, tax.total, tax.tax_amount_print, \
            # 	tax.total_print
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])
            # self.assertEqual(tax.tax_amount_print, expected_values[i][3])
            self.assertEqual(tax.total_print, expected_values[i][4])

            # test net total
        self.assertEqual(dl[0].net_total, 49501.7)
        self.assertEqual(dl[0].net_total_print, 1250)

        # # test grand total
        self.assertEqual(dl[0].grand_total, 65205.16)
        self.assertEqual(dl[0].grand_total_export, 1304.11)
示例#13
0
    def test_sales_invoice_with_inclusive_tax(self):
        doclist = [
            # parent
            {
                "doctype": "Sales Invoice",
                "debit_to": "West Wind Inc. - %s" % abbr,
                "customer_name": "West Wind Inc.",
                "naming_series": "INV",
                "posting_date": nowdate(),
                "company": company,
                "fiscal_year": webnotes.conn.get_default("fiscal_year"),
                "currency": webnotes.conn.get_default("currency"),
                "price_list_currency": webnotes.conn.get_default("currency"),
                "conversion_rate": 1.0,
                "plc_conversion_rate": 1.0,
                "grand_total_export": 0,
            },
            # items
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 100",
                "qty": 10,
                "export_rate": 62.503,
                "parentfield": "sales_invoice_items",
                "uom": "Nos",
                "item_tax_rate": json.dumps({"Excise Duty - %s" % abbr: 10}),
            },
            {
                "doctype": "Sales Invoice Item",
                "warehouse": "Default Warehouse",
                "item_code": "Home Desktop 200",
                "qty": 5,
                "export_rate": 190.6608,
                "parentfield": "sales_invoice_items",
                "uom": "Nos",
            },
            # taxes
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Excise Duty - %s" % abbr,
                "rate": 12,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "Education Cess - %s" % abbr,
                "rate": 2,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Amount",
                "account_head": "S&H Education Cess - %s" % abbr,
                "rate": 1,
                "row_id": 1,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "CST - %s" % abbr,
                "rate": 2,
                "row_id": 3,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "VAT - Test - %s" % abbr,
                "rate": 12.5,
                "parentfield": "other_charges",
                "included_in_print_rate": 1,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Net Total",
                "account_head": "Customs Duty - %s" % abbr,
                "rate": 10,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "Actual",
                "account_head": "Shipping Charges - %s" % abbr,
                "rate": 100,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
            {
                "doctype": "Sales Taxes and Charges",
                "charge_type": "On Previous Row Total",
                "account_head": "adj_rate - %s" % abbr,
                "rate": -10,
                "row_id": 7,
                "parentfield": "other_charges",
                "cost_center_other_charges": "Default Cost Center - %s" % abbr,
            },
        ]

        controller = webnotes.insert(DocList(doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController

        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test item values calculation
        expected_values = [
            {
                "item_code": "Home Desktop 100",
                "ref_rate": 62.503,
                "adj_rate": 0,
                "export_amount": 625.03,
                "base_ref_rate": 50,
                "basic_rate": 50,
                "amount": 500,
            },
            {
                "item_code": "Home Desktop 200",
                "ref_rate": 190.6608,
                "adj_rate": 0,
                "export_amount": 953.3,
                "base_ref_rate": 150,
                "basic_rate": 150,
                "amount": 750,
            },
        ]
        for i, item in enumerate(dl.get({"parentfield": "sales_invoice_items"})):
            for key, val in expected_values[i].items():
                self.assertEqual(item.fields.get(key), val)

                # test tax amounts and totals
        expected_values = [
            ["Excise Duty - %s" % abbr, 140, 1390, 0, 1578.33],
            ["Education Cess - %s" % abbr, 2.8, 1392.8, 0, 1578.33],
            ["S&H Education Cess - %s" % abbr, 1.4, 1394.2, 0, 1578.33],
            ["CST - %s" % abbr, 27.88, 1422.08, 0, 1578.33],
            ["VAT - Test - %s" % abbr, 156.25, 1578.33, 0, 1578.33],
            ["Customs Duty - %s" % abbr, 125, 1703.33, 125, 1703.33],
            ["Shipping Charges - %s" % abbr, 100, 1803.33, 100, 1803.33],
            ["adj_rate - %s" % abbr, -180.33, 1623, -180.33, 1623],
        ]
        for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
            # print tax.account_head, tax.tax_amount, tax.total, tax.tax_amount_print, \
            # 	tax.total_print
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])
            # self.assertEqual(tax.tax_amount_print, expected_values[i][3])
            self.assertEqual(tax.total_print, expected_values[i][4])

            # test net total
        self.assertEqual(dl[0].net_total, 1250)
        self.assertEqual(dl[0].net_total_print, 1578.33)

        # # test grand total
        self.assertEqual(dl[0].grand_total, 1623)
        self.assertEqual(dl[0].grand_total_export, 1623)
示例#14
0
    def test_sales_invoice(self):
        from webnotes.model.doclist import DocList

        doclist = [] + [d.copy() for d in sales_invoice_doclist]
        controller = webnotes.insert(DocList(doclist))
        controller.load_from_db()

        from controllers.tax_controller import TaxController

        tax_controller = TaxController(controller.doc, controller.doclist)
        tax_controller.item_table_field = "entries"
        tax_controller.calculate_taxes_and_totals()

        controller.doc = tax_controller.doc
        controller.doclist = tax_controller.doclist

        controller.save()
        controller.load_from_db()
        dl = controller.doclist

        # test net total
        self.assertEqual(dl[0].net_total, 1250)

        # test item values calculation
        expected_values = [
            {
                "item_code": "Home Desktop 100",
                "ref_rate": 50,
                "adj_rate": 0,
                "export_amount": 500,
                "base_ref_rate": 50,
                "basic_rate": 50,
                "amount": 500,
            },
            {
                "item_code": "Home Desktop 200",
                "ref_rate": 150,
                "adj_rate": 0,
                "export_amount": 750,
                "base_ref_rate": 150,
                "basic_rate": 150,
                "amount": 750,
            },
        ]
        for i, item in enumerate(dl.get({"parentfield": "sales_invoice_items"})):
            for key, val in expected_values[i].items():
                self.assertEqual(item.fields.get(key), val)

                # test tax amounts and totals
        expected_values = [
            ["Shipping Charges - %s" % abbr, 100, 1350],
            ["Customs Duty - %s" % abbr, 125, 1475],
            ["Excise Duty - %s" % abbr, 140, 1615],
            ["Education Cess - %s" % abbr, 2.8, 1617.8],
            ["S&H Education Cess - %s" % abbr, 1.4, 1619.2],
            ["CST - %s" % abbr, 32.38, 1651.58],
            ["VAT - Test - %s" % abbr, 156.25, 1807.83],
            ["adj_rate - %s" % abbr, -180.78, 1627.05],
        ]
        for i, tax in enumerate(dl.get({"parentfield": "other_charges"})):
            # print tax.account_head, tax.tax_amount, tax.total
            self.assertEqual(tax.account_head, expected_values[i][0])
            self.assertEqual(tax.tax_amount, expected_values[i][1])
            self.assertEqual(tax.total, expected_values[i][2])