| 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 |