rev |
line source |
bsw/jbe@0
|
1 Issue = mondelefant.new_class()
|
bsw/jbe@0
|
2 Issue.table = 'issue'
|
bsw/jbe@0
|
3
|
bsw/jbe@0
|
4 Issue:add_reference{
|
bsw/jbe@0
|
5 mode = 'm1',
|
bsw/jbe@0
|
6 to = "Area",
|
bsw/jbe@0
|
7 this_key = 'area_id',
|
bsw/jbe@0
|
8 that_key = 'id',
|
bsw/jbe@0
|
9 ref = 'area',
|
bsw/jbe@0
|
10 }
|
bsw/jbe@0
|
11
|
bsw/jbe@0
|
12 Issue:add_reference{
|
bsw/jbe@0
|
13 mode = 'm1',
|
bsw/jbe@0
|
14 to = "Policy",
|
bsw/jbe@0
|
15 this_key = 'policy_id',
|
bsw/jbe@0
|
16 that_key = 'id',
|
bsw/jbe@0
|
17 ref = 'policy',
|
bsw/jbe@0
|
18 }
|
bsw/jbe@0
|
19
|
bsw/jbe@0
|
20 Issue:add_reference{
|
bsw/jbe@0
|
21 mode = '1m',
|
bsw/jbe@0
|
22 to = "Initiative",
|
bsw/jbe@0
|
23 this_key = 'id',
|
bsw/jbe@0
|
24 that_key = 'issue_id',
|
bsw/jbe@0
|
25 ref = 'initiatives',
|
bsw/jbe@0
|
26 back_ref = 'issue'
|
bsw/jbe@0
|
27 }
|
bsw/jbe@0
|
28
|
bsw/jbe@0
|
29 Issue:add_reference{
|
bsw/jbe@0
|
30 mode = '1m',
|
bsw/jbe@0
|
31 to = "Interest",
|
bsw/jbe@0
|
32 this_key = 'id',
|
bsw/jbe@0
|
33 that_key = 'issue_id',
|
bsw/jbe@0
|
34 ref = 'interests',
|
bsw/jbe@0
|
35 back_ref = 'issue',
|
bsw/jbe@0
|
36 default_order = '"id"'
|
bsw/jbe@0
|
37 }
|
bsw/jbe@0
|
38
|
bsw/jbe@0
|
39 Issue:add_reference{
|
bsw/jbe@0
|
40 mode = '1m',
|
bsw/jbe@0
|
41 to = "Supporter",
|
bsw/jbe@0
|
42 this_key = 'id',
|
bsw/jbe@0
|
43 that_key = 'issue_id',
|
bsw/jbe@0
|
44 ref = 'supporters',
|
bsw/jbe@0
|
45 back_ref = 'issue',
|
bsw/jbe@0
|
46 default_order = '"id"'
|
bsw/jbe@0
|
47 }
|
bsw/jbe@0
|
48
|
bsw/jbe@0
|
49 Issue:add_reference{
|
bsw/jbe@0
|
50 mode = '1m',
|
bsw/jbe@0
|
51 to = "DirectVoter",
|
bsw/jbe@0
|
52 this_key = 'id',
|
bsw/jbe@0
|
53 that_key = 'issue_id',
|
bsw/jbe@0
|
54 ref = 'direct_voters',
|
bsw/jbe@0
|
55 back_ref = 'issue',
|
bsw/jbe@0
|
56 default_order = '"member_id"'
|
bsw/jbe@0
|
57 }
|
bsw/jbe@0
|
58
|
bsw/jbe@0
|
59 Issue:add_reference{
|
bsw/jbe@0
|
60 mode = '1m',
|
bsw/jbe@0
|
61 to = "Vote",
|
bsw/jbe@0
|
62 this_key = 'id',
|
bsw/jbe@0
|
63 that_key = 'issue_id',
|
bsw/jbe@0
|
64 ref = 'votes',
|
bsw/jbe@0
|
65 back_ref = 'issue',
|
bsw/jbe@0
|
66 default_order = '"member_id", "initiative_id"'
|
bsw/jbe@0
|
67 }
|
bsw/jbe@0
|
68
|
bsw/jbe@0
|
69 Issue:add_reference{
|
bsw@2
|
70 mode = '1m',
|
bsw@2
|
71 to = "Delegation",
|
bsw@2
|
72 this_key = 'id',
|
bsw@2
|
73 that_key = 'issue_id',
|
bsw@2
|
74 ref = 'delegations',
|
bsw@2
|
75 back_ref = 'issue'
|
bsw@2
|
76 }
|
bsw@2
|
77
|
bsw@2
|
78 Issue:add_reference{
|
bsw/jbe@0
|
79 mode = 'mm',
|
bsw/jbe@0
|
80 to = "Member",
|
bsw/jbe@0
|
81 this_key = 'id',
|
bsw/jbe@0
|
82 that_key = 'id',
|
bsw/jbe@0
|
83 connected_by_table = 'interest',
|
bsw/jbe@0
|
84 connected_by_this_key = 'issue_id',
|
bsw/jbe@0
|
85 connected_by_that_key = 'member_id',
|
bsw/jbe@0
|
86 ref = 'members'
|
bsw/jbe@0
|
87 }
|
bsw/jbe@0
|
88
|
bsw@3
|
89 Issue:add_reference{
|
bsw@3
|
90 mode = 'mm',
|
bsw@3
|
91 to = "Member",
|
bsw@3
|
92 this_key = 'id',
|
bsw@3
|
93 that_key = 'id',
|
bsw@3
|
94 connected_by_table = 'direct_interest_snapshot',
|
bsw@3
|
95 connected_by_this_key = 'issue_id',
|
bsw@3
|
96 connected_by_that_key = 'member_id',
|
bsw@3
|
97 ref = 'interested_members_snapshot'
|
bsw@3
|
98 }
|
bsw@3
|
99
|
bsw/jbe@6
|
100 Issue:add_reference{
|
bsw/jbe@6
|
101 mode = 'mm',
|
bsw/jbe@6
|
102 to = "Member",
|
bsw/jbe@6
|
103 this_key = 'id',
|
bsw/jbe@6
|
104 that_key = 'id',
|
bsw/jbe@6
|
105 connected_by_table = 'direct_voter',
|
bsw/jbe@6
|
106 connected_by_this_key = 'issue_id',
|
bsw/jbe@6
|
107 connected_by_that_key = 'member_id',
|
bsw/jbe@6
|
108 ref = 'direct_voters'
|
bsw/jbe@6
|
109 }
|
bsw/jbe@6
|
110
|
bsw/jbe@6
|
111
|
bsw/jbe@6
|
112
|
bsw/jbe@0
|
113 function Issue:get_state_name_for_state(value)
|
bsw@2
|
114 local state_name_table = {
|
bsw@2
|
115 new = _"New",
|
bsw@3
|
116 accepted = _"Discussion",
|
bsw@2
|
117 frozen = _"Frozen",
|
bsw@2
|
118 voting = _"Voting",
|
bsw@2
|
119 finished = _"Finished",
|
bsw@2
|
120 cancelled = _"Cancelled"
|
bsw@2
|
121 }
|
bsw@10
|
122 return state_name_table[value] or value or ''
|
bsw/jbe@0
|
123 end
|
bsw/jbe@0
|
124
|
bsw@2
|
125 function Issue:get_search_selector(search_string)
|
bsw/jbe@0
|
126 return self:new_selector()
|
bsw/jbe@0
|
127 :join('"initiative"', nil, '"initiative"."issue_id" = "issue"."id"')
|
bsw/jbe@6
|
128 :join('"draft"', nil, '"draft"."initiative_id" = "initiative"."id"')
|
bsw/jbe@6
|
129 :add_where{ '"initiative"."text_search_data" @@ "text_search_query"(?) OR "draft"."text_search_data" @@ "text_search_query"(?)', search_string, search_string }
|
bsw/jbe@6
|
130 :add_group_by('"issue"."id"')
|
bsw/jbe@6
|
131 :add_group_by('"issue"."area_id"')
|
bsw/jbe@6
|
132 :add_group_by('"issue"."policy_id"')
|
bsw/jbe@6
|
133 :add_group_by('"issue"."created"')
|
bsw/jbe@6
|
134 :add_group_by('"issue"."accepted"')
|
bsw/jbe@6
|
135 :add_group_by('"issue"."half_frozen"')
|
bsw/jbe@6
|
136 :add_group_by('"issue"."fully_frozen"')
|
bsw/jbe@6
|
137 :add_group_by('"issue"."closed"')
|
bsw/jbe@6
|
138 :add_group_by('"issue"."ranks_available"')
|
bsw/jbe@6
|
139 :add_group_by('"issue"."snapshot"')
|
bsw/jbe@6
|
140 :add_group_by('"issue"."latest_snapshot_event"')
|
bsw/jbe@6
|
141 :add_group_by('"issue"."population"')
|
bsw/jbe@6
|
142 :add_group_by('"issue"."vote_now"')
|
bsw/jbe@6
|
143 :add_group_by('"issue"."vote_later"')
|
bsw/jbe@6
|
144 :add_group_by('"issue"."voter_count"')
|
bsw/jbe@19
|
145 :add_group_by('"_interest"."member_id"')
|
bsw/jbe@6
|
146 --:set_distinct()
|
bsw/jbe@0
|
147 end
|
bsw/jbe@0
|
148
|
bsw@51
|
149 function Issue:modify_selector_for_state(state)
|
bsw@51
|
150 if state == "new" then
|
bsw@51
|
151 initiatives_selector:add_where("issue.accepted ISNULL AND issue.cancelled ISNULL")
|
bsw@51
|
152 elseif state == "accepted" then
|
bsw@51
|
153 initiatives_selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.cancelled ISNULL")
|
bsw@51
|
154 elseif state == "frozen" then
|
bsw@51
|
155 initiatives_selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND cancelled ISNULL")
|
bsw@51
|
156 elseif state == "voting" then
|
bsw@51
|
157 initiatives_selector:add_where("issue.fully_frozen NOTNULL AND issue.finished ISNULL AND issue.cancelled ISNULL")
|
bsw@51
|
158 elseif state == "finished" then
|
bsw@51
|
159 initiatives_selector:add_where("issue.finished NOTNULL")
|
bsw@51
|
160 elseif state == "cancelled" then
|
bsw@51
|
161 initiatives_selector:add_where("issue.cancelled NOTNULL")
|
bsw@51
|
162 end
|
bsw@51
|
163 end
|
bsw@51
|
164
|
bsw/jbe@0
|
165 function Issue.object_get:state()
|
bsw/jbe@0
|
166 if self.accepted then
|
bsw@3
|
167 if self.closed then
|
bsw/jbe@5
|
168 return "finished"
|
bsw@3
|
169 elseif self.fully_frozen then
|
bsw@3
|
170 return "voting"
|
bsw@3
|
171 elseif self.half_frozen then
|
bsw@3
|
172 return "frozen"
|
bsw/jbe@0
|
173 else
|
bsw/jbe@0
|
174 return "accepted"
|
bsw/jbe@0
|
175 end
|
bsw/jbe@0
|
176 else
|
bsw/jbe@0
|
177 if self.closed then
|
bsw@2
|
178 return "cancelled"
|
bsw/jbe@0
|
179 else
|
bsw/jbe@0
|
180 return "new"
|
bsw/jbe@0
|
181 end
|
bsw/jbe@0
|
182 end
|
bsw@2
|
183 end
|
bsw@2
|
184
|
bsw@2
|
185 function Issue.object_get:state_name()
|
bsw@2
|
186 return Issue:get_state_name_for_state(self.state)
|
bsw@2
|
187 end
|
bsw@2
|
188
|
bsw@2
|
189 function Issue.object_get:state_time_left()
|
bsw@2
|
190 local state = self.state
|
bsw@2
|
191 local last_event_time
|
bsw@2
|
192 local duration
|
bsw@2
|
193 if state == "new" then
|
bsw@2
|
194 last_event_time = self.created
|
bsw@25
|
195 duration = self.admission_time
|
bsw@2
|
196 elseif state == "accepted" then
|
bsw@2
|
197 last_event_time = self.accepted
|
bsw@25
|
198 duration = self.discussion_time
|
bsw@2
|
199 elseif state == "frozen" then
|
bsw@2
|
200 last_event_time = self.half_frozen
|
bsw@25
|
201 duration = self.verification_time
|
bsw@2
|
202 elseif state == "voting" then
|
bsw@2
|
203 last_event_time = self.fully_frozen
|
bsw@25
|
204 duration = self.voting_time
|
bsw@2
|
205 end
|
bsw@2
|
206 return db:query{ "SELECT ?::timestamp + ?::interval - now() as time_left", last_event_time, duration }[1].time_left
|
bsw@2
|
207 end
|
bsw@2
|
208
|
bsw@2
|
209 function Issue.object_get:next_states()
|
bsw@2
|
210 local state = self.state
|
bsw@2
|
211 local next_states
|
bsw@2
|
212 if state == "new" then
|
bsw@2
|
213 next_states = { "accepted", "cancelled" }
|
bsw@2
|
214 elseif state == "accepted" then
|
bsw@2
|
215 next_states = { "frozen" }
|
bsw@2
|
216 elseif state == "frozen" then
|
bsw@2
|
217 next_states = { "voting" }
|
bsw@2
|
218 elseif state == "voting" then
|
bsw@2
|
219 next_states = { "finished" }
|
bsw@2
|
220 end
|
bsw@2
|
221 return next_states
|
bsw@2
|
222 end
|
bsw@2
|
223
|
bsw@2
|
224 function Issue.object_get:next_states_names()
|
bsw@2
|
225 local next_states = self.next_states
|
bsw@2
|
226 if not next_states then
|
bsw@2
|
227 return
|
bsw@2
|
228 end
|
bsw@2
|
229 local state_names = {}
|
bsw@2
|
230 for i, state in ipairs(self.next_states) do
|
bsw@2
|
231 state_names[#state_names+1] = Issue:get_state_name_for_state(state)
|
bsw@2
|
232 end
|
bsw@2
|
233 return table.concat(state_names, ", ")
|
bsw/jbe@0
|
234 end |