poelzi@111: function change_delegation(scope, area_id, issue, delegation, initiative_id) bsw/jbe@19: local image bsw/jbe@19: local text bsw/jbe@19: if scope == "global" and delegation then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw/jbe@19: text = _"Change global delegation" bsw/jbe@19: elseif scope == "global" and not delegation then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw/jbe@19: text = _"Set global delegation" bsw/jbe@19: elseif scope == "area" and delegation and delegation.area_id then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw/jbe@19: text = _"Change area delegation" bsw/jbe@19: elseif scope == "area" and not (delegation and delegation.area_id) then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw/jbe@19: text = _"Set area delegation" bsw/jbe@19: elseif scope == "issue" then bsw/jbe@19: if delegation and delegation.issue_id then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw/jbe@19: text = _"Change issue delegation" bsw/jbe@19: elseif issue.state ~= "finished" and issue.state ~= "cancelled" then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw/jbe@19: text = _"Set issue delegation" bsw/jbe@19: end bsw/jbe@19: end bsw/jbe@19: ui.container{ bsw/jbe@19: attr = { bsw/jbe@19: class = "change_delegation", bsw/jbe@19: }, bsw/jbe@19: content = function() bsw/jbe@19: ui.link{ bsw/jbe@19: image = image, bsw/jbe@19: text = text, bsw/jbe@19: module = "delegation", bsw/jbe@19: view = "new", bsw/jbe@19: params = { bsw/jbe@19: issue_id = issue and issue.id or nil, poelzi@111: initiative_id = initiative_id or nil, bsw/jbe@19: area_id = area_id bsw/jbe@19: }, bsw/jbe@19: } bsw/jbe@19: if delegation then bsw/jbe@19: ui.link{ bsw/jbe@19: image = { static = "icons/16/delete.png" }, bsw/jbe@19: text = _"Revoke", bsw/jbe@19: module = "delegation", bsw/jbe@19: action = "update", bsw/jbe@19: params = { issue_id = delegation.issue_id, area_id = delegation.area_id, delete = true }, bsw/jbe@19: routing = { bsw/jbe@19: default = { bsw/jbe@19: mode = "redirect", bsw/jbe@19: module = request.get_module(), bsw/jbe@19: view = request.get_view(), bsw/jbe@19: id = param.get_id_cgi(), bsw/jbe@19: params = param.get_all_cgi() bsw/jbe@19: } bsw/jbe@19: } bsw/jbe@19: } bsw/jbe@19: end bsw/jbe@19: end bsw/jbe@19: } bsw/jbe@19: end bsw/jbe@5: bsw/jbe@19: local delegation bsw/jbe@19: local area_id bsw/jbe@19: local issue_id poelzi@111: local initiative_id bsw/jbe@19: bsw/jbe@19: local scope = "global" bsw/jbe@5: bsw/jbe@19: if param.get("initiative_id", atom.integer) then poelzi@111: initiative_id = param.get("initiative_id", atom.integer) poelzi@111: issue_id = Initiative:by_id(initiative_id).issue_id bsw/jbe@19: scope = "issue" bsw/jbe@19: end bsw/jbe@5: bsw/jbe@19: if param.get("issue_id", atom.integer) then bsw/jbe@19: issue_id = param.get("issue_id", atom.integer) bsw/jbe@19: scope = "issue" bsw/jbe@19: end bsw/jbe@19: bsw/jbe@19: if param.get("area_id", atom.integer) then bsw/jbe@19: area_id = param.get("area_id", atom.integer) bsw/jbe@19: scope = "area" bsw/jbe@19: end bsw/jbe@5: bsw/jbe@5: bsw/jbe@5: bsw/jbe@19: local delegation bsw/jbe@19: local issue poelzi@111: bsw/jbe@19: if issue_id then bsw/jbe@19: issue = Issue:by_id(issue_id) bsw/jbe@19: delegation = Delegation:by_pk(app.session.member.id, nil, issue_id) bsw/jbe@19: if not delegation then bsw/jbe@19: delegation = Delegation:by_pk(app.session.member.id, issue.area_id) bsw/jbe@5: end bsw/jbe@19: elseif area_id then bsw/jbe@19: delegation = Delegation:by_pk(app.session.member.id, area_id) bsw/jbe@19: end bsw/jbe@5: bsw/jbe@19: if not delegation then bsw/jbe@19: delegation = Delegation:by_pk(app.session.member.id) bsw/jbe@19: end bsw/jbe@19: bsw/jbe@19: bsw/jbe@19: slot.select("actions", function() bsw/jbe@19: bsw/jbe@5: if delegation then bsw/jbe@5: ui.container{ bsw/jbe@5: attr = { class = "delegation vote_info"}, bsw/jbe@5: content = function() bsw@2: ui.container{ bsw@2: attr = { bsw/jbe@4: title = _"Click for details", bsw/jbe@4: class = "head head_active", bsw@2: style = "cursor: pointer;", bsw/jbe@4: onclick = "document.getElementById('delegation_content').style.display = 'block';" bsw@2: }, bsw/jbe@4: content = function() bsw@180: if delegation.trustee_id then bsw@180: ui.image{ bsw@180: static = "icons/16/table_go.png" bsw@180: } bsw@180: if delegation.issue_id then bsw@180: slot.put(_"Issue delegation active") bsw@180: elseif delegation.area_id then bsw@183: slot.put(_"Area delegation active") bsw@180: else bsw@180: slot.put(_"Global delegation active") bsw@180: end bsw/jbe@4: else bsw@180: ui.image{ bsw@180: static = "icons/16/table_go_crossed.png" bsw@180: } bsw@180: if delegation.issue_id then bsw@180: slot.put(_"Delegation turned off for issue") bsw@180: elseif delegation.area_id then bsw@180: slot.put(_"Delegation turned off for area") bsw@180: end bsw/jbe@4: end bsw/jbe@4: ui.image{ bsw/jbe@4: static = "icons/16/dropdown.png" bsw/jbe@4: } bsw/jbe@4: end bsw@2: } bsw/jbe@4: ui.container{ bsw/jbe@4: attr = { class = "content", id = "delegation_content" }, bsw/jbe@4: content = function() bsw@2: ui.container{ bsw/jbe@4: attr = { bsw/jbe@4: class = "close", bsw/jbe@4: style = "cursor: pointer;", bsw/jbe@4: onclick = "document.getElementById('delegation_content').style.display = 'none';" bsw/jbe@4: }, bsw@2: content = function() bsw/jbe@4: ui.image{ static = "icons/16/cross.png" } bsw/jbe@4: end bsw/jbe@4: } bsw/jbe@4: bsw/jbe@4: local delegation_chain = Member:new_selector() bsw/jbe@4: :add_field("delegation_chain.*") bsw@246: :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: :add_order_by("index") bsw/jbe@4: :exec() bsw/jbe@4: bsw/jbe@19: if not issue or (issue.state ~= "finished" and issue.state ~= "cancelled") then poelzi@111: change_delegation(scope, area_id, issue, delegation, initiative_id) bsw/jbe@19: end bsw/jbe@19: bsw/jbe@4: for i, record in ipairs(delegation_chain) do bsw/jbe@4: local style bsw/jbe@4: local overridden = record.overridden bsw/jbe@4: if record.scope_in then bsw@2: ui.container{ bsw/jbe@4: attr = { class = "delegation_info" }, bsw@2: content = function() bsw/jbe@4: if not overridden then bsw/jbe@4: ui.image{ bsw/jbe@4: attr = { class = "delegation_arrow" }, bsw/jbe@4: static = "delegation_arrow_vertical.jpg" bsw/jbe@4: } bsw/jbe@4: else bsw/jbe@4: ui.image{ bsw/jbe@4: attr = { class = "delegation_arrow delegation_arrow_overridden" }, bsw/jbe@4: static = "delegation_arrow_vertical.jpg" bsw/jbe@4: } bsw/jbe@4: end bsw/jbe@4: ui.container{ bsw/jbe@4: attr = { class = "delegation_scope" .. (overridden and " delegation_scope_overridden" or "") }, bsw/jbe@4: content = function() bsw/jbe@4: if record.scope_in == "global" then bsw/jbe@4: slot.put(_"Global delegation") bsw/jbe@4: elseif record.scope_in == "area" then bsw/jbe@4: slot.put(_"Area delegation") bsw/jbe@4: elseif record.scope_in == "issue" then bsw/jbe@4: slot.put(_"Issue delegation") bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: } bsw@2: end bsw@2: } bsw/jbe@4: end bsw/jbe@4: ui.container{ bsw/jbe@4: attr = { class = overridden and "delegation_overridden" or "" }, bsw/jbe@4: content = function() bsw/jbe@4: execute.view{ bsw/jbe@4: module = "member", bsw/jbe@4: view = "_show_thumb", bsw/jbe@4: params = { member = record } bsw@2: } bsw@2: end bsw/jbe@4: } bsw/jbe@4: if record.participation and not record.overridden then bsw/jbe@4: ui.container{ bsw/jbe@4: attr = { class = "delegation_participation" }, bsw/jbe@4: content = function() bsw/jbe@19: slot.put(_"This member is participating, the rest of delegation chain is suspended while discussing") bsw/jbe@4: end bsw/jbe@4: } bsw@2: end bsw/jbe@4: slot.put("
") bsw/jbe@4: end bsw/jbe@0: end bsw/jbe@4: } bsw/jbe@0: end bsw/jbe@5: } bsw/jbe@19: else poelzi@111: change_delegation(scope, area_id, issue, nil, initiative_id) bsw/jbe@5: end bsw/jbe@0: end)