44 lines
2.1 KiB
Python
44 lines
2.1 KiB
Python
from odoo import models, _
|
|
|
|
|
|
class l10n_CoAccountTrialBalancePerPartnerReportHandler(models.AbstractModel):
|
|
_name = 'l10n_co.account.trial.balance.per.partner.report.handler'
|
|
_inherit = 'account.trial.balance.report.handler'
|
|
_description = "Custom handler for Colombian 'Trial balance per partner'"
|
|
|
|
def _custom_options_initializer(self, report, options, previous_options):
|
|
super()._custom_options_initializer(report, options, previous_options)
|
|
|
|
options['columns'].insert(0, {
|
|
'name': _('Partner VAT'),
|
|
'column_group_key': options['columns'][-1]['column_group_key'],
|
|
'expression_label': 'partner_vat',
|
|
'sortable': False,
|
|
'figure_type': 'string',
|
|
'blank_if_zero': True,
|
|
})
|
|
options['column_headers'][0].insert(0, {'name': _('Partners information'), 'colspan': 1})
|
|
|
|
xlsx_button_option = next((button_opt for button_opt in options['buttons'] if button_opt.get('action_param') == 'export_to_xlsx'), {})
|
|
xlsx_button_option['action_param'] = 'l10n_co_export_to_xlsx'
|
|
|
|
def l10n_co_export_to_xlsx(self, options):
|
|
# Force the unfold_all attribute when exporting xlsx file
|
|
options['unfold_all'] = True
|
|
report = self.env['account.report'].browse(options['report_id'])
|
|
return report.export_to_xlsx(options)
|
|
|
|
def _custom_line_postprocessor(self, report, options, lines):
|
|
partner_ids = {report._get_res_id_from_line_id(line['id'], 'res.partner') for line in lines}
|
|
partners = self.env['res.partner'].search_fetch(domain=[('id', 'in', list(partner_ids))], field_names=['vat'])
|
|
partner_vats = {partner.id: partner.vat or '' for partner in partners}
|
|
|
|
filtered_lines = []
|
|
for line in super()._custom_line_postprocessor(report, options, lines):
|
|
partner_id = report._get_res_id_from_line_id(line['id'], 'res.partner')
|
|
partner_vat = partner_vats.get(partner_id, '') if partner_id else ''
|
|
line['columns'][0].update({'is_zero': False, 'no_format': partner_vat})
|
|
filtered_lines.append(line)
|
|
|
|
return filtered_lines
|