diff --git a/account_payment_purchase/models/account_move.py b/account_payment_purchase/models/account_move.py index a142ec617..c7b24c6ab 100644 --- a/account_payment_purchase/models/account_move.py +++ b/account_payment_purchase/models/account_move.py @@ -10,17 +10,20 @@ class AccountMove(models.Model): @api.onchange("purchase_vendor_bill_id", "purchase_id") def _onchange_purchase_auto_complete(self): - new_mode = ( - self.purchase_vendor_bill_id.purchase_order_id.payment_mode_id.id - or self.purchase_id.payment_mode_id.id - ) - new_bank = ( - self.purchase_vendor_bill_id.purchase_order_id.supplier_partner_bank_id.id - or self.purchase_id.supplier_partner_bank_id.id - ) + old_mode = self.payment_mode_id.id + old_bank = self.partner_bank_id.id + purchase_id = self.purchase_vendor_bill_id.purchase_order_id or self.purchase_id + if purchase_id: + new_invoice_vals = purchase_id.with_company( + purchase_id.company_id + )._prepare_invoice() + new_mode = new_invoice_vals.get("payment_mode_id", False) + new_bank = new_invoice_vals.get("partner_bank_id", False) + else: + new_mode = new_bank = False res = super()._onchange_purchase_auto_complete() or {} - if self.payment_mode_id and new_mode and self.payment_mode_id.id != new_mode: + if old_mode and new_mode and old_mode != new_mode: res["warning"] = { "title": _("Warning"), "message": _("Selected purchase order have different payment mode."), @@ -28,12 +31,11 @@ class AccountMove(models.Model): return res elif self.payment_mode_id.id != new_mode: self.payment_mode_id = new_mode - if self.partner_bank_id and new_bank and self.partner_bank_id.id != new_bank: + if old_bank and new_bank and old_bank != new_bank: res["warning"] = { "title": _("Warning"), "message": _("Selected purchase order have different supplier bank."), } - return res elif self.partner_bank_id.id != new_bank: self.partner_bank_id = new_bank return res diff --git a/account_payment_purchase/models/purchase_order.py b/account_payment_purchase/models/purchase_order.py index 2eb823afe..673c1ed4f 100644 --- a/account_payment_purchase/models/purchase_order.py +++ b/account_payment_purchase/models/purchase_order.py @@ -10,7 +10,7 @@ class PurchaseOrder(models.Model): supplier_partner_bank_id = fields.Many2one( comodel_name="res.partner.bank", - compute="_compute_payment_mode", + compute="_compute_supplier_partner_bank", readonly=False, store=True, precompute=True, @@ -46,18 +46,27 @@ class PurchaseOrder(models.Model): def _compute_payment_mode(self): for order in self: if order.partner_id: + order = order.with_company(order.company_id) + order.payment_mode_id = order.partner_id.supplier_payment_mode_id + + @api.depends("partner_id", "company_id", "payment_mode_id") + def _compute_supplier_partner_bank(self): + for order in self: + if ( + order.payment_mode_id.payment_method_id.bank_account_required + and order.partner_id + ): order = order.with_company(order.company_id) order.supplier_partner_bank_id = ( order._get_default_supplier_partner_bank(order.partner_id) ) - order.payment_mode_id = order.partner_id.supplier_payment_mode_id - else: + elif not order.payment_mode_id.payment_method_id.bank_account_required: order.supplier_partner_bank_id = False - order.payment_mode_id = False def _prepare_invoice(self): - """Leave the bank account empty so that account_payment_partner set the - correct value with compute.""" - invoice_vals = super()._prepare_invoice() - invoice_vals.pop("partner_bank_id") - return invoice_vals + res = super()._prepare_invoice() + res["payment_mode_id"] = self.payment_mode_id.id + res.pop("partner_bank_id", False) + if self.payment_mode_id.payment_method_id.bank_account_required: + res["partner_bank_id"] = self.supplier_partner_bank_id.id + return res