-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathmembership_group_member.py
73 lines (64 loc) · 2.39 KB
/
membership_group_member.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from odoo import api, fields, models
class MembershipGroupMember(models.Model):
_name = "membership.group.member"
_description = "Membership Group Member"
active = fields.Boolean(default=True)
partner_id = fields.Many2one("res.partner", required=True, ondelete="cascade")
group_id = fields.Many2one("membership.group", required=True, ondelete="cascade")
wants_to_collaborate = fields.Boolean()
type = fields.Selection(
[
("follower", "Follower"),
("applicant", "Applicant"),
("applicant_follower", "Applicant / Follower"),
("collaborator_follower", "Collaborator / Follower"),
("collaborator", "Collaborator"),
("committee", "Committee"),
],
)
date_from = fields.Date(
default=fields.Date.context_today,
help="Start date of the membership",
)
date_to = fields.Date(
compute="_compute_date_to",
store=True,
readonly=False,
precompute=True,
help="Planned end date of the membership",
)
date_end = fields.Date(
help="End date of the membership",
)
can_revoke_membership = fields.Boolean(compute="_compute_can_revoke_membership")
_sql_constraints = [
(
"partner_group_uniq",
"unique(active, partner_id, group_id)",
"Member already exists for this group!",
)
]
@api.depends("group_id")
def _compute_date_to(self):
for record in self:
if (
not record.date_to
and record.group_id
and record.group_id._has_termination_cycle()
):
record.date_to = record.group_id.next_termination_date
@api.depends("date_to")
def _compute_can_revoke_membership(self):
for record in self:
record.can_revoke_membership = record._can_revoke_membership()
def _can_revoke_membership(self):
self.ensure_one()
return self.date_to < fields.Date.today() if self.date_to else True
def action_revoke_membership(self):
if active_records := self.filtered(lambda x: x.active):
active_records.active = False
active_records.date_end = fields.Date.today()
return True
@api.model
def _cron_revoke_membership(self):
self.search([("date_to", "<=", fields.date.today())]).action_revoke_membership()