You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

131 lines
4.5 KiB

# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.osv.expression import OR, AND
# STRUCTURE_TYPES = [
# ('ffck', 'Federal'),
# ('crck', 'Region'),
# ('cdck', 'Department'),
# ('club', 'Affiliate'),
# ('agra', 'Agreement A'),
# ('agrb', 'Agreement B'),
# ('conv', 'Convention'),
# ('asso', 'Associated'),
# ]
SCALES = [
("nat", "National"),
("reg", "Regional"),
("dep", "Departmental"),
("loc", "Local"),
("lic", "Licensee"),
]
class ResPartner(models.Model):
_inherit = "res.partner"
@api.model
def _get_ffck_partner(self):
ffck = self.env.ref("ffck_commons.ffck_partner")
main = self.env.ref("base.main_partner")
if main.ref == "FFCK":
if ffck.active:
ffck.write({"active": False})
return main
else:
return ffck
# Partner fields
structure_create_date = fields.Date("Structure creation")
# FFCK fields
ffck_network = fields.Boolean(string="FFCK network")
first_membership_date = fields.Date("Structure 1st membership")
# Structure typing
partner_scale = fields.Selection(
selection=SCALES,
string="Scale",
)
ffck_type_id = fields.Many2one(
comodel_name="ffck.structure.type", string="Structure type"
)
# structure_type = fields.Selection(
# selection=STRUCTURE_TYPES,
# string="Structure",
# )
ffck_partner_id = fields.Many2one(
"res.partner",
string="FFCK partner",
default=_get_ffck_partner,
ondelete="restrict",
)
ffck_code = fields.Char(string="FFCK", default="0", readonly=True)
crck_partner_id = fields.Many2one(
"res.partner", string="CRCK partner", index=True, ondelete="restrict"
)
crck_code = fields.Char(related="crck_partner_id.partner_code", store=True)
cdck_partner_id = fields.Many2one(
"res.partner", string="CDCK partner", index=True, ondelete="restrict"
)
cdck_code = fields.Char(related="cdck_partner_id.partner_code", store=True)
partner_code = fields.Char(string="FFCK code", size=6, index=True, readonly=True)
@api.model
def name_search(self, name="", args=None, operator="ilike", limit=100):
"""Allow searching by sequence code by default."""
# Do not add any domain when user just clicked on search widget
if not (name == "" and operator == "ilike"):
# The dangling | is needed to combine with the domain added by super()
args = OR(
[
[
"&",
("ffck_network", "=", True),
("partner_code", "=like", name + "%"),
],
args or [],
]
)
return super().name_search(name, args, operator, limit)
def name_get(self):
result = []
# ffck_partners = self.filtered('ffck_network')
# others = self - ffck_partners
for record in self:
if record.ffck_network:
code = record.partner_code
ref = record.ref
result.append(
(
record.id,
"{}{}{}".format(
code and code + " - " or "",
ref and record.is_company and ref + " - " or "",
super(ResPartner, record).name_get()[0][1],
),
)
)
else:
result += super(ResPartner, record).name_get()
return result
# ONCHANGES
@api.onchange("partner_code")
def onchange_partner_code(self):
if self.ffck_network and self.company_type == "individual":
code = self.partner_code
if len(code) < 6:
self.update({"partner_code": code.zfill(6)})
elif len(code) > 6:
self.update({"partner_code": code[:-6]})
@api.onchange("company_type", "partner_scale", "ffck_type_id")
def onchange_comp_type(self):
if self.company_type == "individual":
self.update({"partner_scale": "lic"})
elif self.partner_scale == "lic":
self.update({"partner_scale": False})
elif self.ffck_type_id:
self.update({"partner_scale": self.ffck_type_id.scale})