| rev | 
   line source | 
| 
bsw@248
 | 
     1 function change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id)
 | 
| 
bsw@281
 | 
     2   local check_unit_id
 | 
| 
bsw@281
 | 
     3   if unit_id then
 | 
| 
bsw@281
 | 
     4     check_unit_id = unit_id
 | 
| 
bsw@281
 | 
     5   elseif area_id then
 | 
| 
bsw@281
 | 
     6     local area = Area:by_id(area_id)
 | 
| 
bsw@281
 | 
     7     check_unit_id = area.unit_id
 | 
| 
bsw@281
 | 
     8   else
 | 
| 
bsw@281
 | 
     9     local area = Area:by_id(issue.area_id)
 | 
| 
bsw@281
 | 
    10     check_unit_id = area.unit_id
 | 
| 
bsw@281
 | 
    11   end
 | 
| 
bsw@281
 | 
    12 
 | 
| 
bsw@281
 | 
    13   if not app.session.member:has_voting_right_for_unit_id(check_unit_id) then
 | 
| 
bsw@281
 | 
    14     return
 | 
| 
bsw@281
 | 
    15   end
 | 
| 
bsw@281
 | 
    16 
 | 
| 
bsw/jbe@19
 | 
    17   local image
 | 
| 
bsw/jbe@19
 | 
    18   local text
 | 
| 
bsw@248
 | 
    19   if scope == "unit" and delegation and delegation.unit_id then
 | 
| 
bsw/jbe@19
 | 
    20     image = { static = "icons/16/table_go.png" }
 | 
| 
bsw@264
 | 
    21     text = config.single_unit_id and _"Change global delegation" or _"Change unit delegation"
 | 
| 
bsw@248
 | 
    22   elseif scope == "unit" and not (delegation and delegation.unit_id) then
 | 
| 
bsw/jbe@19
 | 
    23     image = { static = "icons/16/table_go.png" }
 | 
| 
bsw@264
 | 
    24     text = config.single_unit_id and _"Set global delegation" or _"Set unit delegation"
 | 
| 
bsw/jbe@19
 | 
    25   elseif scope == "area" and delegation and delegation.area_id then
 | 
| 
bsw/jbe@19
 | 
    26     image = { static = "icons/16/table_go.png" }
 | 
| 
bsw/jbe@19
 | 
    27     text = _"Change area delegation"
 | 
| 
bsw/jbe@19
 | 
    28   elseif scope == "area" and not (delegation and delegation.area_id) then
 | 
| 
bsw/jbe@19
 | 
    29     image = { static = "icons/16/table_go.png" }
 | 
| 
bsw/jbe@19
 | 
    30     text = _"Set area delegation"
 | 
| 
bsw/jbe@19
 | 
    31   elseif scope == "issue" then
 | 
| 
bsw/jbe@19
 | 
    32     if delegation and delegation.issue_id then
 | 
| 
bsw/jbe@19
 | 
    33       image = { static = "icons/16/table_go.png" }
 | 
| 
bsw/jbe@19
 | 
    34       text = _"Change issue delegation"
 | 
| 
bsw/jbe@19
 | 
    35     elseif issue.state ~= "finished" and issue.state ~= "cancelled" then
 | 
| 
bsw/jbe@19
 | 
    36       image = { static = "icons/16/table_go.png" }
 | 
| 
bsw/jbe@19
 | 
    37       text = _"Set issue delegation"
 | 
| 
bsw/jbe@19
 | 
    38     end
 | 
| 
bsw/jbe@19
 | 
    39   end
 | 
