From 33cdfdfb7f21661997cef6fa70095f436b348054 Mon Sep 17 00:00:00 2001 From: Mohammad Hasnain Date: Mon, 19 Oct 2020 20:48:43 +0530 Subject: [PATCH] feat(UAE VAT 201): Add tests for report --- .../purchase_invoice/test_purchase_invoice.py | 3 +- .../report/uae_vat_201/test_uae_vat_201.py | 370 ++++++++++++++++++ 2 files changed, 372 insertions(+), 1 deletion(-) create mode 100644 erpnext/regional/report/uae_vat_201/test_uae_vat_201.py diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 2e5a7142a3..8276c1fc03 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -1040,7 +1040,8 @@ def make_purchase_invoice_against_cost_center(**args): pi.is_return = args.is_return pi.credit_to = args.return_against or "Creditors - _TC" pi.is_subcontracted = args.is_subcontracted or "No" - pi.supplier_warehouse = "_Test Warehouse 1 - _TC" + if args.supplier_warehouse: + pi.supplier_warehouse = "_Test Warehouse 1 - _TC" pi.append("items", { "item_code": args.item or args.item_code or "_Test Item", diff --git a/erpnext/regional/report/uae_vat_201/test_uae_vat_201.py b/erpnext/regional/report/uae_vat_201/test_uae_vat_201.py new file mode 100644 index 0000000000..8e845d7432 --- /dev/null +++ b/erpnext/regional/report/uae_vat_201/test_uae_vat_201.py @@ -0,0 +1,370 @@ +# coding=utf-8 +from __future__ import unicode_literals + +import erpnext +import frappe +from unittest import TestCase +from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice +from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice +from erpnext.stock.doctype.warehouse.test_warehouse import get_warehouse_account +from erpnext.regional.report.uae_vat_201.uae_vat_201 import ( + get_total_emiratewise, + get_tourist_tax_return_total, + get_tourist_tax_return_tax, + get_reverse_charge_total, + get_reverse_charge_tax, + get_zero_rated_total, + get_exempt_total, + get_standard_rated_expenses_total, + get_standard_rated_expenses_tax, + get_reverse_charge_recoverable_total, + get_reverse_charge_recoverable_tax + ) + + + +class TestUaeVat201(TestCase): + def setUp(self): + frappe.set_user("Administrator") + + frappe.db.sql("delete from `tabSales Invoice` where company='_Test Company UAE VAT'") + frappe.db.sql("delete from `tabPurchase Invoice` where company='_Test Company UAE VAT'") + + + make_company("_Test Company UAE VAT", "_TCUV") + set_vat_accounts() + + make_customers() + + make_supplier() + + create_warehouse("_Test UAE VAT Supplier Warehouse", company="_Test Company UAE VAT") + + + make_item("_Test UAE VAT Item", properties = {"is_zero_rated": 0, "is_exempt": 0}) + make_item("_Test UAE VAT Zero Rated Item", properties = {"is_zero_rated": 1, "is_exempt": 0}) + make_item("_Test UAE VAT Exempt Item", properties = {"is_zero_rated": 0, "is_exempt": 1}) + + make_sales_invoices() + + create_purchase_invoices() + + def test_uae_vat_201_report(self): + filters = {"company": "_Test Company UAE VAT"} + total_emiratewise = get_total_emiratewise(filters) + amounts_by_emirate = {} + for d in total_emiratewise: + emirate, amount, vat= d + amounts_by_emirate[emirate] = { + "raw_amount": amount, + "raw_vat_amount": vat, + } + self.assertEqual(amounts_by_emirate["Sharjah"]["raw_amount"],300) + self.assertEqual(amounts_by_emirate["Sharjah"]["raw_vat_amount"],5) + self.assertEqual(amounts_by_emirate["Dubai"]["raw_amount"],200) + self.assertEqual(amounts_by_emirate["Dubai"]["raw_vat_amount"],10) + + self.assertEqual(get_tourist_tax_return_tax(filters),2) + self.assertEqual(get_reverse_charge_total(filters),250) + self.assertEqual(get_reverse_charge_tax(filters),12.5) + self.assertEqual(get_zero_rated_total(filters),100) + self.assertEqual(get_exempt_total(filters),100) + self.assertEqual(get_standard_rated_expenses_total(filters),250) + self.assertEqual(get_standard_rated_expenses_tax(filters),1) + self.assertEqual(get_reverse_charge_recoverable_total(filters),250) + self.assertEqual(get_reverse_charge_recoverable_tax(filters),12.5) + +def make_company(company_name, abbr): + if not frappe.db.exists("Company", company_name): + company = frappe.get_doc({ + "doctype": "Company", + "company_name": company_name, + "abbr": abbr, + "default_currency": "AED", + "country": "United Arab Emirates", + "create_chart_of_accounts_based_on": "Standard Template", + }) + company.insert() + else: + company = frappe.get_doc("Company", company_name) + + # indempotent + company.create_default_warehouses() + + if not frappe.db.get_value("Cost Center", {"is_group": 0, "company": company.name}): + company.create_default_cost_center() + + company.save() + return company + +def set_vat_accounts(): + if not frappe.db.exists("UAE VAT Settings", "_Test Company UAE VAT"): + vat_accounts = frappe.get_all( + "Account", + fields=["name"], + filters = { + "company": "_Test Company UAE VAT", + "is_group":0, + "account_type": "Tax"}) + + uae_vat_accounts = [] + for d in vat_accounts: + uae_vat_accounts.append( + { + "doctype": "UAE VAT Account", + "account":d.name + }) + + frappe.get_doc({ + "company": "_Test Company UAE VAT", + "uae_vat_accounts": uae_vat_accounts, + "doctype": "UAE VAT Settings", + }).insert() + +def make_customers(): + if not frappe.db.exists("Customer", "_Test Dubai Customer"): + customer = frappe.get_doc({ + "doctype": "Customer", + "customer_name": "_Test Dubai Customer", + "customer_type": "Company", + }) + customer.insert() + else: + customer = frappe.get_doc("Customer", "_Test Dubai Customer") + + if not frappe.db.exists("Customer", "_Test Sharjah Customer"): + customer = frappe.get_doc({ + "doctype": "Customer", + "customer_name": "_Test Sharjah Customer", + "customer_type": "Company", + }) + customer.insert() + else: + customer = frappe.get_doc("Customer", "_Test Sharjah Customer") + + if not frappe.db.exists('Address', '_Test Dubai Address'): + address = frappe.get_doc({ + "address_line1": "_Test Address Line 1", + "address_title": "_Test Dubai Address", + "address_type": "Billing", + "city": "_Test City", + "state": "Test State", + "country": "United Arab Emirates", + "doctype": "Address", + "emirate": "Dubai" + }).insert() + + address.append("links", { + "link_doctype": "Customer", + "link_name": "_Test Dubai Customer" + }) + + address.save() + + if not frappe.db.exists('Address', '_Test Sharjah Address'): + address = frappe.get_doc({ + "address_line1": "_Test Address Line 1", + "address_title": "_Test Sharjah Address", + "address_type": "Billing", + "city": "_Test City", + "state": "Test State", + "country": "United Arab Emirates", + "doctype": "Address", + "emirate": "Sharjah" + }).insert() + + address.append("links", { + "link_doctype": "Customer", + "link_name": "_Test Sharjah Customer" + }) + + address.save() + +def make_supplier(): + + if not frappe.db.exists("Supplier", "_Test UAE Supplier"): + frappe.get_doc({ + "supplier_group": "Local", + "supplier_name": "_Test UAE Supplier", + "supplier_type": "Individual", + "doctype": "Supplier", + }).insert() + +def create_warehouse(warehouse_name, properties=None, company=None): + if not company: + company = "_Test Company" + + warehouse_id = erpnext.encode_company_abbr(warehouse_name, company) + if not frappe.db.exists("Warehouse", warehouse_id): + w = frappe.new_doc("Warehouse") + w.warehouse_name = warehouse_name + w.parent_warehouse = "All Warehouses - _TCUV" + w.company = company + w.account = get_warehouse_account(warehouse_name, company) + if properties: + w.update(properties) + w.save() + return w.name + else: + return warehouse_id + +def make_item(item_code, properties=None): + if frappe.db.exists("Item", item_code): + return frappe.get_doc("Item", item_code) + + item = frappe.get_doc({ + "doctype": "Item", + "item_code": item_code, + "item_name": item_code, + "description": item_code, + "item_group": "Products" + }) + + if properties: + item.update(properties) + + item.insert() + + return item + +def make_sales_invoices(): + si = create_sales_invoice(company="_Test Company UAE VAT", + customer = '_Test Dubai Customer', + currency = 'AED', + warehouse = 'Finished Goods - _TCUV', + debit_to = 'Debtors - _TCUV', + income_account = 'Sales - _TCUV', + expense_account = 'Cost of Goods Sold - _TCUV', + cost_center = 'Main - _TCUV', + sales_taxes_and_charges_template = "UAE VAT 5% - _TCUV", + item = "_Test UAE VAT Item", + do_not_save=1 + ) + si.append("taxes", { + "charge_type": "On Net Total", + "account_head": "VAT 5% - _TCUV", + "cost_center": "Main - _TCUV", + "description": "VAT 5% @ 5.0", + "rate": 5.0 + }) + si.submit() + + si = create_sales_invoice(company="_Test Company UAE VAT", + customer = '_Test Sharjah Customer', + currency = 'AED', + warehouse = 'Finished Goods - _TCUV', + debit_to = 'Debtors - _TCUV', + income_account = 'Sales - _TCUV', + expense_account = 'Cost of Goods Sold - _TCUV', + cost_center = 'Main - _TCUV', + sales_taxes_and_charges_template = "UAE VAT 5% - _TCUV", + item = "_Test UAE VAT Item", + do_not_save=1 + ) + si.append("taxes", { + "charge_type": "On Net Total", + "account_head": "VAT 5% - _TCUV", + "cost_center": "Main - _TCUV", + "description": "VAT 5% @ 5.0", + "rate": 5.0 + }) + si.submit() + + si = create_sales_invoice(company="_Test Company UAE VAT", + customer = '_Test Dubai Customer', + currency = 'AED', + warehouse = 'Finished Goods - _TCUV', + debit_to = 'Debtors - _TCUV', + income_account = 'Sales - _TCUV', + expense_account = 'Cost of Goods Sold - _TCUV', + cost_center = 'Main - _TCUV', + sales_taxes_and_charges_template = "UAE VAT 5% - _TCUV", + item = "_Test UAE VAT Item", + do_not_save=1 + ) + + si.tourist_tax_return = 2 + + si.append("taxes", { + "charge_type": "On Net Total", + "account_head": "VAT 5% - _TCUV", + "cost_center": "Main - _TCUV", + "description": "VAT 5% @ 5.0", + "rate": 5.0 + }) + si.submit() + + si = create_sales_invoice(company="_Test Company UAE VAT", + customer = '_Test Sharjah Customer', + currency = 'AED', + warehouse = 'Finished Goods - _TCUV', + debit_to = 'Debtors - _TCUV', + income_account = 'Sales - _TCUV', + expense_account = 'Cost of Goods Sold - _TCUV', + cost_center = 'Main - _TCUV', + sales_taxes_and_charges_template = "UAE VAT 5% - _TCUV", + item = "_Test UAE VAT Zero Rated Item", + ) + + si = create_sales_invoice(company="_Test Company UAE VAT", + customer = '_Test Sharjah Customer', + currency = 'AED', + warehouse = 'Finished Goods - _TCUV', + debit_to = 'Debtors - _TCUV', + income_account = 'Sales - _TCUV', + expense_account = 'Cost of Goods Sold - _TCUV', + cost_center = 'Main - _TCUV', + sales_taxes_and_charges_template = "UAE VAT 5% - _TCUV", + item = "_Test UAE VAT Exempt Item", + ) + +def create_purchase_invoices(): + + pi = make_purchase_invoice( + company="_Test Company UAE VAT", + supplier = '_Test UAE Supplier', + warehouse = '_Test UAE VAT Supplier Warehouse - _TCUV', + currency = 'AED', + cost_center = 'Main - _TCUV', + expense_account = 'Cost of Goods Sold - _TCUV', + item = "_Test UAE VAT Item", + do_not_save=1, + ) + pi.append("taxes", { + "charge_type": "On Net Total", + "account_head": "VAT 5% - _TCUV", + "cost_center": "Main - _TCUV", + "description": "VAT 5% @ 5.0", + "rate": 5.0 + }) + + pi.recoverable_standard_rated_expenses = 1 + + pi.submit() + + pi = make_purchase_invoice( + company="_Test Company UAE VAT", + supplier = '_Test UAE Supplier', + warehouse = '_Test UAE VAT Supplier Warehouse - _TCUV', + currency = 'AED', + cost_center = 'Main - _TCUV', + expense_account = 'Cost of Goods Sold - _TCUV', + item = "_Test UAE VAT Item", + do_not_save=1, + ) + + pi.append("taxes", { + "charge_type": "On Net Total", + "account_head": "VAT 5% - _TCUV", + "cost_center": "Main - _TCUV", + "description": "VAT 5% @ 5.0", + "rate": 5.0 + }) + + pi.reverse_charge = "Y" + + pi.recoverable_reverse_charge = 100 + + pi.submit() + +