# -*- coding: utf-8 -*- # © 2014-2016 Akretion (Alexis de Lattre ) # © 2014 Serv. Tecnol. Avanzados - Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). from odoo import models, fields, api class AccountMoveLine(models.Model): _inherit = 'account.move.line' partner_bank_id = fields.Many2one( 'res.partner.bank', string='Partner Bank Account', help='Bank account on which we should pay the supplier') bank_payment_line_id = fields.Many2one( 'bank.payment.line', string='Bank Payment Line', readonly=True) @api.multi def _prepare_payment_line_vals(self, payment_order): self.ensure_one() assert payment_order, 'Missing payment order' aplo = self.env['account.payment.line'] # default values for communication_type and communication communication_type = 'normal' communication = self.move_id.ref or self.move_id.name # change these default values if move line is linked to an invoice if self.invoice_id: if self.invoice_id.reference_type != 'none': communication = self.invoice_id.reference ref2comm_type =\ aplo.invoice_reference_type2communication_type() communication_type =\ ref2comm_type[self.invoice_id.reference_type] else: if ( self.invoice_id.type in ('in_invoice', 'in_refund') and self.invoice_id.reference): communication = self.invoice_id.reference if self.currency_id: currency_id = self.currency_id.id amount_currency = self.amount_residual_currency else: currency_id = self.company_id.currency_id.id amount_currency = self.amount_residual # TODO : check that self.amount_residual_currency is 0 # in this case if payment_order.payment_type == 'outbound': amount_currency *= -1 partner_bank_id = False if not self.partner_bank_id: # Select partner bank account automatically if there is only one if len(self.partner_id.bank_ids) == 1: partner_bank_id = self.partner_id.bank_ids[0].id else: partner_bank_id = self.partner_bank_id.id vals = { 'order_id': payment_order.id, 'partner_bank_id': partner_bank_id, 'partner_id': self.partner_id.id, 'move_line_id': self.id, 'communication': communication, 'communication_type': communication_type, 'currency_id': currency_id, 'amount_currency': amount_currency, # date is set when the user confirms the payment order } return vals @api.multi def create_payment_line_from_move_line(self, payment_order): aplo = self.env['account.payment.line'] for mline in self: aplo.create(mline._prepare_payment_line_vals(payment_order)) return