From 031d77be2e58a033786a81354f08607ea07e4910 Mon Sep 17 00:00:00 2001 From: hasnain2808 Date: Thu, 10 Sep 2020 17:40:01 +0530 Subject: [PATCH] feat: add reverse charge to uae vat report --- erpnext/regional/report/uae_vat/uae_vat.py | 53 +++++++++++++++---- .../regional/united_arab_emirates/setup.py | 8 +-- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/erpnext/regional/report/uae_vat/uae_vat.py b/erpnext/regional/report/uae_vat/uae_vat.py index 6e9565b1e5f..50d1ddd3510 100644 --- a/erpnext/regional/report/uae_vat/uae_vat.py +++ b/erpnext/regional/report/uae_vat/uae_vat.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import frappe +from erpnext.regional.united_arab_emirates.utils import get_tax_accounts def execute(filters=None): columns = get_columns() @@ -70,19 +71,21 @@ def get_data(filters = None): "vat_amount": 0 } ) + data.append( + { + "no": '3', + "legend": f'Supplies subject to the reverse charge provision', + "amount": get_reverse_charge_total(filters), + "vat_amount": get_reverse_charge_tax(filters) + } + ) return data def get_total_emiratewise(filters): - conditions = get_conditions(filters) - print(f""" - select emirate, sum(total), sum(total_taxes_and_charges) from `tabSales Invoice` - where docstatus = 1 {conditions} - group by `tabSales Invoice`.emirate; - """) return frappe.db.sql(f""" select emirate, sum(total), sum(total_taxes_and_charges) from `tabSales Invoice` - where docstatus = 1 {conditions} + where docstatus = 1 {get_conditions(filters)} group by `tabSales Invoice`.emirate; """, filters) @@ -99,10 +102,40 @@ def get_emirates(): def get_conditions(filters): conditions = "" + for opts in (("company", f' and company="{filters.get("company")}"'), + ("from_date", f' and posting_date>="{filters.get("from_date")}"'), + ("to_date", f' and posting_date<="{filters.get("to_date")}"')): + if filters.get(opts[0]): + conditions += opts[1] + return conditions - for opts in (("company", " and company=%(company)s"), - ("from_date", " and posting_date>=%(from_date)s"), - ("to_date", " and posting_date<=%(to_date)s")): +def get_reverse_charge_tax(filters): + return frappe.db.sql(f""" + select sum(debit) from + `tabPurchase Invoice` inner join `tabGL Entry` + on `tabGL Entry`.voucher_no = `tabPurchase Invoice`.name + where + `tabPurchase Invoice`.reverse_charge = "Y" + and `tabPurchase Invoice`.docstatus = 1 + and `tabGL Entry`.docstatus = 1 {get_conditions_join(filters)} + and account in ("{'", "'.join(get_tax_accounts(filters['company']))}"); + """)[0][0] + + +def get_reverse_charge_total(filters): + return frappe.db.sql(f""" + select sum(total) from + `tabPurchase Invoice` + where + reverse_charge = "Y" + and docstatus = 1 {get_conditions(filters)} ; + """)[0][0] + +def get_conditions_join(filters): + conditions = "" + for opts in (("company", f' and `tabPurchase Invoice`.company="{filters.get("company")}"'), + ("from_date", f' and `tabPurchase Invoice`.posting_date>="{filters.get("from_date")}"'), + ("to_date", f' and `tabPurchase Invoice`.posting_date<="{filters.get("to_date")}"')): if filters.get(opts[0]): conditions += opts[1] return conditions \ No newline at end of file diff --git a/erpnext/regional/united_arab_emirates/setup.py b/erpnext/regional/united_arab_emirates/setup.py index a2938bb3003..d38d647277c 100644 --- a/erpnext/regional/united_arab_emirates/setup.py +++ b/erpnext/regional/united_arab_emirates/setup.py @@ -20,7 +20,7 @@ def make_custom_fields(): insert_after='group_same_items', print_hide=1, collapsible=1), dict(fieldname='permit_no', label='Permit Number', fieldtype='Data', insert_after='vat_section', print_hide=1), - dict(fieldname='reverse_charge_applicable', label='Reverse Charge Applicable', + dict(fieldname='reverse_charge', label='Reverse Charge Applicable', fieldtype='Select', insert_after='permit_no', print_hide=1, options='Y\nN', default='N') ] @@ -42,7 +42,7 @@ def make_custom_fields(): fieldtype='Read Only', insert_after='customer_name', fetch_from='customer.customer_name_in_arabic', print_hide=1), dict(fieldname='emirate', label='Emirate', insert_after='customer_address', - fetch_from='customer_address.emirates'), + fieldtype='Read Only', fetch_from='customer_address.emirates'), ] invoice_item_fields = [ @@ -79,8 +79,8 @@ def make_custom_fields(): fieldtype='Data', insert_after='supplier_name'), ], 'Address': [ - dict(fieldname='emirates', label='Emirates', - fieldtype='Data', insert_after='state'), + dict(fieldname='emirates', label='Emirates', fieldtype='Select', insert_after='state', + options='Abu Dhabi\nAjman\nDubai\nFujairah\nRas Al Khaimah\nSharjah\nUmm Al Quwain') ], 'Purchase Invoice': purchase_invoice_fields + invoice_fields, 'Purchase Order': purchase_invoice_fields + invoice_fields,