1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
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):
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': invoice.invoice_date,
'journal_id': invoice.partner_id.ginee_journal_id.id,
'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()
|