Add cost center filter on OCA General Ledger Report
parent
b8a52a5b06
commit
0cc3b9a0bb
|
@ -32,6 +32,9 @@ class GeneralLedgerReport(models.TransientModel):
|
||||||
company_id = fields.Many2one(comodel_name='res.company')
|
company_id = fields.Many2one(comodel_name='res.company')
|
||||||
filter_account_ids = fields.Many2many(comodel_name='account.account')
|
filter_account_ids = fields.Many2many(comodel_name='account.account')
|
||||||
filter_partner_ids = fields.Many2many(comodel_name='res.partner')
|
filter_partner_ids = fields.Many2many(comodel_name='res.partner')
|
||||||
|
filter_cost_center_ids = fields.Many2many(
|
||||||
|
comodel_name='account.analytic.account'
|
||||||
|
)
|
||||||
centralize = fields.Boolean()
|
centralize = fields.Boolean()
|
||||||
|
|
||||||
# Flag fields, used for report display
|
# Flag fields, used for report display
|
||||||
|
@ -236,6 +239,14 @@ class GeneralLedgerReportCompute(models.TransientModel):
|
||||||
INNER JOIN
|
INNER JOIN
|
||||||
account_move m ON ml.move_id = m.id AND m.state = 'posted'
|
account_move m ON ml.move_id = m.id AND m.state = 'posted'
|
||||||
"""
|
"""
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
subquery_sum_amounts += """
|
||||||
|
INNER JOIN
|
||||||
|
account_analytic_account aa
|
||||||
|
ON
|
||||||
|
ml.analytic_account_id = aa.id
|
||||||
|
AND aa.id IN %s
|
||||||
|
"""
|
||||||
subquery_sum_amounts += """
|
subquery_sum_amounts += """
|
||||||
GROUP BY
|
GROUP BY
|
||||||
a.id
|
a.id
|
||||||
|
@ -254,13 +265,24 @@ WITH
|
||||||
FROM
|
FROM
|
||||||
account_account a
|
account_account a
|
||||||
"""
|
"""
|
||||||
if self.filter_partner_ids:
|
if self.filter_partner_ids or self.filter_cost_center_ids:
|
||||||
query_inject_account += """
|
query_inject_account += """
|
||||||
INNER JOIN
|
INNER JOIN
|
||||||
account_move_line ml ON a.id = ml.account_id
|
account_move_line ml ON a.id = ml.account_id
|
||||||
|
"""
|
||||||
|
if self.filter_partner_ids:
|
||||||
|
query_inject_account += """
|
||||||
INNER JOIN
|
INNER JOIN
|
||||||
res_partner p ON ml.partner_id = p.id
|
res_partner p ON ml.partner_id = p.id
|
||||||
"""
|
"""
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_account += """
|
||||||
|
INNER JOIN
|
||||||
|
account_analytic_account aa
|
||||||
|
ON
|
||||||
|
ml.analytic_account_id = aa.id
|
||||||
|
AND aa.id IN %s
|
||||||
|
"""
|
||||||
query_inject_account += """
|
query_inject_account += """
|
||||||
WHERE
|
WHERE
|
||||||
a.company_id = %s
|
a.company_id = %s
|
||||||
|
@ -274,6 +296,9 @@ WITH
|
||||||
query_inject_account += """
|
query_inject_account += """
|
||||||
AND
|
AND
|
||||||
p.id IN %s
|
p.id IN %s
|
||||||
|
"""
|
||||||
|
if self.filter_partner_ids or self.filter_cost_center_ids:
|
||||||
|
query_inject_account += """
|
||||||
GROUP BY
|
GROUP BY
|
||||||
a.id
|
a.id
|
||||||
"""
|
"""
|
||||||
|
@ -333,7 +358,12 @@ WHERE
|
||||||
AND
|
AND
|
||||||
f.balance IS NOT NULL AND f.balance != 0
|
f.balance IS NOT NULL AND f.balance != 0
|
||||||
"""
|
"""
|
||||||
query_inject_account_params = (
|
query_inject_account_params = ()
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_account_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_account_params += (
|
||||||
self.company_id.id,
|
self.company_id.id,
|
||||||
)
|
)
|
||||||
if self.filter_account_ids:
|
if self.filter_account_ids:
|
||||||
|
@ -347,8 +377,20 @@ AND
|
||||||
query_inject_account_params += (
|
query_inject_account_params += (
|
||||||
self.date_from,
|
self.date_from,
|
||||||
self.fy_start_date,
|
self.fy_start_date,
|
||||||
|
)
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_account_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_account_params += (
|
||||||
self.date_to,
|
self.date_to,
|
||||||
self.fy_start_date,
|
self.fy_start_date,
|
||||||
|
)
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_account_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_account_params += (
|
||||||
self.id,
|
self.id,
|
||||||
self.env.uid,
|
self.env.uid,
|
||||||
)
|
)
|
||||||
|
@ -386,6 +428,14 @@ AND
|
||||||
INNER JOIN
|
INNER JOIN
|
||||||
account_move m ON ml.move_id = m.id AND m.state = 'posted'
|
account_move m ON ml.move_id = m.id AND m.state = 'posted'
|
||||||
"""
|
"""
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
subquery_sum_amounts += """
|
||||||
|
INNER JOIN
|
||||||
|
account_analytic_account aa
|
||||||
|
ON
|
||||||
|
ml.analytic_account_id = aa.id
|
||||||
|
AND aa.id IN %s
|
||||||
|
"""
|
||||||
subquery_sum_amounts += """
|
subquery_sum_amounts += """
|
||||||
GROUP BY
|
GROUP BY
|
||||||
ap.account_id, ap.partner_id
|
ap.account_id, ap.partner_id
|
||||||
|
@ -419,6 +469,16 @@ WITH
|
||||||
account_move_line ml ON a.id = ml.account_id
|
account_move_line ml ON a.id = ml.account_id
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
res_partner p ON ml.partner_id = p.id
|
res_partner p ON ml.partner_id = p.id
|
||||||
|
"""
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_partner += """
|
||||||
|
INNER JOIN
|
||||||
|
account_analytic_account aa
|
||||||
|
ON
|
||||||
|
ml.analytic_account_id = aa.id
|
||||||
|
AND aa.id IN %s
|
||||||
|
"""
|
||||||
|
query_inject_partner += """
|
||||||
WHERE
|
WHERE
|
||||||
ra.report_id = %s
|
ra.report_id = %s
|
||||||
AND
|
AND
|
||||||
|
@ -503,7 +563,12 @@ WHERE
|
||||||
AND
|
AND
|
||||||
f.balance IS NOT NULL AND f.balance != 0
|
f.balance IS NOT NULL AND f.balance != 0
|
||||||
"""
|
"""
|
||||||
query_inject_partner_params = (
|
query_inject_partner_params = ()
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_partner_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_partner_params += (
|
||||||
self.id,
|
self.id,
|
||||||
)
|
)
|
||||||
if self.filter_partner_ids:
|
if self.filter_partner_ids:
|
||||||
|
@ -513,8 +578,20 @@ AND
|
||||||
query_inject_partner_params += (
|
query_inject_partner_params += (
|
||||||
self.date_from,
|
self.date_from,
|
||||||
self.fy_start_date,
|
self.fy_start_date,
|
||||||
|
)
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_partner_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_partner_params += (
|
||||||
self.date_to,
|
self.date_to,
|
||||||
self.fy_start_date,
|
self.fy_start_date,
|
||||||
|
)
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_partner_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_partner_params += (
|
||||||
self.env.uid,
|
self.env.uid,
|
||||||
)
|
)
|
||||||
print query_inject_partner_params
|
print query_inject_partner_params
|
||||||
|
@ -671,8 +748,21 @@ LEFT JOIN
|
||||||
account_full_reconcile fr ON ml.full_reconcile_id = fr.id
|
account_full_reconcile fr ON ml.full_reconcile_id = fr.id
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
res_currency c ON a.currency_id = c.id
|
res_currency c ON a.currency_id = c.id
|
||||||
|
"""
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_move_line += """
|
||||||
|
INNER JOIN
|
||||||
|
account_analytic_account aa
|
||||||
|
ON
|
||||||
|
ml.analytic_account_id = aa.id
|
||||||
|
AND aa.id IN %s
|
||||||
|
"""
|
||||||
|
else:
|
||||||
|
query_inject_move_line += """
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
account_analytic_account aa ON ml.analytic_account_id = aa.id
|
account_analytic_account aa ON ml.analytic_account_id = aa.id
|
||||||
|
"""
|
||||||
|
query_inject_move_line += """
|
||||||
WHERE
|
WHERE
|
||||||
ra.report_id = %s
|
ra.report_id = %s
|
||||||
AND
|
AND
|
||||||
|
@ -721,12 +811,22 @@ ORDER BY
|
||||||
ORDER BY
|
ORDER BY
|
||||||
a.code, ml.date, ml.id
|
a.code, ml.date, ml.id
|
||||||
"""
|
"""
|
||||||
self.env.cr.execute(
|
|
||||||
query_inject_move_line,
|
query_inject_move_line_params = (
|
||||||
(self.env.uid,
|
self.env.uid,
|
||||||
|
)
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_move_line_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_move_line_params += (
|
||||||
self.id,
|
self.id,
|
||||||
self.date_from,
|
self.date_from,
|
||||||
self.date_to,)
|
self.date_to,
|
||||||
|
)
|
||||||
|
self.env.cr.execute(
|
||||||
|
query_inject_move_line,
|
||||||
|
query_inject_move_line_params
|
||||||
)
|
)
|
||||||
|
|
||||||
def _inject_line_centralized_values(self):
|
def _inject_line_centralized_values(self):
|
||||||
|
@ -755,6 +855,16 @@ WITH
|
||||||
account_move m ON ml.move_id = m.id
|
account_move m ON ml.move_id = m.id
|
||||||
INNER JOIN
|
INNER JOIN
|
||||||
account_account a ON ml.account_id = a.id
|
account_account a ON ml.account_id = a.id
|
||||||
|
"""
|
||||||
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_move_line_centralized += """
|
||||||
|
INNER JOIN
|
||||||
|
account_analytic_account aa
|
||||||
|
ON
|
||||||
|
ml.analytic_account_id = aa.id
|
||||||
|
AND aa.id IN %s
|
||||||
|
"""
|
||||||
|
query_inject_move_line_centralized += """
|
||||||
WHERE
|
WHERE
|
||||||
ra.report_id = %s
|
ra.report_id = %s
|
||||||
AND
|
AND
|
||||||
|
@ -812,13 +922,22 @@ AND
|
||||||
ORDER BY
|
ORDER BY
|
||||||
a.code, ml.date
|
a.code, ml.date
|
||||||
"""
|
"""
|
||||||
self.env.cr.execute(
|
|
||||||
query_inject_move_line_centralized,
|
query_inject_move_line_centralized_params = ()
|
||||||
(self.id,
|
if self.filter_cost_center_ids:
|
||||||
|
query_inject_move_line_centralized_params += (
|
||||||
|
tuple(self.filter_cost_center_ids.ids),
|
||||||
|
)
|
||||||
|
query_inject_move_line_centralized_params += (
|
||||||
|
self.id,
|
||||||
self.date_from,
|
self.date_from,
|
||||||
self.date_to,
|
self.date_to,
|
||||||
self.env.uid,
|
self.env.uid,
|
||||||
self.id,)
|
self.id,
|
||||||
|
)
|
||||||
|
self.env.cr.execute(
|
||||||
|
query_inject_move_line_centralized,
|
||||||
|
query_inject_move_line_centralized_params
|
||||||
)
|
)
|
||||||
|
|
||||||
def _compute_has_second_currency(self):
|
def _compute_has_second_currency(self):
|
||||||
|
|
|
@ -45,6 +45,10 @@ class GeneralLedgerReportWizard(models.TransientModel):
|
||||||
comodel_name='res.partner',
|
comodel_name='res.partner',
|
||||||
string='Filter partners',
|
string='Filter partners',
|
||||||
)
|
)
|
||||||
|
cost_center_ids = fields.Many2many(
|
||||||
|
comodel_name='account.analytic.account',
|
||||||
|
string='Filter cost centers',
|
||||||
|
)
|
||||||
|
|
||||||
@api.onchange('date_range_id')
|
@api.onchange('date_range_id')
|
||||||
def onchange_date_range_id(self):
|
def onchange_date_range_id(self):
|
||||||
|
@ -100,6 +104,7 @@ class GeneralLedgerReportWizard(models.TransientModel):
|
||||||
'company_id': self.company_id.id,
|
'company_id': self.company_id.id,
|
||||||
'filter_account_ids': [(6, 0, self.account_ids.ids)],
|
'filter_account_ids': [(6, 0, self.account_ids.ids)],
|
||||||
'filter_partner_ids': [(6, 0, self.partner_ids.ids)],
|
'filter_partner_ids': [(6, 0, self.partner_ids.ids)],
|
||||||
|
'filter_cost_center_ids': [(6, 0, self.cost_center_ids.ids)],
|
||||||
'centralize': self.centralize,
|
'centralize': self.centralize,
|
||||||
'fy_start_date': self.fy_start_date,
|
'fy_start_date': self.fy_start_date,
|
||||||
})
|
})
|
||||||
|
|
|
@ -24,6 +24,9 @@
|
||||||
<field name="hide_account_balance_at_0"/>
|
<field name="hide_account_balance_at_0"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
|
<label for="cost_center_ids" groups="analytic.group_analytic_accounting"/>
|
||||||
|
<field name="cost_center_ids" nolabel="1" groups="analytic.group_analytic_accounting"/>
|
||||||
|
<group/>
|
||||||
<label for="partner_ids"/>
|
<label for="partner_ids"/>
|
||||||
<field name="partner_ids" nolabel="1"/>
|
<field name="partner_ids" nolabel="1"/>
|
||||||
<group/>
|
<group/>
|
||||||
|
|
Loading…
Reference in New Issue