RemiFr82
6 months ago
8 changed files with 310 additions and 0 deletions
-
0ffck_commons/__init__.py
-
53ffck_commons/__manifest__.py
-
49ffck_commons/data/ffck_structure_type.xml
-
20ffck_commons/data/res_partner.xml
-
1ffck_commons/models/__init__.py
-
14ffck_commons/models/ffck_structure_type.py
-
131ffck_commons/models/res_partner.py
-
42ffck_commons/views/res_partner.xml
@ -0,0 +1,53 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
{ |
|||
"name": "FFCK commons", |
|||
"version": "1.0.0", |
|||
"summary": "", |
|||
"description": "", |
|||
"author": "RemiFr82", |
|||
"website": "https://remifr82.me", |
|||
"license": "AGPL-3", |
|||
"category": "Technical", |
|||
"depends": [ |
|||
"base", |
|||
"partner_contact_email2", |
|||
"partner_contact_phones2", |
|||
"partner_firstname", |
|||
"partner_multi_relation", |
|||
"partner_contact_age_range", |
|||
"partner_contact_birthdate", |
|||
"partner_contact_gender", |
|||
"partner_contact_nationality", |
|||
"partner_contact_personal_information_page", |
|||
], |
|||
"data": [ |
|||
# Base data |
|||
"data/ffck_structure_type.xml", |
|||
"data/res_partner.xml", |
|||
# Security |
|||
# 'security/res_groups.xml', |
|||
# Views |
|||
"views/res_partner.xml", |
|||
# Wizards |
|||
# 'wizards/ir_model_wizard.xml', |
|||
# Reports |
|||
# 'reports/report_assets.xml', |
|||
], |
|||
# 'assets': { |
|||
# 'web.report_assets_common': [ |
|||
# 'ffck_color_paddles/static/src/scss/report_pdf.scss', |
|||
# ], |
|||
# }, |
|||
"demo": [], |
|||
"auto_install": False, |
|||
"external_dependencies": [], |
|||
"application": True, |
|||
"css": [], |
|||
"images": [], |
|||
"installable": True, |
|||
"maintainer": "RemiFr82", |
|||
"pre_init_hook": "", |
|||
"post_init_hook": "", |
|||
"uninstall_hook": "", |
|||
} |
@ -0,0 +1,49 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
|
|||
<record id="ffck_structure_type_ffck" model="ffck.structure.type"> |
|||
<field name="name">FFCK</field> |
|||
<field name="short">FFCK</field> |
|||
<field name="scale">nat</field> |
|||
</record> |
|||
|
|||
<record id="ffck_structure_type_crck" model="ffck.structure.type"> |
|||
<field name="name">CRCK</field> |
|||
<field name="short">CRCK</field> |
|||
<field name="scale">reg</field> |
|||
</record> |
|||
|
|||
<record id="ffck_structure_type_cdck" model="ffck.structure.type"> |
|||
<field name="name">CDCK</field> |
|||
<field name="short">CDCK</field> |
|||
<field name="scale">dep</field> |
|||
</record> |
|||
|
|||
<record id="ffck_structure_type_club" model="ffck.structure.type"> |
|||
<field name="name">Affiliate member</field> |
|||
<field name="short">CLUB</field> |
|||
<field name="scale">loc</field> |
|||
</record> |
|||
|
|||
<record id="ffck_structure_type_agra" model="ffck.structure.type" forcecreate="0"> |
|||
<field name="name">Type A agreed member</field> |
|||
<field name="short">AGRA</field> |
|||
<field name="scale">loc</field> |
|||
</record> |
|||
|
|||
<record id="ffck_structure_type_agrb" model="ffck.structure.type" forcecreate="0"> |
|||
<field name="name">Type B agreed member</field> |
|||
<field name="short">AGRB</field> |
|||
<field name="scale">loc</field> |
|||
</record> |
|||
|
|||
<record id="ffck_structure_type_conv" model="ffck.structure.type" forcecreate="0"> |
|||
<field name="name">Conventioned member</field> |
|||
<field name="short">CONV</field> |
|||
<field name="scale">loc</field> |
|||
</record> |
|||
|
|||
</data> |
|||
|
|||
</odoo> |
@ -0,0 +1,20 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
|
|||
<record id="res_partner_ffck" model="res.partner" forcecreate="0"> |
|||
<field name="name">Fédération Française Canoë-Kayak et Sports de Pagaie</field> |
|||
<field name="is_company" eval="True" /> |
|||
<field name="street"></field> |
|||
<field name="street2"></field> |
|||
<field name="zip"></field> |
|||
<field name="city"></field> |
|||
<field name="country_id" ref="base.fr" /> |
|||
<field name="vat"></field> |
|||
<field name="phone"></field> |
|||
<field name="email"></field> |
|||
<field name="website"></field> |
|||
</record> |
|||
|
|||
</data> |
|||
</odoo> |
@ -0,0 +1 @@ |
|||
from . import res_partner |
@ -0,0 +1,14 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from odoo import models, fields |
|||
from .res_partner import SCALES |
|||
|
|||
|
|||
class FfckStructureType(models.Model): |
|||
_name = "ffck.structure.type" |
|||
_description = "FFCK structure type" |
|||
|
|||
name = fields.Char("Name", required=True) |
|||
short = fields.Char("Short", required=True, index=True) |
|||
scale = fields.Selection(SCALES, string="Scale", required=True) |
|||
active = fields.Boolean(string="Active", default=True) |
|||
parent_id = fields.Many2one("ffck.structure.type", string="parent") |
@ -0,0 +1,131 @@ |
|||
# -*- 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}) |
@ -0,0 +1,42 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record id="view_partner_form_inherit_base" model="ir.ui.view"> |
|||
<field name="name">res.partner.view.form.inherit</field> |
|||
<field name="model">res.partner</field> |
|||
<field name="inherit_id" ref="base.view_partner_form" /> |
|||
<field name="arch" type="xml"> |
|||
<field name="company_type" position="after"> |
|||
<field name="ffck_network" /> |
|||
<label for="ffck_network" /> |
|||
</field> |
|||
<xpath expr="//notebook/page[1]" position="before"> |
|||
<page name="ffck_info" string="FFCK Info" attrs="{'invisible':[('ffck_network','!=',True)]}"> |
|||
<group name="ffck_main"> |
|||
<group name="ffck_common"> |
|||
<separator colspan="2" string="Licensee information" |
|||
attrs="{'invisible':[('company_type','!=','individual')]}" /> |
|||
<separator colspan="2" string="Structure information" |
|||
attrs="{'invisible':[('company_type','!=','company')]}" /> |
|||
<field name="partner_code" /> |
|||
<field name="partner_scale" attrs="{'invisible': [('company_type','=','individual')]}" /> |
|||
<field name="ffck_type_id" widget="selection" attrs="{'invisible': [('company_type','=','individual')]}" /> |
|||
</group> |
|||
<group name="ffck_network" string="Network" attrs="{'invisible': [('partner_scale', '=', 'lic')]}"> |
|||
<field name="ffck_partner_id" /> |
|||
<field name="crck_partner_id" attrs="{'invisible': [('partner_scale', '=', 'nat')]}" /> |
|||
<field name="cdck_partner_id" attrs="{'invisible': [('partner_scale', 'in', ['nat', 'reg'])]}" /> |
|||
</group> |
|||
</group> |
|||
<group name="ffck_data"> |
|||
<group string="Structure dates"> |
|||
<field name="structure_create_date" /> |
|||
<field name="first_membership_date" /> |
|||
</group> |
|||
</group> |
|||
</page> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue