| rev | 
   line source | 
| 
bsw/jbe@0
 | 
     1 Opinion = mondelefant.new_class()
 | 
| 
bsw/jbe@0
 | 
     2 Opinion.table = 'opinion'
 | 
| 
bsw/jbe@0
 | 
     3 Opinion.primary_key = { "member_id", "suggestion_id" } 
 | 
| 
bsw/jbe@0
 | 
     4 
 | 
| 
bsw/jbe@0
 | 
     5 Opinion:add_reference{
 | 
| 
bsw/jbe@0
 | 
     6   mode          = 'm1',
 | 
| 
bsw/jbe@0
 | 
     7   to            = "Initiative",
 | 
| 
bsw/jbe@0
 | 
     8   this_key      = 'initiative_id',
 | 
| 
bsw/jbe@0
 | 
     9   that_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    10   ref           = 'initiative',
 | 
| 
bsw/jbe@0
 | 
    11 }
 | 
| 
bsw/jbe@0
 | 
    12 
 | 
| 
bsw/jbe@0
 | 
    13 Opinion:add_reference{
 | 
| 
bsw/jbe@0
 | 
    14   mode          = 'm1',
 | 
| 
bsw/jbe@0
 | 
    15   to            = "Suggestion",
 | 
| 
bsw/jbe@0
 | 
    16   this_key      = 'suggestion_id',
 | 
| 
bsw/jbe@0
 | 
    17   that_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    18   ref           = 'suggestion',
 | 
| 
bsw/jbe@0
 | 
    19 }
 | 
| 
bsw/jbe@0
 | 
    20 
 | 
| 
bsw/jbe@0
 | 
    21 Opinion:add_reference{
 | 
| 
bsw/jbe@0
 | 
    22   mode          = 'm1',
 | 
| 
bsw/jbe@0
 | 
    23   to            = "Member",
 | 
| 
bsw/jbe@0
 | 
    24   this_key      = 'member_id',
 | 
| 
bsw/jbe@0
 | 
    25   that_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    26   ref           = 'member',
 | 
| 
bsw/jbe@0
 | 
    27 }
 | 
| 
bsw/jbe@0
 | 
    28 
 | 
| 
bsw/jbe@0
 | 
    29 function Opinion:by_pk(member_id, suggestion_id)
 | 
| 
bsw/jbe@0
 | 
    30   return self:new_selector()
 | 
| 
bsw/jbe@0
 | 
    31     :add_where{ "member_id = ?",     member_id }
 | 
| 
bsw/jbe@0
 | 
    32     :add_where{ "suggestion_id = ?", suggestion_id }
 | 
| 
bsw/jbe@0
 | 
    33     :optional_object_mode()
 | 
| 
bsw/jbe@0
 | 
    34     :exec()
 | 
| 
bsw/jbe@0
 | 
    35 end
 | 
| 
bsw@1649
 | 
    36 
 | 
| 
bsw@1649
 | 
    37 
 | 
| 
bsw@1649
 | 
    38 function Opinion:update(suggestion_id, member_id, degree, fulfilled)
 | 
| 
bsw@1649
 | 
    39 
 | 
| 
bsw@1649
 | 
    40   local opinion = Opinion:by_pk(member_id, suggestion_id)
 | 
| 
bsw@1649
 | 
    41   local suggestion = Suggestion:by_id(suggestion_id)
 | 
| 
bsw@1649
 | 
    42 
 | 
| 
bsw@1649
 | 
    43   if not suggestion then
 | 
| 
bsw@1649
 | 
    44     slot.put_into("error", _"This suggestion has been meanwhile deleted")
 | 
| 
bsw@1649
 | 
    45     return false
 | 
| 
bsw@1649
 | 
    46   end
 | 
| 
bsw@1649
 | 
    47 
 | 
| 
bsw@1649
 | 
    48   -- TODO important m1 selectors returning result _SET_!
 | 
| 
bsw@1649
 | 
    49   local issue = suggestion.initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
 | 
| 
bsw@1649
 | 
    50 
 | 
| 
bsw@1649
 | 
    51   if issue.closed then
 | 
| 
bsw@1649
 | 
    52     slot.put_into("error", _"This issue is already closed.")
 | 
| 
bsw@1649
 | 
    53     return false
 | 
| 
bsw@1649
 | 
    54   elseif issue.fully_frozen then 
 | 
| 
bsw@1649
 | 
    55     slot.put_into("error", _"Voting for this issue has already begun.")
 | 
| 
bsw@1649
 | 
    56     return false
 | 
| 
bsw@1649
 | 
    57   elseif 
 | 
| 
bsw@1649
 | 
    58     (issue.half_frozen and issue.phase_finished) or
 | 
| 
bsw@1649
 | 
    59     (not issue.accepted and issue.phase_finished) 
 | 
| 
bsw@1649
 | 
    60   then
 | 
| 
bsw@1649
 | 
    61     slot.put_into("error", _"Current phase is already closed.")
 | 
| 
bsw@1649
 | 
    62     return false
 | 
| 
bsw@1649
 | 
    63   end
 | 
| 
bsw@1649
 | 
    64 
 | 
| 
bsw@1649
 | 
    65   if degree == 0 then
 | 
| 
bsw@1649
 | 
    66     if opinion then
 | 
| 
bsw@1649
 | 
    67       opinion:destroy()
 | 
| 
bsw@1649
 | 
    68     end
 | 
| 
bsw@1649
 | 
    69     return true
 | 
| 
bsw@1649
 | 
    70   end
 | 
| 
bsw@1649
 | 
    71 
 | 
| 
bsw@1649
 | 
    72   if degree ~= 0 and not app.session.member:has_voting_right_for_unit_id(suggestion.initiative.issue.area.unit_id) then
 | 
| 
bsw@1649
 | 
    73     return execute.view { module = "index", view = "403" }
 | 
| 
bsw@1649
 | 
    74   end
 | 
| 
bsw@1649
 | 
    75 
 | 
| 
bsw@1649
 | 
    76   if not opinion then
 | 
| 
bsw@1649
 | 
    77     opinion = Opinion:new()
 | 
| 
bsw@1649
 | 
    78     opinion.member_id     = member_id
 | 
| 
bsw@1649
 | 
    79     opinion.suggestion_id = suggestion_id
 | 
| 
bsw@1649
 | 
    80     opinion.fulfilled     = false
 | 
| 
bsw@1649
 | 
    81   end
 | 
| 
bsw@1649
 | 
    82 
 | 
| 
bsw@1649
 | 
    83 
 | 
| 
bsw@1649
 | 
    84   if degree ~= nil then
 | 
| 
bsw@1649
 | 
    85     opinion.degree = degree
 | 
| 
bsw@1649
 | 
    86   end
 | 
| 
bsw@1649
 | 
    87 
 | 
| 
bsw@1649
 | 
    88   if fulfilled ~= nil then
 | 
| 
bsw@1649
 | 
    89     opinion.fulfilled = fulfilled
 | 
| 
bsw@1649
 | 
    90   end
 | 
| 
bsw@1649
 | 
    91 
 | 
| 
bsw@1649
 | 
    92   opinion:save()
 | 
| 
bsw@1649
 | 
    93   return true
 | 
| 
bsw@1649
 | 
    94 
 | 
| 
bsw@1649
 | 
    95 end
 |