1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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()))
|