| 
bsw/jbe@19
 | 
    40   ui.container{
 | 
| 
bsw/jbe@19
 | 
    41     attr = {
 | 
| 
bsw/jbe@19
 | 
    42       class = "change_delegation",
 | 
| 
bsw/jbe@19
 | 
    43     },
 | 
| 
bsw/jbe@19
 | 
    44     content = function()
 | 
| 
bsw/jbe@19
 | 
    45       ui.link{
 | 
| 
bsw/jbe@19
 | 
    46         image  = image,
 | 
| 
bsw/jbe@19
 | 
    47         text   = text,
 | 
| 
bsw/jbe@19
 | 
    48         module = "delegation",
 | 
| 
bsw/jbe@19
 | 
    49         view = "new",
 | 
| 
bsw/jbe@19
 | 
    50         params = {
 | 
| 
bsw/jbe@19
 | 
    51           issue_id = issue and issue.id or nil,
 | 
| 
poelzi@111
 | 
    52           initiative_id = initiative_id or nil,
 | 
| 
bsw@248
 | 
    53           area_id = area_id,
 | 
| 
bsw@248
 | 
    54           unit_id = unit_id
 | 
| 
bsw/jbe@19
 | 
    55         },
 | 
| 
bsw/jbe@19
 | 
    56       }
 | 
| 
bsw/jbe@19
 | 
    57       if delegation then
 | 
| 
bsw/jbe@19
 | 
    58         ui.link{
 | 
| 
bsw/jbe@19
 | 
    59           image  = { static = "icons/16/delete.png" },
 | 
| 
bsw/jbe@19
 | 
    60           text   = _"Revoke",
 | 
| 
bsw/jbe@19
 | 
    61           module = "delegation",
 | 
| 
bsw/jbe@19
 | 
    62           action = "update",
 | 
| 
bsw@248
 | 
    63           params = { issue_id = delegation.issue_id, area_id = delegation.area_id, unit_id = delegation.unit_id, delete = true },
 | 
| 
bsw/jbe@19
 | 
    64           routing = {
 | 
| 
bsw/jbe@19
 | 
    65             default = {
 | 
| 
bsw/jbe@19
 | 
    66               mode = "redirect",
 | 
| 
bsw/jbe@19
 | 
    67               module = request.get_module(),
 | 
| 
bsw/jbe@19
 | 
    68               view = request.get_view(),
 | 
| 
bsw/jbe@19
 | 
    69               id = param.get_id_cgi(),
 | 
| 
bsw/jbe@19
 | 
    70               params = param.get_all_cgi()
 | 
| 
bsw/jbe@19
 | 
    71             }
 | 
| 
bsw/jbe@19
 | 
    72           }
 | 
| 
bsw/jbe@19
 | 
    73         }
 | 
| 
bsw/jbe@19
 | 
    74       end
 | 
| 
bsw/jbe@19
 | 
    75     end
 | 
| 
bsw/jbe@19
 | 
    76   }
 | 
| 
bsw/jbe@19
 | 
    77 end
 | 
| 
bsw/jbe@5
 | 
    78 
 | 
| 
bsw/jbe@19
 | 
    79 local delegation
 | 
| 
bsw@248
 | 
    80 local unit_id
 | 
| 
bsw/jbe@19
 | 
    81 local area_id
 | 
| 
bsw/jbe@19
 | 
    82 local issue_id
 | 
| 
poelzi@111
 | 
    83 local initiative_id
 | 
| 
bsw/jbe@19
 | 
    84 
 | 
| 
bsw@248
 | 
    85 local scope = "unit"
 | 
| 
bsw@248
 | 
    86 
 | 
| 
bsw@248
 | 
    87 unit_id = param.get("unit_id", atom.integer)
 | 
| 
bsw/jbe@5
 | 
    88 
 | 
| 
bsw@273
 | 
    89 local inline = param.get("inline", atom.boolean)
 | 
| 
bsw@273
 | 
    90 
 | 
| 
bsw/jbe@19
 | 
    91 if param.get("initiative_id", atom.integer) then
 | 
| 
poelzi@111
 | 
    92   initiative_id = param.get("initiative_id", atom.integer)
 | 
| 
poelzi@111
 | 
    93   issue_id = Initiative:by_id(initiative_id).issue_id
 | 
| 
bsw/jbe@19
 | 
    94   scope = "issue"
 | 
| 
bsw/jbe@19
 | 
    95 end
 | 
| 
bsw/jbe@5
 | 
    96 
 | 
| 
bsw/jbe@19
 | 
    97 if param.get("issue_id", atom.integer) then
 | 
| 
bsw/jbe@19
 | 
    98   issue_id = param.get("issue_id", atom.integer)
 | 
| 
bsw/jbe@19
 | 
    99   scope = "issue"
 | 
| 
bsw/jbe@19
 | 
   100 end
 | 
| 
bsw/jbe@19
 | 
   101 
 | 
| 
bsw/jbe@19
 | 
   102 if param.get("area_id", atom.integer) then
 | 
| 
bsw/jbe@19
 | 
   103   area_id = param.get("area_id", atom.integer)
 | 
| 
bsw/jbe@19
 | 
   104   scope = "area"
 | 
| 
bsw/jbe@19
 | 
   105 end
 | 
| 
bsw/jbe@5
 | 
   106 
 | 
| 
bsw/jbe@5
 | 
   107 
 | 
| 
bsw/jbe@5
 | 
   108 
 | 
| 
bsw/jbe@19
 | 
   109 local delegation
 | 
