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@1696:                   scope = app.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@1696:               if app.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@1696:                 scope = app.single_unit_id and _"global" or _"unit"
bsw/jbe@1309:               end
bsw/jbe@1309:               local text_apply
bsw/jbe@1309:               local text_abandon
bsw@1696:               if app.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:           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 }