forked from Mapan/odoo17e
71 lines
3.4 KiB
Python
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()
|