Sélectionner une révision Git
-
Benjamin - Le Filament a rédigéBenjamin - Le Filament a rédigé
res_partner.py NaN Gio
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class ResPartner(models.Model):
_inherit = "res.partner"
# Company Fields
membership_number = fields.Integer(
string="N° Adhérent",
)
membership_contact_id = fields.Many2one(
comodel_name="res.partner",
string="Contact Adhésion",
domain="[('parent_id', '=', id)]",
)
membership_mandate_id = fields.Many2one(
comodel_name="res.partner",
string="Contact Mandataire",
domain="[('parent_id', '=', id)]",
)
membership_delegate_id = fields.Many2one(
comodel_name="res.partner",
string="Contact Délégataire",
domain="[('parent_id', '=', id)]",
)
membership_is_delegate = fields.Boolean(
string="Personne Délégataire",
compute="_compute_membership_is_delegate",
store=True,
default=False,
)
membership_is_mandate = fields.Boolean(
string="Personne Mandataire",
compute="_compute_membership_is_mandate",
store=True,
default=False,
)
membership_is_contact = fields.Boolean(
string="Personne Contact Adhésion",
compute="_compute_membership_is_contact",
store=True,
default=False,
)
is_membership_archived = fields.Boolean("Membre archivé")
last_membership_invoice_date = fields.Date(
string="Date de dernière facture d'adhésion",
compute="_compute_last_membership_invoice_date",
)
# ------------------------------------------------------
# SQL Constraints
# ------------------------------------------------------
# ------------------------------------------------------
# Default methods
# ------------------------------------------------------
# ------------------------------------------------------
# Computed fields / Search Fields
# ------------------------------------------------------
@api.depends("parent_id", "parent_id.membership_delegate_id")
def _compute_membership_is_delegate(self):
for partner in self:
if partner.parent_id.membership_delegate_id == partner:
partner.membership_is_delegate = True
@api.depends("parent_id", "parent_id.membership_mandate_id")
def _compute_membership_is_mandate(self):
for partner in self:
if partner.parent_id.membership_mandate_id == partner:
partner.membership_is_mandate = True
@api.depends("parent_id", "parent_id.membership_contact_id")
def _compute_membership_is_contact(self):
for partner in self:
if partner.parent_id.membership_contact_id == partner:
partner.membership_is_contact = True
@api.depends(
"free_member",
"member_lines.state",
"member_lines.category_id",
"member_lines.date_from",
"member_lines.date_to",
"member_lines.date_cancel",
"associate_member.membership_state",
"associate_member.membership_category_ids",
"parent_id",
"parent_id.membership_state",
)
def _compute_membership_state(self):
"""
Inherit parent function to attribute membership state to childs
"""
super()._compute_membership_state()
for partner in self:
if partner.parent_id and not partner.is_company:
partner.membership_state = partner.parent_id.membership_state
@api.depends("member_lines")
def _compute_last_membership_invoice_date(self):
for partner in self:
invoices = partner.sudo().member_lines.filtered(
lambda line: line.account_invoice_id
and line.account_invoice_id.state == "posted"
).mapped("date")
last_invoice_date = max(invoices, default=False)
partner.last_membership_invoice_date = last_invoice_date
# ------------------------------------------------------
# Onchange / Constraints
# ------------------------------------------------------
@api.onchange("parent_id")
def _onchange_parent_id(self):
res = super(ResPartner, self)._onchange_parent_id()
self.is_membership_archived = self.parent_id.is_membership_archived
return res
# ------------------------------------------------------
# CRUD methods (ORM overrides)
# ------------------------------------------------------
def write(self, vals):
"""
Inherit write ORM function and
apply parent values for child
"""
res = super(ResPartner, self).write(vals)
for partner in self:
# if partner has child, update all childs
if partner.child_ids:
partner.child_ids.update(
{"is_membership_archived": partner.is_membership_archived}
)
return res
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
# ------------------------------------------------------
# Business methods
# ------------------------------------------------------