rev |
line source |
bsw/jbe@0
|
1 Area = mondelefant.new_class()
|
bsw/jbe@0
|
2 Area.table = 'area'
|
bsw/jbe@0
|
3
|
bsw/jbe@0
|
4 Area:add_reference{
|
bsw@262
|
5 mode = 'm1',
|
bsw@262
|
6 to = "Unit",
|
bsw@262
|
7 this_key = 'unit_id',
|
bsw@262
|
8 that_key = 'id',
|
bsw@262
|
9 ref = 'unit',
|
bsw@262
|
10 }
|
bsw@262
|
11
|
bsw@262
|
12 Area:add_reference{
|
bsw/jbe@0
|
13 mode = '1m',
|
bsw/jbe@0
|
14 to = "Issue",
|
bsw/jbe@0
|
15 this_key = 'id',
|
bsw/jbe@0
|
16 that_key = 'area_id',
|
bsw/jbe@0
|
17 ref = 'issues',
|
bsw/jbe@0
|
18 back_ref = 'area'
|
bsw/jbe@0
|
19 }
|
bsw/jbe@0
|
20
|
bsw/jbe@0
|
21 Area:add_reference{
|
bsw/jbe@0
|
22 mode = '1m',
|
bsw/jbe@0
|
23 to = "Membership",
|
bsw/jbe@0
|
24 this_key = 'id',
|
bsw/jbe@0
|
25 that_key = 'area_id',
|
bsw/jbe@0
|
26 ref = 'memberships',
|
bsw/jbe@0
|
27 back_ref = 'area'
|
bsw/jbe@0
|
28 }
|
bsw/jbe@0
|
29
|
bsw/jbe@0
|
30 Area:add_reference{
|
bsw@2
|
31 mode = '1m',
|
bsw@2
|
32 to = "Delegation",
|
bsw@2
|
33 this_key = 'id',
|
bsw@2
|
34 that_key = 'area_id',
|
bsw@2
|
35 ref = 'delegations',
|
bsw@2
|
36 back_ref = 'area'
|
bsw@2
|
37 }
|
bsw@2
|
38
|
bsw@2
|
39 Area:add_reference{
|
bsw/jbe@0
|
40 mode = 'mm',
|
bsw/jbe@0
|
41 to = "Member",
|
bsw/jbe@0
|
42 this_key = 'id',
|
bsw/jbe@0
|
43 that_key = 'id',
|
bsw/jbe@0
|
44 connected_by_table = 'membership',
|
bsw/jbe@0
|
45 connected_by_this_key = 'area_id',
|
bsw/jbe@0
|
46 connected_by_that_key = 'member_id',
|
bsw/jbe@0
|
47 ref = 'members'
|
bsw/jbe@0
|
48 }
|
bsw@7
|
49
|
bsw@7
|
50 Area:add_reference{
|
bsw@7
|
51 mode = 'mm',
|
bsw@7
|
52 to = "Policy",
|
bsw@7
|
53 this_key = 'id',
|
bsw@7
|
54 that_key = 'id',
|
bsw@7
|
55 connected_by_table = 'allowed_policy',
|
bsw@7
|
56 connected_by_this_key = 'area_id',
|
bsw@7
|
57 connected_by_that_key = 'policy_id',
|
bsw@7
|
58 ref = 'allowed_policies'
|
bsw@7
|
59 }
|
bsw@7
|
60
|
bsw@525
|
61 Area:add_reference{
|
bsw@525
|
62 mode = "11",
|
bsw@525
|
63 to = mondelefant.class_prototype,
|
bsw@525
|
64 this_key = "id",
|
bsw@525
|
65 that_key = "area_id",
|
bsw@525
|
66 ref = "delegation_info",
|
bsw@525
|
67 back_ref = "area",
|
bsw@525
|
68 selector_generator = function(list, options)
|
bsw@525
|
69 assert(options.member_id, "member_id mandatory for delegation_info")
|
bsw@525
|
70 local ids = { sep = ", " }
|
bsw@525
|
71 for i, object in ipairs(list) do
|
bsw@525
|
72 local id = object.id
|
bsw@525
|
73 if id ~= nil then
|
bsw@525
|
74 ids[#ids+1] = {"?", id}
|
bsw@525
|
75 end
|
bsw@525
|
76 end
|
bsw@525
|
77 local sub_selector = Area:get_db_conn():new_selector()
|
bsw@525
|
78 if #ids == 0 then
|
bsw@525
|
79 return sub_selector:empty_list_mode()
|
bsw@525
|
80 end
|
bsw@525
|
81 sub_selector:from("area")
|
bsw@525
|
82 sub_selector:add_field("area.id", "area_id")
|
bsw@529
|
83 sub_selector:add_field{ '(delegation_info(?, null, area.id, null, ?)).*', options.member_id, options.trustee_id }
|
bsw@525
|
84 sub_selector:add_where{ 'area.id IN ($)', ids }
|
bsw@525
|
85
|
bsw@525
|
86 local selector = Area:get_db_conn():new_selector()
|
bsw@525
|
87 selector:add_from(sub_selector, "delegation_info")
|
bsw@525
|
88 selector:left_join("member", "first_trustee", "first_trustee.id = delegation_info.first_trustee_id")
|
bsw@525
|
89 selector:left_join("member", "other_trustee", "other_trustee.id = delegation_info.other_trustee_id")
|
bsw@525
|
90 selector:add_field("delegation_info.*")
|
bsw@525
|
91 selector:add_field("first_trustee.name", "first_trustee_name")
|
bsw@525
|
92 selector:add_field("other_trustee.name", "other_trustee_name")
|
bsw@525
|
93 return selector
|
bsw@525
|
94 end
|
bsw@525
|
95 }
|
bsw@525
|
96
|
bsw@529
|
97 function Area.list:load_delegation_info_once_for_member_id(member_id, trustee_id)
|
bsw@525
|
98 if self._delegation_info_loaded_for_member_id ~= member_id then
|
bsw@529
|
99 self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
|
bsw@525
|
100 for i, area in ipairs(self) do
|
bsw@525
|
101 area._delegation_info_loaded_for_member_id = member_id
|
bsw@525
|
102 end
|
bsw@525
|
103 self._delegation_info_loaded_for_member_id = member_id
|
bsw@525
|
104 end
|
bsw@525
|
105 end
|
bsw@525
|
106
|
bsw@529
|
107 function Area.object:load_delegation_info_once_for_member_id(member_id, trustee_id)
|
bsw@525
|
108 if self._delegation_info_loaded_for_member_id ~= member_id then
|
bsw@529
|
109 self:load("delegation_info", { member_id = member_id, trustee_id = trustee_id })
|
bsw@525
|
110 self._delegation_info_loaded_for_member_id = member_id
|
bsw@525
|
111 end
|
bsw@525
|
112 end
|
bsw@525
|
113
|
bsw@7
|
114 function Area.object_get:default_policy()
|
bsw@7
|
115 return Policy:new_selector()
|
bsw@7
|
116 :join("allowed_policy", nil, "allowed_policy.policy_id = policy.id")
|
bsw@7
|
117 :add_where{ "allowed_policy.area_id = ? AND allowed_policy.default_policy", self.id }
|
bsw@10
|
118 :optional_object_mode()
|
bsw@7
|
119 :exec()
|
bsw@7
|
120 end
|
bsw@7
|
121
|
bsw@193
|
122 function Area:build_selector(args)
|
bsw@193
|
123 local selector = Area:new_selector()
|
bsw@193
|
124 if args.active ~= nil then
|
bsw@274
|
125 selector:add_where{ "area.active = ?", args.active }
|
bsw@193
|
126 end
|
bsw@241
|
127 if args.unit_id ~= nil then
|
bsw@274
|
128 selector:add_where{ "area.unit_id = ?", args.unit_id }
|
bsw@241
|
129 end
|
bsw@193
|
130 return selector
|
bsw@193
|
131 end
|
bsw@262
|
132
|
bsw@262
|
133 function Area.object_get:name_with_unit_name()
|
bsw@264
|
134 if not config.single_unit_id then
|
bsw@280
|
135 return self.unit.name .. ", " .. self.name
|
bsw@264
|
136 else
|
bsw@264
|
137 return self.name
|
bsw@262
|
138 end
|
bsw@262
|
139 end |