summaryrefslogtreecommitdiff
path: root/fixco_api/models/invoice.py
blob: 33d74fa92fc5ad777a22e89b9ff0ee8e1c7b07c1 (plain)
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 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()