local voting_right_unit_id local current_trustee_id local current_trustee_name local head_text local unit = Unit:by_id(param.get("unit_id", atom.integer)) local area = Area:by_id(param.get("area_id", atom.integer)) local issue = Issue:by_id(param.get("issue_id", atom.integer)) local initiative = Initiative:by_id(param.get("initiative_id", atom.integer)) if initiative then issue = initiative.issue end if unit then unit:load_delegation_info_once_for_member_id(app.session.member_id) voting_right_unit_id = unit.id if unit.delegation_info.own_delegation_scope == 'unit' then current_trustee_id = unit.delegation_info.first_trustee_id current_trustee_name = unit.delegation_info.first_trustee_name end execute.view { module = "unit", view = "_head", params = { unit = unit } } head_text = _"Set unit delegation" end if area then area:load_delegation_info_once_for_member_id(app.session.member_id) voting_right_unit_id = area.unit_id if area.delegation_info.own_delegation_scope == 'area' then current_trustee_id = area.delegation_info.first_trustee_id current_trustee_name = area.delegation_info.first_trustee_name end execute.view { module = "area", view = "_head", params = { area = area } } head_text = _"Set area delegation" end if issue then issue:load("member_info", { member_id = app.session.member_id }) voting_right_unit_id = issue.area.unit_id if issue.member_info.own_delegation_scope == 'issue' then current_trustee_id = issue.member_info.first_trustee_id current_trustee_name = issue.member_info.first_trustee_name end execute.view { module = "issue", view = "_head", params = { issue = issue } } head_text = _"Set issue delegation" end local delegation local unit_id local area_id local issue_id local initiative_id local scope = "unit" local inline = param.get("inline", atom.boolean) unit_id = param.get("unit_id", atom.integer) if param.get("initiative_id", atom.integer) then initiative_id = initiative.id issue_id = initiative.issue_id scope = "issue" end if param.get("issue_id", atom.integer) then issue_id = param.get("issue_id", atom.integer) scope = "issue" end if param.get("area_id", atom.integer) then area_id = param.get("area_id", atom.integer) scope = "area" end local delegation local issue if issue_id then issue = Issue:by_id(issue_id) delegation = Delegation:by_pk(app.session.member.id, nil, nil, issue_id) if not delegation then delegation = Delegation:by_pk(app.session.member.id, nil, issue.area_id) end if not delegation then delegation = Delegation:by_pk(app.session.member.id, issue.area.unit_id) end elseif area_id then delegation = Delegation:by_pk(app.session.member.id, nil, area_id) if not delegation then local area = Area:by_id(area_id) delegation = Delegation:by_pk(app.session.member.id, area.unit_id) end end if not delegation then delegation = Delegation:by_pk(app.session.member.id, unit_id) end local contact_members = Member:build_selector{ is_contact_of_member_id = app.session.member_id, voting_right_for_unit_id = voting_right_unit_id, active = true, order = "name" }:exec() local preview_trustee_id = param.get("preview_trustee_id", atom.integer) ui.script{ static = "js/update_delegation_info.js" } ui.container{ attr = { class = "mdl-grid" }, content = function() ui.container{ attr = { class = "mdl-cell mdl-cell--8-col" }, content = function() ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp" }, content = function() ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function() ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = head_text } end } ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function() ui.form{ attr = { class = "wide section", id = "delegationForm" }, module = "delegation", action = "update", params = { unit_id = unit and unit.id or nil, area_id = area and area.id or nil, issue_id = issue and issue.id or nil, initiative_id = initiative_id }, routing = { default = { mode = "redirect", module = initiative and "initiative" or issue and "issue" or "index", view = initiative and "show" or issue and "show" or "index", id = initiative and initiative.id or issue and issue.id, params = { area = area and area.id, unit = unit and unit.id or area and area.unit_id } } }, content = function() local records if issue then local delegate_name = "" local scope = _"no delegation set" local area_delegation = Delegation:by_pk(app.session.member_id, nil, issue.area_id) if area_delegation then delegate_name = area_delegation.trustee and area_delegation.trustee.name or _"abandoned" scope = _"area" else local unit_delegation = Delegation:by_pk(app.session.member_id, issue.area.unit_id) if unit_delegation then delegate_name = unit_delegation.trustee.name scope = app.single_unit_id and _"global" or _"unit" end end local text_apply local text_abandon if app.single_unit_id then text_apply = _("Apply global or area delegation for this issue (Currently: #{delegate_name} [#{scope}])", { delegate_name = delegate_name, scope = scope }) text_abandon = _"Abandon unit and area delegations for this issue" else text_apply = _("Apply unit or area delegation for this issue (Currently: #{delegate_name} [#{scope}])", { delegate_name = delegate_name, scope = scope }) text_abandon = _"Abandon unit and area delegations for this issue" end records = { { id = -1, name = text_apply }, { id = 0, name = text_abandon } } elseif area then local delegate_name = "" local scope = _"no delegation set" local unit_delegation = Delegation:by_pk(app.session.member_id, area.unit_id) if unit_delegation then delegate_name = unit_delegation.trustee.name scope = app.single_unit_id and _"global" or _"unit" end local text_apply local text_abandon if app.single_unit_id then text_apply = _("Apply global delegation for this area (Currently: #{delegate_name} [#{scope}])", { delegate_name = delegate_name, scope = scope }) text_abandon = _"Abandon global delegation for this area" else text_apply = _("Apply unit delegation for this area (Currently: #{delegate_name} [#{scope}])", { delegate_name = delegate_name, scope = scope }) text_abandon = _"Abandon unit delegation for this area" end records = { { id = -1, name = text_apply }, { id = 0, name = text_abandon } } else records = { { id = -1, name = _"No delegation" } } end -- add current trustee if current_trustee_id then records[#records+1] = {id="_", name= "--- " .. _"Current delegatee" .. " ---"} records[#records+1] = { id = current_trustee_id, name = current_trustee_name } end -- add initiative authors if initiative then records[#records+1] = {id="_", name= "--- " .. _"Initiators" .. " ---"} for i,record in ipairs(initiative.initiators) do records[#records+1] = record.member end end -- add saved members if #contact_members > 0 then records[#records+1] = {id="_", name= "--- " .. _"Saved contacts" .. " ---"} for i, record in ipairs(contact_members) do records[#records+1] = record end end local disabled_records = {} disabled_records["_"] = true disabled_records[app.session.member_id] = true local value = current_trustee_id if preview_trustee_id then value = preview_trustee_id end if preview_trustee_id == nil and delegation and not delegation.trustee_id then value = 0 end ui.tag{ content = _"Choose your delegatee" } ui.field.select{ attr = { onchange = "updateDelegationInfo();" }, name = "trustee_id", foreign_records = records, foreign_id = "id", foreign_name = "name", disabled_records = disabled_records, value = value } slot.put("
") ui.container{ content = _"You can choose only members which you have been saved as contact before." } ui.field.hidden{ name = "preview" } slot.put("
") ui.tag { tag = "input", content = "", attr = { type = "submit", value = _"Save", class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored", } } slot.put("   ") if initiative then ui.link{ module = "initiative", view = "show", id = initiative.id, attr = { class = "mdl-button mdl-js-button mdl-button--underlined" }, content = function() slot.put(_"Cancel") end, } elseif issue then ui.link{ module = "issue", view = "show", id = issue.id, attr = { class = "mdl-button mdl-js-button mdl-button--underlined" }, content = function() slot.put(_"Cancel") end, } elseif area then ui.link{ module = "index", view = "index", params = { unit = area.unit_id, area = area.id }, attr = { class = "mdl-button mdl-js-button mdl-button--underlined" }, content = function() slot.put(_"Cancel") end, } else ui.link{ module = "index", view = "index", attr = { class = "mdl-button mdl-js-button mdl-button--underlined" }, content = function() slot.put(_"Cancel") end, } end end } end } end } end } -- ------------------------ ui.container{ attr = { class = "mdl-cell mdl-cell--12-col mdl-cell--4-col-desktop" }, content = function() ui.container{ attr = { class = "mdl-card mdl-shadow--2dp mdl-card__fullwidth" }, content = function() ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function() ui.container{ attr = { class = "mdl-card__title-text" }, content = _"Preview of delegation" } end } ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function() local preview_inherit = false local tmp_preview_trustee_id = preview_trustee_id if preview_trustee_id == -1 then preview_inherit = true tmp_preview_trustee_id = nil end local delegation_chain = Member:new_selector() :add_field("delegation_chain.*") :join({ "delegation_chain(?,?,?,?,?,?)", app.session.member.id, unit_id, area_id, issue_id, tmp_preview_trustee_id, preview_inherit }, "delegation_chain", "member.id = delegation_chain.member_id") :add_order_by("index") :exec() for i, record in ipairs(delegation_chain) do local style local overridden = (not issue or issue.state ~= 'voting') and record.overridden ui.sidebarSection( function () if record.scope_in then if not overridden then local text = _"delegated to" ui.image{ attr = { class = "delegation_arrow", alt = text, title = text }, static = "delegation_arrow_24_vertical.png" } else local text = _"delegated to" ui.image{ attr = { class = "delegation_arrow delegation_arrow_overridden", alt = text, title = text }, static = "delegation_arrow_24_vertical.png" } end ui.tag{ attr = { class = "delegation_scope" .. (overridden and " delegation_scope_overridden" or "") }, content = function() if record.scope_in == "unit" then slot.put(config.single_object_mode and _"Global delegation" or _"Unit delegation") elseif record.scope_in == "area" then slot.put(_"Area delegation") elseif record.scope_in == "issue" then slot.put(_"Issue delegation") end end } end ui.container{ attr = { class = overridden and "delegation_overridden" or "" }, content = function() execute.view{ module = "member", view = "_show_thumb", params = { member = record } } end } if issue and issue.state ~= 'voting' and record.participation and not record.overridden then ui.container{ attr = { class = "delegation_participation" }, content = function() if i == #delegation_chain then ui.tag{ content = _"This member is currently participating in this issue." } else ui.tag{ content = _"This member is participating, the remaining delegation chain is suspended during discussing." } end end } end slot.put("
") end ) end if preview_trustee_id == 0 or not preview_trustee_id == null and delegation and not delegation.trustee_id then if issue_id then slot.put(_"Delegation turned off for issue") elseif area_id then slot.put(_"Delegation turned off for area") end end end } end } end } end }