rev |
line source |
bsw/jbe@4
|
1
|
bsw/jbe@4
|
2 local initiative = param.get("initiative", "table")
|
bsw/jbe@0
|
3 local suggestions_selector = param.get("suggestions_selector", "table")
|
bsw/jbe@0
|
4
|
bsw/jbe@4
|
5 ui.order{
|
bsw/jbe@4
|
6 name = name,
|
bsw/jbe@0
|
7 selector = suggestions_selector,
|
bsw/jbe@4
|
8 options = {
|
bsw/jbe@4
|
9 {
|
bsw/jbe@4
|
10 name = "all",
|
bsw/jbe@4
|
11 label = _"all",
|
bsw/jbe@4
|
12 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id"
|
bsw/jbe@4
|
13 },
|
bsw/jbe@4
|
14 {
|
bsw/jbe@4
|
15 name = "plus2",
|
bsw/jbe@4
|
16 label = _"must",
|
bsw/jbe@4
|
17 order_by = "plus2_unfulfilled_count + plus2_fulfilled_count DESC, id"
|
bsw/jbe@4
|
18 },
|
bsw/jbe@4
|
19 {
|
bsw/jbe@4
|
20 name = "plus",
|
bsw/jbe@4
|
21 label = _"must/should",
|
bsw/jbe@4
|
22 order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count + plus2_fulfilled_count + plus1_fulfilled_count DESC, id"
|
bsw/jbe@4
|
23 },
|
bsw/jbe@4
|
24 {
|
bsw/jbe@4
|
25 name = "minus",
|
bsw/jbe@4
|
26 label = _"must/should not",
|
bsw/jbe@4
|
27 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + minus2_fulfilled_count + minus1_fulfilled_count DESC, id"
|
bsw/jbe@4
|
28 },
|
bsw/jbe@4
|
29 {
|
bsw/jbe@4
|
30 name = "minus2",
|
bsw/jbe@4
|
31 label = _"must not",
|
bsw/jbe@4
|
32 order_by = "minus2_unfulfilled_count + minus2_fulfilled_count DESC, id"
|
bsw/jbe@4
|
33 },
|
bsw/jbe@4
|
34 {
|
bsw/jbe@4
|
35 name = "unfulfilled",
|
bsw/jbe@4
|
36 label = _"not implemented",
|
bsw/jbe@4
|
37 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count + plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id"
|
bsw/jbe@4
|
38 },
|
bsw/jbe@4
|
39 {
|
bsw/jbe@4
|
40 name = "plus2_unfulfilled",
|
bsw/jbe@4
|
41 label = _"must",
|
bsw/jbe@4
|
42 order_by = "plus2_unfulfilled_count DESC, id"
|
bsw/jbe@4
|
43 },
|
bsw/jbe@4
|
44 {
|
bsw/jbe@4
|
45 name = "plus_unfulfilled",
|
bsw/jbe@4
|
46 label = _"must/should",
|
bsw/jbe@4
|
47 order_by = "plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id"
|
bsw/jbe@4
|
48 },
|
bsw/jbe@4
|
49 {
|
bsw/jbe@4
|
50 name = "minus_unfulfilled",
|
bsw/jbe@4
|
51 label = _"must/should not",
|
bsw/jbe@4
|
52 order_by = "minus2_unfulfilled_count + minus1_unfulfilled_count DESC, id"
|
bsw/jbe@4
|
53 },
|
bsw/jbe@4
|
54 {
|
bsw/jbe@4
|
55 name = "minus2_unfulfilled",
|
bsw/jbe@4
|
56 label = _"must not",
|
bsw/jbe@4
|
57 order_by = "minus2_unfulfilled_count DESC, id"
|
bsw/jbe@4
|
58 },
|
bsw/jbe@4
|
59 },
|
bsw/jbe@0
|
60 content = function()
|
bsw/jbe@4
|
61 ui.paginate{
|
bsw/jbe@4
|
62 selector = suggestions_selector,
|
bsw/jbe@4
|
63 content = function()
|
bsw/jbe@4
|
64 ui.list{
|
bsw/jbe@4
|
65 attr = { style = "table-layout: fixed;" },
|
bsw/jbe@4
|
66 records = suggestions_selector:exec(),
|
bsw/jbe@4
|
67 columns = {
|
bsw/jbe@4
|
68 {
|
bsw/jbe@4
|
69 label = _"Suggestion",
|
bsw/jbe@4
|
70 content = function(record)
|
bsw/jbe@4
|
71 ui.link{
|
bsw/jbe@4
|
72 text = record.name,
|
bsw/jbe@4
|
73 module = "suggestion",
|
bsw/jbe@4
|
74 view = "show",
|
bsw/jbe@4
|
75 id = record.id
|
bsw/jbe@0
|
76 }
|
bsw/jbe@4
|
77 end
|
bsw/jbe@4
|
78 },
|
bsw/jbe@4
|
79 {
|
bsw/jbe@4
|
80 label = _"Collective opinion",
|
bsw/jbe@4
|
81 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
82 content = function(record)
|
bsw/jbe@4
|
83 if record.minus2_unfulfilled_count then
|
bsw/jbe@4
|
84 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
85 ui.bargraph{
|
bsw/jbe@4
|
86 max_value = max_value,
|
bsw/jbe@4
|
87 width = 50,
|
bsw/jbe@4
|
88 bars = {
|
bsw/jbe@4
|
89 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
|
bsw/jbe@4
|
90 { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
|
bsw/jbe@4
|
91 { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
|
bsw/jbe@4
|
92 { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
|
bsw/jbe@4
|
93 { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
|
bsw/jbe@4
|
94 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
|
bsw/jbe@4
|
95 }
|
bsw/jbe@4
|
96 }
|
bsw/jbe@4
|
97 end
|
bsw/jbe@4
|
98 end
|
bsw/jbe@4
|
99 },
|
bsw/jbe@4
|
100 {
|
bsw/jbe@4
|
101 label = _"My opinion",
|
bsw/jbe@4
|
102 content = function(record)
|
bsw/jbe@4
|
103 local degree
|
bsw/jbe@4
|
104 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
105 if opinion then
|
bsw/jbe@4
|
106 degree = opinion.degree
|
bsw@3
|
107 end
|
bsw/jbe@5
|
108 ui.container{
|
bsw/jbe@5
|
109 attr = { class = "suggestion_my_opinion" },
|
bsw/jbe@5
|
110 content = function()
|
bsw/jbe@5
|
111 ui.link{
|
bsw/jbe@5
|
112 attr = { class = "action" .. (degree == -2 and " active_red2" or "") },
|
bsw/jbe@5
|
113 text = _"must not",
|
bsw/jbe@5
|
114 module = "opinion",
|
bsw/jbe@5
|
115 action = "update",
|
bsw/jbe@5
|
116 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@5
|
117 params = {
|
bsw/jbe@5
|
118 suggestion_id = record.id,
|
bsw/jbe@5
|
119 degree = -2
|
bsw/jbe@5
|
120 }
|
bsw/jbe@5
|
121 }
|
bsw/jbe@5
|
122 slot.put(" ")
|
bsw/jbe@5
|
123 ui.link{
|
bsw/jbe@5
|
124 attr = { class = "action" .. (degree == -1 and " active_red1" or "") },
|
bsw/jbe@5
|
125 text = _"should not",
|
bsw/jbe@5
|
126 module = "opinion",
|
bsw/jbe@5
|
127 action = "update",
|
bsw/jbe@5
|
128 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@5
|
129 params = {
|
bsw/jbe@5
|
130 suggestion_id = record.id,
|
bsw/jbe@5
|
131 degree = -1
|
bsw/jbe@5
|
132 }
|
bsw/jbe@5
|
133 }
|
bsw/jbe@5
|
134 slot.put(" ")
|
bsw/jbe@5
|
135 ui.link{
|
bsw/jbe@5
|
136 attr = { class = "action" .. (degree == nil and " active" or "") },
|
bsw/jbe@5
|
137 text = _"neutral",
|
bsw/jbe@5
|
138 module = "opinion",
|
bsw/jbe@5
|
139 action = "update",
|
bsw/jbe@5
|
140 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@5
|
141 params = {
|
bsw/jbe@5
|
142 suggestion_id = record.id,
|
bsw/jbe@5
|
143 delete = true
|
bsw/jbe@5
|
144 }
|
bsw/jbe@5
|
145 }
|
bsw/jbe@5
|
146 slot.put(" ")
|
bsw/jbe@5
|
147 ui.link{
|
bsw/jbe@5
|
148 attr = { class = "action" .. (degree == 1 and " active_green1" or "") },
|
bsw/jbe@5
|
149 text = _"should",
|
bsw/jbe@5
|
150 module = "opinion",
|
bsw/jbe@5
|
151 action = "update",
|
bsw/jbe@5
|
152 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@5
|
153 params = {
|
bsw/jbe@5
|
154 suggestion_id = record.id,
|
bsw/jbe@5
|
155 degree = 1
|
bsw/jbe@5
|
156 }
|
bsw/jbe@5
|
157 }
|
bsw/jbe@5
|
158 slot.put(" ")
|
bsw/jbe@5
|
159 ui.link{
|
bsw/jbe@5
|
160 attr = { class = "action" .. (degree == 2 and " active_green2" or "") },
|
bsw/jbe@5
|
161 text = _"must",
|
bsw/jbe@5
|
162 module = "opinion",
|
bsw/jbe@5
|
163 action = "update",
|
bsw/jbe@5
|
164 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@5
|
165 params = {
|
bsw/jbe@5
|
166 suggestion_id = record.id,
|
bsw/jbe@5
|
167 degree = 2
|
bsw/jbe@5
|
168 }
|
bsw/jbe@5
|
169 }
|
bsw/jbe@5
|
170 end
|
bsw/jbe@0
|
171 }
|
bsw/jbe@0
|
172 end
|
bsw/jbe@4
|
173 },
|
bsw/jbe@4
|
174 {
|
bsw/jbe@4
|
175 content = function(record)
|
bsw/jbe@4
|
176 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
177 if opinion and not opinion.fulfilled then
|
bsw/jbe@4
|
178 ui.image{ static = "icons/16/cross.png" }
|
bsw/jbe@4
|
179 end
|
bsw/jbe@4
|
180 end
|
bsw/jbe@4
|
181 },
|
bsw/jbe@4
|
182 {
|
bsw/jbe@4
|
183 label = _"Suggestion currently not implemented",
|
bsw/jbe@4
|
184 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
185 content = function(record)
|
bsw/jbe@4
|
186 if record.minus2_unfulfilled_count then
|
bsw/jbe@4
|
187 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
188 ui.bargraph{
|
bsw/jbe@4
|
189 max_value = max_value,
|
bsw/jbe@4
|
190 width = 50,
|
bsw/jbe@4
|
191 bars = {
|
bsw/jbe@4
|
192 { color = "#ddd", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count },
|
bsw/jbe@4
|
193 { color = "#f88", value = record.minus1_unfulfilled_count },
|
bsw/jbe@4
|
194 { color = "#a00", value = record.minus2_unfulfilled_count },
|
bsw/jbe@4
|
195 { color = "#0a0", value = record.plus2_unfulfilled_count },
|
bsw/jbe@4
|
196 { color = "#8f8", value = record.plus1_unfulfilled_count },
|
bsw/jbe@4
|
197 { color = "#ddd", value = max_value - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count },
|
bsw/jbe@4
|
198 }
|
bsw/jbe@4
|
199 }
|
bsw/jbe@4
|
200 end
|
bsw/jbe@4
|
201 end
|
bsw/jbe@4
|
202 },
|
bsw/jbe@4
|
203 {
|
bsw/jbe@4
|
204 content = function(record)
|
bsw/jbe@4
|
205 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
206 if opinion and opinion.fulfilled then
|
bsw/jbe@4
|
207 ui.image{ static = "icons/16/tick.png" }
|
bsw/jbe@4
|
208 end
|
bsw/jbe@4
|
209 end
|
bsw/jbe@4
|
210 },
|
bsw/jbe@4
|
211 {
|
bsw/jbe@4
|
212 label = _"Suggestion currently implemented",
|
bsw/jbe@4
|
213 label_attr = { style = "width: 101px;" },
|
bsw/jbe@4
|
214 content = function(record)
|
bsw/jbe@4
|
215 if record.minus2_fulfilled_count then
|
bsw/jbe@4
|
216 local max_value = record.initiative.issue.population
|
bsw/jbe@4
|
217 ui.bargraph{
|
bsw/jbe@4
|
218 max_value = max_value,
|
bsw/jbe@4
|
219 width = 50,
|
bsw/jbe@4
|
220 bars = {
|
bsw/jbe@4
|
221 { color = "#ddd", value = max_value - record.minus2_fulfilled_count - record.minus1_fulfilled_count },
|
bsw/jbe@4
|
222 { color = "#f88", value = record.minus1_fulfilled_count },
|
bsw/jbe@4
|
223 { color = "#a00", value = record.minus2_fulfilled_count },
|
bsw/jbe@4
|
224 { color = "#0a0", value = record.plus2_fulfilled_count },
|
bsw/jbe@4
|
225 { color = "#8f8", value = record.plus1_fulfilled_count },
|
bsw/jbe@4
|
226 { color = "#ddd", value = max_value - record.plus1_fulfilled_count - record.plus2_fulfilled_count },
|
bsw/jbe@4
|
227 }
|
bsw/jbe@4
|
228 }
|
bsw/jbe@4
|
229 end
|
bsw@3
|
230 end
|
bsw/jbe@4
|
231 },
|
bsw/jbe@4
|
232 {
|
bsw/jbe@4
|
233 label_attr = { style = "width: 200px;" },
|
bsw/jbe@4
|
234 content = function(record)
|
bsw/jbe@4
|
235 local degree
|
bsw/jbe@4
|
236 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
237 if opinion then
|
bsw/jbe@4
|
238 degree = opinion.degree
|
bsw/jbe@4
|
239 end
|
bsw/jbe@4
|
240 if opinion then
|
bsw/jbe@4
|
241 if not opinion.fulfilled then
|
bsw/jbe@4
|
242 local text = ""
|
bsw/jbe@4
|
243 if opinion.degree > 0 then
|
bsw/jbe@4
|
244 text = _"Mark suggestion as implemented and express satisfaction"
|
bsw/jbe@4
|
245 else
|
bsw/jbe@4
|
246 text = _"Mark suggestion as implemented and express dissatisfaction"
|
bsw/jbe@4
|
247 end
|
bsw/jbe@4
|
248 ui.link{
|
bsw/jbe@4
|
249 attr = { class = "action" },
|
bsw/jbe@4
|
250 text = text,
|
bsw/jbe@4
|
251 module = "opinion",
|
bsw/jbe@4
|
252 action = "update",
|
bsw/jbe@4
|
253 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@4
|
254 params = {
|
bsw/jbe@4
|
255 suggestion_id = record.id,
|
bsw/jbe@4
|
256 fulfilled = true
|
bsw/jbe@4
|
257 }
|
bsw/jbe@4
|
258 }
|
bsw/jbe@4
|
259 else
|
bsw/jbe@4
|
260 if opinion.degree > 0 then
|
bsw/jbe@4
|
261 text = _"Mark suggestion as not implemented and express dissatisfaction"
|
bsw/jbe@4
|
262 else
|
bsw/jbe@4
|
263 text = _"Mark suggestion as not implemented and express satisfaction"
|
bsw/jbe@4
|
264 end
|
bsw/jbe@4
|
265 ui.link{
|
bsw/jbe@4
|
266 attr = { class = "action" },
|
bsw/jbe@4
|
267 text = text,
|
bsw/jbe@4
|
268 module = "opinion",
|
bsw/jbe@4
|
269 action = "update",
|
bsw/jbe@4
|
270 routing = { default = { mode = "redirect", module = request.get_module(), view = request.get_view(), id = param.get_id_cgi(), params = param.get_all_cgi() } },
|
bsw/jbe@4
|
271 params = {
|
bsw/jbe@4
|
272 suggestion_id = record.id,
|
bsw/jbe@4
|
273 fulfilled = false
|
bsw/jbe@4
|
274 }
|
bsw/jbe@4
|
275 }
|
bsw/jbe@4
|
276 end
|
bsw/jbe@4
|
277 end
|
bsw/jbe@4
|
278 end
|
bsw/jbe@4
|
279 },
|
bsw/jbe@4
|
280 {
|
bsw/jbe@4
|
281 content = function(record)
|
bsw/jbe@4
|
282 local opinion = Opinion:by_pk(app.session.member.id, record.id)
|
bsw/jbe@4
|
283 if opinion then
|
bsw/jbe@4
|
284 if (opinion.fulfilled and opinion.degree > 0) or (not opinion.fulfilled and opinion.degree < 0) then
|
bsw/jbe@4
|
285 ui.image{ static = "icons/16/thumb_up_green.png" }
|
bsw/jbe@4
|
286 else
|
bsw/jbe@4
|
287 ui.image{ static = "icons/16/thumb_down_red.png" }
|
bsw/jbe@4
|
288 end
|
bsw/jbe@4
|
289 end
|
bsw/jbe@4
|
290 end
|
bsw/jbe@4
|
291 },
|
bsw/jbe@4
|
292 }
|
bsw/jbe@4
|
293 }
|
bsw/jbe@4
|
294 end
|
bsw/jbe@0
|
295 }
|
bsw/jbe@0
|
296 end
|
bsw/jbe@0
|
297 }
|
bsw/jbe@4
|
298
|
bsw/jbe@4
|
299 if initiative then
|
bsw/jbe@4
|
300 ui.field.timestamp{ label = _"Last snapshot:", value = initiative.issue.snapshot }
|
bsw/jbe@4
|
301 end
|