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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, tools
class L10nInProductHsnReport(models.Model):
_name = "l10n_in.product.hsn.report"
_description = "Product HSN Statistics"
_auto = False
_order = 'date desc'
account_move_id = fields.Many2one('account.move', string="Account Move")
partner_id = fields.Many2one('res.partner', string="Customer")
product_id = fields.Many2one("product.product", string="Product")
uom_id = fields.Many2one('uom.uom', string="UOM")
quantity = fields.Float(string="Product Qty")
date = fields.Date(string="Date")
price_total = fields.Float(string='Taxable Value')
total = fields.Float(string="Total Value")
igst_amount = fields.Float(string="Integrated Tax Amount")
cgst_amount = fields.Float(string="Central Tax Amount")
sgst_amount = fields.Float(string="State/UT Tax Amount")
cess_amount = fields.Float(string="Cess Amount")
company_id = fields.Many2one('res.company', string="Company")
journal_id = fields.Many2one('account.journal', string="Journal")
hsn_code = fields.Char(string="HSN")
hsn_description = fields.Char(string="HSN description")
l10n_in_uom_code = fields.Char(string="UQC")
def _select(self):
select_str = """SELECT aml.id AS id,
aml.move_id AS account_move_id,
aml.partner_id AS partner_id,
aml.product_id,
aml.product_uom_id AS uom_id,
am.date,
am.journal_id,
aj.company_id,
CASE WHEN pt.l10n_in_hsn_code IS NULL THEN '' ELSE pt.l10n_in_hsn_code END AS hsn_code,
CASE WHEN pt.l10n_in_hsn_description IS NULL THEN '' ELSE pt.l10n_in_hsn_description END AS hsn_description,
CASE WHEN uom.l10n_in_code IS NULL THEN '' ELSE uom.l10n_in_code END AS l10n_in_uom_code,
CASE WHEN tag_rep_ln.account_tax_report_line_id IN
(SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name in ('tax_report_line_sgst', 'tax_report_line_sgst_rc')) OR at.l10n_in_reverse_charge = True
THEN 0
ELSE aml.quantity
END * (CASE WHEN am.move_type in ('in_refund','out_refund') THEN -1 ELSE 1 END)
AS quantity,
CASE WHEN tag_rep_ln.account_tax_report_line_id IN
(SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name in ('tax_report_line_igst', 'tax_report_line_igst_rc'))
THEN aml.balance * (CASE WHEN aj.type = 'sale' and am.move_type != 'out_refund' THEN -1 ELSE 1 END)
ELSE 0
END * (CASE WHEN am.move_type in ('in_refund','out_refund') THEN -1 ELSE 1 END)
AS igst_amount,
CASE WHEN tag_rep_ln.account_tax_report_line_id IN
(SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name in ('tax_report_line_cgst', 'tax_report_line_cgst_rc'))
THEN aml.balance * (CASE WHEN aj.type = 'sale' and am.move_type != 'out_refund' THEN -1 ELSE 1 END)
ELSE 0
END * (CASE WHEN am.move_type in ('in_refund','out_refund') THEN -1 ELSE 1 END)
AS cgst_amount,
CASE WHEN tag_rep_ln.account_tax_report_line_id IN
(SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name in ('tax_report_line_sgst', 'tax_report_line_sgst_rc'))
THEN aml.balance * (CASE WHEN aj.type = 'sale' and am.move_type != 'out_refund' THEN -1 ELSE 1 END)
ELSE 0
END * (CASE WHEN am.move_type in ('in_refund','out_refund') THEN -1 ELSE 1 END)
AS sgst_amount,
CASE WHEN tag_rep_ln.account_tax_report_line_id IN
(SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name in ('tax_report_line_cess', 'tax_report_line_cess_rc'))
THEN aml.balance * (CASE WHEN aj.type = 'sale' and am.move_type != 'out_refund' THEN -1 ELSE 1 END)
ELSE 0
END * (CASE WHEN am.move_type in ('in_refund','out_refund') THEN -1 ELSE 1 END)
AS cess_amount,
CASE WHEN tag_rep_ln.account_tax_report_line_id IN
(SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name in ('tax_report_line_sgst', 'tax_report_line_sgst_rc'))
THEN 0
ELSE (CASE WHEN aml.tax_line_id IS NOT NULL THEN aml.tax_base_amount ELSE aml.balance * (CASE WHEN aj.type = 'sale' THEN -1 ELSE 1 END) END)
END * (CASE WHEN am.move_type in ('in_refund','out_refund') THEN -1 ELSE 1 END)
AS price_total,
((CASE WHEN tag_rep_ln.account_tax_report_line_id IN
(SELECT res_id FROM ir_model_data WHERE module='l10n_in' AND name in ('tax_report_line_sgst', 'tax_report_line_sgst_rc'))
THEN 0
ELSE (CASE WHEN aml.tax_line_id IS NOT NULL THEN aml.tax_base_amount ELSE 1 END)
END) + (aml.balance * (CASE WHEN aj.type = 'sale' and am.move_type != 'out_refund' THEN -1 ELSE 1 END))
)* (CASE WHEN am.move_type in ('in_refund','out_refund') THEN -1 ELSE 1 END)
AS total
"""
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 product_product pp ON pp.id = aml.product_id
JOIN product_template pt ON pt.id = pp.product_tmpl_id
LEFT JOIN account_tax at ON at.id = aml.tax_line_id
LEFT JOIN account_account_tag_account_move_line_rel aat_aml_rel ON aat_aml_rel.account_move_line_id = aml.id
LEFT JOIN account_account_tag aat ON aat.id = aat_aml_rel.account_account_tag_id
LEFT JOIN account_tax_report_line_tags_rel tag_rep_ln ON aat.id = tag_rep_ln.account_account_tag_id
LEFT JOIN account_move_line_account_tax_rel mt ON mt.account_move_line_id = aml.id
LEFT JOIN uom_uom uom ON uom.id = aml.product_uom_id
WHERE aa.internal_type = 'other' AND (aml.tax_line_id IS NOT NULL OR mt.account_tax_id IS NULL)
AND am.state = 'posted'
"""
return from_str
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute("""CREATE OR REPLACE VIEW %s AS (%s %s)""" % (
self._table, self._select(), self._from()))
|