Skip to content

Commit 50fedd6

Browse files
Add group hierarchy module
1 parent 2fb7ccf commit 50fedd6

File tree

10 files changed

+230
-0
lines changed

10 files changed

+230
-0
lines changed

spp_registry_group_hierarchy/README.rst

Whitespace-only changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Part of OpenSPP. See LICENSE file for full copyright and licensing details.
2+
3+
{
4+
"name": "SPP Registry Group Hierarchy",
5+
"category": "OpenSPP",
6+
"version": "17.0.1.0.0",
7+
"sequence": 1,
8+
"author": "OpenSPP.org",
9+
"website": "https://github.com/OpenSPP/openspp-modules",
10+
"license": "LGPL-3",
11+
"development_status": "Production/Stable",
12+
"maintainers": ["jeremi", "gonzalesedwin1123"],
13+
"depends": [
14+
"base",
15+
"g2p_registry_base",
16+
"g2p_registry_individual",
17+
"g2p_registry_group",
18+
"g2p_registry_membership",
19+
],
20+
"external_dependencies": {},
21+
"data": [
22+
"views/group_kind_views.xml",
23+
"views/group_membership_views.xml",
24+
"views/group_views.xml",
25+
],
26+
"assets": {},
27+
"demo": [],
28+
"images": [],
29+
"application": True,
30+
"installable": True,
31+
"auto_install": False,
32+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import group_kind
2+
from . import group_membership
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from odoo import fields, models
2+
3+
4+
class SPPGroupKind(models.Model):
5+
_inherit = "g2p.group.kind"
6+
7+
allow_all_member_type = fields.Boolean("Allow group and individual members", default=False)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import logging
2+
3+
from odoo import _, api, fields, models
4+
from odoo.exceptions import UserError
5+
6+
_logger = logging.getLogger(__name__)
7+
8+
9+
class SPPGroupMembership(models.Model):
10+
_inherit = "g2p.group.membership"
11+
12+
individual_domain = fields.Binary(
13+
compute="_compute_individual_domain",
14+
readonly=True,
15+
store=False,
16+
)
17+
18+
@api.depends("group", "group.kind")
19+
def _compute_individual_domain(self):
20+
"""
21+
Called whenever kind field is changed
22+
23+
This method is used for dynamic domain of individual field
24+
"""
25+
for rec in self:
26+
domain = [("is_group", "=", False), ("is_registrant", "=", True)]
27+
if rec.group and rec.group.kind and rec.group.kind.allow_all_member_type:
28+
if rec.group:
29+
try:
30+
group_id = int(rec.group.id)
31+
except Exception:
32+
group_id = rec.group._origin.id
33+
domain = [("is_registrant", "=", True), ("id", "!=", group_id)]
34+
rec.individual_domain = domain
35+
36+
def open_member_form(self):
37+
for rec in self:
38+
if rec.individual:
39+
if rec.individual.is_group:
40+
return {
41+
"name": "Group Membership",
42+
"view_mode": "form",
43+
"res_model": "res.partner",
44+
"res_id": rec.individual.id,
45+
"view_id": self.env.ref("g2p_registry_group.view_groups_form").id,
46+
"type": "ir.actions.act_window",
47+
"target": "new",
48+
"context": {"default_is_group": True},
49+
"flags": {"mode": "readonly"},
50+
}
51+
else:
52+
return rec.open_individual_form()
53+
else:
54+
raise UserError(_("A group or individual must be speficied for this member."))
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[build-system]
2+
requires = ["whool"]
3+
build-backend = "whool.buildapi"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!--
3+
Part of OpenSPP Modules. See LICENSE file for full copyright and licensing details.
4+
-->
5+
<odoo>
6+
<record id="view_group_kind_tree_spp_custom" model="ir.ui.view">
7+
<field name="name">view_group_kind_tree_spp_custom</field>
8+
<field name="model">g2p.group.kind</field>
9+
<field name="inherit_id" ref="g2p_registry_group.view_group_kind_tree" />
10+
<field name="arch" type="xml">
11+
<xpath expr="//field[@name='name']" position="after">
12+
<field name="allow_all_member_type" />
13+
</xpath>
14+
</field>
15+
</record>
16+
17+
</odoo>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!--
3+
Part of OpenSPP Modules. See LICENSE file for full copyright and licensing details.
4+
-->
5+
<odoo>
6+
7+
<record id="view_group_membership_form_spp_custom" model="ir.ui.view">
8+
<field name="name">view_group_membership_form_spp_custom</field>
9+
<field name="model">g2p.group.membership</field>
10+
<field name="inherit_id" ref="g2p_registry_membership.view_group_membership_form" />
11+
<field name="arch" type="xml">
12+
<xpath expr="//label[@for='group']" position="attributes">
13+
<attribute name="string">
14+
Parent:
15+
</attribute>
16+
</xpath>
17+
<xpath expr="//label[@for='individual']" position="attributes">
18+
<attribute name="string">
19+
Child:
20+
</attribute>
21+
</xpath>
22+
<xpath expr="//group" position="after">
23+
<field name="individual_domain" invisible="1" />
24+
</xpath>
25+
<xpath expr="//field[@name='individual']" position="attributes">
26+
<attribute name="domain">
27+
individual_domain
28+
</attribute>
29+
</xpath>
30+
</field>
31+
</record>
32+
33+
</odoo>
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
<!--
3+
Part of OpenSPP Modules. See LICENSE file for full copyright and licensing details.
4+
-->
5+
<odoo>
6+
7+
<record id="view_groups_form_membership_spp_custom" model="ir.ui.view">
8+
<field name="name">view_groups_form_membership_spp_custom</field>
9+
<field name="model">res.partner</field>
10+
<field name="priority" eval="200" />
11+
<field name="inherit_id" ref="g2p_registry_membership.view_groups_form_membership" />
12+
<field name="arch" type="xml">
13+
<xpath
14+
expr="//field[@name='group_membership_ids']/tree/field[@name='individual']"
15+
position="attributes"
16+
>
17+
<attribute name="domain">
18+
individual_domain
19+
</attribute>
20+
</xpath>
21+
<xpath expr="//field[@name='group_membership_ids']/tree/field[@name='status']" position="after">
22+
<field name="individual_domain" column_invisible="1" />
23+
</xpath>
24+
25+
<xpath
26+
expr="//field[@name='group_membership_ids']/tree/button[@name='open_individual_form']"
27+
position="replace"
28+
>
29+
<button
30+
name="open_member_form"
31+
type="object"
32+
icon="fa-external-link"
33+
class="btn-success"
34+
help="Open Member Form"
35+
/>
36+
</xpath>
37+
38+
<xpath expr="//field[@name='group_membership_ids']/tree" position="after">
39+
<form string="Group Membership">
40+
<sheet>
41+
<div class="oe_button_box" name="button_box" />
42+
<div class="oe_title mb24">
43+
<label for="group" string="Parent:" />
44+
<h1>
45+
<field
46+
id="group"
47+
name="group"
48+
options="{'no_open':True,'no_create_edit':True,'no_create':True}"
49+
readonly="1"
50+
/>
51+
</h1>
52+
<label for="individual" string="Child:" />
53+
<h1>
54+
<field
55+
id="individual"
56+
name="individual"
57+
options="{'no_open':True,'no_create_edit':True,'no_create':True}"
58+
domain="individual_domain"
59+
/>
60+
</h1>
61+
<div class="o_row">
62+
<label for="kind" string="Role:" />
63+
<field
64+
name="kind"
65+
widget="many2many_tags"
66+
options="{'no_open':True, 'no_create_edit':True, 'no_create':True, 'no_quick_create':True}"
67+
/>
68+
</div>
69+
</div>
70+
<group string="Date Range" colspan="4" col="4">
71+
<field name="start_date" />
72+
<field name="ended_date" />
73+
</group>
74+
<field name="individual_domain" invisible="1" />
75+
</sheet>
76+
</form>
77+
</xpath>
78+
</field>
79+
</record>
80+
81+
</odoo>

0 commit comments

Comments
 (0)