From a052dcf1a30bc2ba5dd1fe06a41234c74f9b98c0 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Thu, 24 Dec 2020 10:38:19 +0100 Subject: [PATCH] [MIG] account_banking_mandate from v12 to v14 --- account_banking_mandate_sale/__manifest__.py | 5 +- .../models/sale_order.py | 48 ++++++++++--------- .../oca_dependencies.txt | 1 + .../views/sale_order.xml | 1 - .../wizard/sale_make_invoice_advance.py | 14 +++--- 5 files changed, 35 insertions(+), 34 deletions(-) create mode 100644 account_banking_mandate_sale/oca_dependencies.txt diff --git a/account_banking_mandate_sale/__manifest__.py b/account_banking_mandate_sale/__manifest__.py index 581f380c3..5aa1755d7 100644 --- a/account_banking_mandate_sale/__manifest__.py +++ b/account_banking_mandate_sale/__manifest__.py @@ -1,9 +1,9 @@ -# © 2016 Akretion (Alexis de Lattre ) +# Copyright 2016-2020 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'Account Banking Mandate Sale', - 'version': '12.0.1.0.1', + 'version': '14.0.1.0.0', 'category': 'Banking addons', 'license': 'AGPL-3', 'summary': "Adds mandates on sale orders", @@ -12,6 +12,7 @@ 'website': 'https://github.com/OCA/bank-payment', 'depends': [ 'account_payment_sale', + 'sale_commercial_partner', 'account_banking_mandate', ], 'data': [ diff --git a/account_banking_mandate_sale/models/sale_order.py b/account_banking_mandate_sale/models/sale_order.py index 4d64683ef..08bbc2b04 100644 --- a/account_banking_mandate_sale/models/sale_order.py +++ b/account_banking_mandate_sale/models/sale_order.py @@ -1,7 +1,7 @@ -# © 2014-2016 Akretion (Alexis de Lattre ) +# Copyright 2014-2020 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, fields, api +from odoo import api, fields, models class SaleOrder(models.Model): @@ -9,34 +9,36 @@ class SaleOrder(models.Model): # This field commercial_partner_id should be moved # in an OCA base module named for example sale_commercial_partner - commercial_partner_id = fields.Many2one( - related='partner_id.commercial_partner_id', string='Commercial Entity', - store=True, readonly=True) mandate_id = fields.Many2one( - 'account.banking.mandate', string='Direct Debit Mandate', - ondelete='restrict', readonly=True, - states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}) + 'account.banking.mandate', + string='Direct Debit Mandate', + ondelete='restrict', + check_company=True, + readonly=False, + domain="[('partner_id', '=', commercial_partner_id), ('state', 'in', ('draft', 'valid')), ('company_id', '=', company_id)]", + ) mandate_required = fields.Boolean( related='payment_mode_id.payment_method_id.mandate_required', - readonly=True, ) - @api.multi def _prepare_invoice(self): """Copy mandate from sale order to invoice""" - vals = super(SaleOrder, self)._prepare_invoice() - vals['mandate_id'] = self.mandate_id.id + vals = super()._prepare_invoice() + vals['mandate_id'] = self.mandate_id.id or False return vals - @api.onchange('payment_mode_id') - def payment_mode_change(self): + @api.depends("partner_id") + def _compute_payment_mode(self): """Select by default the first valid mandate of the partner""" - self.ensure_one() - if self.mandate_required and self.partner_id: - mandates = self.env['account.banking.mandate'].search([ - ('state', '=', 'valid'), - ('partner_id', '=', self.commercial_partner_id.id), - ]) - self.mandate_id = mandates[:1] - else: - self.mandate_id = False + super()._compute_payment_mode() + abm_obj = self.env['account.banking.mandate'] + for order in self: + if order.mandate_required and order.partner_id: + mandate = abm_obj.search([ + ('state', '=', 'valid'), + ('partner_id', '=', order.commercial_partner_id.id), + ('company_id', '=', order.company_id.id), + ], limit=1) + order.mandate_id = mandate or False + else: + order.mandate_id = False diff --git a/account_banking_mandate_sale/oca_dependencies.txt b/account_banking_mandate_sale/oca_dependencies.txt new file mode 100644 index 000000000..5cdbc1a4e --- /dev/null +++ b/account_banking_mandate_sale/oca_dependencies.txt @@ -0,0 +1 @@ +sale-workflow diff --git a/account_banking_mandate_sale/views/sale_order.xml b/account_banking_mandate_sale/views/sale_order.xml index 88ea0b81a..c6ecae69d 100644 --- a/account_banking_mandate_sale/views/sale_order.xml +++ b/account_banking_mandate_sale/views/sale_order.xml @@ -14,7 +14,6 @@ diff --git a/account_banking_mandate_sale/wizard/sale_make_invoice_advance.py b/account_banking_mandate_sale/wizard/sale_make_invoice_advance.py index f8df5479b..e449d679e 100644 --- a/account_banking_mandate_sale/wizard/sale_make_invoice_advance.py +++ b/account_banking_mandate_sale/wizard/sale_make_invoice_advance.py @@ -1,17 +1,15 @@ -# © 2016 Akretion (Alexis de Lattre ) +# Copyright 2016-2020 Akretion (Alexis de Lattre ) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, api +from odoo import api, models class SaleAdvancePaymentInv(models.TransientModel): _inherit = 'sale.advance.payment.inv' - @api.multi - def _create_invoice(self, order, so_line, amount): + def _prepare_invoice_values(self, order, name, amount, so_line): """Copy mandate from sale order to invoice""" - inv = super(SaleAdvancePaymentInv, self)._create_invoice( - order, so_line, amount) + vals = super()._prepare_invoice_values(order, name, amount, so_line) if order.mandate_id: - inv.mandate_id = order.mandate_id.id - return inv + vals['mandate_id'] = order.mandate_id.id + return vals