diff --git a/erpnext/regional/report/uae_vat/uae_vat.js b/erpnext/regional/report/uae_vat/uae_vat.js index 45df167823..0213956d44 100644 --- a/erpnext/regional/report/uae_vat/uae_vat.js +++ b/erpnext/regional/report/uae_vat/uae_vat.js @@ -27,5 +27,15 @@ frappe.query_reports["UAE VAT"] = { "reqd": 1, "default": frappe.datetime.get_today() }, - ] + ], + "formatter": function(value, row, column, data, default_formatter) { + if (data + && (data.legend=='VAT on Sales and All Other Outputs' || data.legend=='VAT on Expenses and All Other Inputs') + && data.legend==value) { + value = $(`${value}`); + var $value = $(value).css("font-weight", "bold"); + value = $value.wrap("
").parent().html(); + } + return value; + }, }; diff --git a/erpnext/regional/report/uae_vat/uae_vat.py b/erpnext/regional/report/uae_vat/uae_vat.py index b3e52be3e5..1a3537c268 100644 --- a/erpnext/regional/report/uae_vat/uae_vat.py +++ b/erpnext/regional/report/uae_vat/uae_vat.py @@ -41,12 +41,6 @@ def get_columns(): "label": "VAT Amount (AED)", "fieldtype": "Currency", "width": 100 - }, - { - "fieldname": "adjustment", - "label": "Adjustment (AED)", - "fieldtype": "Currency", - "width": 100 } ] @@ -61,7 +55,12 @@ def get_data(filters = None): Dict: Dictionary containing chart data """ data = [] - data.append({"legend": f'VAT on Sales and All Other Outputs',}) + data.append({ + "no": '', + "legend": f'VAT on Sales and All Other Outputs', + "amount": '', + "vat_amount": '' + }) total_emiratewise = get_total_emiratewise(filters) emirates = get_emirates() amounts_by_emirate = {} @@ -108,7 +107,30 @@ def get_data(filters = None): } ) - data.append({"legend": f'VAT on Expenses and All Other Inputs'}) + data.append( + { + "no": '4', + "legend": f'Zero Rated', + "amount": get_zero_rated_total(filters), + "vat_amount": "-" + } + ) + + data.append( + { + "no": '5', + "legend": f'Exempt Supplies', + "amount": get_exempt_total(filters), + "vat_amount": "-" + } + ) + + data.append({ + "no": '', + "legend": f'VAT on Expenses and All Other Inputs', + "amount": '', + "vat_amount": '' + }) data.append( { "no": '9', @@ -226,7 +248,7 @@ def get_reverse_charge_total(filters): where reverse_charge = "Y" and docstatus = 1 {get_conditions(filters)} ; - """)[0][0] + """)[0][0] or 0 def get_reverse_charge_tax(filters): """Returns the sum of the tax of each Purchase invoice made @@ -246,7 +268,7 @@ def get_reverse_charge_tax(filters): 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] + """)[0][0] or 0 @@ -292,7 +314,7 @@ def get_reverse_charge_recoverable_total(filters): reverse_charge = "Y" and claimable_reverse_charge > 0 and docstatus = 1 {get_conditions(filters)} ; - """)[0][0] + """)[0][0] or 0 def get_reverse_charge_recoverable_tax(filters): @@ -314,7 +336,7 @@ def get_reverse_charge_recoverable_tax(filters): and `tabPurchase Invoice`.claimable_reverse_charge > 0 and `tabGL Entry`.docstatus = 1 {get_conditions_join(filters)} and account in ("{'", "'.join(get_tax_accounts(filters['company']))}"); - """)[0][0] + """)[0][0] or 0 def get_standard_rated_expenses_total(filters): @@ -340,7 +362,7 @@ def get_standard_rated_expenses_total(filters): where standard_rated_expenses > 0 and docstatus = 1 {get_conditions(filters)} ; - """)[0][0] + """)[0][0] or 0 def get_standard_rated_expenses_tax(filters): @@ -358,7 +380,7 @@ def get_standard_rated_expenses_tax(filters): where standard_rated_expenses > 0 and docstatus = 1 {get_conditions(filters)} ; - """)[0][0] + """)[0][0] or 0 def get_tourist_tax_return_total(filters): """Returns the sum of the total of each Sales invoice with non zero tourist_tax_return @@ -383,7 +405,7 @@ def get_tourist_tax_return_total(filters): where tourist_tax_return > 0 and docstatus = 1 {get_conditions(filters)} ; - """)[0][0] + """)[0][0] or 0 def get_tourist_tax_return_tax(filters): @@ -401,4 +423,37 @@ def get_tourist_tax_return_tax(filters): where tourist_tax_return > 0 and docstatus = 1 {get_conditions(filters)} ; - """)[0][0] \ No newline at end of file + """)[0][0] or 0 + +def get_zero_rated_total(filters): + """Returns the sum of each Sales Invoice Item Amount which is zero rated + + Args: + filters (Dict, optional): Dictionary consisting of the filters selected by the user. Defaults to None. + + Returns: + Float: sum of each Sales Invoice Item Amount which is zero rated + """ + return frappe.db.sql(f""" + select sum(i.base_amount) as total from + `tabSales Invoice Item` i, `tabSales Invoice` s + where s.docstatus = 1 and i.parent = s.name and i.is_zero_rated = 1 + {get_conditions(filters)} ; + """)[0][0] or 0 + + +def get_exempt_total(filters): + """Returns the sum of each Sales Invoice Item Amount which is Vat Exempt + + Args: + filters (Dict, optional): Dictionary consisting of the filters selected by the user. Defaults to None. + + Returns: + Float: sum of each Sales Invoice Item Amount which is Vat Exempt + """ + return frappe.db.sql(f""" + select sum(i.base_amount) as total from + `tabSales Invoice Item` i, `tabSales Invoice` s + where s.docstatus = 1 and i.parent = s.name and i.is_exempt = 1 + {get_conditions(filters)} ; + """)[0][0] or 0 \ 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 01763402b1..29ad41c9af 100644 --- a/erpnext/regional/united_arab_emirates/setup.py +++ b/erpnext/regional/united_arab_emirates/setup.py @@ -15,6 +15,13 @@ def setup(company=None, patch=True): create_sales_tax(company) def make_custom_fields(): + is_zero_rated = dict(fieldname='is_zero_rated', label='Is Zero Rated', + fieldtype='Check', fetch_from='item_code.is_zero_rated', insert_after='description', + print_hide=1) + is_exempt = dict(fieldname='is_exempt', label='Is Exempt', + fieldtype='Check', fetch_from='item_code.is_exempt', insert_after='is_zero_rated', + print_hide=1) + invoice_fields = [ dict(fieldname='vat_section', label='VAT Details', fieldtype='Section Break', insert_after='group_same_items', print_hide=1, collapsible=1), @@ -46,8 +53,6 @@ def make_custom_fields(): fetch_from='customer.customer_name_in_arabic', print_hide=1), dict(fieldname='emirate', label='Emirate', insert_after='customer_address', fieldtype='Read Only', fetch_from='customer_address.emirates'), - # dict(fieldname='returns_column_break', fieldtype='Column Break', - # insert_after='select_print_heading'), dict(fieldname='tourist_tax_return', label='Tax Refund provided to Tourists (AED)', insert_after='permit_no', fieldtype='Currency', print_hide=1, default='0'), dict(fieldname='standard_rated_expenses', label='Standard Rated Expenses (AED)', @@ -78,10 +83,12 @@ def make_custom_fields(): 'Item': [ dict(fieldname='tax_code', label='Tax Code', fieldtype='Data', insert_after='item_group'), - # dict(fieldname='is_zero_rated', label='Is Zero Rated', - # fieldtype='Check', insert_after='tax_code'), - # dict(fieldname='is_exempt', label='Is Exempt ', - # fieldtype='Check', insert_after='is_zero_rated') + dict(fieldname='is_zero_rated', label='Is Zero Rated', + fieldtype='Check', insert_after='tax_code', + print_hide=1), + dict(fieldname='is_exempt', label='Is Exempt ', + fieldtype='Check', insert_after='is_zero_rated', + print_hide=1) ], 'Customer': [ dict(fieldname='customer_name_in_arabic', label='Customer Name in Arabic', @@ -101,7 +108,7 @@ def make_custom_fields(): 'Sales Invoice': sales_invoice_fields + invoice_fields, 'Sales Order': sales_invoice_fields + invoice_fields, 'Delivery Note': sales_invoice_fields + invoice_fields, - 'Sales Invoice Item': invoice_item_fields + delivery_date_field, + 'Sales Invoice Item': invoice_item_fields + delivery_date_field + [is_zero_rated, is_exempt], 'Purchase Invoice Item': invoice_item_fields, 'Sales Order Item': invoice_item_fields, 'Delivery Note Item': invoice_item_fields,