1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/account_batch_payment/wizard/batch_error.py
2024-12-10 09:04:09 +07:00

71 lines
3.4 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, models, fields, _
class BatchErrorWizard(models.TransientModel):
_name = 'account.batch.error.wizard'
_description = "Batch payments error reporting wizard"
batch_payment_id = fields.Many2one(comodel_name='account.batch.payment', required=True, help="The batch payment generating the errors and warnings displayed in this wizard.")
error_line_ids = fields.One2many(comodel_name='account.batch.error.wizard.line', inverse_name='error_wizard_id')
warning_line_ids = fields.One2many(comodel_name='account.batch.error.wizard.line', inverse_name='warning_wizard_id')
show_remove_options = fields.Boolean(required=True, help="True if and only if the options to remove the payments causing the errors or warnings from the batch should be shown")
@api.model
def create_from_errors_list(self, batch, errors_list, warnings_list):
rslt = self.create({'batch_payment_id': batch.id, 'show_remove_options': batch.export_file})
self._create_error_wizard_lines(rslt.id, 'error_wizard_id', errors_list)
self._create_error_wizard_lines(rslt.id, 'warning_wizard_id', warnings_list)
return rslt
@api.model
def _create_error_wizard_lines(self, wizard_id, wizard_link_field, entries):
wizard_line = self.env['account.batch.error.wizard.line']
for entry in entries:
wizard_line.create({
wizard_link_field: wizard_id,
'description': entry['title'],
'help_message': entry.get('help', None),
'payment_ids': [(6, False, entry['records'].ids)],
})
def proceed_with_validation(self):
self.ensure_one()
return self.batch_payment_id._send_after_validation()
class BatchErrorWizardLine(models.TransientModel):
_name = 'account.batch.error.wizard.line'
_description = "Batch payments error reporting wizard line"
description = fields.Char(string="Description", required=True)
help_message = fields.Char(string="Help")
payment_ids = fields.Many2many(string='Payments', comodel_name='account.payment', required=True)
error_wizard_id = fields.Many2one(comodel_name='account.batch.error.wizard')
warning_wizard_id = fields.Many2one(comodel_name='account.batch.error.wizard')
# Whether or not this line should display a button allowing to remove its related payments from the batch
show_remove_button = fields.Boolean(compute="_compute_show_remove_button")
def _compute_show_remove_button(self):
for record in self:
record.show_remove_button = record.error_wizard_id.show_remove_options or record.warning_wizard_id.show_remove_options
def open_payments(self):
return {
'name': _('Payments in Error'),
'type': 'ir.actions.act_window',
'view_mode': 'tree,form',
'res_model': 'account.payment',
'domain': [('id', 'in', self.payment_ids.ids)],
}
def remove_payments_from_batch(self):
for payment in self.payment_ids:
payment.batch_payment_id = None
# We try revalidating the batch if we still have payments for it (we hence do nothing for empty batches)
batch = (self.error_wizard_id or self.warning_wizard_id).batch_payment_id
if batch.payment_ids:
return batch.validate_batch()