From 3f66de30c45cf1c70361f11dccda1a1bfe74e0bd Mon Sep 17 00:00:00 2001 From: git_admin Date: Sat, 2 May 2026 07:02:37 +0000 Subject: [PATCH] Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) --- .../report/followup_print.py | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 addons/om_account_followup/report/followup_print.py diff --git a/addons/om_account_followup/report/followup_print.py b/addons/om_account_followup/report/followup_print.py new file mode 100644 index 0000000..7ec3ac0 --- /dev/null +++ b/addons/om_account_followup/report/followup_print.py @@ -0,0 +1,110 @@ +import time +from collections import defaultdict +from odoo.exceptions import ValidationError +from odoo import api, fields, models, _ +from odoo.tools import format_date + + +class ReportFollowup(models.AbstractModel): + _name = 'report.om_account_followup.report_followup' + _description = 'Report Followup' + + @api.model + def _get_report_values(self, docids, data=None): + model = self.env['followup.sending.results'] + ids = self.env.context.get('active_ids') or False + docs = model.browse(ids) + return { + 'docs': docs, + 'doc_ids': docids, + 'doc_model': model, + 'time': time, + 'ids_to_objects': self._ids_to_objects, + 'getLines': self._lines_get, + 'get_text': self._get_text, + 'data': data and data['form'] or {}} + + def _ids_to_objects(self, ids): + all_lines = [] + for line in self.env['followup.stat.by.partner'].browse(ids): + if line not in all_lines: + all_lines.append(line) + return all_lines + + def _lines_get(self, stat_by_partner_line): + return self._lines_get_with_partner(stat_by_partner_line.partner_id, + stat_by_partner_line.company_id.id) + + def _lines_get_with_partner(self, partner, company_id): + moveline_obj = self.env['account.move.line'] + moveline_ids = moveline_obj.search( + [('partner_id', '=', partner.id), + ('account_id.account_type', '=', 'asset_receivable'), + ('full_reconcile_id', '=', False), + ('company_id', '=', company_id), + '|', ('date_maturity', '=', False), + ('date_maturity', '<=', fields.Date.today())]) + lines_per_currency = defaultdict(list) + total = 0 + for line in moveline_ids: + currency = line.currency_id or line.company_id.currency_id + balance = line.debit - line.credit + if currency != line.company_id.currency_id: + balance = line.amount_currency + line_data = { + 'name': line.move_id.name, + 'ref': line.ref, + 'date': format_date(self.env, line.date), + 'date_maturity': format_date(self.env, line.date_maturity), + 'balance': balance, + 'currency_id': currency, + } + total = total + line_data['balance'] + lines_per_currency[currency].append(line_data) + + return [{'total': total, 'line': lines, 'currency': currency} for + currency, lines in + lines_per_currency.items()] + + def _get_text(self, stat_line, followup_id, context=None): + fp_obj = self.env['followup.followup'] + fp_line = fp_obj.browse(followup_id).followup_line + if not fp_line: + raise ValidationError( + _("The followup plan defined for the current company does not " + "have any followup action.")) + default_text = '' + li_delay = [] + for line in fp_line: + if not default_text and line.description: + default_text = line.description + li_delay.append(line.delay) + li_delay.sort(reverse=True) + partner_line_ids = self.env['account.move.line'].search( + [('partner_id', '=', stat_line.partner_id.id), + ('full_reconcile_id', '=', False), + ('company_id', '=', stat_line.company_id.id), + ('debit', '!=', False), + ('account_id.account_type', '=', 'asset_receivable'), + ('followup_line_id', '!=', False)]) + + partner_max_delay = 0 + partner_max_text = '' + for i in partner_line_ids: + if i.followup_line_id.delay > partner_max_delay and \ + i.followup_line_id.description: + partner_max_delay = i.followup_line_id.delay + partner_max_text = i.followup_line_id.description + text = partner_max_delay and partner_max_text or default_text + if text: + lang_obj = self.env['res.lang'] + lang_ids = lang_obj.search( + [('code', '=', stat_line.partner_id.lang)], limit=1) + date_format = lang_ids and lang_ids.date_format or '%Y-%m-%d' + text = text % { + 'partner_name': stat_line.partner_id.name, + 'date': time.strftime(date_format), + 'company_name': stat_line.company_id.name, + 'user_signature': self.env.user.signature or '', + } + return text