From b6da70efecaecd70b1c8f83f2672d5f320467c0f Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Wed, 15 Jul 2020 18:17:38 +0530 Subject: [PATCH 01/16] fix: Cess amount in GSTR 3B report --- .../doctype/gstr_3b_report/gstr_3b_report.js | 4 + .../doctype/gstr_3b_report/gstr_3b_report.py | 78 ++++++++++--------- 2 files changed, 47 insertions(+), 35 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js index a1cea8f6092..5170185158c 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js @@ -45,6 +45,10 @@ frappe.ui.form.on('GSTR 3B Report', { frm.set_df_property('year', 'options', options); }, + validate: function(frm) { + frm.dirty(); + }, + setup: function(frm) { frm.set_query('company_address', function(doc) { if(!doc.company) { diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 626a88acec7..27e5605b20a 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -243,20 +243,15 @@ class GSTR3BReport(Document): osup_det = self.report_dict["sup_details"]["osup_det"] - for d in inter_state_supply.get("Unregistered", []): - self.report_dict["inter_sup"]["unreg_details"].append(d) - osup_det["txval"] = flt(osup_det["txval"] + d["txval"], 2) - osup_det["iamt"] = flt(osup_det["iamt"] + d["iamt"], 2) + for key, value in iteritems(inter_state_supply): + if key[0] == "Unregistered": + self.report_dict["inter_sup"]["unreg_details"].append(value) - for d in inter_state_supply.get("Registered Composition", []): - self.report_dict["inter_sup"]["comp_details"].append(d) - osup_det["txval"] = flt(osup_det["txval"] + d["txval"], 2) - osup_det["iamt"] = flt(osup_det["iamt"] + d["iamt"], 2) + if key[0] == "Registered Composition": + self.report_dict["inter_sup"]["comp_details"].append(value) - for d in inter_state_supply.get("UIN Holders", []): - self.report_dict["inter_sup"]["uin_details"].append(d) - osup_det["txval"] = flt(osup_det["txval"] + d["txval"], 2) - osup_det["iamt"] = flt(osup_det["iamt"] + d["iamt"], 2) + if key[0] == "UIN Holders": + self.report_dict["inter_sup"]["uin_details"].append(value) def get_total_taxable_value(self, doctype, reverse_charge): @@ -301,41 +296,54 @@ class GSTR3BReport(Document): (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1)[0].total def get_inter_state_supplies(self, state_number): - - inter_state_supply_taxable_value = frappe.db.sql(""" select sum(s.net_total) as total, s.place_of_supply, s.gst_category - from `tabSales Invoice` s where s.docstatus = 1 and month(s.posting_date) = %s and year(s.posting_date) = %s - and s.company = %s and s.company_gstin = %s and s.gst_category in ('Unregistered', 'Registered Composition', 'UIN Holders') - group by s.gst_category, s.place_of_supply""", (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1) - - inter_state_supply_tax = frappe.db.sql(""" select sum(t.tax_amount_after_discount_amount) as tax_amount, s.place_of_supply, s.gst_category - from `tabSales Invoice` s, `tabSales Taxes and Charges` t + inter_state_supply_tax = frappe.db.sql(""" select t.account_head, t.tax_amount_after_discount_amount as tax_amount, + s.name, s.net_total, s.place_of_supply, s.gst_category from `tabSales Invoice` s, `tabSales Taxes and Charges` t where t.parent = s.name and s.docstatus = 1 and month(s.posting_date) = %s and year(s.posting_date) = %s and s.company = %s and s.company_gstin = %s and s.gst_category in ('Unregistered', 'Registered Composition', 'UIN Holders') - group by s.gst_category, s.place_of_supply""", (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1) + """, (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1) - inter_state_supply_tax_mapping={} + inter_state_supply_tax_mapping = {} inter_state_supply_details = {} for d in inter_state_supply_tax: - inter_state_supply_tax_mapping.setdefault(d.place_of_supply, d.tax_amount) + inter_state_supply_tax_mapping.setdefault(d.name, { + 'place_of_supply': d.place_of_supply, + 'taxable_value': d.net_total, + 'camt': 0.0, + 'samt': 0.0, + 'iamt': 0.0, + 'csamt': 0.0 + }) - for d in inter_state_supply_taxable_value: - inter_state_supply_details.setdefault( - d.gst_category, [] - ) + if d.account_head in [d.cgst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['camt'] += d.tax_amount + if d.account_head in [d.sgst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['samt'] += d.tax_amount + + if d.account_head in [d.igst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['samt'] += d.tax_amount + + if d.account_head in [d.cess_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['csamt'] += d.tax_amount + + for key, value in iteritems(inter_state_supply_tax_mapping): if d.place_of_supply: + osup_det = self.report_dict["sup_details"]["osup_det"] + osup_det["txval"] = flt(osup_det["txval"] + value['taxable_value'], 2) + osup_det["camt"] = flt(osup_det["camt"] + value['camt'], 2) + osup_det["samt"] = flt(osup_det["samt"] + value['samt'], 2) + osup_det["csamt"] = flt(osup_det["csamt"] + value['csamt'], 2) + if state_number != d.place_of_supply.split("-")[0]: - inter_state_supply_details[d.gst_category].append({ + inter_state_supply_details.setdefault((d.gst_category, d.place_of_supply), { + "txval": 0.0, "pos": d.place_of_supply.split("-")[0], - "txval": flt(d.total, 2), - "iamt": flt(inter_state_supply_tax_mapping.get(d.place_of_supply), 2) + "iamt": 0.0 }) - else: - osup_det = self.report_dict["sup_details"]["osup_det"] - osup_det["txval"] = flt(osup_det["txval"] + d.total, 2) - osup_det["camt"] = flt(osup_det["camt"] + inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2) - osup_det["samt"] = flt(osup_det["samt"] + inter_state_supply_tax_mapping.get(d.place_of_supply)/2, 2) + + inter_state_supply_details[(d.gst_category, d.place_of_supply)]['txval'] += value['taxable_value'] + inter_state_supply_details[(d.gst_category, d.place_of_supply)]['iamt'] += value['iamt'] return inter_state_supply_details From 6d39066d86eefd01beaf1629c65fa56c7e7f1f01 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Fri, 17 Jul 2020 11:31:15 +0530 Subject: [PATCH 02/16] fix: Multiple fixes in GST --- .../doctype/gstr_3b_report/gstr_3b_report.js | 5 +- .../doctype/gstr_3b_report/gstr_3b_report.py | 3 +- erpnext/regional/india/utils.py | 3 +- erpnext/regional/report/gstr_1/gstr_1.py | 10 ++-- erpnext/regional/report/gstr_2/gstr_2.py | 46 +++++++++---------- 5 files changed, 34 insertions(+), 33 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js index 5170185158c..c7442667c22 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.js @@ -3,6 +3,7 @@ frappe.ui.form.on('GSTR 3B Report', { refresh : function(frm) { + frm.doc.__unsaved = 1; if(!frm.is_new()) { frm.set_intro(__("Please save the report again to rebuild or update")); frm.add_custom_button(__('Download JSON'), function() { @@ -45,10 +46,6 @@ frappe.ui.form.on('GSTR 3B Report', { frm.set_df_property('year', 'options', options); }, - validate: function(frm) { - frm.dirty(); - }, - setup: function(frm) { frm.set_query('company_address', function(doc) { if(!doc.company) { diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 27e5605b20a..4e5c8cce307 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -322,7 +322,7 @@ class GSTR3BReport(Document): inter_state_supply_tax_mapping[d.name]['samt'] += d.tax_amount if d.account_head in [d.igst_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['samt'] += d.tax_amount + inter_state_supply_tax_mapping[d.name]['iamt'] += d.tax_amount if d.account_head in [d.cess_account for d in self.account_heads]: inter_state_supply_tax_mapping[d.name]['csamt'] += d.tax_amount @@ -331,6 +331,7 @@ class GSTR3BReport(Document): if d.place_of_supply: osup_det = self.report_dict["sup_details"]["osup_det"] osup_det["txval"] = flt(osup_det["txval"] + value['taxable_value'], 2) + osup_det["iamt"] = flt(osup_det["iamt"] + value['iamt'], 2) osup_det["camt"] = flt(osup_det["camt"] + value['camt'], 2) osup_det["samt"] = flt(osup_det["samt"] + value['samt'], 2) osup_det["csamt"] = flt(osup_det["csamt"] + value['csamt'], 2) diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py index e4a58482bd9..66fe3f63881 100644 --- a/erpnext/regional/india/utils.py +++ b/erpnext/regional/india/utils.py @@ -689,9 +689,10 @@ def update_totals(gst_tax, doc): doc.rounding_adjustment += flt(doc.rounded_total - doc.grand_total, doc.precision("rounding_adjustment")) - doc.outstanding_amount = doc.base_rounded_total + doc.outstanding_amount = doc.rounded_total or doc.grand_total doc.in_words = money_in_words(doc.grand_total, doc.currency) + doc.set_payment_schedule() def make_regional_gl_entries(gl_entries, doc): country = frappe.get_cached_value('Company', doc.company, 'country') diff --git a/erpnext/regional/report/gstr_1/gstr_1.py b/erpnext/regional/report/gstr_1/gstr_1.py index fae9dc6e9d8..630e42c167c 100644 --- a/erpnext/regional/report/gstr_1/gstr_1.py +++ b/erpnext/regional/report/gstr_1/gstr_1.py @@ -118,7 +118,7 @@ class Gstr1Report(object): row.append(invoice_details.get(fieldname)) taxable_value = 0 - if invoice in self.cgst_igst_invoices: + if invoice in self.cgst_sgst_invoices: division_factor = 2 else: division_factor = 1 @@ -129,6 +129,8 @@ class Gstr1Report(object): taxable_value += abs(net_amount) elif not self.item_tax_rate.get(invoice): taxable_value += abs(net_amount) + elif tax_rate: + taxable_value += abs(net_amount) row += [tax_rate or 0, taxable_value] @@ -227,7 +229,7 @@ class Gstr1Report(object): self.items_based_on_tax_rate = {} self.invoice_cess = frappe._dict() - self.cgst_igst_invoices = [] + self.cgst_sgst_invoices = [] unidentified_gst_accounts = [] for parent, account, item_wise_tax_detail, tax_amount in self.tax_details: @@ -251,8 +253,8 @@ class Gstr1Report(object): tax_rate = tax_amounts[0] if cgst_or_sgst: tax_rate *= 2 - if parent not in self.cgst_igst_invoices: - self.cgst_igst_invoices.append(parent) + if parent not in self.cgst_sgst_invoices: + self.cgst_sgst_invoices.append(parent) rate_based_dict = self.items_based_on_tax_rate\ .setdefault(parent, {}).setdefault(tax_rate, []) diff --git a/erpnext/regional/report/gstr_2/gstr_2.py b/erpnext/regional/report/gstr_2/gstr_2.py index f326fe07cac..f899349ccc0 100644 --- a/erpnext/regional/report/gstr_2/gstr_2.py +++ b/erpnext/regional/report/gstr_2/gstr_2.py @@ -44,30 +44,30 @@ class Gstr2Report(Gstr1Report): for inv, items_based_on_rate in self.items_based_on_tax_rate.items(): invoice_details = self.invoices.get(inv) for rate, items in items_based_on_rate.items(): - if inv not in self.igst_invoices: - rate = rate / 2 - row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) - tax_amount = taxable_value * rate / 100 - row += [0, tax_amount, tax_amount] - else: - row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) - tax_amount = taxable_value * rate / 100 - row += [tax_amount, 0, 0] + if rate: + if inv not in self.igst_invoices: + rate = rate / 2 + row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) + tax_amount = taxable_value * rate / 100 + row += [0, tax_amount, tax_amount] + else: + row, taxable_value = self.get_row_data_for_invoice(inv, invoice_details, rate, items) + tax_amount = taxable_value * rate / 100 + row += [tax_amount, 0, 0] + row += [ + self.invoice_cess.get(inv), + invoice_details.get('eligibility_for_itc'), + invoice_details.get('itc_integrated_tax'), + invoice_details.get('itc_central_tax'), + invoice_details.get('itc_state_tax'), + invoice_details.get('itc_cess_amount') + ] + if self.filters.get("type_of_business") == "CDNR": + row.append("Y" if invoice_details.posting_date <= date(2017, 7, 1) else "N") + row.append("C" if invoice_details.return_against else "R") - row += [ - self.invoice_cess.get(inv), - invoice_details.get('eligibility_for_itc'), - invoice_details.get('itc_integrated_tax'), - invoice_details.get('itc_central_tax'), - invoice_details.get('itc_state_tax'), - invoice_details.get('itc_cess_amount') - ] - if self.filters.get("type_of_business") == "CDNR": - row.append("Y" if invoice_details.posting_date <= date(2017, 7, 1) else "N") - row.append("C" if invoice_details.return_against else "R") - - self.data.append(row) + self.data.append(row) def get_igst_invoices(self): self.igst_invoices = [] @@ -86,7 +86,7 @@ class Gstr2Report(Gstr1Report): conditions += opts[1] if self.filters.get("type_of_business") == "B2B": - conditions += "and ifnull(gst_category, '') != 'Overseas' and is_return != 1 " + conditions += "and ifnull(gst_category, '') in ('Registered Regular', 'Deemed Export', 'SEZ') and is_return != 1 " elif self.filters.get("type_of_business") == "CDNR": conditions += """ and is_return = 1 """ From 6946796047d0b41d4028219fb7d3e15168bd8ad3 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sun, 19 Jul 2020 22:23:13 +0530 Subject: [PATCH 03/16] fix: Tests --- .../doctype/gstr_3b_report/gstr_3b_report.py | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 4e5c8cce307..4e971aba302 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -306,26 +306,27 @@ class GSTR3BReport(Document): inter_state_supply_details = {} for d in inter_state_supply_tax: - inter_state_supply_tax_mapping.setdefault(d.name, { - 'place_of_supply': d.place_of_supply, - 'taxable_value': d.net_total, - 'camt': 0.0, - 'samt': 0.0, - 'iamt': 0.0, - 'csamt': 0.0 - }) + if d.name: + inter_state_supply_tax_mapping.setdefault(d.name, { + 'place_of_supply': d.place_of_supply, + 'taxable_value': d.net_total, + 'camt': 0.0, + 'samt': 0.0, + 'iamt': 0.0, + 'csamt': 0.0 + }) - if d.account_head in [d.cgst_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['camt'] += d.tax_amount + if d.account_head in [d.cgst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['camt'] += d.tax_amount - if d.account_head in [d.sgst_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['samt'] += d.tax_amount + if d.account_head in [d.sgst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['samt'] += d.tax_amount - if d.account_head in [d.igst_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['iamt'] += d.tax_amount + if d.account_head in [d.igst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['iamt'] += d.tax_amount - if d.account_head in [d.cess_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['csamt'] += d.tax_amount + if d.account_head in [d.cess_account for d in self.account_heads]: + inter_state_supply_tax_mapping[d.name]['csamt'] += d.tax_amount for key, value in iteritems(inter_state_supply_tax_mapping): if d.place_of_supply: From 0b31d6f63058ccc891d72eebc7baaaa5e5ccf8dc Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 20 Jul 2020 13:34:46 +0530 Subject: [PATCH 04/16] fix: Test Case --- .../doctype/gstr_3b_report/gstr_3b_report.py | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 4e971aba302..cbb7f45d835 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -8,7 +8,7 @@ from frappe import _ from frappe.model.document import Document import json from six import iteritems -from frappe.utils import flt, getdate +from frappe.utils import flt, getdate, cstr from erpnext.regional.india import state_numbers class GSTR3BReport(Document): @@ -306,27 +306,26 @@ class GSTR3BReport(Document): inter_state_supply_details = {} for d in inter_state_supply_tax: - if d.name: - inter_state_supply_tax_mapping.setdefault(d.name, { - 'place_of_supply': d.place_of_supply, - 'taxable_value': d.net_total, - 'camt': 0.0, - 'samt': 0.0, - 'iamt': 0.0, - 'csamt': 0.0 - }) + inter_state_supply_tax_mapping.setdefault(cstr(d.name), { + 'place_of_supply': d.place_of_supply, + 'taxable_value': d.net_total, + 'camt': 0.0, + 'samt': 0.0, + 'iamt': 0.0, + 'csamt': 0.0 + }) - if d.account_head in [d.cgst_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['camt'] += d.tax_amount + if d.account_head in [d.cgst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[cstr(d.name)]['camt'] += d.tax_amount - if d.account_head in [d.sgst_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['samt'] += d.tax_amount + if d.account_head in [d.sgst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[cstr(d.name)]['samt'] += d.tax_amount - if d.account_head in [d.igst_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['iamt'] += d.tax_amount + if d.account_head in [d.igst_account for d in self.account_heads]: + inter_state_supply_tax_mapping[cstr(d.name)]['iamt'] += d.tax_amount - if d.account_head in [d.cess_account for d in self.account_heads]: - inter_state_supply_tax_mapping[d.name]['csamt'] += d.tax_amount + if d.account_head in [d.cess_account for d in self.account_heads]: + inter_state_supply_tax_mapping[cstr(d.name)]['csamt'] += d.tax_amount for key, value in iteritems(inter_state_supply_tax_mapping): if d.place_of_supply: From b9ba63b0d810ae802e7257a1b224cc0f82f934e9 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 20 Jul 2020 18:08:56 +0530 Subject: [PATCH 05/16] fix: Test Case --- erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index cbb7f45d835..e005133ced0 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -300,6 +300,7 @@ class GSTR3BReport(Document): s.name, s.net_total, s.place_of_supply, s.gst_category from `tabSales Invoice` s, `tabSales Taxes and Charges` t where t.parent = s.name and s.docstatus = 1 and month(s.posting_date) = %s and year(s.posting_date) = %s and s.company = %s and s.company_gstin = %s and s.gst_category in ('Unregistered', 'Registered Composition', 'UIN Holders') + and ifnull(s.name, '') != '' """, (self.month_no, self.year, self.company, self.gst_details.get("gstin")), as_dict=1) inter_state_supply_tax_mapping = {} From 9067adf1416e7f75929e310da290d03b3aa8c950 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 23 Jul 2020 19:48:18 +0530 Subject: [PATCH 06/16] fix: Add print for debug --- erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index e005133ced0..9a603572f60 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -307,6 +307,7 @@ class GSTR3BReport(Document): inter_state_supply_details = {} for d in inter_state_supply_tax: + print(d) inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, 'taxable_value': d.net_total, From d9aa115aaf3955bf873308bce3dd871e7a554ac8 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Fri, 24 Jul 2020 14:08:05 +0530 Subject: [PATCH 07/16] fix: Remove print and add Cess account --- erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py | 1 - .../regional/doctype/gstr_3b_report/test_gstr_3b_report.py | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 9a603572f60..e005133ced0 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -307,7 +307,6 @@ class GSTR3BReport(Document): inter_state_supply_details = {} for d in inter_state_supply_tax: - print(d) inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, 'taxable_value': d.net_total, diff --git a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py index fa6fb706e9b..bf31a6b959a 100644 --- a/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/test_gstr_3b_report.py @@ -387,6 +387,10 @@ def make_company(): def set_account_heads(): + from erpnext.accounts.doctype.account.test_account import create_account + + create_account(account_name="Cess", parent_account = "Duties and Taxes - _GST", company="_Test Company GST") + gst_settings = frappe.get_doc("GST Settings") gst_account = frappe.get_all( @@ -400,6 +404,7 @@ def set_account_heads(): "cgst_account": "CGST - _GST", "sgst_account": "SGST - _GST", "igst_account": "IGST - _GST", + "cess_account": "Cess - _GST" }) gst_settings.save() From 33754b9dc896dfbe6f625357577a8b3dd2e51c0c Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 6 Aug 2020 22:17:37 +0530 Subject: [PATCH 08/16] fix: add print for debug --- erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index e005133ced0..7fd663419e1 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -306,6 +306,9 @@ class GSTR3BReport(Document): inter_state_supply_tax_mapping = {} inter_state_supply_details = {} + print(inter_state_supply_tax) + print(self.account_heads) + for d in inter_state_supply_tax: inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, From 2169bb764017eb57de4e1ed5bceac2b30f05e588 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 6 Aug 2020 23:16:33 +0530 Subject: [PATCH 09/16] fix: Add print --- erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 7fd663419e1..906b672f0f9 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -226,6 +226,7 @@ class GSTR3BReport(Document): txval = 0 total_taxable_value = self.get_total_taxable_value(doctype, reverse_charge) + print(tax_details) for gst_category in gst_category_list: txval += total_taxable_value.get(gst_category,0) for account_head in self.account_heads: @@ -306,9 +307,6 @@ class GSTR3BReport(Document): inter_state_supply_tax_mapping = {} inter_state_supply_details = {} - print(inter_state_supply_tax) - print(self.account_heads) - for d in inter_state_supply_tax: inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, From 5f8e8a3c296a599a583b2a0ac8ad9297a1c5adb9 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Fri, 7 Aug 2020 10:05:22 +0530 Subject: [PATCH 10/16] fix: Add debug print statement --- erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 906b672f0f9..193779619e9 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -226,7 +226,6 @@ class GSTR3BReport(Document): txval = 0 total_taxable_value = self.get_total_taxable_value(doctype, reverse_charge) - print(tax_details) for gst_category in gst_category_list: txval += total_taxable_value.get(gst_category,0) for account_head in self.account_heads: @@ -240,6 +239,8 @@ class GSTR3BReport(Document): self.report_dict[supply_type][supply_category]["txval"] += flt(txval, 2) + print(self.report_dict['sup_details']['osup_det']['iamt'], 1) + def set_inter_state_supply(self, inter_state_supply): osup_det = self.report_dict["sup_details"]["osup_det"] @@ -347,7 +348,7 @@ class GSTR3BReport(Document): inter_state_supply_details[(d.gst_category, d.place_of_supply)]['txval'] += value['taxable_value'] inter_state_supply_details[(d.gst_category, d.place_of_supply)]['iamt'] += value['iamt'] - + print(self.report_dict['sup_details']['osup_det']['iamt'], 2) return inter_state_supply_details def get_inward_nil_exempt(self, state): From 67e07b69dd5abd53dd89440f78d2789ce8fd62f7 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Fri, 7 Aug 2020 15:59:03 +0530 Subject: [PATCH 11/16] fix: More print statements for debugging --- .../regional/doctype/gstr_3b_report/gstr_3b_report.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 193779619e9..a825ed8e141 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -308,7 +308,9 @@ class GSTR3BReport(Document): inter_state_supply_tax_mapping = {} inter_state_supply_details = {} + print(inter_state_supply_tax) for d in inter_state_supply_tax: + print(d) inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, 'taxable_value': d.net_total, @@ -319,18 +321,23 @@ class GSTR3BReport(Document): }) if d.account_head in [d.cgst_account for d in self.account_heads]: + print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['camt'] += d.tax_amount if d.account_head in [d.sgst_account for d in self.account_heads]: + print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['samt'] += d.tax_amount if d.account_head in [d.igst_account for d in self.account_heads]: + print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['iamt'] += d.tax_amount if d.account_head in [d.cess_account for d in self.account_heads]: + print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['csamt'] += d.tax_amount for key, value in iteritems(inter_state_supply_tax_mapping): + print(key, value, d.place_of_supply) if d.place_of_supply: osup_det = self.report_dict["sup_details"]["osup_det"] osup_det["txval"] = flt(osup_det["txval"] + value['taxable_value'], 2) @@ -348,7 +355,7 @@ class GSTR3BReport(Document): inter_state_supply_details[(d.gst_category, d.place_of_supply)]['txval'] += value['taxable_value'] inter_state_supply_details[(d.gst_category, d.place_of_supply)]['iamt'] += value['iamt'] - print(self.report_dict['sup_details']['osup_det']['iamt'], 2) + return inter_state_supply_details def get_inward_nil_exempt(self, state): From b8eff8d141417ed53ea1a479815a1659166f5b58 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Fri, 7 Aug 2020 22:02:14 +0530 Subject: [PATCH 12/16] fix: Test case --- .../regional/doctype/gstr_3b_report/gstr_3b_report.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index a825ed8e141..71f5fc9b47d 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -239,8 +239,6 @@ class GSTR3BReport(Document): self.report_dict[supply_type][supply_category]["txval"] += flt(txval, 2) - print(self.report_dict['sup_details']['osup_det']['iamt'], 1) - def set_inter_state_supply(self, inter_state_supply): osup_det = self.report_dict["sup_details"]["osup_det"] @@ -308,9 +306,7 @@ class GSTR3BReport(Document): inter_state_supply_tax_mapping = {} inter_state_supply_details = {} - print(inter_state_supply_tax) for d in inter_state_supply_tax: - print(d) inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, 'taxable_value': d.net_total, @@ -321,24 +317,19 @@ class GSTR3BReport(Document): }) if d.account_head in [d.cgst_account for d in self.account_heads]: - print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['camt'] += d.tax_amount if d.account_head in [d.sgst_account for d in self.account_heads]: - print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['samt'] += d.tax_amount if d.account_head in [d.igst_account for d in self.account_heads]: - print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['iamt'] += d.tax_amount if d.account_head in [d.cess_account for d in self.account_heads]: - print(d.account_head, d.name, d.tax_amount) inter_state_supply_tax_mapping[cstr(d.name)]['csamt'] += d.tax_amount for key, value in iteritems(inter_state_supply_tax_mapping): - print(key, value, d.place_of_supply) - if d.place_of_supply: + if value.get('place_of_supply'): osup_det = self.report_dict["sup_details"]["osup_det"] osup_det["txval"] = flt(osup_det["txval"] + value['taxable_value'], 2) osup_det["iamt"] = flt(osup_det["iamt"] + value['iamt'], 2) From 1da33f4129c60eb908df94a25c056c349dc960f7 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Fri, 7 Aug 2020 22:51:33 +0530 Subject: [PATCH 13/16] fix: Test case --- .../regional/doctype/gstr_3b_report/gstr_3b_report.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 71f5fc9b47d..d9a68df1602 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -310,6 +310,7 @@ class GSTR3BReport(Document): inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, 'taxable_value': d.net_total, + 'gst_category': d.gst_category, 'camt': 0.0, 'samt': 0.0, 'iamt': 0.0, @@ -337,15 +338,15 @@ class GSTR3BReport(Document): osup_det["samt"] = flt(osup_det["samt"] + value['samt'], 2) osup_det["csamt"] = flt(osup_det["csamt"] + value['csamt'], 2) - if state_number != d.place_of_supply.split("-")[0]: - inter_state_supply_details.setdefault((d.gst_category, d.place_of_supply), { + if state_number != value.get('place_of_supply').split("-")[0]: + inter_state_supply_details.setdefault((value.get('gst_category'), value.get('place_of_supply')), { "txval": 0.0, - "pos": d.place_of_supply.split("-")[0], + "pos": value.get('place_of_supply').split("-")[0], "iamt": 0.0 }) - inter_state_supply_details[(d.gst_category, d.place_of_supply)]['txval'] += value['taxable_value'] - inter_state_supply_details[(d.gst_category, d.place_of_supply)]['iamt'] += value['iamt'] + inter_state_supply_details[(value.get('gst_category'), value.get('place_of_supply'))]['txval'] += value['taxable_value'] + inter_state_supply_details[(value.get('gst_category'), value.get('place_of_supply'))]['iamt'] += value['iamt'] return inter_state_supply_details From 3ae4a83504f1299ef288ea66727966d6cc707583 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sat, 8 Aug 2020 17:52:45 +0530 Subject: [PATCH 14/16] fix: Add print for debug --- erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index d9a68df1602..02e309bc411 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -330,6 +330,7 @@ class GSTR3BReport(Document): inter_state_supply_tax_mapping[cstr(d.name)]['csamt'] += d.tax_amount for key, value in iteritems(inter_state_supply_tax_mapping): + print(key, value, state_number) if value.get('place_of_supply'): osup_det = self.report_dict["sup_details"]["osup_det"] osup_det["txval"] = flt(osup_det["txval"] + value['taxable_value'], 2) @@ -348,6 +349,7 @@ class GSTR3BReport(Document): inter_state_supply_details[(value.get('gst_category'), value.get('place_of_supply'))]['txval'] += value['taxable_value'] inter_state_supply_details[(value.get('gst_category'), value.get('place_of_supply'))]['iamt'] += value['iamt'] + print(inter_state_supply_details) return inter_state_supply_details def get_inward_nil_exempt(self, state): From bbfd5a4cc8bf3a3a951cb71342122c90dadff89e Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sat, 8 Aug 2020 19:46:09 +0530 Subject: [PATCH 15/16] fix: Test Cases --- .../doctype/gstr_3b_report/gstr_3b_report.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 02e309bc411..2cf06307980 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -307,6 +307,7 @@ class GSTR3BReport(Document): inter_state_supply_details = {} for d in inter_state_supply_tax: + print(d) inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, 'taxable_value': d.net_total, @@ -317,16 +318,20 @@ class GSTR3BReport(Document): 'csamt': 0.0 }) - if d.account_head in [d.cgst_account for d in self.account_heads]: + if d.account_head in [a.cgst_account for a in self.account_heads]: + print(d, "CGST") inter_state_supply_tax_mapping[cstr(d.name)]['camt'] += d.tax_amount - if d.account_head in [d.sgst_account for d in self.account_heads]: + if d.account_head in [a.sgst_account for a in self.account_heads]: + print(d, "SGST") inter_state_supply_tax_mapping[cstr(d.name)]['samt'] += d.tax_amount - if d.account_head in [d.igst_account for d in self.account_heads]: + if d.account_head in [a.igst_account for a in self.account_heads]: + print(d, "IGST") inter_state_supply_tax_mapping[cstr(d.name)]['iamt'] += d.tax_amount - if d.account_head in [d.cess_account for d in self.account_heads]: + if d.account_head in [a.cess_account for a in self.account_heads]: + print(d, "CESS") inter_state_supply_tax_mapping[cstr(d.name)]['csamt'] += d.tax_amount for key, value in iteritems(inter_state_supply_tax_mapping): From f0f20bb434bf768154e15db273f1602acd687977 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Sat, 8 Aug 2020 20:58:01 +0530 Subject: [PATCH 16/16] fix: RCM taxable value in GSTR3b report --- .../doctype/gstr_3b_report/gstr_3b_report.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py index 2cf06307980..b02c4bc7333 100644 --- a/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py +++ b/erpnext/regional/doctype/gstr_3b_report/gstr_3b_report.py @@ -234,9 +234,6 @@ class GSTR3BReport(Document): self.report_dict[supply_type][supply_category][account_map.get(account_type)] += \ flt(tax_details.get((account_name, gst_category), {}).get("amount"), 2) - for k, v in iteritems(account_map): - txval -= self.report_dict.get(supply_type, {}).get(supply_category, {}).get(v, 0) - self.report_dict[supply_type][supply_category]["txval"] += flt(txval, 2) def set_inter_state_supply(self, inter_state_supply): @@ -256,7 +253,7 @@ class GSTR3BReport(Document): def get_total_taxable_value(self, doctype, reverse_charge): return frappe._dict(frappe.db.sql(""" - select gst_category, sum(base_grand_total) as total + select gst_category, sum(net_total) as total from `tab{doctype}` where docstatus = 1 and month(posting_date) = %s and year(posting_date) = %s and reverse_charge = %s @@ -307,7 +304,6 @@ class GSTR3BReport(Document): inter_state_supply_details = {} for d in inter_state_supply_tax: - print(d) inter_state_supply_tax_mapping.setdefault(cstr(d.name), { 'place_of_supply': d.place_of_supply, 'taxable_value': d.net_total, @@ -319,23 +315,18 @@ class GSTR3BReport(Document): }) if d.account_head in [a.cgst_account for a in self.account_heads]: - print(d, "CGST") inter_state_supply_tax_mapping[cstr(d.name)]['camt'] += d.tax_amount if d.account_head in [a.sgst_account for a in self.account_heads]: - print(d, "SGST") inter_state_supply_tax_mapping[cstr(d.name)]['samt'] += d.tax_amount if d.account_head in [a.igst_account for a in self.account_heads]: - print(d, "IGST") inter_state_supply_tax_mapping[cstr(d.name)]['iamt'] += d.tax_amount if d.account_head in [a.cess_account for a in self.account_heads]: - print(d, "CESS") inter_state_supply_tax_mapping[cstr(d.name)]['csamt'] += d.tax_amount for key, value in iteritems(inter_state_supply_tax_mapping): - print(key, value, state_number) if value.get('place_of_supply'): osup_det = self.report_dict["sup_details"]["osup_det"] osup_det["txval"] = flt(osup_det["txval"] + value['taxable_value'], 2) @@ -354,7 +345,6 @@ class GSTR3BReport(Document): inter_state_supply_details[(value.get('gst_category'), value.get('place_of_supply'))]['txval'] += value['taxable_value'] inter_state_supply_details[(value.get('gst_category'), value.get('place_of_supply'))]['iamt'] += value['iamt'] - print(inter_state_supply_details) return inter_state_supply_details def get_inward_nil_exempt(self, state):