[account_financial_report][IMP] Adds the following:
All reports: - Rename field to hide accounts at 0 to 'hide_account_at_0' Trial Balance: - Add possibility to filter by hierarchy levels - XLSX format will show the hierarchy levels in bold General Ledger: - Add the possibility to filter by analytic tags - Fixes an error on the default date Journal Ledger: - The filter on Journals is now optional. If the user does not choose a journal, by default it will display all journals. Aged Partner Balance: - Fixes an error on the default datepull/939/head
parent
73f7885f89
commit
d4107dcf38
|
@ -4,12 +4,13 @@
|
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
{
|
||||
'name': 'Account Financial Reports',
|
||||
'version': '11.0.2.2.2',
|
||||
'version': '11.0.2.3.1',
|
||||
'category': 'Reporting',
|
||||
'summary': 'OCA Financial Reports',
|
||||
'author': 'Camptocamp SA,'
|
||||
'initOS GmbH,'
|
||||
'redCOR AG,'
|
||||
'Eficent,'
|
||||
'Odoo Community Association (OCA)',
|
||||
"website": "https://odoo-community.org/",
|
||||
'depends': [
|
||||
|
|
|
@ -103,6 +103,9 @@ class AbstractReportXslx(models.AbstractModel):
|
|||
self.format_amount = workbook.add_format()
|
||||
self.format_amount.set_num_format(
|
||||
'#,##0.'+'0'*currency_id.decimal_places)
|
||||
self.format_amount_bold = workbook.add_format({'bold': True})
|
||||
self.format_amount_bold.set_num_format(
|
||||
'#,##0.' + '0' * currency_id.decimal_places)
|
||||
self.format_percent_bold_italic = workbook.add_format(
|
||||
{'bold': True, 'italic': True}
|
||||
)
|
||||
|
@ -190,10 +193,20 @@ class AbstractReportXslx(models.AbstractModel):
|
|||
self.sheet.write_string(
|
||||
self.row_pos, col_pos, value.name or '', self.format_right)
|
||||
elif cell_type == 'string':
|
||||
self.sheet.write_string(self.row_pos, col_pos, value or '')
|
||||
if hasattr(line_object, 'account_group_id') and \
|
||||
line_object.account_group_id:
|
||||
self.sheet.write_string(self.row_pos, col_pos, value or '',
|
||||
self.format_bold)
|
||||
else:
|
||||
self.sheet.write_string(self.row_pos, col_pos, value or '')
|
||||
elif cell_type == 'amount':
|
||||
if hasattr(line_object, 'account_group_id') and \
|
||||
line_object.account_group_id:
|
||||
cell_format = self.format_amount_bold
|
||||
else:
|
||||
cell_format = self.format_amount
|
||||
self.sheet.write_number(
|
||||
self.row_pos, col_pos, float(value), self.format_amount
|
||||
self.row_pos, col_pos, float(value), cell_format
|
||||
)
|
||||
elif cell_type == 'amount_currency':
|
||||
if line_object.currency_id:
|
||||
|
@ -291,10 +304,16 @@ class AbstractReportXslx(models.AbstractModel):
|
|||
|
||||
def _get_currency_amt_format(self, line_object):
|
||||
""" Return amount format specific for each currency. """
|
||||
format_amt = getattr(self, 'format_amount')
|
||||
if hasattr(line_object, 'account_group_id') and \
|
||||
line_object.account_group_id:
|
||||
format_amt = getattr(self, 'format_amount_bold')
|
||||
field_prefix = 'format_amount_bold'
|
||||
else:
|
||||
format_amt = getattr(self, 'format_amount')
|
||||
field_prefix = 'format_amount'
|
||||
if line_object.currency_id:
|
||||
field_name = \
|
||||
'format_amount_%s' % line_object.currency_id.name
|
||||
'%s_%s' % (field_prefix, line_object.currency_id.name)
|
||||
if hasattr(self, field_name):
|
||||
format_amt = getattr(self, field_name)
|
||||
else:
|
||||
|
|
|
@ -29,14 +29,18 @@ class GeneralLedgerReport(models.TransientModel):
|
|||
date_to = fields.Date()
|
||||
fy_start_date = fields.Date()
|
||||
only_posted_moves = fields.Boolean()
|
||||
hide_account_balance_at_0 = fields.Boolean()
|
||||
hide_account_at_0 = fields.Boolean()
|
||||
foreign_currency = fields.Boolean()
|
||||
show_analytic_tags = fields.Boolean()
|
||||
company_id = fields.Many2one(comodel_name='res.company')
|
||||
filter_account_ids = fields.Many2many(comodel_name='account.account')
|
||||
filter_partner_ids = fields.Many2many(comodel_name='res.partner')
|
||||
filter_cost_center_ids = fields.Many2many(
|
||||
comodel_name='account.analytic.account'
|
||||
)
|
||||
filter_analytic_tag_ids = fields.Many2many(
|
||||
comodel_name='account.analytic.tag',
|
||||
)
|
||||
filter_journal_ids = fields.Many2many(
|
||||
comodel_name='account.journal',
|
||||
)
|
||||
|
@ -194,6 +198,7 @@ class GeneralLedgerReportMoveLine(models.TransientModel):
|
|||
partner = fields.Char()
|
||||
label = fields.Char()
|
||||
cost_center = fields.Char()
|
||||
tags = fields.Char()
|
||||
matching_number = fields.Char()
|
||||
debit = fields.Float(digits=(16, 2))
|
||||
credit = fields.Float(digits=(16, 2))
|
||||
|
@ -278,6 +283,10 @@ class GeneralLedgerReportCompute(models.TransientModel):
|
|||
if self.centralize:
|
||||
self._inject_line_centralized_values()
|
||||
|
||||
if self.show_analytic_tags:
|
||||
# Compute analytic tags
|
||||
self._compute_analytic_tags()
|
||||
|
||||
# Refresh cache because all data are computed with SQL requests
|
||||
self.invalidate_cache()
|
||||
|
||||
|
@ -336,6 +345,11 @@ class GeneralLedgerReportCompute(models.TransientModel):
|
|||
ml.analytic_account_id = aa.id
|
||||
AND aa.id IN %s
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
sub_subquery_sum_amounts += """
|
||||
INNER JOIN
|
||||
move_lines_on_tags ON ml.id = move_lines_on_tags.ml_id
|
||||
"""
|
||||
sub_subquery_sum_amounts += """
|
||||
LEFT JOIN
|
||||
res_currency c ON a.currency_id = c.id
|
||||
|
@ -392,7 +406,11 @@ WITH
|
|||
FROM
|
||||
account_account a
|
||||
"""
|
||||
if self.filter_partner_ids or self.filter_cost_center_ids:
|
||||
if (
|
||||
self.filter_partner_ids or
|
||||
self.filter_cost_center_ids or
|
||||
self.filter_analytic_tag_ids
|
||||
):
|
||||
query_inject_account += """
|
||||
INNER JOIN
|
||||
account_move_line ml ON a.id = ml.account_id
|
||||
|
@ -410,6 +428,17 @@ WITH
|
|||
ml.analytic_account_id = aa.id
|
||||
AND aa.id IN %s
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_account += """
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel atml
|
||||
ON atml.account_move_line_id = ml.id
|
||||
INNER JOIN
|
||||
account_analytic_tag aat
|
||||
ON
|
||||
atml.account_analytic_tag_id = aat.id
|
||||
AND aat.id IN %s
|
||||
"""
|
||||
query_inject_account += """
|
||||
WHERE
|
||||
a.company_id = %s
|
||||
|
@ -425,11 +454,40 @@ WITH
|
|||
AND
|
||||
p.id IN %s
|
||||
"""
|
||||
if self.filter_partner_ids or self.filter_cost_center_ids:
|
||||
if (
|
||||
self.filter_partner_ids or
|
||||
self.filter_cost_center_ids or
|
||||
self.filter_analytic_tag_ids
|
||||
):
|
||||
query_inject_account += """
|
||||
GROUP BY
|
||||
a.id
|
||||
"""
|
||||
query_inject_account += """
|
||||
),
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_account += """
|
||||
move_lines_on_tags AS
|
||||
(
|
||||
SELECT
|
||||
DISTINCT ml.id AS ml_id
|
||||
FROM
|
||||
accounts a
|
||||
INNER JOIN
|
||||
account_move_line ml
|
||||
ON a.id = ml.account_id
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel atml
|
||||
ON atml.account_move_line_id = ml.id
|
||||
INNER JOIN
|
||||
account_analytic_tag aat
|
||||
ON
|
||||
atml.account_analytic_tag_id = aat.id
|
||||
WHERE
|
||||
aat.id IN %s
|
||||
),
|
||||
"""
|
||||
|
||||
init_subquery = self._get_final_account_sub_subquery_sum_amounts(
|
||||
date_included=False
|
||||
|
@ -439,7 +497,6 @@ WITH
|
|||
)
|
||||
|
||||
query_inject_account += """
|
||||
),
|
||||
initial_sum_amounts AS ( """ + init_subquery + """ ),
|
||||
final_sum_amounts AS ( """ + final_subquery + """ )
|
||||
INSERT INTO
|
||||
|
@ -497,7 +554,7 @@ WHERE
|
|||
OR f.balance IS NOT NULL AND f.balance != 0
|
||||
)
|
||||
"""
|
||||
if self.hide_account_balance_at_0:
|
||||
if self.hide_account_at_0:
|
||||
query_inject_account += """
|
||||
AND
|
||||
f.balance IS NOT NULL AND f.balance != 0
|
||||
|
@ -507,6 +564,10 @@ AND
|
|||
query_inject_account_params += (
|
||||
tuple(self.filter_cost_center_ids.ids),
|
||||
)
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_account_params += (
|
||||
tuple(self.filter_analytic_tag_ids.ids),
|
||||
)
|
||||
query_inject_account_params += (
|
||||
self.company_id.id,
|
||||
self.unaffected_earnings_account.id,
|
||||
|
@ -519,6 +580,10 @@ AND
|
|||
query_inject_account_params += (
|
||||
tuple(self.filter_partner_ids.ids),
|
||||
)
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_account_params += (
|
||||
tuple(self.filter_analytic_tag_ids.ids),
|
||||
)
|
||||
query_inject_account_params += (
|
||||
self.date_from,
|
||||
self.fy_start_date,
|
||||
|
@ -619,6 +684,11 @@ AND
|
|||
ml.analytic_account_id = aa.id
|
||||
AND aa.id IN %s
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
sub_subquery_sum_amounts += """
|
||||
INNER JOIN
|
||||
move_lines_on_tags ON ml.id = move_lines_on_tags.ml_id
|
||||
"""
|
||||
sub_subquery_sum_amounts += """
|
||||
GROUP BY
|
||||
ap.account_id, ap.partner_id, c.id
|
||||
|
@ -706,6 +776,17 @@ WITH
|
|||
ml.analytic_account_id = aa.id
|
||||
AND aa.id IN %s
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_partner += """
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel atml
|
||||
ON atml.account_move_line_id = ml.id
|
||||
INNER JOIN
|
||||
account_analytic_tag aat
|
||||
ON
|
||||
atml.account_analytic_tag_id = aat.id
|
||||
AND aat.id IN %s
|
||||
"""
|
||||
query_inject_partner += """
|
||||
WHERE
|
||||
ra.report_id = %s
|
||||
|
@ -750,6 +831,31 @@ WITH
|
|||
p.id,
|
||||
at.include_initial_balance
|
||||
),
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_partner += """
|
||||
move_lines_on_tags AS
|
||||
(
|
||||
SELECT
|
||||
DISTINCT ml.id AS ml_id
|
||||
FROM
|
||||
accounts_partners ap
|
||||
INNER JOIN
|
||||
account_move_line ml
|
||||
ON ap.account_id = ml.account_id
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel atml
|
||||
ON atml.account_move_line_id = ml.id
|
||||
INNER JOIN
|
||||
account_analytic_tag aat
|
||||
ON
|
||||
atml.account_analytic_tag_id = aat.id
|
||||
WHERE
|
||||
aat.id IN %s
|
||||
),
|
||||
"""
|
||||
|
||||
query_inject_partner += """
|
||||
initial_sum_amounts AS ( """ + init_subquery + """ ),
|
||||
final_sum_amounts AS ( """ + final_subquery + """ )
|
||||
INSERT INTO
|
||||
|
@ -829,7 +935,7 @@ WHERE
|
|||
OR f.balance IS NOT NULL AND f.balance != 0
|
||||
)
|
||||
"""
|
||||
if self.hide_account_balance_at_0:
|
||||
if self.hide_account_at_0:
|
||||
query_inject_partner += """
|
||||
AND
|
||||
f.balance IS NOT NULL AND f.balance != 0
|
||||
|
@ -839,6 +945,10 @@ AND
|
|||
query_inject_partner_params += (
|
||||
tuple(self.filter_cost_center_ids.ids),
|
||||
)
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_partner_params += (
|
||||
tuple(self.filter_analytic_tag_ids.ids),
|
||||
)
|
||||
query_inject_partner_params += (
|
||||
self.id,
|
||||
)
|
||||
|
@ -846,6 +956,10 @@ AND
|
|||
query_inject_partner_params += (
|
||||
tuple(self.filter_partner_ids.ids),
|
||||
)
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_partner_params += (
|
||||
tuple(self.filter_analytic_tag_ids.ids),
|
||||
)
|
||||
query_inject_partner_params += (
|
||||
self.date_from,
|
||||
self.fy_start_date,
|
||||
|
@ -898,7 +1012,45 @@ AND
|
|||
The "only_empty_partner_line" value is used
|
||||
to compute data without partner.
|
||||
"""
|
||||
query_inject_move_line = """
|
||||
query_inject_move_line = ""
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_move_line += """
|
||||
WITH
|
||||
move_lines_on_tags AS
|
||||
(
|
||||
SELECT
|
||||
DISTINCT ml.id AS ml_id
|
||||
FROM
|
||||
"""
|
||||
if is_account_line:
|
||||
query_inject_move_line += """
|
||||
report_general_ledger_account ra
|
||||
"""
|
||||
elif is_partner_line:
|
||||
query_inject_move_line += """
|
||||
report_general_ledger_partner rp
|
||||
INNER JOIN
|
||||
report_general_ledger_account ra
|
||||
ON rp.report_account_id = ra.id
|
||||
"""
|
||||
query_inject_move_line += """
|
||||
INNER JOIN
|
||||
account_move_line ml
|
||||
ON ra.account_id = ml.account_id
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel atml
|
||||
ON atml.account_move_line_id = ml.id
|
||||
INNER JOIN
|
||||
account_analytic_tag aat
|
||||
ON
|
||||
atml.account_analytic_tag_id = aat.id
|
||||
WHERE
|
||||
ra.report_id = %s
|
||||
AND
|
||||
aat.id IN %s
|
||||
)
|
||||
"""
|
||||
query_inject_move_line += """
|
||||
INSERT INTO
|
||||
report_general_ledger_move_line
|
||||
(
|
||||
|
@ -1072,6 +1224,11 @@ INNER JOIN
|
|||
LEFT JOIN
|
||||
account_analytic_account aa ON ml.analytic_account_id = aa.id
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_move_line += """
|
||||
INNER JOIN
|
||||
move_lines_on_tags ON ml.id = move_lines_on_tags.ml_id
|
||||
"""
|
||||
query_inject_move_line += """
|
||||
WHERE
|
||||
ra.report_id = %s
|
||||
|
@ -1132,7 +1289,13 @@ ORDER BY
|
|||
a.code, ml.date, ml.id
|
||||
"""
|
||||
|
||||
query_inject_move_line_params = (
|
||||
query_inject_move_line_params = ()
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_move_line_params += (
|
||||
self.id,
|
||||
tuple(self.filter_analytic_tag_ids.ids),
|
||||
)
|
||||
query_inject_move_line_params += (
|
||||
self.env.uid,
|
||||
)
|
||||
if self.filter_cost_center_ids:
|
||||
|
@ -1164,8 +1327,36 @@ ORDER BY
|
|||
|
||||
Only centralized accounts are computed.
|
||||
"""
|
||||
query_inject_move_line_centralized = """
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_move_line_centralized = """
|
||||
WITH
|
||||
move_lines_on_tags AS
|
||||
(
|
||||
SELECT
|
||||
DISTINCT ml.id AS ml_id
|
||||
FROM
|
||||
report_general_ledger_account ra
|
||||
INNER JOIN
|
||||
account_move_line ml
|
||||
ON ra.account_id = ml.account_id
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel atml
|
||||
ON atml.account_move_line_id = ml.id
|
||||
INNER JOIN
|
||||
account_analytic_tag aat
|
||||
ON
|
||||
atml.account_analytic_tag_id = aat.id
|
||||
WHERE
|
||||
ra.report_id = %s
|
||||
AND
|
||||
aat.id IN %s
|
||||
),
|
||||
"""
|
||||
else:
|
||||
query_inject_move_line_centralized = """
|
||||
WITH
|
||||
"""
|
||||
query_inject_move_line_centralized += """
|
||||
move_lines AS
|
||||
(
|
||||
SELECT
|
||||
|
@ -1196,6 +1387,11 @@ WITH
|
|||
ml.analytic_account_id = aa.id
|
||||
AND aa.id IN %s
|
||||
"""
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_move_line_centralized += """
|
||||
INNER JOIN
|
||||
move_lines_on_tags ON ml.id = move_lines_on_tags.ml_id
|
||||
"""
|
||||
query_inject_move_line_centralized += """
|
||||
WHERE
|
||||
ra.report_id = %s
|
||||
|
@ -1267,6 +1463,11 @@ ORDER BY
|
|||
"""
|
||||
|
||||
query_inject_move_line_centralized_params = ()
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_inject_move_line_centralized_params += (
|
||||
self.id,
|
||||
tuple(self.filter_analytic_tag_ids.ids),
|
||||
)
|
||||
if self.filter_cost_center_ids:
|
||||
query_inject_move_line_centralized_params += (
|
||||
tuple(self.filter_cost_center_ids.ids),
|
||||
|
@ -1287,6 +1488,76 @@ ORDER BY
|
|||
query_inject_move_line_centralized_params
|
||||
)
|
||||
|
||||
def _compute_analytic_tags(self):
|
||||
""" Compute "tags" column"""
|
||||
query_update_analytic_tags = """
|
||||
UPDATE
|
||||
report_general_ledger_move_line
|
||||
SET
|
||||
tags = tags_values.tags
|
||||
FROM
|
||||
(
|
||||
(
|
||||
SELECT
|
||||
rml.id AS report_id,
|
||||
array_to_string(array_agg(t.name ORDER BY t.name), ',') AS tags
|
||||
FROM
|
||||
account_move_line ml
|
||||
INNER JOIN
|
||||
report_general_ledger_move_line rml
|
||||
ON ml.id = rml.move_line_id
|
||||
INNER JOIN
|
||||
report_general_ledger_account ra
|
||||
ON rml.report_account_id = ra.id
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel tml
|
||||
ON ml.id = tml.account_move_line_id
|
||||
INNER JOIN
|
||||
account_analytic_tag t
|
||||
ON tml.account_analytic_tag_id = t.id
|
||||
WHERE
|
||||
ra.report_id = %(report_id)s
|
||||
GROUP BY
|
||||
rml.id,
|
||||
ml.id
|
||||
)
|
||||
UNION
|
||||
(
|
||||
SELECT
|
||||
rml.id AS report_id,
|
||||
array_to_string(array_agg(t.name ORDER BY t.name), ',') AS tags
|
||||
FROM
|
||||
account_move_line ml
|
||||
INNER JOIN
|
||||
report_general_ledger_move_line rml
|
||||
ON ml.id = rml.move_line_id
|
||||
INNER JOIN
|
||||
report_general_ledger_partner rp
|
||||
ON rml.report_partner_id = rp.id
|
||||
INNER JOIN
|
||||
report_general_ledger_account ra
|
||||
ON rp.report_account_id = ra.id
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel tml
|
||||
ON ml.id = tml.account_move_line_id
|
||||
INNER JOIN
|
||||
account_analytic_tag t
|
||||
ON tml.account_analytic_tag_id = t.id
|
||||
WHERE
|
||||
ra.report_id = %(report_id)s
|
||||
GROUP BY
|
||||
rml.id,
|
||||
ml.id
|
||||
)
|
||||
) AS tags_values
|
||||
WHERE
|
||||
report_general_ledger_move_line.id = tags_values.report_id
|
||||
"""
|
||||
params = {
|
||||
'report_id': self.id,
|
||||
}
|
||||
self.env.cr.execute(query_update_analytic_tags, params)
|
||||
|
||||
def _inject_unaffected_earnings_account_values(self):
|
||||
"""Inject the report values of the unaffected earnings account
|
||||
for report_general_ledger_account."""
|
||||
|
@ -1310,12 +1581,39 @@ ORDER BY
|
|||
'date_to': fy_start_date,
|
||||
'company_id': self.company_id.id,
|
||||
'account_ids': tuple(unaffected_earnings_account_ids),
|
||||
'analytic_tag_ids': tuple(self.filter_analytic_tag_ids.ids),
|
||||
}
|
||||
query_select_previous_fy_unaffected_earnings = """
|
||||
SELECT sum(aml.balance) as balance
|
||||
FROM account_move_line as aml
|
||||
query_select_previous_fy_unaffected_earnings = ''
|
||||
q_analytic_tags = ''
|
||||
if self.filter_analytic_tag_ids:
|
||||
q_analytic_tags = """
|
||||
WITH move_lines_on_tags AS
|
||||
(
|
||||
SELECT
|
||||
DISTINCT ml.id AS ml_id
|
||||
FROM
|
||||
account_account a
|
||||
INNER JOIN
|
||||
account_move_line ml
|
||||
ON a.id = ml.account_id
|
||||
INNER JOIN
|
||||
account_analytic_tag_account_move_line_rel atml
|
||||
ON atml.account_move_line_id = ml.id
|
||||
INNER JOIN
|
||||
account_analytic_tag aat
|
||||
ON
|
||||
atml.account_analytic_tag_id = aat.id
|
||||
WHERE
|
||||
aat.id IN %(analytic_tag_ids)s
|
||||
)
|
||||
"""
|
||||
query_select_previous_fy_unaffected_earnings += q_analytic_tags
|
||||
|
||||
query_select_previous_fy_unaffected_earnings += """
|
||||
SELECT sum(ml.balance) as balance
|
||||
FROM account_move_line as ml
|
||||
INNER JOIN account_move as am
|
||||
ON am.id = aml.move_id
|
||||
ON am.id = ml.move_id
|
||||
INNER JOIN account_journal j
|
||||
ON am.journal_id = j.id
|
||||
"""
|
||||
|
@ -1327,11 +1625,15 @@ ORDER BY
|
|||
"""
|
||||
query_select_previous_fy_unaffected_earnings_params[
|
||||
'cost_center_ids'] = tuple(self.filter_cost_center_ids.ids)
|
||||
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_select_previous_fy_unaffected_earnings += """
|
||||
INNER JOIN move_lines_on_tags ON ml.id =
|
||||
move_lines_on_tags.ml_id
|
||||
"""
|
||||
query_select_previous_fy_unaffected_earnings += """
|
||||
WHERE aml.date < %(date_to)s
|
||||
AND aml.company_id = %(company_id)s
|
||||
AND aml.account_id IN %(account_ids)s
|
||||
WHERE ml.date < %(date_to)s
|
||||
AND ml.company_id = %(company_id)s
|
||||
AND ml.account_id IN %(account_ids)s
|
||||
"""
|
||||
if self.filter_journal_ids:
|
||||
query_select_previous_fy_unaffected_earnings += """
|
||||
|
@ -1355,15 +1657,19 @@ ORDER BY
|
|||
'date_to': self.date_to,
|
||||
'company_id': self.company_id.id,
|
||||
'unaffected_earnings_id': self.unaffected_earnings_account.id,
|
||||
'analytic_tag_ids': tuple(self.filter_analytic_tag_ids.ids),
|
||||
}
|
||||
query_select_period_unaffected_earnings = """
|
||||
query_select_period_unaffected_earnings = ''
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_select_period_unaffected_earnings += q_analytic_tags
|
||||
query_select_period_unaffected_earnings += """
|
||||
SELECT
|
||||
sum(aml.debit) as sum_debit,
|
||||
sum(aml.credit) as sum_credit,
|
||||
sum(aml.balance) as balance
|
||||
FROM account_move_line as aml
|
||||
sum(ml.debit) as sum_debit,
|
||||
sum(ml.credit) as sum_credit,
|
||||
sum(ml.balance) as balance
|
||||
FROM account_move_line as ml
|
||||
INNER JOIN account_move as am
|
||||
ON am.id = aml.move_id
|
||||
ON am.id = ml.move_id
|
||||
INNER JOIN account_journal j
|
||||
ON am.journal_id = j.id
|
||||
"""
|
||||
|
@ -1375,11 +1681,16 @@ ORDER BY
|
|||
"""
|
||||
query_select_period_unaffected_earnings_params[
|
||||
'cost_center_ids'] = tuple(self.filter_cost_center_ids.ids)
|
||||
if self.filter_analytic_tag_ids:
|
||||
query_select_period_unaffected_earnings += """
|
||||
INNER JOIN move_lines_on_tags
|
||||
ON ml.id = move_lines_on_tags.ml_id
|
||||
"""
|
||||
query_select_period_unaffected_earnings += """
|
||||
WHERE am.date >= %(date_from)s
|
||||
AND aml.date <= %(date_to)s
|
||||
AND aml.company_id = %(company_id)s
|
||||
AND aml.account_id = %(unaffected_earnings_id)s
|
||||
AND ml.date <= %(date_to)s
|
||||
AND ml.company_id = %(company_id)s
|
||||
AND ml.account_id = %(unaffected_earnings_id)s
|
||||
"""
|
||||
if self.filter_journal_ids:
|
||||
query_select_period_unaffected_earnings += """
|
||||
|
|
|
@ -28,20 +28,23 @@ class GeneralLedgerXslx(models.AbstractModel):
|
|||
7: {'header': _('Cost center'),
|
||||
'field': 'cost_center',
|
||||
'width': 15},
|
||||
8: {'header': _('Rec.'), 'field': 'matching_number', 'width': 5},
|
||||
9: {'header': _('Debit'),
|
||||
'field': 'debit',
|
||||
'field_initial_balance': 'initial_debit',
|
||||
'field_final_balance': 'final_debit',
|
||||
'type': 'amount',
|
||||
'width': 14},
|
||||
10: {'header': _('Credit'),
|
||||
8: {'header': _('Tags'),
|
||||
'field': 'tags',
|
||||
'width': 10},
|
||||
9: {'header': _('Rec.'), 'field': 'matching_number', 'width': 5},
|
||||
10: {'header': _('Debit'),
|
||||
'field': 'debit',
|
||||
'field_initial_balance': 'initial_debit',
|
||||
'field_final_balance': 'final_debit',
|
||||
'type': 'amount',
|
||||
'width': 14},
|
||||
11: {'header': _('Credit'),
|
||||
'field': 'credit',
|
||||
'field_initial_balance': 'initial_credit',
|
||||
'field_final_balance': 'final_credit',
|
||||
'type': 'amount',
|
||||
'width': 14},
|
||||
11: {'header': _('Cumul. Bal.'),
|
||||
12: {'header': _('Cumul. Bal.'),
|
||||
'field': 'cumul_balance',
|
||||
'field_initial_balance': 'initial_balance',
|
||||
'field_final_balance': 'final_balance',
|
||||
|
@ -50,11 +53,11 @@ class GeneralLedgerXslx(models.AbstractModel):
|
|||
}
|
||||
if report.foreign_currency:
|
||||
foreign_currency = {
|
||||
12: {'header': _('Cur.'),
|
||||
13: {'header': _('Cur.'),
|
||||
'field': 'currency_id',
|
||||
'field_currency_balance': 'currency_id',
|
||||
'type': 'many2one', 'width': 7},
|
||||
13: {'header': _('Amount cur.'),
|
||||
14: {'header': _('Amount cur.'),
|
||||
'field': 'amount_currency',
|
||||
'field_initial_balance':
|
||||
'initial_balance_foreign_currency',
|
||||
|
@ -68,17 +71,31 @@ class GeneralLedgerXslx(models.AbstractModel):
|
|||
|
||||
def _get_report_filters(self, report):
|
||||
return [
|
||||
[_('Date range filter'),
|
||||
_('From: %s To: %s') % (report.date_from, report.date_to)],
|
||||
[_('Target moves filter'),
|
||||
_('All posted entries') if report.only_posted_moves else _(
|
||||
'All entries')],
|
||||
[_('Account balance at 0 filter'),
|
||||
_('Hide') if report.hide_account_balance_at_0 else _('Show')],
|
||||
[_('Centralize filter'),
|
||||
_('Yes') if report.centralize else _('No')],
|
||||
[_('Show foreign currency'),
|
||||
_('Yes') if report.foreign_currency else _('No')],
|
||||
[
|
||||
_('Date range filter'),
|
||||
_('From: %s To: %s') % (report.date_from, report.date_to),
|
||||
],
|
||||
[
|
||||
_('Target moves filter'),
|
||||
_('All posted entries') if report.only_posted_moves
|
||||
else _('All entries'),
|
||||
],
|
||||
[
|
||||
_('Account balance at 0 filter'),
|
||||
_('Hide') if report.hide_account_at_0 else _('Show'),
|
||||
],
|
||||
[
|
||||
_('Centralize filter'),
|
||||
_('Yes') if report.centralize else _('No'),
|
||||
],
|
||||
[
|
||||
_('Show analytic tags'),
|
||||
_('Yes') if report.show_analytic_tags else _('No'),
|
||||
],
|
||||
[
|
||||
_('Show foreign currency'),
|
||||
_('Yes') if report.foreign_currency else _('No')
|
||||
],
|
||||
]
|
||||
|
||||
def _get_col_count_filter_name(self):
|
||||
|
|
|
@ -22,7 +22,7 @@ class OpenItemsReport(models.TransientModel):
|
|||
# Filters fields, used for data computation
|
||||
date_at = fields.Date()
|
||||
only_posted_moves = fields.Boolean()
|
||||
hide_account_balance_at_0 = fields.Boolean()
|
||||
hide_account_at_0 = fields.Boolean()
|
||||
foreign_currency = fields.Boolean()
|
||||
company_id = fields.Many2one(comodel_name='res.company')
|
||||
filter_account_ids = fields.Many2many(comodel_name='account.account')
|
||||
|
@ -188,7 +188,7 @@ class OpenItemsReportCompute(models.TransientModel):
|
|||
self._inject_line_values(only_empty_partner_line=True)
|
||||
self._clean_partners_and_accounts()
|
||||
self._compute_partners_and_accounts_cumul()
|
||||
if self.hide_account_balance_at_0:
|
||||
if self.hide_account_at_0:
|
||||
self._clean_partners_and_accounts(
|
||||
only_delete_account_balance_at_0=True
|
||||
)
|
||||
|
|
|
@ -59,7 +59,7 @@ class OpenItemsXslx(models.AbstractModel):
|
|||
_('All posted entries') if report.only_posted_moves else _(
|
||||
'All entries')],
|
||||
[_('Account balance at 0 filter'),
|
||||
_('Hide') if report.hide_account_balance_at_0 else _('Show')],
|
||||
_('Hide') if report.hide_account_at_0 else _('Show')],
|
||||
[_('Show foreign currency'),
|
||||
_('Yes') if report.foreign_currency else _('No')],
|
||||
]
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
<template id="report_general_ledger_base">
|
||||
<!-- Saved flag fields into variables, used to define columns display -->
|
||||
<t t-set="show_analytic_tags" t-value="o.show_analytic_tags"/>
|
||||
<t t-set="show_cost_center" t-value="o.show_cost_center"/>
|
||||
<t t-set="foreign_currency" t-value="o.foreign_currency"/>
|
||||
<!-- Defines global variables used by internal layout -->
|
||||
|
@ -81,6 +82,7 @@
|
|||
<div class="act_as_cell">Target moves filter</div>
|
||||
<div class="act_as_cell">Account balance at 0 filter</div>
|
||||
<div class="act_as_cell">Centralize filter</div>
|
||||
<div class="act_as_cell">Show analytic tags</div>
|
||||
</div>
|
||||
<div class="act_as_row">
|
||||
<div class="act_as_cell">
|
||||
|
@ -91,13 +93,17 @@
|
|||
<t t-if="not o.only_posted_moves">All entries</t>
|
||||
</div>
|
||||
<div class="act_as_cell">
|
||||
<t t-if="o.hide_account_balance_at_0">Hide</t>
|
||||
<t t-if="not o.hide_account_balance_at_0">Show</t>
|
||||
<t t-if="o.hide_account_at_0">Hide</t>
|
||||
<t t-if="not o.hide_account_at_0">Show</t>
|
||||
</div>
|
||||
<div class="act_as_cell">
|
||||
<t t-if="o.centralize">Yes</t>
|
||||
<t t-if="not o.centralize">No</t>
|
||||
</div>
|
||||
<div class="act_as_cell">
|
||||
<t t-if="o.show_analytic_tags">Yes</t>
|
||||
<t t-if="not o.show_analytic_tags">No</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -130,6 +136,10 @@
|
|||
<div class="act_as_cell" style="width: 8.03%;">Cost
|
||||
center</div>
|
||||
</t>
|
||||
<t t-if="show_analytic_tags">
|
||||
<!--## analytic tags-->
|
||||
<div class="act_as_cell" style="width: 4.75%;">Tags</div>
|
||||
</t>
|
||||
<!--## matching_number-->
|
||||
<div class="act_as_cell" style="width: 2.41%;">Rec.</div>
|
||||
<!--## debit-->
|
||||
|
@ -167,6 +177,10 @@
|
|||
<!--## cost_center-->
|
||||
<div class="act_as_cell"/>
|
||||
</t>
|
||||
<t t-if="show_analytic_tags">
|
||||
<!--## analytic tags-->
|
||||
<div class="act_as_cell"></div>
|
||||
</t>
|
||||
<!--## matching_number-->
|
||||
<div class="act_as_cell"/>
|
||||
<!--## debit-->
|
||||
|
@ -381,6 +395,10 @@
|
|||
</span>
|
||||
</div>
|
||||
</t>
|
||||
<t t-if="show_analytic_tags">
|
||||
<!--## analytic tags-->
|
||||
<div class="act_as_cell left"><span t-field="line.tags"/></div>
|
||||
</t>
|
||||
<!--## matching_number-->
|
||||
<div class="act_as_cell">
|
||||
<t t-set="res_model" t-value="'account.full.reconcile'"/>
|
||||
|
@ -475,6 +493,10 @@
|
|||
<!--## cost_center-->
|
||||
<div class="act_as_cell" style="width: 8.03%"/>
|
||||
</t>
|
||||
<t t-if="show_analytic_tags">
|
||||
<!--## analytic tags-->
|
||||
<div class="act_as_cell" style="width: 4.75%;"></div>
|
||||
</t>
|
||||
<!--## matching_number-->
|
||||
<div class="act_as_cell" style="width: 2.41%;"/>
|
||||
<!--## debit-->
|
||||
|
|
|
@ -80,8 +80,8 @@
|
|||
<t t-if="not o.only_posted_moves">All entries</t>
|
||||
</div>
|
||||
<div class="act_as_cell">
|
||||
<t t-if="o.hide_account_balance_at_0">Hide</t>
|
||||
<t t-if="not o.hide_account_balance_at_0">Show</t>
|
||||
<t t-if="o.hide_account_at_0">Hide</t>
|
||||
<t t-if="not o.hide_account_at_0">Show</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
<!-- Defines global variables used by internal layout -->
|
||||
<t t-set="title">Trial Balance</t>
|
||||
<t t-set="company_name" t-value="o.company_id.name"/>
|
||||
<t t-set="res_company" t-value="o.company_id"/>
|
||||
|
||||
<div class="page">
|
||||
<!-- Display filters -->
|
||||
<t t-call="account_financial_report.report_trial_balance_filters"/>
|
||||
|
@ -30,7 +32,7 @@
|
|||
<t t-call="account_financial_report.report_trial_balance_lines_header"/>
|
||||
|
||||
<!-- Display each lines -->
|
||||
<t t-foreach="o.account_ids" t-as="line">
|
||||
<t t-foreach="o.account_ids.filtered(lambda a: not a.hide_line)" t-as="line">
|
||||
<t t-set="type" t-value='"account_type"'/>
|
||||
<!-- Adapt -->
|
||||
<t t-set="style" t-value="'font-size:8px;'"/>
|
||||
|
@ -38,7 +40,7 @@
|
|||
<t t-if="o.hide_account_at_0">
|
||||
<t t-set="style" t-value="'font-size: 14px;'"/>
|
||||
</t>
|
||||
<t t-if="not o.hide_account_at_0">
|
||||
<t t-if="o.hierarchy_on != 'none'">
|
||||
<t t-set="style" t-value="'font-size: ' + str(14 - line.level) + 'px; margin-left: ' + str(line.level * 4) + 'px;'"/>
|
||||
</t>
|
||||
<t t-if="line.account_group_id">
|
||||
|
@ -107,6 +109,7 @@
|
|||
<div class="act_as_cell">Date range filter</div>
|
||||
<div class="act_as_cell">Target moves filter</div>
|
||||
<div class="act_as_cell">Account balance at 0 filter</div>
|
||||
<div class="act_as_cell">Limit hierarchy levels</div>
|
||||
</div>
|
||||
<div class="act_as_row">
|
||||
<div class="act_as_cell">
|
||||
|
@ -120,6 +123,14 @@
|
|||
<t t-if="o.hide_account_at_0">Hide</t>
|
||||
<t t-if="not o.hide_account_at_0">Show</t>
|
||||
</div>
|
||||
<div class="act_as_cell">
|
||||
<t t-if="o.limit_hierarchy_level">
|
||||
Level <span t-field="o.show_hierarchy_level"/>
|
||||
</t>
|
||||
<t t-if="not o.limit_hierarchy_level">
|
||||
No limit
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -381,6 +392,19 @@
|
|||
<t t-att-style="style" t-raw="line.period_balance" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></a>
|
||||
</span>
|
||||
</t>
|
||||
<t t-if="line.account_group_id">
|
||||
<t t-set="domain"
|
||||
t-value="[('account_id', 'in', line.compute_account_ids.ids),
|
||||
('date', '>=', line.report_id.date_from),
|
||||
('date', '<=', line.report_id.date_to)]"/>
|
||||
<span>
|
||||
<a t-att-data-domain="domain"
|
||||
t-att-data-res-model="'account.move.line'"
|
||||
class="o_account_financial_reports_web_action_multi"
|
||||
t-att-style="style">
|
||||
<t t-att-style="style" t-raw="line.period_balance" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></a>
|
||||
</span>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="type == 'partner_type'">
|
||||
<t t-set="domain"
|
||||
|
|
|
@ -44,7 +44,9 @@ class TrialBalanceReport(models.TransientModel):
|
|||
No hierarchy: Use to display just the accounts, without any grouping.
|
||||
""",
|
||||
)
|
||||
|
||||
limit_hierarchy_level = fields.Boolean('Limit hierarchy levels')
|
||||
show_hierarchy_level = fields.Integer('Hierarchy Levels to display',
|
||||
default=1)
|
||||
# General Ledger Report Data fields,
|
||||
# used as base for compute the data reports
|
||||
general_ledger_id = fields.Many2one(
|
||||
|
@ -68,10 +70,10 @@ class TrialBalanceReportAccount(models.TransientModel):
|
|||
ondelete='cascade',
|
||||
index=True
|
||||
)
|
||||
|
||||
hide_line = fields.Boolean(compute='_compute_hide_line')
|
||||
# Data fields, used to keep link with real object
|
||||
sequence = fields.Integer(index=True, default=0)
|
||||
level = fields.Integer(index=True, default=0)
|
||||
sequence = fields.Integer(index=True, default=1)
|
||||
level = fields.Integer(index=True, default=1)
|
||||
|
||||
# Data fields, used to keep link with real object
|
||||
account_id = fields.Many2one(
|
||||
|
@ -112,6 +114,21 @@ class TrialBalanceReportAccount(models.TransientModel):
|
|||
inverse_name='report_account_id'
|
||||
)
|
||||
|
||||
@api.multi
|
||||
def _compute_hide_line(self):
|
||||
for rec in self:
|
||||
report = rec.report_id
|
||||
rec.hide_line = False
|
||||
if report.hide_account_at_0 and (
|
||||
not rec.initial_balance and
|
||||
not rec.final_balance and
|
||||
not rec.debit and
|
||||
not rec.credit):
|
||||
rec.hide_line = True
|
||||
elif report.limit_hierarchy_level and \
|
||||
rec.level > report.show_hierarchy_level:
|
||||
rec.hide_line = True
|
||||
|
||||
|
||||
class TrialBalanceReportPartner(models.TransientModel):
|
||||
_name = 'report_trial_balance_partner'
|
||||
|
@ -243,15 +260,6 @@ class TrialBalanceReportCompute(models.TransientModel):
|
|||
else:
|
||||
for line in self.account_ids:
|
||||
line.write({'level': 0})
|
||||
if self.hide_account_at_0:
|
||||
self.env.cr.execute("""
|
||||
DELETE FROM report_trial_balance_account
|
||||
WHERE report_id=%s
|
||||
AND (initial_balance IS NULL OR initial_balance = 0)
|
||||
AND (debit IS NULL OR debit = 0)
|
||||
AND (credit IS NULL OR credit = 0)
|
||||
AND (final_balance IS NULL OR final_balance = 0)
|
||||
""", [self.id])
|
||||
|
||||
def _inject_account_values(self, account_ids):
|
||||
"""Inject report values for report_trial_balance_account"""
|
||||
|
@ -398,7 +406,7 @@ FROM
|
|||
WITH computed AS (WITH RECURSIVE cte AS (
|
||||
SELECT account_group_id, code, account_group_id AS parent_id,
|
||||
initial_balance, initial_balance_foreign_currency, debit, credit,
|
||||
final_balance, final_balance_foreign_currency
|
||||
period_balance, final_balance, final_balance_foreign_currency
|
||||
FROM report_trial_balance_account
|
||||
WHERE report_id = %s
|
||||
GROUP BY report_trial_balance_account.id
|
||||
|
@ -406,7 +414,7 @@ WITH computed AS (WITH RECURSIVE cte AS (
|
|||
UNION ALL
|
||||
SELECT c.account_group_id, c.code, p.account_group_id,
|
||||
p.initial_balance, p.initial_balance_foreign_currency, p.debit, p.credit,
|
||||
p.final_balance, p.final_balance_foreign_currency
|
||||
p.period_balance, p.final_balance, p.final_balance_foreign_currency
|
||||
FROM cte c
|
||||
JOIN report_trial_balance_account p USING (parent_id)
|
||||
WHERE p.report_id = %s
|
||||
|
@ -416,6 +424,7 @@ SELECT account_group_id, code,
|
|||
sum(initial_balance_foreign_currency) AS initial_balance_foreign_currency,
|
||||
sum(debit) AS debit,
|
||||
sum(credit) AS credit,
|
||||
sum(debit) - sum(credit) AS period_balance,
|
||||
sum(final_balance) AS final_balance,
|
||||
sum(final_balance_foreign_currency) AS final_balance_foreign_currency
|
||||
FROM cte
|
||||
|
@ -428,6 +437,7 @@ SET initial_balance = computed.initial_balance,
|
|||
computed.initial_balance_foreign_currency,
|
||||
debit = computed.debit,
|
||||
credit = computed.credit,
|
||||
period_balance = computed.period_balance,
|
||||
final_balance = computed.final_balance,
|
||||
final_balance_foreign_currency =
|
||||
computed.final_balance_foreign_currency
|
||||
|
@ -491,6 +501,7 @@ WITH RECURSIVE accgroup AS
|
|||
as initial_balance_foreign_currency,
|
||||
sum(coalesce(ra.debit, 0)) as debit,
|
||||
sum(coalesce(ra.credit, 0)) as credit,
|
||||
sum(coalesce(ra.debit, 0)) - sum(coalesce(ra.credit, 0)) as period_balance,
|
||||
sum(coalesce(ra.final_balance, 0)) as final_balance,
|
||||
sum(coalesce(ra.final_balance_foreign_currency, 0))
|
||||
as final_balance_foreign_currency
|
||||
|
@ -509,6 +520,7 @@ SET initial_balance = accgroup.initial_balance,
|
|||
accgroup.initial_balance_foreign_currency,
|
||||
debit = accgroup.debit,
|
||||
credit = accgroup.credit,
|
||||
period_balance = accgroup.period_balance,
|
||||
final_balance = accgroup.final_balance,
|
||||
final_balance_foreign_currency =
|
||||
accgroup.final_balance_foreign_currency
|
||||
|
|
|
@ -109,6 +109,9 @@ class TrialBalanceXslx(models.AbstractModel):
|
|||
_('Hide') if report.hide_account_at_0 else _('Show')],
|
||||
[_('Show foreign currency'),
|
||||
_('Yes') if report.foreign_currency else _('No')],
|
||||
[_('Limit hierarchy levels'),
|
||||
_('Level %s' % report.show_hierarchy_level) if
|
||||
report.limit_hierarchy_level else _('No limit')],
|
||||
]
|
||||
|
||||
def _get_col_count_filter_name(self):
|
||||
|
@ -124,7 +127,7 @@ class TrialBalanceXslx(models.AbstractModel):
|
|||
self.write_array_header()
|
||||
|
||||
# For each account
|
||||
for account in report.account_ids:
|
||||
for account in report.account_ids.filtered(lambda a: not a.hide_line):
|
||||
if not report.show_partner_details:
|
||||
# Display account lines
|
||||
self.write_line(account, 'account')
|
||||
|
|
|
@ -39,19 +39,48 @@ class TestGeneralLedger(a_t_f_c.AbstractTestForeignCurrency):
|
|||
}
|
||||
|
||||
def _getAdditionalFiltersToBeTested(self):
|
||||
return [
|
||||
|
||||
additional_filters = [
|
||||
{'only_posted_moves': True},
|
||||
{'hide_account_balance_at_0': True},
|
||||
{'hide_account_at_0': True},
|
||||
{'centralize': True},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True},
|
||||
{'only_posted_moves': True, 'hide_account_at_0': True},
|
||||
{'only_posted_moves': True, 'centralize': True},
|
||||
{'hide_account_balance_at_0': True, 'centralize': True},
|
||||
{'hide_account_at_0': True, 'centralize': True},
|
||||
{
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': True,
|
||||
'hide_account_at_0': True,
|
||||
'centralize': True
|
||||
},
|
||||
]
|
||||
# Add `show_analytic_tags` filter on each cases
|
||||
additional_filters_with_show_tags = []
|
||||
for additional_filter in additional_filters:
|
||||
additional_filter['show_analytic_tags'] = True
|
||||
additional_filters_with_show_tags.append(
|
||||
additional_filter
|
||||
)
|
||||
additional_filters += additional_filters_with_show_tags
|
||||
# Add `filter_analytic_tag_ids` filter on each cases
|
||||
analytic_tag = self.env['account.analytic.tag'].create({
|
||||
'name': 'TEST tag'
|
||||
})
|
||||
# Define all move lines on this tag
|
||||
# (this test just check with the all filters, all works technically)
|
||||
move_lines = self.env['account.move.line'].search([])
|
||||
move_lines.write({
|
||||
'analytic_tag_ids': [(6, False, analytic_tag.ids)],
|
||||
})
|
||||
additional_filters_with_filter_tags = []
|
||||
for additional_filter in additional_filters:
|
||||
additional_filter['filter_analytic_tag_ids'] = [
|
||||
(6, False, analytic_tag.ids)
|
||||
]
|
||||
additional_filters_with_filter_tags.append(
|
||||
additional_filter
|
||||
)
|
||||
additional_filters += additional_filters_with_filter_tags
|
||||
return additional_filters
|
||||
|
||||
|
||||
class TestGeneralLedgerReport(common.TransactionCase):
|
||||
|
@ -120,7 +149,7 @@ class TestGeneralLedgerReport(common.TransactionCase):
|
|||
'date_from': self.fy_date_start,
|
||||
'date_to': self.fy_date_end,
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': False,
|
||||
'hide_account_at_0': False,
|
||||
'company_id': company.id,
|
||||
'fy_start_date': self.fy_date_start,
|
||||
})
|
||||
|
|
|
@ -36,6 +36,6 @@ class TestOpenItems(a_t_f_c.AbstractTestForeignCurrency):
|
|||
def _getAdditionalFiltersToBeTested(self):
|
||||
return [
|
||||
{'only_posted_moves': True},
|
||||
{'hide_account_balance_at_0': True},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True},
|
||||
{'hide_account_at_0': True},
|
||||
{'only_posted_moves': True, 'hide_account_at_0': True},
|
||||
]
|
||||
|
|
|
@ -41,20 +41,20 @@ class TestTrialBalance(a_t_f_c.AbstractTestForeignCurrency):
|
|||
def _getAdditionalFiltersToBeTested(self):
|
||||
return [
|
||||
{'only_posted_moves': True},
|
||||
{'hide_account_balance_at_0': True},
|
||||
{'hide_account_at_0': True},
|
||||
{'show_partner_details': True},
|
||||
{'hierarchy_on': 'computed'},
|
||||
{'hierarchy_on': 'relation'},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True,
|
||||
{'only_posted_moves': True, 'hide_account_at_0': True,
|
||||
'hierarchy_on': 'computed'},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True,
|
||||
{'only_posted_moves': True, 'hide_account_at_0': True,
|
||||
'hierarchy_on': 'relation'},
|
||||
{'only_posted_moves': True, 'hide_account_balance_at_0': True},
|
||||
{'only_posted_moves': True, 'hide_account_at_0': True},
|
||||
{'only_posted_moves': True, 'show_partner_details': True},
|
||||
{'hide_account_balance_at_0': True, 'show_partner_details': True},
|
||||
{'hide_account_at_0': True, 'show_partner_details': True},
|
||||
{
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': True,
|
||||
'hide_account_at_0': True,
|
||||
'show_partner_details': True
|
||||
},
|
||||
]
|
||||
|
@ -170,7 +170,7 @@ class TestTrialBalanceReport(common.TransactionCase):
|
|||
'date_from': self.date_start,
|
||||
'date_to': self.date_end,
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': False,
|
||||
'hide_account_at_0': False,
|
||||
'hierarchy_on': hierarchy_on,
|
||||
'company_id': company.id,
|
||||
'fy_start_date': self.fy_date_start,
|
||||
|
@ -528,7 +528,7 @@ class TestTrialBalanceReport(common.TransactionCase):
|
|||
'date_from': self.date_start,
|
||||
'date_to': self.date_end,
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': False,
|
||||
'hide_account_at_0': False,
|
||||
'hierarchy_on': 'none',
|
||||
'company_id': company.id,
|
||||
'fy_start_date': self.fy_date_start,
|
||||
|
@ -570,7 +570,7 @@ class TestTrialBalanceReport(common.TransactionCase):
|
|||
'date_from': self.date_start,
|
||||
'date_to': self.date_end,
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': False,
|
||||
'hide_account_at_0': False,
|
||||
'hierarchy_on': 'none',
|
||||
'company_id': company.id,
|
||||
'fy_start_date': self.fy_date_start,
|
||||
|
@ -613,7 +613,7 @@ class TestTrialBalanceReport(common.TransactionCase):
|
|||
'date_from': self.date_start,
|
||||
'date_to': self.date_end,
|
||||
'only_posted_moves': True,
|
||||
'hide_account_balance_at_0': False,
|
||||
'hide_account_at_0': False,
|
||||
'hierarchy_on': 'none',
|
||||
'company_id': company.id,
|
||||
'fy_start_date': self.fy_date_start,
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
# Copyright 2016 Camptocamp SA, Onestein B.V.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from datetime import datetime
|
||||
from odoo import api, fields, models
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
from odoo.tools import pycompat
|
||||
|
@ -21,7 +20,7 @@ class AgedPartnerBalanceWizard(models.TransientModel):
|
|||
string='Company'
|
||||
)
|
||||
date_at = fields.Date(required=True,
|
||||
default=fields.Date.to_string(datetime.today()))
|
||||
default=fields.Date.context_today)
|
||||
target_move = fields.Selection([('posted', 'All Posted Entries'),
|
||||
('all', 'All Entries')],
|
||||
string='Target Moves',
|
||||
|
|
|
@ -41,19 +41,26 @@ class GeneralLedgerReportWizard(models.TransientModel):
|
|||
)
|
||||
centralize = fields.Boolean(string='Activate centralization',
|
||||
default=True)
|
||||
hide_account_balance_at_0 = fields.Boolean(
|
||||
hide_account_at_0 = fields.Boolean(
|
||||
string='Hide account ending balance at 0',
|
||||
help='Use this filter to hide an account or a partner '
|
||||
'with an ending balance at 0. '
|
||||
'If partners are filtered, '
|
||||
'debits and credits totals will not match the trial balance.'
|
||||
)
|
||||
show_analytic_tags = fields.Boolean(
|
||||
string='Show analytic tags',
|
||||
)
|
||||
receivable_accounts_only = fields.Boolean()
|
||||
payable_accounts_only = fields.Boolean()
|
||||
partner_ids = fields.Many2many(
|
||||
comodel_name='res.partner',
|
||||
string='Filter partners',
|
||||
)
|
||||
analytic_tag_ids = fields.Many2many(
|
||||
comodel_name='account.analytic.tag',
|
||||
string='Filter accounts',
|
||||
)
|
||||
account_journal_ids = fields.Many2many(
|
||||
comodel_name='account.journal',
|
||||
string='Filter journals',
|
||||
|
@ -156,12 +163,14 @@ class GeneralLedgerReportWizard(models.TransientModel):
|
|||
'date_from': self.date_from,
|
||||
'date_to': self.date_to,
|
||||
'only_posted_moves': self.target_move == 'posted',
|
||||
'hide_account_balance_at_0': self.hide_account_balance_at_0,
|
||||
'hide_account_at_0': self.hide_account_at_0,
|
||||
'foreign_currency': self.foreign_currency,
|
||||
'show_analytic_tags': self.show_analytic_tags,
|
||||
'company_id': self.company_id.id,
|
||||
'filter_account_ids': [(6, 0, self.account_ids.ids)],
|
||||
'filter_partner_ids': [(6, 0, self.partner_ids.ids)],
|
||||
'filter_cost_center_ids': [(6, 0, self.cost_center_ids.ids)],
|
||||
'filter_analytic_tag_ids': [(6, 0, self.analytic_tag_ids.ids)],
|
||||
'filter_journal_ids': [(6, 0, self.account_journal_ids.ids)],
|
||||
'centralize': self.centralize,
|
||||
'fy_start_date': self.fy_start_date,
|
||||
|
|
|
@ -21,24 +21,29 @@
|
|||
<group name="other_filters">
|
||||
<field name="target_move" widget="radio"/>
|
||||
<field name="centralize"/>
|
||||
<field name="hide_account_balance_at_0"/>
|
||||
<field name="hide_account_at_0"/>
|
||||
<field name="foreign_currency"/>
|
||||
<field name="show_analytic_tags"/>
|
||||
</group>
|
||||
</group>
|
||||
<label for="cost_center_ids" groups="analytic.group_analytic_accounting"/>
|
||||
<field name="cost_center_ids" nolabel="1" options="{'no_create': True}" groups="analytic.group_analytic_accounting"/>
|
||||
<group/>
|
||||
<label for="partner_ids"/>
|
||||
<field name="partner_ids" nolabel="1" options="{'no_create': True}"/>
|
||||
<label for="account_journal_ids"/>
|
||||
<field name="account_journal_ids" widget="many2many_tags" nolabel="1" options="{'no_create': True}"/>
|
||||
<group/>
|
||||
<label for="account_ids"/>
|
||||
<group col="4">
|
||||
<field name="receivable_accounts_only"/>
|
||||
<field name="payable_accounts_only"/>
|
||||
</group>
|
||||
<field name="account_ids" widget="many2many_tags" nolabel="1" options="{'no_create': True}"/>
|
||||
<notebook>
|
||||
<page string="Filter accounts">
|
||||
<group col="4">
|
||||
<field name="receivable_accounts_only"/>
|
||||
<field name="payable_accounts_only"/>
|
||||
</group>
|
||||
<field name="account_ids" nolabel="1" options="{'no_create': True}"/>
|
||||
</page>
|
||||
<page string="Filter partners">
|
||||
<field name="partner_ids" nolabel="1" options="{'no_create': True}"/>
|
||||
</page>
|
||||
<page string="Filter cost centers" groups="analytic.group_analytic_accounting">
|
||||
<field name="cost_center_ids" nolabel="1" options="{'no_create': True}" groups="analytic.group_analytic_accounting"/>
|
||||
</page>
|
||||
<page string="Filter analytic tags">
|
||||
<field name="analytic_tag_ids" nolabel="1" options="{'no_create': True}"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</div>
|
||||
<div attrs="{'invisible': [('not_only_one_unaffected_earnings_account', '=', False)]}">
|
||||
<field name="not_only_one_unaffected_earnings_account" invisible="1"/>
|
||||
|
|
|
@ -38,7 +38,7 @@ class JournalLedgerReportWizard(models.TransientModel):
|
|||
comodel_name='account.journal',
|
||||
string="Journals",
|
||||
domain="[('company_id', '=', company_id)]",
|
||||
required=True,
|
||||
required=False,
|
||||
)
|
||||
move_target = fields.Selection(
|
||||
selection='_get_move_targets',
|
||||
|
@ -121,13 +121,18 @@ class JournalLedgerReportWizard(models.TransientModel):
|
|||
@api.multi
|
||||
def _prepare_report_journal_ledger(self):
|
||||
self.ensure_one()
|
||||
journals = self.journal_ids
|
||||
if not journals:
|
||||
# Not selecting a journal means that we'll display all journals
|
||||
journals = self.env['account.journal'].search(
|
||||
[('company_id', '=', self.company_id.id)])
|
||||
return {
|
||||
'date_from': self.date_from,
|
||||
'date_to': self.date_to,
|
||||
'move_target': self.move_target,
|
||||
'foreign_currency': self.foreign_currency,
|
||||
'company_id': self.company_id.id,
|
||||
'journal_ids': [(6, 0, self.journal_ids.ids)],
|
||||
'journal_ids': [(6, 0, journals.ids)],
|
||||
'sort_option': self.sort_option,
|
||||
'group_option': self.group_option,
|
||||
'with_account_name': self.with_account_name,
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
# Copyright 2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from datetime import datetime
|
||||
from odoo import models, fields, api
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
from odoo.tools import pycompat
|
||||
|
@ -21,7 +20,7 @@ class OpenItemsReportWizard(models.TransientModel):
|
|||
string='Company'
|
||||
)
|
||||
date_at = fields.Date(required=True,
|
||||
default=fields.Date.to_string(datetime.today()))
|
||||
default=fields.Date.context_today)
|
||||
target_move = fields.Selection([('posted', 'All Posted Entries'),
|
||||
('all', 'All Entries')],
|
||||
string='Target Moves',
|
||||
|
@ -32,8 +31,8 @@ class OpenItemsReportWizard(models.TransientModel):
|
|||
string='Filter accounts',
|
||||
domain=[('reconcile', '=', True)],
|
||||
)
|
||||
hide_account_balance_at_0 = fields.Boolean(
|
||||
string='Hide account ending balance at 0',
|
||||
hide_account_at_0 = fields.Boolean(
|
||||
string='Hide account ending balance at 0', default=True,
|
||||
help='Use this filter to hide an account or a partner '
|
||||
'with an ending balance at 0. '
|
||||
'If partners are filtered, '
|
||||
|
@ -102,7 +101,7 @@ class OpenItemsReportWizard(models.TransientModel):
|
|||
return {
|
||||
'date_at': self.date_at,
|
||||
'only_posted_moves': self.target_move == 'posted',
|
||||
'hide_account_balance_at_0': self.hide_account_balance_at_0,
|
||||
'hide_account_at_0': self.hide_account_at_0,
|
||||
'foreign_currency': self.foreign_currency,
|
||||
'company_id': self.company_id.id,
|
||||
'filter_account_ids': [(6, 0, self.account_ids.ids)],
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
</group>
|
||||
<group name="other_filters">
|
||||
<field name="target_move" widget="radio"/>
|
||||
<field name="hide_account_balance_at_0"/>
|
||||
<field name="hide_account_at_0"/>
|
||||
<field name="foreign_currency"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
# Author: Julien Coux
|
||||
# Copyright 2016 Camptocamp SA
|
||||
# Copyright 2017 Akretion - Alexis de Lattre
|
||||
# Copyright 2018 Eficent Business and IT Consuting Services, S.L.
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import models, fields, api
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.tools.safe_eval import safe_eval
|
||||
from odoo.tools import pycompat
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class TrialBalanceReportWizard(models.TransientModel):
|
||||
|
@ -44,6 +46,9 @@ class TrialBalanceReportWizard(models.TransientModel):
|
|||
No hierarchy: Use to display just the accounts, without any grouping.
|
||||
""",
|
||||
)
|
||||
limit_hierarchy_level = fields.Boolean('Limit hierarchy levels')
|
||||
show_hierarchy_level = fields.Integer('Hierarchy Levels to display',
|
||||
default=1)
|
||||
account_ids = fields.Many2many(
|
||||
comodel_name='account.account',
|
||||
string='Filter accounts',
|
||||
|
@ -77,6 +82,14 @@ class TrialBalanceReportWizard(models.TransientModel):
|
|||
'will display initial and final balance in that currency.'
|
||||
)
|
||||
|
||||
@api.multi
|
||||
@api.constrains('hierarchy_on', 'show_hierarchy_level')
|
||||
def _check_show_hierarchy_level(self):
|
||||
for rec in self:
|
||||
if rec.hierarchy_on != 'none' and rec.show_hierarchy_level <= 0:
|
||||
raise UserError(_('The hierarchy level to filter on must be '
|
||||
'greater than 0.'))
|
||||
|
||||
@api.depends('date_from')
|
||||
def _compute_fy_start_date(self):
|
||||
for wiz in self.filtered('date_from'):
|
||||
|
@ -168,6 +181,8 @@ class TrialBalanceReportWizard(models.TransientModel):
|
|||
'filter_journal_ids': [(6, 0, self.journal_ids.ids)],
|
||||
'fy_start_date': self.fy_start_date,
|
||||
'hierarchy_on': self.hierarchy_on,
|
||||
'limit_hierarchy_level': self.limit_hierarchy_level,
|
||||
'show_hierarchy_level': self.show_hierarchy_level,
|
||||
'show_partner_details': self.show_partner_details,
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
<field name="hide_account_at_0"/>
|
||||
<field name="show_partner_details"/>
|
||||
<field name="hierarchy_on" widget="radio" attrs="{'invisible':[('show_partner_details','=',True)]}"/>
|
||||
<field name="limit_hierarchy_level" attrs="{'invisible':['|', ('hierarchy_on','=','none'),('show_partner_details','=',True)]}"/>
|
||||
<field name="show_hierarchy_level" attrs="{'invisible':[('limit_hierarchy_level','=', False)]}"/>
|
||||
<field name="foreign_currency"/>
|
||||
</group>
|
||||
</group>
|
||||
|
@ -31,6 +33,7 @@
|
|||
<label for="journal_ids"/>
|
||||
<field name="journal_ids" widget="many2many_tags" nolabel="1" options="{'no_create': True}"/>
|
||||
<group attrs="{'invisible':[('show_partner_details','!=',True)]}"/>
|
||||
<div/>
|
||||
<label for="account_ids"/>
|
||||
<group col="4">
|
||||
<field name="receivable_accounts_only"/>
|
||||
|
|
Loading…
Reference in New Issue