diff --git a/__manifest__.py b/__manifest__.py index 4c8d6f5bbb8e122c6d92d38f94662db4f6b894c2..fc2f7d137826978fa85082ac8900ff717d7cd9d4 100755 --- a/__manifest__.py +++ b/__manifest__.py @@ -11,6 +11,8 @@ 'data': [ # security 'security/ir.model.access.csv', + # datas + 'data/membership_sequence.xml', # views 'views/membership_membership_line.xml', 'views/res_partner.xml', diff --git a/data/membership_sequence.xml b/data/membership_sequence.xml new file mode 100644 index 0000000000000000000000000000000000000000..88665b1ce629d5bb2c1bbc24345245e61396503a --- /dev/null +++ b/data/membership_sequence.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright 2021 Le Filament + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> + +<odoo> + <data noupdate="1"> + <record id="membership_number_seq" model="ir.sequence"> + <field name="name">AFAC : Num Adherent</field> + <field name="code">afac.membership.number</field> + <field name="prefix"></field> + <field eval="1" name="number_next"/> + <field eval="1" name="number_increment"/> + <field eval="False" name="company_id"/> + </record> + </data> +</odoo> diff --git a/models/res_partner.py b/models/res_partner.py index 87f0549ca37ea93340fad2d0162a1adc51db4ec5..adfca79cd8c283792586ef273f2affe08eca1634 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -8,7 +8,26 @@ class ResPartner(models.Model): _inherit = 'res.partner' # Company Fields - membership_number = fields.Integer(string='N° Adhérent') + membership_number = fields.Integer( + string='N° Adhérent', + compute='_compute_membership_number', + store=True + ) + 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égué', + domain="[('parent_id', '=', id)]" + ) # ------------------------------------------------------ # SQL Constraints @@ -21,6 +40,11 @@ class ResPartner(models.Model): # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ + @api.depends('membership_state') + def _compute_membership_number(self): + for partner in self: + if partner.membership_number == 0 and partner.membership_state != 'none': + self.membership_number = self.env['ir.sequence'].next_by_code('afac.membership.number') # ------------------------------------------------------ # Onchange / Constraints diff --git a/views/res_partner.xml b/views/res_partner.xml index 5873019890e3407ef9d8ba3c0e5daa2435e81776..e42390824b63f1764f66c47ce3ab4f08009870f4 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -27,6 +27,21 @@ </field> </record> + <!-- Tree View --> + <record model="ir.ui.view" id="res_partner_afac_tree"> + <field name="name">res.partner.afac.tree</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_tree"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='category_id']" position="after"> + <field name="membership_number" optional="hide"/> + <field name="membership_mandate_id" optional="hide"/> + <field name="membership_delegate_id" optional="hide"/> + <field name="membership_contact_id" optional="hide"/> + </xpath> + + </field> + </record> <!-- Form view --> <record model="ir.ui.view" id="res_partner_membership_form"> @@ -49,6 +64,54 @@ <xpath expr="//field[@name='associate_member']" position="attributes"> <attribute name="invisible">1</attribute> </xpath> + <xpath expr="//field[@name='member_lines']" position="before"> + <separator></separator> + <group> + <group> + <field name="membership_mandate_id" options="{'no_create': True}"/> + <field name="membership_delegate_id" options="{'no_create': True}"/> + </group> + <group> + <field name="membership_contact_id" options="{'no_create': True}"/> + </group> + </group> + </xpath> + </field> + </record> + + <!-- Form view --> + <record model="ir.ui.view" id="res_partner_membership_form"> + <field name="name">res.partner.membership.form.inherit</field> + <field name="inherit_id" ref="membership.view_partner_form"/> + <field name="model">res.partner</field> + <field name="arch" type="xml"> + <xpath expr="//page[@name='membership']" position="attributes"> + <attribute name="attrs">{'invisible': [('is_company', '!=', True)]}</attribute> + </xpath> + <xpath expr="//field[@name='free_member']" position="attributes"> + <attribute name="invisible">1</attribute> + </xpath> + <xpath expr="//field[@name='free_member']" position="before"> + <field name="membership_number"/> + </xpath> + <xpath expr="//button[@name='%(membership.action_membership_invoice_view)d']" position="attributes"> + <attribute name="invisible">1</attribute> + </xpath> + <xpath expr="//field[@name='associate_member']" position="attributes"> + <attribute name="invisible">1</attribute> + </xpath> + <xpath expr="//field[@name='member_lines']" position="before"> + <separator></separator> + <group> + <group> + <field name="membership_mandate_id" options="{'no_create': True}"/> + <field name="membership_delegate_id" options="{'no_create': True}"/> + </group> + <group> + <field name="membership_contact_id" options="{'no_create': True}"/> + </group> + </group> + </xpath> </field> </record>