from odoo import models from odoo import api, fields, models, _ from odoo.exceptions import RedirectWarning, UserError, ValidationError, AccessError class Invoice(models.Model): _inherit = 'account.move' def _register_payment_automatically(self, date): payment_model = self.env['account.payment'] for invoice in self: if invoice.state == 'posted' and invoice.amount_residual > 0: payment_vals = { 'payment_type': 'inbound', 'partner_type': 'customer', 'partner_id': invoice.partner_id.id, 'amount': invoice.amount_residual, 'date': date, 'journal_id': invoice.partner_id.ginee_journal_id.id or 24, 'payment_method_id': self.env.ref('account.account_payment_method_manual_in').id, 'ref': invoice.name, # 'communication': invoice.name, } payment = payment_model.create(payment_vals) payment.action_post() # Reconcile payment with invoice # (invoice.line_ids + payment.move_id.line_ids) \ # .filtered(lambda line: line.account_id.reconcile) \ # .reconcile() receivable_lines = invoice.line_ids.filtered(lambda line: line.account_id.internal_type == 'receivable') payment_lines = payment.move_id.line_ids.filtered( lambda line: line.account_id.internal_type == 'receivable') for receivable_line in receivable_lines: for payment_line in payment_lines: if receivable_line.account_id == payment_line.account_id: (receivable_line + payment_line).reconcile()