fix(regional): minor fixes and test for South Africa VAT report (#26933)
* fix: added test and minor fixes
* fix: sider fixes
* fix: sider
* fix: test fixes
Co-authored-by: Afshan <33727827+AfshanKhan@users.noreply.github.com>
Co-authored-by: Saqib <nextchamp.saqib@gmail.com>
diff --git a/erpnext/regional/report/vat_audit_report/test_vat_audit_report.py b/erpnext/regional/report/vat_audit_report/test_vat_audit_report.py
new file mode 100644
index 0000000..dea17a6
--- /dev/null
+++ b/erpnext/regional/report/vat_audit_report/test_vat_audit_report.py
@@ -0,0 +1,193 @@
+# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from unittest import TestCase
+from frappe.utils import today
+
+from erpnext.accounts.doctype.account.test_account import create_account
+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.regional.report.vat_audit_report.vat_audit_report import execute
+
+class TestVATAuditReport(TestCase):
+ def setUp(self):
+ frappe.set_user("Administrator")
+ make_company("_Test Company SA VAT", "_TCSV")
+
+ create_account(account_name="VAT - 0%", account_type="Tax",
+ parent_account="Duties and Taxes - _TCSV", company="_Test Company SA VAT")
+ create_account(account_name="VAT - 15%", account_type="Tax",
+ parent_account="Duties and Taxes - _TCSV", company="_Test Company SA VAT")
+ set_sa_vat_accounts()
+
+ make_item("_Test SA VAT Item")
+ make_item("_Test SA VAT Zero Rated Item", properties = {"is_zero_rated": 1})
+
+ make_customer()
+ make_supplier()
+
+ make_sales_invoices()
+ create_purchase_invoices()
+
+ def tearDown(self):
+ frappe.db.sql("delete from `tabSales Invoice` where company='_Test Company SA VAT'")
+ frappe.db.sql("delete from `tabPurchase Invoice` where company='_Test Company SA VAT'")
+
+ def test_vat_audit_report(self):
+ filters = {
+ "company": "_Test Company SA VAT",
+ "from_date": today(),
+ "to_date": today()
+ }
+ columns, data = execute(filters)
+ total_tax_amount = 0
+ total_row_tax = 0
+ for row in data:
+ keys = row.keys()
+ # skips total row tax_amount in if.. and skips section header in elif..
+ if 'voucher_no' in keys:
+ total_tax_amount = total_tax_amount + row['tax_amount']
+ elif 'tax_amount' in keys:
+ total_row_tax = total_row_tax + row['tax_amount']
+
+ self.assertEqual(total_tax_amount, total_row_tax)
+
+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": "ZAR",
+ "country": "South Africa",
+ "create_chart_of_accounts_based_on": "Standard Template"
+ })
+ company.insert()
+ else:
+ company = frappe.get_doc("Company", company_name)
+
+ 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_sa_vat_accounts():
+ if not frappe.db.exists("South Africa VAT Settings", "_Test Company SA VAT"):
+ vat_accounts = frappe.get_all(
+ "Account",
+ fields=["name"],
+ filters = {
+ "company": "_Test Company SA VAT",
+ "is_group": 0,
+ "account_type": "Tax"
+ }
+ )
+
+ sa_vat_accounts = []
+ for account in vat_accounts:
+ sa_vat_accounts.append({
+ "doctype": "South Africa VAT Account",
+ "account": account.name
+ })
+
+ frappe.get_doc({
+ "company": "_Test Company SA VAT",
+ "vat_accounts": sa_vat_accounts,
+ "doctype": "South Africa VAT Settings",
+ }).insert()
+
+def make_customer():
+ if not frappe.db.exists("Customer", "_Test SA Customer"):
+ frappe.get_doc({
+ "doctype": "Customer",
+ "customer_name": "_Test SA Customer",
+ "customer_type": "Company",
+ }).insert()
+
+def make_supplier():
+ if not frappe.db.exists("Supplier", "_Test SA Supplier"):
+ frappe.get_doc({
+ "doctype": "Supplier",
+ "supplier_name": "_Test SA Supplier",
+ "supplier_type": "Company",
+ "supplier_group":"All Supplier Groups"
+ }).insert()
+
+def make_item(item_code, properties=None):
+ if not frappe.db.exists("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()
+
+def make_sales_invoices():
+ def make_sales_invoices_wrapper(item, rate, tax_account, tax_rate, tax=True):
+ si = create_sales_invoice(
+ company="_Test Company SA VAT",
+ customer = "_Test SA Customer",
+ currency = "ZAR",
+ item=item,
+ rate=rate,
+ warehouse = "Finished Goods - _TCSV",
+ debit_to = "Debtors - _TCSV",
+ income_account = "Sales - _TCSV",
+ expense_account = "Cost of Goods Sold - _TCSV",
+ cost_center = "Main - _TCSV",
+ do_not_save=1
+ )
+ if tax:
+ si.append("taxes", {
+ "charge_type": "On Net Total",
+ "account_head": tax_account,
+ "cost_center": "Main - _TCSV",
+ "description": "VAT 15% @ 15.0",
+ "rate": tax_rate
+ })
+
+ si.submit()
+
+ test_item = "_Test SA VAT Item"
+ test_zero_rated_item = "_Test SA VAT Zero Rated Item"
+
+ make_sales_invoices_wrapper(test_item, 100.0, "VAT - 15% - _TCSV", 15.0)
+ make_sales_invoices_wrapper(test_zero_rated_item, 100.0, "VAT - 0% - _TCSV", 0.0)
+
+def create_purchase_invoices():
+ pi = make_purchase_invoice(
+ company = "_Test Company SA VAT",
+ supplier = "_Test SA Supplier",
+ supplier_warehouse = "Finished Goods - _TCSV",
+ warehouse = "Finished Goods - _TCSV",
+ currency = "ZAR",
+ cost_center = "Main - _TCSV",
+ expense_account = "Cost of Goods Sold - _TCSV",
+ item = "_Test SA VAT Item",
+ qty = 1,
+ rate = 100,
+ uom = "Nos",
+ do_not_save = 1
+ )
+ pi.append("taxes", {
+ "charge_type": "On Net Total",
+ "account_head": "VAT - 15% - _TCSV",
+ "cost_center": "Main - _TCSV",
+ "description": "VAT 15% @ 15.0",
+ "rate": 15.0
+ })
+
+ pi.submit()
diff --git a/erpnext/regional/report/vat_audit_report/vat_audit_report.py b/erpnext/regional/report/vat_audit_report/vat_audit_report.py
index 17aca17..88f6b92 100644
--- a/erpnext/regional/report/vat_audit_report/vat_audit_report.py
+++ b/erpnext/regional/report/vat_audit_report/vat_audit_report.py
@@ -1,11 +1,11 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
import json
from frappe import _
-from frappe.utils import formatdate
+from frappe.utils import formatdate, get_link_to_form
def execute(filters=None):
return VATAuditReport(filters).run()
@@ -42,7 +42,8 @@
self.sa_vat_accounts = frappe.get_list("South Africa VAT Account",
filters = {"parent": self.filters.company}, pluck="account")
if not self.sa_vat_accounts and not frappe.flags.in_test and not frappe.flags.in_migrate:
- frappe.throw(_("Please set VAT Accounts in South Africa VAT Settings"))
+ link_to_settings = get_link_to_form("South Africa VAT Settings", "", label="South Africa VAT Settings")
+ frappe.throw(_("Please set VAT Accounts in {0}").format(link_to_settings))
def get_invoice_data(self, doctype):
conditions = self.get_conditions()
@@ -69,7 +70,7 @@
items = frappe.db.sql("""
SELECT
- item_code, parent, taxable_value, base_net_amount, is_zero_rated
+ item_code, parent, base_net_amount, is_zero_rated
FROM
`tab%s Item`
WHERE
@@ -79,7 +80,7 @@
if d.item_code not in self.invoice_items.get(d.parent, {}):
self.invoice_items.setdefault(d.parent, {}).setdefault(d.item_code, {
'net_amount': 0.0})
- self.invoice_items[d.parent][d.item_code]['net_amount'] += d.get('taxable_value', 0) or d.get('base_net_amount', 0)
+ self.invoice_items[d.parent][d.item_code]['net_amount'] += d.get('base_net_amount', 0)
self.invoice_items[d.parent][d.item_code]['is_zero_rated'] = d.is_zero_rated
def get_items_based_on_tax_rate(self, doctype):