| rev | 
   line source | 
| 
bsw/jbe@0
 | 
     1 Delegation = mondelefant.new_class()
 | 
| 
bsw/jbe@0
 | 
     2 Delegation.table = 'delegation'
 | 
| 
bsw/jbe@0
 | 
     3 
 | 
| 
bsw/jbe@0
 | 
     4 Delegation:add_reference{
 | 
| 
bsw/jbe@0
 | 
     5   mode          = 'm1',
 | 
| 
bsw/jbe@0
 | 
     6   to            = "Member",
 | 
| 
bsw/jbe@0
 | 
     7   this_key      = 'truster_id',
 | 
| 
bsw/jbe@0
 | 
     8   that_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
     9   ref           = 'truster',
 | 
| 
bsw/jbe@0
 | 
    10 }
 | 
| 
bsw/jbe@0
 | 
    11 
 | 
| 
bsw/jbe@0
 | 
    12 Delegation:add_reference{
 | 
| 
bsw/jbe@0
 | 
    13   mode          = 'm1',
 | 
| 
bsw/jbe@0
 | 
    14   to            = "Member",
 | 
| 
bsw/jbe@0
 | 
    15   this_key      = 'trustee_id',
 | 
| 
bsw/jbe@0
 | 
    16   that_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    17   ref           = 'trustee',
 | 
| 
bsw/jbe@0
 | 
    18 }
 | 
| 
bsw/jbe@0
 | 
    19 
 | 
| 
bsw/jbe@0
 | 
    20 Delegation:add_reference{
 | 
| 
bsw/jbe@0
 | 
    21   mode          = 'm1',
 | 
| 
bsw@599
 | 
    22   to            = "Unit",
 | 
| 
bsw@599
 | 
    23   this_key      = 'unit_id',
 | 
| 
bsw@599
 | 
    24   that_key      = 'id',
 | 
| 
bsw@599
 | 
    25   ref           = 'unit',
 | 
| 
bsw@599
 | 
    26 }
 | 
| 
bsw@599
 | 
    27 
 | 
| 
bsw@599
 | 
    28 Delegation:add_reference{
 | 
| 
bsw@599
 | 
    29   mode          = 'm1',
 | 
| 
bsw/jbe@0
 | 
    30   to            = "Area",
 | 
| 
bsw/jbe@0
 | 
    31   this_key      = 'area_id',
 | 
| 
bsw/jbe@0
 | 
    32   that_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    33   ref           = 'area',
 | 
| 
bsw/jbe@0
 | 
    34 }
 | 
| 
bsw/jbe@0
 | 
    35 
 | 
| 
bsw/jbe@0
 | 
    36 Delegation:add_reference{
 | 
| 
bsw/jbe@0
 | 
    37   mode          = 'm1',
 | 
| 
bsw/jbe@0
 | 
    38   to            = "Issue",
 | 
| 
bsw/jbe@0
 | 
    39   this_key      = 'issue_id',
 | 
| 
bsw/jbe@0
 | 
    40   that_key      = 'id',
 | 
| 
bsw/jbe@0
 | 
    41   ref           = 'issue',
 | 
| 
bsw/jbe@0
 | 
    42 }
 | 
| 
bsw/jbe@0
 | 
    43 
 | 
| 
bsw@248
 | 
    44 function Delegation:by_pk(truster_id, unit_id, area_id, issue_id)
 | 
| 
bsw/jbe@0
 | 
    45   local selector = self:new_selector():optional_object_mode()
 | 
| 
bsw/jbe@0
 | 
    46   selector:add_where{ "truster_id = ?", truster_id }
 | 
| 
bsw@248
 | 
    47   if unit_id then
 | 
| 
bsw@248
 | 
    48     selector:add_where{ "unit_id = ?",    unit_id }
 | 
| 
bsw@248
 | 
    49   else
 | 
| 
bsw@248
 | 
    50     selector:add_where("unit_id ISNULL")
 | 
