| rev | 
   line source | 
| 
bsw/jbe@1309
 | 
     1 if not app.session.member then
 | 
| 
bsw/jbe@1309
 | 
     2   return
 | 
| 
bsw/jbe@1309
 | 
     3 end
 | 
| 
bsw/jbe@1309
 | 
     4 
 | 
| 
bsw/jbe@1309
 | 
     5 local cancel = param.get("cancel") and true or false
 | 
| 
bsw/jbe@1309
 | 
     6 if cancel then return true end
 | 
| 
bsw/jbe@1309
 | 
     7 
 | 
| 
bsw/jbe@1309
 | 
     8 local issue = Issue:new_selector():add_where{ "id = ?", param.get("issue_id", atom.integer) }:for_share():single_object_mode():exec()
 | 
| 
bsw/jbe@1309
 | 
     9 
 | 
| 
bsw/jbe@1309
 | 
    10 
 | 
| 
bsw/jbe@1309
 | 
    11 if not app.session.member:has_voting_right_for_unit_id(issue.area.unit_id) then
 | 
| 
bsw/jbe@1309
 | 
    12   return execute.view { module = "index", view = "403" }
 | 
| 
bsw/jbe@1309
 | 
    13 end
 | 
| 
bsw/jbe@1309
 | 
    14 
 | 
| 
bsw/jbe@1309
 | 
    15 if issue.state ~= "voting" and not issue.closed then
 | 
| 
bsw/jbe@1309
 | 
    16   slot.put_into("error", _"Voting has not started yet.")
 | 
| 
bsw/jbe@1309
 | 
    17   return false
 | 
| 
bsw/jbe@1309
 | 
    18 end
 | 
| 
bsw/jbe@1309
 | 
    19 
 | 
| 
bsw/jbe@1309
 | 
    20 if issue.phase_finished or issue.closed and not update_comment then
 | 
| 
bsw/jbe@1309
 | 
    21   slot.put_into("error", _"This issue is already closed.")
 | 
| 
bsw/jbe@1309
 | 
    22   return false
 | 
| 
bsw/jbe@1309
 | 
    23 end
 | 
| 
bsw/jbe@1309
 | 
    24 
 | 
| 
bsw/jbe@1309
 | 
    25 local direct_voter = DirectVoter:by_pk(issue.id, app.session.member_id)
 | 
| 
bsw/jbe@1309
 | 
    26 
 | 
| 
bsw/jbe@1309
 | 
    27 if param.get("discard") then
 | 
| 
bsw/jbe@1309
 | 
    28   if direct_voter then
 | 
| 
bsw/jbe@1309
 | 
    29     direct_voter:destroy()
 | 
| 
bsw/jbe@1309
 | 
    30   end
 | 
| 
bsw/jbe@1309
 | 
    31   slot.put_into("notice", _"Your vote has been discarded. Delegation rules apply if set.")
 | 
| 
bsw/jbe@1309
 | 
    32   return
 | 
| 
bsw/jbe@1309
 | 
    33 end
 | 
| 
bsw/jbe@1309
 | 
    34 
 | 
| 
bsw/jbe@1309
 | 
    35 local initiatives = issue:get_reference_selector("initiatives")
 | 
| 
bsw/jbe@1309
 | 
    36   :add_where("initiative.admitted")
 | 
| 
bsw/jbe@1309
 | 
    37   :add_order_by("initiative.satisfied_supporter_count DESC")
 | 
| 
bsw/jbe@1309
 | 
    38   :exec()
 | 
| 
bsw/jbe@1309
 | 
    39 
 | 
| 
bsw/jbe@1309
 | 
    40 local vote_for_initiative_id = tonumber(param.get("vote_for_initiative_id"))
 | 
| 
bsw/jbe@1309
 | 
    41   
 | 
| 
bsw/jbe@1309
 | 
    42 local voted = 0
 | 
| 
bsw/jbe@1309
 | 
    43 
 | 
| 
bsw/jbe@1309
 | 
    44 for i, initiative in ipairs(initiatives) do
 | 
| 
bsw/jbe@1309
 | 
    45   if initiative.id == vote_for_initiative_id then
 | 
| 
bsw/jbe@1309
 | 
    46     voted = voted + 1
 | 
| 
bsw/jbe@1309
 | 
    47   end
 | 
| 
bsw/jbe@1309
 | 
    48 end
 | 
| 
bsw/jbe@1309
 | 
    49 
 | 
| 
bsw/jbe@1309
 | 
    50 if voted ~= 1 then
 | 
| 
bsw/jbe@1309
 | 
    51   slot.put_into("error", _"Please choose one project to vote for.")
 | 
| 
bsw/jbe@1309
 | 
    52   return false
 | 
| 
bsw/jbe@1309
 | 
    53 end
 | 
| 
bsw/jbe@1309
 | 
    54 
 | 
| 
bsw/jbe@1309
 | 
    55 if not direct_voter then
 | 
| 
bsw/jbe@1309
 | 
    56   direct_voter = DirectVoter:new()
 | 
| 
bsw/jbe@1309
 | 
    57   direct_voter.issue_id = issue.id
 | 
| 
bsw/jbe@1309
 | 
    58   direct_voter.member_id = app.session.member_id
 | 
| 
bsw/jbe@1309
 | 
    59   direct_voter:save()
 | 
| 
bsw/jbe@1309
 | 
    60 else
 | 
| 
bsw/jbe@1309
 | 
    61   local votes = Vote:new_selector()
 | 
| 
bsw/jbe@1309
 | 
    62     :add_where{ "vote.issue_id = ?", issue.id } 
 | 
| 
bsw/jbe@1309
 | 
    63     :add_where{ "vote.member_id = ?", app.session.member_id }
 | 
| 
bsw/jbe@1309
 | 
    64     :exec()
 | 
| 
bsw/jbe@1309
 | 
    65   for i, vote in ipairs(votes) do
 | 
| 
bsw/jbe@1309
 | 
    66     vote:destroy()
 | 
| 
bsw/jbe@1309
 | 
    67   end
 | 
| 
bsw/jbe@1309
 | 
    68 end
 | 
| 
bsw/jbe@1309
 | 
    69 
 | 
| 
bsw/jbe@1309
 | 
    70 for i, initiative in ipairs(initiatives) do
 | 
| 
bsw/jbe@1309
 | 
    71   local vote = Vote:new()
 | 
| 
bsw/jbe@1309
 | 
    72   vote.issue_id = issue.id
 | 
| 
bsw/jbe@1309
 | 
    73   vote.initiative_id = initiative.id
 | 
| 
bsw/jbe@1309
 | 
    74   vote.member_id = app.session.member_id
 | 
| 
bsw/jbe@1309
 | 
    75   if initiative.id == vote_for_initiative_id then
 | 
| 
bsw/jbe@1309
 | 
    76     vote.grade = 1
 | 
| 
bsw/jbe@1309
 | 
    77   else
 | 
| 
bsw/jbe@1309
 | 
    78     vote.grade = 0
 | 
| 
bsw/jbe@1309
 | 
    79   end
 | 
| 
bsw/jbe@1309
 | 
    80   vote:save()
 | 
| 
bsw/jbe@1309
 | 
    81 end
 |