summaryrefslogtreecommitdiff
path: root/addons/l10n_in/report/exempted_gst_report.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/l10n_in/report/exempted_gst_report.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/l10n_in/report/exempted_gst_report.py')
-rw-r--r--addons/l10n_in/report/exempted_gst_report.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/addons/l10n_in/report/exempted_gst_report.py b/addons/l10n_in/report/exempted_gst_report.py
new file mode 100644
index 00000000..661a5c08
--- /dev/null
+++ b/addons/l10n_in/report/exempted_gst_report.py
@@ -0,0 +1,95 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import api, fields, models, tools
+
+
+class L10nInExemptedReport(models.Model):
+ _name = "l10n_in.exempted.report"
+ _description = "Exempted Gst Supplied Statistics"
+ _auto = False
+
+ account_move_id = fields.Many2one('account.move', string="Account Move")
+ partner_id = fields.Many2one('res.partner', string="Customer")
+ out_supply_type = fields.Char(string="Outward Supply Type")
+ in_supply_type = fields.Char(string="Inward Supply Type")
+ nil_rated_amount = fields.Float("Nil rated supplies")
+ exempted_amount = fields.Float("Exempted")
+ non_gst_supplies = fields.Float("Non GST Supplies")
+ date = fields.Date("Date")
+ company_id = fields.Many2one('res.company', string="Company")
+ journal_id = fields.Many2one('account.journal', string="Journal")
+
+ def _select(self):
+ select_str = """SELECT aml.id AS id,
+ aml.partner_id AS partner_id,
+ am.date,
+ aml.balance * (CASE WHEN aj.type = 'sale' THEN -1 ELSE 1 END) AS price_total,
+ am.journal_id,
+ aj.company_id,
+ aml.move_id as account_move_id,
+
+ (CASE WHEN p.state_id = cp.state_id
+ THEN (CASE WHEN p.vat IS NOT NULL
+ THEN 'Intra-State supplies to registered persons'
+ ELSE 'Intra-State supplies to unregistered persons'
+ END)
+ WHEN p.state_id != cp.state_id
+ THEN (CASE WHEN p.vat IS NOT NULL
+ THEN 'Inter-State supplies to registered persons'
+ ELSE 'Inter-State supplies to unregistered persons'
+ END)
+ END) AS out_supply_type,
+ (CASE WHEN p.state_id = cp.state_id
+ THEN 'Intra-State supplies'
+ WHEN p.state_id != cp.state_id
+ THEN 'Inter-State supplies'
+ END) AS in_supply_type,
+
+ (CASE WHEN (
+ SELECT MAX(account_tax_id) FROM account_move_line_account_tax_rel
+ JOIN account_tax at ON at.id = account_tax_id
+ WHERE account_move_line_id = aml.id AND at.tax_group_id IN
+ ((SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name='nil_rated_group'))
+ ) IS NOT NULL
+ THEN aml.balance * (CASE WHEN aj.type = 'sale' THEN -1 ELSE 1 END)
+ ELSE 0
+ END) AS nil_rated_amount,
+
+ (CASE WHEN (
+ SELECT MAX(account_tax_id) FROM account_move_line_account_tax_rel
+ JOIN account_tax at ON at.id = account_tax_id
+ WHERE account_move_line_id = aml.id AND at.tax_group_id IN
+ ((SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name='exempt_group'))
+ ) IS NOT NULL
+ THEN aml.balance * (CASE WHEN aj.type = 'sale' THEN -1 ELSE 1 END)
+ ELSE 0
+ END) AS exempted_amount,
+
+ (CASE WHEN (
+ SELECT MAX(account_tax_id) FROM account_move_line_account_tax_rel
+ WHERE account_move_line_id = aml.id
+ ) IS NULL
+ THEN aml.balance * (CASE WHEN aj.type = 'sale' THEN -1 ELSE 1 END)
+ ELSE 0
+ END) AS non_gst_supplies
+ """
+ return select_str
+
+ def _from(self):
+ from_str = """FROM account_move_line aml
+ JOIN account_move am ON am.id = aml.move_id
+ JOIN account_account aa ON aa.id = aml.account_id
+ JOIN account_journal aj ON aj.id = am.journal_id
+ JOIN res_company c ON c.id = aj.company_id
+ LEFT JOIN res_partner cp ON cp.id = COALESCE(aj.l10n_in_gstin_partner_id, c.partner_id)
+ LEFT JOIN res_partner p ON p.id = am.partner_id
+ LEFT JOIN res_country pc ON pc.id = p.country_id
+ WHERE aa.internal_type = 'other' and aml.tax_line_id IS NULL
+ """
+ return from_str
+
+ def init(self):
+ tools.drop_view_if_exists(self.env.cr, self._table)
+ self._cr.execute("""CREATE OR REPLACE VIEW %s AS (%s %s)""" % (
+ self._table, self._select(), self._from()))