shopinvader/odoo-shopinvader

View on GitHub
shopinvader_guest_mode/wizards/partner_binding_wizard.py

Summary

Maintainability
A
1 hr
Test Coverage
# -*- coding: utf-8 -*-
# Copyright 2020 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, models


class ShopinvaderPartnerBinding(models.TransientModel):

    _inherit = "shopinvader.partner.binding"

    @api.multi
    @api.onchange("shopinvader_backend_id")
    def _onchange_shopinvader_backend_id(self):
        """
        Onchange for the shopinvader_backend_id field.
        Auto fill some info based on active_ids and selected backend.
        :return:
        """
        super(
            ShopinvaderPartnerBinding, self
        )._onchange_shopinvader_backend_id()
        if self.env.context.get("active_model") == "res.partner":
            partner_ids = self.env.context.get("active_ids", [])
            lines = []
            for partner in self.env["res.partner"].browse(partner_ids):
                shopinv_partner = partner.shopinvader_bind_ids.filtered(
                    lambda x, b=self.shopinvader_backend_id: x.backend_id == b
                    and x.is_guest
                )
                if shopinv_partner:
                    line = self.binding_lines.filtered(
                        lambda l: l.partner_id == shopinv_partner.partner_id
                    )
                    if not line:
                        values = {
                            "partner_id": partner.id,
                            "bind": False,
                            "is_guest": True,
                        }
                        lines.append((0, False, values))
                    else:
                        # We found a partner that is guest
                        line.udpate({"is_guest": True})
            if lines:
                self.binding_lines = lines