rev |
line source |
bsw@248
|
1 function change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id)
|
bsw@281
|
2 local check_unit_id
|
bsw@281
|
3 if unit_id then
|
bsw@281
|
4 check_unit_id = unit_id
|
bsw@281
|
5 elseif area_id then
|
bsw@281
|
6 local area = Area:by_id(area_id)
|
bsw@281
|
7 check_unit_id = area.unit_id
|
bsw@281
|
8 else
|
bsw@281
|
9 local area = Area:by_id(issue.area_id)
|
bsw@281
|
10 check_unit_id = area.unit_id
|
bsw@281
|
11 end
|
bsw@281
|
12
|
bsw@281
|
13 if not app.session.member:has_voting_right_for_unit_id(check_unit_id) then
|
bsw@281
|
14 return
|
bsw@281
|
15 end
|
bsw@281
|
16
|
bsw/jbe@19
|
17 local image
|
bsw/jbe@19
|
18 local text
|
bsw@248
|
19 if scope == "unit" and delegation and delegation.unit_id then
|
bsw/jbe@19
|
20 image = { static = "icons/16/table_go.png" }
|
bsw@264
|
21 text = config.single_unit_id and _"Change global delegation" or _"Change unit delegation"
|
bsw@248
|
22 elseif scope == "unit" and not (delegation and delegation.unit_id) then
|
bsw/jbe@19
|
23 image = { static = "icons/16/table_go.png" }
|
bsw@264
|
24 text = config.single_unit_id and _"Set global delegation" or _"Set unit delegation"
|
bsw/jbe@19
|
25 elseif scope == "area" and delegation and delegation.area_id then
|
bsw/jbe@19
|
26 image = { static = "icons/16/table_go.png" }
|
bsw/jbe@19
|
27 text = _"Change area delegation"
|
bsw/jbe@19
|
28 elseif scope == "area" and not (delegation and delegation.area_id) then
|
bsw/jbe@19
|
29 image = { static = "icons/16/table_go.png" }
|
bsw/jbe@19
|
30 text = _"Set area delegation"
|
bsw/jbe@19
|
31 elseif scope == "issue" then
|
bsw/jbe@19
|
32 if delegation and delegation.issue_id then
|
bsw/jbe@19
|
33 image = { static = "icons/16/table_go.png" }
|
bsw/jbe@19
|
34 text = _"Change issue delegation"
|
bsw/jbe@19
|
35 elseif issue.state ~= "finished" and issue.state ~= "cancelled" then
|
bsw/jbe@19
|
36 image = { static = "icons/16/table_go.png" }
|
bsw/jbe@19
|
37 text = _"Set issue delegation"
|
bsw/jbe@19
|
38 end
|
bsw/jbe@19
|
39 end
|
bsw/jbe@19
|
40 ui.container{
|
bsw/jbe@19
|
41 attr = {
|
bsw/jbe@19
|
42 class = "change_delegation",
|
bsw/jbe@19
|
43 },
|
bsw/jbe@19
|
44 content = function()
|
bsw/jbe@19
|
45 ui.link{
|
bsw/jbe@19
|
46 image = image,
|
bsw/jbe@19
|
47 text = text,
|
bsw/jbe@19
|
48 module = "delegation",
|
bsw/jbe@19
|
49 view = "new",
|
bsw/jbe@19
|
50 params = {
|
bsw/jbe@19
|
51 issue_id = issue and issue.id or nil,
|
poelzi@111
|
52 initiative_id = initiative_id or nil,
|
bsw@248
|
53 area_id = area_id,
|
bsw@248
|
54 unit_id = unit_id
|
bsw/jbe@19
|
55 },
|
bsw/jbe@19
|
56 }
|
bsw/jbe@19
|
57 if delegation then
|
bsw/jbe@19
|
58 ui.link{
|
bsw/jbe@19
|
59 image = { static = "icons/16/delete.png" },
|
bsw/jbe@19
|
60 text = _"Revoke",
|
bsw/jbe@19
|
61 module = "delegation",
|
bsw/jbe@19
|
62 action = "update",
|
bsw@248
|
63 params = { issue_id = delegation.issue_id, area_id = delegation.area_id, unit_id = delegation.unit_id, delete = true },
|
bsw/jbe@19
|
64 routing = {
|
bsw/jbe@19
|
65 default = {
|
bsw/jbe@19
|
66 mode = "redirect",
|
bsw/jbe@19
|
67 module = request.get_module(),
|
bsw/jbe@19
|
68 view = request.get_view(),
|
bsw/jbe@19
|
69 id = param.get_id_cgi(),
|
bsw/jbe@19
|
70 params = param.get_all_cgi()
|
bsw/jbe@19
|
71 }
|
bsw/jbe@19
|
72 }
|
bsw/jbe@19
|
73 }
|
bsw/jbe@19
|
74 end
|
bsw/jbe@19
|
75 end
|
bsw/jbe@19
|
76 }
|
bsw/jbe@19
|
77 end
|
bsw/jbe@5
|
78
|
bsw/jbe@19
|
79 local delegation
|
bsw@248
|
80 local unit_id
|
bsw/jbe@19
|
81 local area_id
|
bsw/jbe@19
|
82 local issue_id
|
poelzi@111
|
83 local initiative_id
|
bsw/jbe@19
|
84
|
bsw@248
|
85 local scope = "unit"
|
bsw@248
|
86
|
bsw@248
|
87 unit_id = param.get("unit_id", atom.integer)
|
bsw/jbe@5
|
88
|
bsw@273
|
89 local inline = param.get("inline", atom.boolean)
|
bsw@273
|
90
|
bsw/jbe@19
|
91 if param.get("initiative_id", atom.integer) then
|
poelzi@111
|
92 initiative_id = param.get("initiative_id", atom.integer)
|
poelzi@111
|
93 issue_id = Initiative:by_id(initiative_id).issue_id
|
bsw/jbe@19
|
94 scope = "issue"
|
bsw/jbe@19
|
95 end
|
bsw/jbe@5
|
96
|
bsw/jbe@19
|
97 if param.get("issue_id", atom.integer) then
|
bsw/jbe@19
|
98 issue_id = param.get("issue_id", atom.integer)
|
bsw/jbe@19
|
99 scope = "issue"
|
bsw/jbe@19
|
100 end
|
bsw/jbe@19
|
101
|
bsw/jbe@19
|
102 if param.get("area_id", atom.integer) then
|
bsw/jbe@19
|
103 area_id = param.get("area_id", atom.integer)
|
bsw/jbe@19
|
104 scope = "area"
|
bsw/jbe@19
|
105 end
|
bsw/jbe@5
|
106
|
bsw/jbe@5
|
107
|
bsw/jbe@5
|
108
|
bsw/jbe@19
|
109 local delegation
|
bsw/jbe@19
|
110 local issue
|
poelzi@111
|
111
|
bsw/jbe@19
|
112 if issue_id then
|
bsw/jbe@19
|
113 issue = Issue:by_id(issue_id)
|
bsw@248
|
114 delegation = Delegation:by_pk(app.session.member.id, nil, nil, issue_id)
|
bsw/jbe@19
|
115 if not delegation then
|
bsw@248
|
116 delegation = Delegation:by_pk(app.session.member.id, nil, issue.area_id)
|
bsw/jbe@5
|
117 end
|
bsw@273
|
118 if not delegation then
|
bsw@273
|
119 delegation = Delegation:by_pk(app.session.member.id, issue.area.unit_id)
|
bsw@273
|
120 end
|
bsw/jbe@19
|
121 elseif area_id then
|
bsw@248
|
122 delegation = Delegation:by_pk(app.session.member.id, nil, area_id)
|
bsw@273
|
123 if not delegation then
|
bsw@273
|
124 local area = Area:by_id(area_id)
|
bsw@273
|
125 delegation = Delegation:by_pk(app.session.member.id, area.unit_id)
|
bsw@273
|
126 end
|
bsw/jbe@19
|
127 end
|
bsw/jbe@5
|
128
|
bsw/jbe@19
|
129 if not delegation then
|
bsw@248
|
130 delegation = Delegation:by_pk(app.session.member.id, unit_id)
|
bsw/jbe@19
|
131 end
|
bsw/jbe@19
|
132
|
bsw@273
|
133 local slot_name = "actions"
|
bsw/jbe@19
|
134
|
bsw@273
|
135 if inline then
|
bsw@273
|
136 slot_name = "default"
|
bsw@273
|
137 end
|
bsw@273
|
138
|
bsw@273
|
139 slot.select(slot_name, function()
|
bsw/jbe@19
|
140
|
bsw/jbe@5
|
141 if delegation then
|
bsw/jbe@5
|
142 ui.container{
|
bsw/jbe@5
|
143 attr = { class = "delegation vote_info"},
|
bsw/jbe@5
|
144 content = function()
|
bsw@2
|
145 ui.container{
|
bsw@2
|
146 attr = {
|
bsw/jbe@4
|
147 title = _"Click for details",
|
bsw/jbe@4
|
148 class = "head head_active",
|
bsw@2
|
149 style = "cursor: pointer;",
|
bsw/jbe@4
|
150 onclick = "document.getElementById('delegation_content').style.display = 'block';"
|
bsw@2
|
151 },
|
bsw/jbe@4
|
152 content = function()
|
bsw@180
|
153 if delegation.trustee_id then
|
bsw@180
|
154 ui.image{
|
bsw@180
|
155 static = "icons/16/table_go.png"
|
bsw@180
|
156 }
|
mail@251
|
157 local member = Member:new_selector()
|
mail@251
|
158 :reset_fields()
|
mail@251
|
159 :add_field("name", "delegation_name")
|
mail@251
|
160 :add_where({ "id = ?", delegation.trustee_id })
|
mail@251
|
161 :single_object_mode()
|
mail@251
|
162 :exec()
|
bsw@180
|
163 if delegation.issue_id then
|
mail@251
|
164 slot.put( _("Issue delegated to '#{name}'", { name = member.delegation_name }) )
|
bsw@180
|
165 elseif delegation.area_id then
|
mail@251
|
166 slot.put( _("Area delegated to '#{name}'", { name = member.delegation_name }) )
|
bsw@180
|
167 else
|
bsw@264
|
168 if config.single_unit_id then
|
bsw@264
|
169 slot.put( _("Global delegation set to '#{name}'", { name = member.delegation_name }) )
|
bsw@264
|
170 else
|
bsw@264
|
171 slot.put( _("Unit delegated to '#{name}'", { name = member.delegation_name }) )
|
bsw@264
|
172 end
|
bsw@180
|
173 end
|
mail@251
|
174
|
bsw/jbe@4
|
175 else
|
bsw@180
|
176 ui.image{
|
bsw@180
|
177 static = "icons/16/table_go_crossed.png"
|
bsw@180
|
178 }
|
bsw@180
|
179 if delegation.issue_id then
|
bsw@180
|
180 slot.put(_"Delegation turned off for issue")
|
bsw@180
|
181 elseif delegation.area_id then
|
bsw@180
|
182 slot.put(_"Delegation turned off for area")
|
bsw@180
|
183 end
|
bsw/jbe@4
|
184 end
|
bsw/jbe@4
|
185 ui.image{
|
bsw/jbe@4
|
186 static = "icons/16/dropdown.png"
|
bsw/jbe@4
|
187 }
|
bsw/jbe@4
|
188 end
|
bsw@2
|
189 }
|
bsw/jbe@4
|
190 ui.container{
|
bsw/jbe@4
|
191 attr = { class = "content", id = "delegation_content" },
|
bsw/jbe@4
|
192 content = function()
|
bsw@2
|
193 ui.container{
|
bsw/jbe@4
|
194 attr = {
|
bsw/jbe@4
|
195 class = "close",
|
bsw/jbe@4
|
196 style = "cursor: pointer;",
|
bsw/jbe@4
|
197 onclick = "document.getElementById('delegation_content').style.display = 'none';"
|
bsw/jbe@4
|
198 },
|
bsw@2
|
199 content = function()
|
bsw/jbe@4
|
200 ui.image{ static = "icons/16/cross.png" }
|
bsw/jbe@4
|
201 end
|
bsw/jbe@4
|
202 }
|
bsw/jbe@4
|
203
|
bsw/jbe@4
|
204 local delegation_chain = Member:new_selector()
|
bsw/jbe@4
|
205 :add_field("delegation_chain.*")
|
bsw@246
|
206 :join("delegation_chain(" .. tostring(app.session.member.id) .. ", " .. tostring(unit_id or "NULL") .. ", " .. tostring(area_id or "NULL") .. ", " .. tostring(issue_id or "NULL") .. ")", "delegation_chain", "member.id = delegation_chain.member_id")
|
bsw/jbe@4
|
207 :add_order_by("index")
|
bsw/jbe@4
|
208 :exec()
|
bsw/jbe@4
|
209
|
bsw/jbe@19
|
210 if not issue or (issue.state ~= "finished" and issue.state ~= "cancelled") then
|
bsw@248
|
211 change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id)
|
bsw@277
|
212 slot.put("<br style='clear: left'/>")
|
bsw/jbe@19
|
213 end
|
bsw/jbe@19
|
214
|
bsw/jbe@4
|
215 for i, record in ipairs(delegation_chain) do
|
bsw/jbe@4
|
216 local style
|
bsw/jbe@4
|
217 local overridden = record.overridden
|
bsw/jbe@4
|
218 if record.scope_in then
|
bsw@2
|
219 ui.container{
|
bsw/jbe@4
|
220 attr = { class = "delegation_info" },
|
bsw@2
|
221 content = function()
|
bsw/jbe@4
|
222 if not overridden then
|
bsw/jbe@4
|
223 ui.image{
|
bsw/jbe@4
|
224 attr = { class = "delegation_arrow" },
|
bsw/jbe@4
|
225 static = "delegation_arrow_vertical.jpg"
|
bsw/jbe@4
|
226 }
|
bsw/jbe@4
|
227 else
|
bsw/jbe@4
|
228 ui.image{
|
bsw/jbe@4
|
229 attr = { class = "delegation_arrow delegation_arrow_overridden" },
|
bsw/jbe@4
|
230 static = "delegation_arrow_vertical.jpg"
|
bsw/jbe@4
|
231 }
|
bsw/jbe@4
|
232 end
|
bsw/jbe@4
|
233 ui.container{
|
bsw/jbe@4
|
234 attr = { class = "delegation_scope" .. (overridden and " delegation_scope_overridden" or "") },
|
bsw/jbe@4
|
235 content = function()
|
bsw@248
|
236 if record.scope_in == "unit" then
|
bsw@264
|
237 slot.put(config.single_object_mode and _"Global delegation" or _"Unit delegation")
|
bsw/jbe@4
|
238 elseif record.scope_in == "area" then
|
bsw/jbe@4
|
239 slot.put(_"Area delegation")
|
bsw/jbe@4
|
240 elseif record.scope_in == "issue" then
|
bsw/jbe@4
|
241 slot.put(_"Issue delegation")
|
bsw/jbe@4
|
242 end
|
bsw/jbe@4
|
243 end
|
bsw/jbe@4
|
244 }
|
bsw@2
|
245 end
|
bsw@2
|
246 }
|
bsw/jbe@4
|
247 end
|
bsw/jbe@4
|
248 ui.container{
|
bsw/jbe@4
|
249 attr = { class = overridden and "delegation_overridden" or "" },
|
bsw/jbe@4
|
250 content = function()
|
bsw/jbe@4
|
251 execute.view{
|
bsw/jbe@4
|
252 module = "member",
|
bsw/jbe@4
|
253 view = "_show_thumb",
|
bsw/jbe@4
|
254 params = { member = record }
|
bsw@2
|
255 }
|
bsw@2
|
256 end
|
bsw/jbe@4
|
257 }
|
bsw/jbe@4
|
258 if record.participation and not record.overridden then
|
bsw/jbe@4
|
259 ui.container{
|
bsw/jbe@4
|
260 attr = { class = "delegation_participation" },
|
bsw/jbe@4
|
261 content = function()
|
bsw/jbe@19
|
262 slot.put(_"This member is participating, the rest of delegation chain is suspended while discussing")
|
bsw/jbe@4
|
263 end
|
bsw/jbe@4
|
264 }
|
bsw@2
|
265 end
|
bsw/jbe@4
|
266 slot.put("<br style='clear: left'/>")
|
bsw/jbe@4
|
267 end
|
bsw/jbe@0
|
268 end
|
bsw/jbe@4
|
269 }
|
bsw/jbe@0
|
270 end
|
bsw/jbe@5
|
271 }
|
bsw/jbe@19
|
272 else
|
bsw@248
|
273 change_delegation(scope, unit_id, area_id, issue, nil, initiative_id)
|
bsw/jbe@5
|
274 end
|
bsw/jbe@0
|
275 end)
|