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