bsw@248: function change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id) bsw@281: local check_unit_id bsw@281: if unit_id then bsw@281: check_unit_id = unit_id bsw@281: elseif area_id then bsw@281: local area = Area:by_id(area_id) bsw@281: check_unit_id = area.unit_id bsw@281: else bsw@281: local area = Area:by_id(issue.area_id) bsw@281: check_unit_id = area.unit_id bsw@281: end bsw@281: bsw@281: if not app.session.member:has_voting_right_for_unit_id(check_unit_id) then bsw@281: return bsw@281: end bsw@281: bsw/jbe@19: local image bsw/jbe@19: local text bsw@248: if scope == "unit" and delegation and delegation.unit_id then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw@264: text = config.single_unit_id and _"Change global delegation" or _"Change unit delegation" bsw@248: elseif scope == "unit" and not (delegation and delegation.unit_id) then bsw/jbe@19: image = { static = "icons/16/table_go.png" } bsw@264: text = config.single_unit_id and _"Set global delegation" or _"Set unit 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@248: area_id = area_id, bsw@248: unit_id = unit_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@248: params = { issue_id = delegation.issue_id, area_id = delegation.area_id, unit_id = delegation.unit_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@248: local unit_id bsw/jbe@19: local area_id bsw/jbe@19: local issue_id poelzi@111: local initiative_id bsw/jbe@19: bsw@248: local scope = "unit" bsw@248: bsw@248: unit_id = param.get("unit_id", atom.integer) bsw/jbe@5: bsw@273: local inline = param.get("inline", atom.boolean) bsw@273: 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@248: delegation = Delegation:by_pk(app.session.member.id, nil, nil, issue_id) bsw/jbe@19: if not delegation then bsw@248: delegation = Delegation:by_pk(app.session.member.id, nil, issue.area_id) bsw/jbe@5: end bsw@273: if not delegation then bsw@273: delegation = Delegation:by_pk(app.session.member.id, issue.area.unit_id) bsw@273: end bsw/jbe@19: elseif area_id then bsw@248: delegation = Delegation:by_pk(app.session.member.id, nil, area_id) bsw@273: if not delegation then bsw@273: local area = Area:by_id(area_id) bsw@273: delegation = Delegation:by_pk(app.session.member.id, area.unit_id) bsw@273: end bsw/jbe@19: end bsw/jbe@5: bsw/jbe@19: if not delegation then bsw@248: delegation = Delegation:by_pk(app.session.member.id, unit_id) bsw/jbe@19: end bsw/jbe@19: bsw@273: local slot_name = "actions" bsw/jbe@19: bsw@273: if inline then bsw@273: slot_name = "default" bsw@273: end bsw@273: bsw@273: slot.select(slot_name, 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: } mail@251: local member = Member:new_selector() mail@251: :reset_fields() mail@251: :add_field("name", "delegation_name") mail@251: :add_where({ "id = ?", delegation.trustee_id }) mail@251: :single_object_mode() mail@251: :exec() bsw@180: if delegation.issue_id then mail@251: slot.put( _("Issue delegated to '#{name}'", { name = member.delegation_name }) ) bsw@180: elseif delegation.area_id then mail@251: slot.put( _("Area delegated to '#{name}'", { name = member.delegation_name }) ) bsw@180: else bsw@264: if config.single_unit_id then bsw@264: slot.put( _("Global delegation set to '#{name}'", { name = member.delegation_name }) ) bsw@264: else bsw@264: slot.put( _("Unit delegated to '#{name}'", { name = member.delegation_name }) ) bsw@264: end bsw@180: end mail@251: 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 bsw@248: change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id) bsw@277: slot.put("
") bsw/jbe@19: end bsw/jbe@19: bsw/jbe@4: for i, record in ipairs(delegation_chain) do bsw/jbe@4: local style bsw@341: local overridden = (not issue or issue.state ~= 'voting') and 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@341: static = "delegation_arrow_24_vertical.png" bsw/jbe@4: } bsw/jbe@4: else bsw/jbe@4: ui.image{ bsw/jbe@4: attr = { class = "delegation_arrow delegation_arrow_overridden" }, bsw@341: static = "delegation_arrow_24_vertical.png" 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@248: if record.scope_in == "unit" then bsw@264: slot.put(config.single_object_mode and _"Global delegation" or _"Unit 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@341: if (not issue or issue.state ~= 'voting') and 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 bsw@248: change_delegation(scope, unit_id, area_id, issue, nil, initiative_id) bsw/jbe@5: end bsw/jbe@0: end)