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])
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])
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])
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))
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_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)
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)
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])
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)
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)
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])