rev |
line source |
bsw/jbe@0
|
1 Interest = mondelefant.new_class()
|
bsw/jbe@0
|
2 Interest.table = 'interest'
|
bsw/jbe@0
|
3 Interest.primary_key = { "issue_id", "member_id" }
|
bsw/jbe@0
|
4 Interest:add_reference{
|
bsw/jbe@0
|
5 mode = 'm1',
|
bsw/jbe@0
|
6 to = "Member",
|
bsw/jbe@0
|
7 this_key = 'member_id',
|
bsw/jbe@0
|
8 that_key = 'id',
|
bsw/jbe@0
|
9 ref = 'member',
|
bsw/jbe@0
|
10 }
|
bsw/jbe@0
|
11
|
bsw/jbe@0
|
12 Interest:add_reference{
|
bsw/jbe@0
|
13 mode = 'm1',
|
bsw/jbe@0
|
14 to = "Issue",
|
bsw/jbe@0
|
15 this_key = 'issue_id',
|
bsw/jbe@0
|
16 that_key = 'id',
|
bsw/jbe@0
|
17 ref = 'issue',
|
bsw/jbe@0
|
18 }
|
bsw/jbe@0
|
19
|
bsw/jbe@0
|
20 function Interest:by_pk(issue_id, member_id)
|
bsw/jbe@0
|
21 return self:new_selector()
|
bsw/jbe@0
|
22 :add_where{ "issue_id = ? AND member_id = ?", issue_id, member_id }
|
bsw/jbe@0
|
23 :optional_object_mode()
|
bsw/jbe@0
|
24 :exec()
|
bsw@1618
|
25 end
|
bsw@1618
|
26
|
bsw@1618
|
27 function Interest:update(issue_id, member, interested)
|
bsw@1618
|
28 local interest = Interest:by_pk(issue_id, member.id)
|
bsw@1618
|
29
|
bsw@1618
|
30 local issue = Issue:new_selector():add_where{ "id = ?", issue_id }:for_share():single_object_mode():exec()
|
bsw@1618
|
31
|
bsw@1618
|
32 if not member:has_voting_right_for_unit_id(issue.area.unit_id) then
|
bsw@1618
|
33 return execute.view { module = "index", view = "403" }
|
bsw@1618
|
34 end
|
bsw@1618
|
35
|
bsw@1618
|
36 if issue.closed then
|
bsw@1618
|
37 slot.put_into("error", _"This issue is already closed.")
|
bsw@1618
|
38 return false
|
bsw@1618
|
39 elseif issue.fully_frozen then
|
bsw@1618
|
40 slot.put_into("error", _"Voting for this issue has already begun.")
|
bsw@1618
|
41 return false
|
bsw@1618
|
42 elseif
|
bsw@1618
|
43 (issue.half_frozen and issue.phase_finished) or
|
bsw@1618
|
44 (not issue.accepted and issue.phase_finished)
|
bsw@1618
|
45 then
|
bsw@1618
|
46 slot.put_into("error", _"Current phase is already closed.")
|
bsw@1618
|
47 return false
|
bsw@1618
|
48 end
|
bsw@1618
|
49
|
bsw@1618
|
50 if interested == false then
|
bsw@1618
|
51 if interest then
|
bsw@1618
|
52 interest:destroy()
|
bsw@1618
|
53 end
|
bsw@1618
|
54 return true
|
bsw@1618
|
55 end
|
bsw@1618
|
56
|
bsw@1618
|
57 if not interest then
|
bsw@1618
|
58 interest = Interest:new()
|
bsw@1618
|
59 interest.issue_id = issue_id
|
bsw@1618
|
60 interest.member_id = app.session.member_id
|
bsw@1618
|
61 interest:save()
|
bsw@1618
|
62 end
|
bsw@1618
|
63
|
bsw@1618
|
64 return true
|
bsw@1618
|
65
|
bsw@1618
|
66 end
|