Merge PR #1326 into 17.0

Signed-off-by pedrobaeza
This commit is contained in:
OCA-git-bot
2024-07-29 14:37:23 +00:00
2 changed files with 31 additions and 20 deletions

View File

@@ -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

View File

@@ -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