| 
bsw/jbe@19
 | 
   110 local issue
 | 
| 
poelzi@111
 | 
   111 
 | 
| 
bsw/jbe@19
 | 
   112 if issue_id then
 | 
| 
bsw/jbe@19
 | 
   113   issue = Issue:by_id(issue_id)
 | 
| 
bsw@248
 | 
   114   delegation = Delegation:by_pk(app.session.member.id, nil, nil, issue_id)
 | 
| 
bsw/jbe@19
 | 
   115   if not delegation then
 | 
| 
bsw@248
 | 
   116     delegation = Delegation:by_pk(app.session.member.id, nil, issue.area_id)
 | 
| 
bsw/jbe@5
 | 
   117   end
 | 
| 
bsw@273
 | 
   118   if not delegation then
 | 
| 
bsw@273
 | 
   119     delegation = Delegation:by_pk(app.session.member.id, issue.area.unit_id)
 | 
| 
bsw@273
 | 
   120   end
 | 
| 
bsw/jbe@19
 | 
   121 elseif area_id then
 | 
| 
bsw@248
 | 
   122   delegation = Delegation:by_pk(app.session.member.id, nil, area_id)
 | 
| 
bsw@273
 | 
   123   if not delegation then
 | 
| 
bsw@273
 | 
   124     local area = Area:by_id(area_id)
 | 
| 
bsw@273
 | 
   125     delegation = Delegation:by_pk(app.session.member.id, area.unit_id)
 | 
| 
bsw@273
 | 
   126   end
 | 
| 
bsw/jbe@19
 | 
   127 end
 | 
| 
bsw/jbe@5
 | 
   128 
 | 
| 
bsw/jbe@19
 | 
   129 if not delegation then
 | 
| 
bsw@248
 | 
   130   delegation = Delegation:by_pk(app.session.member.id, unit_id)
 | 
| 
bsw/jbe@19
 | 
   131 end
 | 
| 
bsw/jbe@19
 | 
   132 
 | 
| 
bsw@273
 | 
   133 local slot_name = "actions"
 | 
| 
bsw/jbe@19
 | 
   134 
 | 
| 
bsw@273
 | 
   135 if inline then
 | 
| 
bsw@273
 | 
   136   slot_name = "default"
 | 
| 
bsw@273
 | 
   137 end
 | 
| 
bsw@273
 | 
   138 
 | 