| 
bsw@248
 | 
    51   end
 | 
| 
bsw/jbe@0
 | 
    52   if area_id then
 | 
| 
bsw/jbe@0
 | 
    53     selector:add_where{ "area_id = ?",    area_id }
 | 
| 
bsw/jbe@0
 | 
    54   else
 | 
| 
bsw/jbe@0
 | 
    55     selector:add_where("area_id ISNULL")
 | 
| 
bsw/jbe@0
 | 
    56   end
 | 
| 
bsw/jbe@0
 | 
    57   if issue_id then
 | 
| 
bsw/jbe@0
 | 
    58     selector:add_where{ "issue_id = ? ",  issue_id }
 | 
| 
bsw/jbe@0
 | 
    59   else
 | 
| 
bsw/jbe@0
 | 
    60     selector:add_where("issue_id ISNULL ")
 | 
| 
bsw/jbe@0
 | 
    61   end
 | 
| 
bsw/jbe@0
 | 
    62   return selector:exec()
 | 
| 
bsw@248
 | 
    63 end
 | 
| 
bsw@558
 | 
    64 
 | 
| 
bsw@558
 | 
    65 function Delegation:selector_for_broken(member_id)
 | 
| 
bsw@558
 | 
    66   return Delegation:new_selector()
 | 
| 
bsw@605
 | 
    67     :left_join("issue", nil, "issue.id = delegation.issue_id")
 | 
| 
bsw@605
 | 
    68     :add_where("issue.id ISNULL OR issue.closed ISNULL")
 | 
| 
bsw@558
 | 
    69     :join("member", nil, "delegation.trustee_id = member.id")
 | 
| 
bsw@558
 | 
    70     :add_where{"delegation.truster_id = ?", member_id}
 | 
| 
bsw@558
 | 
    71     :add_where{"member.active = 'f' OR (member.last_activity IS NULL OR age(member.last_activity) > ?::interval)", config.delegation_warning_time }
 | 
| 
bsw@558
 | 
    72 end
 | 
| 
bsw@988
 | 
    73 
 | 
| 
bsw@988
 | 
    74 function Delegation:delegations_to_check_for_member_id(member_id, for_update)
 | 
| 
bsw@988
 | 
    75 
 | 
| 
bsw@988
 | 
    76   Member:new_selector():add_where({ "id = ?", member_id }):for_update():exec()
 | 
| 
bsw@988
 | 
    77   
 | 
| 
bsw@988
 | 
    78   local selector =  Delegation:new_selector()
 | 
| 
bsw@988
 | 
    79     :add_field("member.name", "member_name")
 | 
| 
bsw@988
 | 
    80     :add_field("unit.name", "unit_name")
 | 
| 
bsw@988
 | 
    81     :add_field("area.name", "area_name")
 | 
| 
bsw@988
 | 
    82     :left_join("area", nil, "area.active AND area.id = delegation.area_id")
 | 
| 
bsw@988
 | 
    83     :join("unit", nil, "unit.active AND (unit.id = delegation.unit_id OR unit.id = area.unit_id)")
 | 
| 
bsw@988
 | 
    84     :left_join("member", nil, "member.id = delegation.trustee_id")
 | 
| 
bsw@988
 | 
    85     :add_where({ "delegation.truster_id = ?", member_id })
 | 
| 
bsw@988
 | 
    86     :add_order_by("unit.name, area.name NULLS FIRST")
 | 
| 
bsw@988
 | 
    87     
 | 
| 
bsw@988
 | 
    88   if for_update then
 | 
| 
bsw@988
 | 
    89     selector:for_update_of("delegation")
 | 
| 
bsw@988
 | 
    90   end
 | 
| 
bsw@988
 | 
    91     
 | 
| 
bsw@988
 | 
    92   return selector:exec()
 | 
| 
bsw@988
 | 
    93   
 | 
| 
bsw@988
 | 
    94 end  |