| 
bsw@273
 | 
   139 slot.select(slot_name, function()
 | 
| 
bsw/jbe@19
 | 
   140 
 | 
| 
bsw/jbe@5
 | 
   141   if delegation then
 | 
| 
bsw/jbe@5
 | 
   142     ui.container{
 | 
| 
bsw/jbe@5
 | 
   143       attr = { class = "delegation vote_info"},
 | 
| 
bsw/jbe@5
 | 
   144       content = function()
 | 
| 
bsw@2
 | 
   145         ui.container{
 | 
| 
bsw@2
 | 
   146           attr = {
 | 
| 
bsw/jbe@4
 | 
   147             title = _"Click for details",
 | 
| 
bsw/jbe@4
 | 
   148             class = "head head_active",
 | 
| 
bsw@2
 | 
   149             style = "cursor: pointer;",
 | 
| 
bsw/jbe@4
 | 
   150             onclick = "document.getElementById('delegation_content').style.display = 'block';"
 | 
| 
bsw@2
 | 
   151           },
 | 
| 
bsw/jbe@4
 | 
   152           content = function()
 | 
| 
bsw@180
 | 
   153             if delegation.trustee_id then
 | 
| 
bsw@180
 | 
   154               ui.image{
 | 
| 
bsw@180
 | 
   155                 static = "icons/16/table_go.png"
 | 
| 
bsw@180
 | 
   156               }
 | 
| 
mail@251
 | 
   157               local member = Member:new_selector()
 | 
| 
mail@251
 | 
   158                 :reset_fields()
 | 
| 
mail@251
 | 
   159                 :add_field("name", "delegation_name")
 | 
| 
mail@251
 | 
   160                 :add_where({ "id = ?", delegation.trustee_id })
 | 
| 
mail@251
 | 
   161                 :single_object_mode()
 | 
| 
mail@251
 | 
   162                 :exec()
 | 
| 
bsw@180
 | 
   163               if delegation.issue_id then
 | 
| 
mail@251
 | 
   164                 slot.put( _("Issue delegated to '#{name}'", { name = member.delegation_name }) )
 | 
| 
bsw@180
 | 
   165               elseif delegation.area_id then
 | 
| 
mail@251
 | 
   166                 slot.put( _("Area delegated to '#{name}'", { name = member.delegation_name }) )
 | 
| 
bsw@180
 | 
   167               else
 | 
| 
bsw@264
 | 
   168                 if config.single_unit_id then
 | 
| 
bsw@264
 | 
   169                   slot.put( _("Global delegation set to '#{name}'", { name = member.delegation_name }) )
 | 
| 
bsw@264
 | 
   170                 else
 | 
| 
bsw@264
 | 
   171                   slot.put( _("Unit delegated to '#{name}'", { name = member.delegation_name }) )
 | 
| 
bsw@264
 | 
   172                 end
 | 
| 
bsw@180
 | 
   173               end
 | 
| 
mail@251
 | 
   174 
 | 
| 
bsw/jbe@4
 | 
   175             else
 | 
| 
bsw@180
 | 
   176               ui.image{
 | 
| 
bsw@180
 | 
   177                 static = "icons/16/table_go_crossed.png"
 | 
| 
bsw@180
 | 
   178               }
 | 
| 
bsw@180
 | 
   179               if delegation.issue_id then
 | 
| 
bsw@180
 | 
   180                 slot.put(_"Delegation turned off for issue")
 | 
| 
bsw@180
 | 
   181               elseif delegation.area_id then
 | 
| 
bsw@180
 | 
   182                 slot.put(_"Delegation turned off for area")
 | 
| 
bsw@180
 | 
   183               end
 | 
| 
bsw/jbe@4
 | 
   184             end
 | 
| 
bsw/jbe@4
 | 
   185             ui.image{
 | 
| 
bsw/jbe@4
 | 
   186               static = "icons/16/dropdown.png"
 | 
| 
bsw/jbe@4
 | 
   187             }
 | 
| 
bsw/jbe@4
 | 
   188           end
 | 
| 
bsw@2
 | 
   189         }
 | 
| 
bsw/jbe@4
 | 
   190         ui.container{
 | 
| 
bsw/jbe@4
 | 
   191           attr = { class = "content", id = "delegation_content" },
 | 
| 
bsw/jbe@4
 | 
   192           content = function()
 | 
| 
bsw@2
 | 
   193             ui.container{
 | 
| 
bsw/jbe@4
 | 
   194               attr = {
 | 
| 
bsw/jbe@4
 | 
   195                 class = "close",
 | 
| 
bsw/jbe@4
 | 
   196                 style = "cursor: pointer;",
 | 
| 
bsw/jbe@4
 | 
   197                 onclick = "document.getElementById('delegation_content').style.display = 'none';"
 | 
| 
bsw/jbe@4
 | 
   198               },
 | 
| 
bsw@2
 | 
   199               content = function()
 | 
| 
bsw/jbe@4
 | 
   200                 ui.image{ static = "icons/16/cross.png" }
 | 
| 
bsw/jbe@4
 | 
   201               end
 | 
| 
bsw/jbe@4
 | 
   202             }
 | 
| 
bsw/jbe@4
 | 
   203     
 | 
| 
bsw/jbe@4
 | 
   204             local delegation_chain = Member:new_selector()
 | 
| 
bsw/jbe@4
 | 
   205               :add_field("delegation_chain.*")
 | 
| 
bsw@246
 | 
   206               :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
 | 
   207               :add_order_by("index")
 | 
| 
bsw/jbe@4
 | 
   208               :exec()
 | 
| 
bsw/jbe@4
 | 
   209     
 | 
| 
bsw/jbe@19
 | 
   210             if not issue or (issue.state ~= "finished" and issue.state ~= "cancelled") then
 | 
| 
bsw@248
 | 
   211               change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id)
 | 
| 
bsw@277
 | 
   212               slot.put("<br style='clear: left'/>")
 | 
| 
bsw/jbe@19
 | 
   213             end
 | 
| 
bsw/jbe@19
 | 
   214 
 | 
| 
bsw/jbe@4
 | 
   215             for i, record in ipairs(delegation_chain) do
 | 
| 
bsw/jbe@4
 | 
   216               local style
 | 
| 
bsw/jbe@4
 | 
   217               local overridden = record.overridden
 | 
| 
bsw/jbe@4
 | 
   218               if record.scope_in then
 | 
| 
bsw@2
 | 
   219                 ui.container{
 | 
| 
bsw/jbe@4
 | 
   220                   attr = { class = "delegation_info" },
 | 
| 
bsw@2
 | 
   221                   content = function()
 | 
| 
bsw/jbe@4
 | 
   222                     if not overridden then
 | 
| 
bsw/jbe@4
 | 
   223                       ui.image{
 | 
| 
bsw/jbe@4
 | 
   224                         attr = { class = "delegation_arrow" },
 | 
| 
bsw/jbe@4
 | 
   225                         static = "delegation_arrow_vertical.jpg"
 | 
| 
bsw/jbe@4
 | 
   226                       }
 | 
| 
bsw/jbe@4
 | 
   227                     else
 | 
| 
bsw/jbe@4
 | 
   228                       ui.image{
 | 
| 
bsw/jbe@4
 | 
   229                         attr = { class = "delegation_arrow delegation_arrow_overridden" },
 | 
| 
bsw/jbe@4
 | 
   230                         static = "delegation_arrow_vertical.jpg"
 | 
| 
bsw/jbe@4
 | 
   231                       }
 | 
| 
bsw/jbe@4
 | 
   232                     end
 | 
| 
bsw/jbe@4
 | 
   233                     ui.container{
 | 
| 
bsw/jbe@4
 | 
   234                       attr = { class = "delegation_scope" .. (overridden and " delegation_scope_overridden" or "") },
 | 
| 
bsw/jbe@4
 | 
   235                       content = function()
 | 
| 
bsw@248
 | 
   236                         if record.scope_in == "unit" then
 | 
| 
bsw@264
 | 
   237                           slot.put(config.single_object_mode and _"Global delegation" or _"Unit delegation")
 | 
| 
bsw/jbe@4
 | 
   238                         elseif record.scope_in == "area" then
 | 
| 
bsw/jbe@4
 | 
   239                           slot.put(_"Area delegation")
 | 
| 
bsw/jbe@4
 | 
   240                         elseif record.scope_in == "issue" then
 | 
| 
bsw/jbe@4
 | 
   241                           slot.put(_"Issue delegation")
 | 
| 
bsw/jbe@4
 | 
   242                         end
 | 
| 
bsw/jbe@4
 | 
   243                       end
 | 
| 
bsw/jbe@4
 | 
   244                     }
 | 
| 
bsw@2
 | 
   245                   end
 | 
| 
bsw@2
 | 
   246                 }
 | 
| 
bsw/jbe@4
 | 
   247               end
 | 
| 
bsw/jbe@4
 | 
   248               ui.container{
 | 
| 
bsw/jbe@4
 | 
   249                 attr = { class = overridden and "delegation_overridden" or "" },
 | 
| 
bsw/jbe@4
 | 
   250                 content = function()
 | 
| 
bsw/jbe@4
 | 
   251                   execute.view{
 | 
| 
bsw/jbe@4
 | 
   252                     module = "member",
 | 
| 
bsw/jbe@4
 | 
   253                     view = "_show_thumb",
 | 
| 
bsw/jbe@4
 | 
   254                     params = { member = record }
 | 
| 
bsw@2
 | 
   255                   }
 | 
| 
bsw@2
 | 
   256                 end
 | 
| 
bsw/jbe@4
 | 
   257               }
 | 
| 
bsw/jbe@4
 | 
   258               if record.participation and not record.overridden then
 | 
| 
bsw/jbe@4
 | 
   259                 ui.container{
 | 
| 
bsw/jbe@4
 | 
   260                   attr = { class = "delegation_participation" },
 | 
| 
bsw/jbe@4
 | 
   261                   content = function()
 | 
| 
bsw/jbe@19
 | 
   262                     slot.put(_"This member is participating, the rest of delegation chain is suspended while discussing")
 | 
| 
bsw/jbe@4
 | 
   263                   end
 | 
| 
bsw/jbe@4
 | 
   264                 }
 | 
| 
bsw@2
 | 
   265               end
 | 
| 
bsw/jbe@4
 | 
   266               slot.put("<br style='clear: left'/>")
 | 
| 
bsw/jbe@4
 | 
   267             end
 | 
| 
bsw/jbe@0
 | 
   268           end
 | 
| 
bsw/jbe@4
 | 
   269         }
 | 
| 
bsw/jbe@0
 | 
   270       end
 | 
| 
bsw/jbe@5
 | 
   271     }
 | 
| 
bsw/jbe@19
 | 
   272   else
 | 
| 
bsw@248
 | 
   273     change_delegation(scope, unit_id, area_id, issue, nil, initiative_id)
 | 
| 
bsw/jbe@5
 | 
   274   end
 | 
| 
bsw/jbe@0
 | 
   275 end)
 |