Commit 812040e296e15d0637296dfec2baf1d38ccd3cb3
1 parent
a392b07b62
Exists in
master
and in
1 other branch
hmmm
Showing
1 changed file
with
4 additions
and
2 deletions
Show diff stats
list_config.go
1 | package restutility | 1 | package restutility |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "gopkg.in/rana/ora.v3" | 4 | "gopkg.in/rana/ora.v3" |
5 | ) | 5 | ) |
6 | 6 | ||
7 | type ListOptions struct { | 7 | type ListOptions struct { |
8 | GlobalFilter bool `json:"globalFilter"` | 8 | GlobalFilter bool `json:"globalFilter"` |
9 | LocalFilters bool `json:"localFilters"` | 9 | LocalFilters bool `json:"localFilters"` |
10 | RemoteFilters bool `json:"remoteFilters"` | 10 | RemoteFilters bool `json:"remoteFilters"` |
11 | Pagination bool `json:"pagination"` | 11 | Pagination bool `json:"pagination"` |
12 | PageSize uint64 `json:"pageSize"` | 12 | PageSize uint64 `json:"pageSize"` |
13 | Pivot bool `json:"pivot"` | 13 | Pivot bool `json:"pivot"` |
14 | Detail bool `json:"detail"` | 14 | Detail bool `json:"detail"` |
15 | Total bool `json:"total"` | ||
15 | } | 16 | } |
16 | 17 | ||
17 | type ListFilter struct { | 18 | type ListFilter struct { |
18 | Position uint32 `json:"-"` | 19 | Position uint32 `json:"-"` |
19 | ObjectType string `json:"-"` | 20 | ObjectType string `json:"-"` |
20 | FiltersField string `json:"filtersField"` | 21 | FiltersField string `json:"filtersField"` |
21 | DefaultValues string `json:"defaultValues"` | 22 | DefaultValues string `json:"defaultValues"` |
22 | FiltersType string `json:"filtersType"` | 23 | FiltersType string `json:"filtersType"` |
23 | FiltersLabel string `json:"filtersLabel"` | 24 | FiltersLabel string `json:"filtersLabel"` |
24 | DropdownConfig Dropdown `json:"dropdownConfig"` | 25 | DropdownConfig Dropdown `json:"dropdownConfig"` |
25 | } | 26 | } |
26 | 27 | ||
27 | type Dropdown struct { | 28 | type Dropdown struct { |
28 | ObjectType string `json:"objectType"` | 29 | ObjectType string `json:"objectType"` |
29 | FiltersField string `json:"filtersField"` | 30 | FiltersField string `json:"filtersField"` |
30 | IdField string `json:"idField"` | 31 | IdField string `json:"idField"` |
31 | LabelField string `json:"labelField"` | 32 | LabelField string `json:"labelField"` |
32 | 33 | ||
33 | } | 34 | } |
34 | 35 | ||
35 | type ListGraph struct { | 36 | type ListGraph struct { |
36 | ObjectType string `json:"objectType"` | 37 | ObjectType string `json:"objectType"` |
37 | X string `json:"xField"` | 38 | X string `json:"xField"` |
38 | Y string `json:"yField"` | 39 | Y string `json:"yField"` |
39 | GroupField string `json:"groupField"` | 40 | GroupField string `json:"groupField"` |
40 | Label string `json:"label"` | 41 | Label string `json:"label"` |
41 | } | 42 | } |
42 | 43 | ||
43 | type ListActions struct { | 44 | type ListActions struct { |
44 | Create bool `json:"create"` | 45 | Create bool `json:"create"` |
45 | Update bool `json:"update"` | 46 | Update bool `json:"update"` |
46 | Delete bool `json:"delete"` | 47 | Delete bool `json:"delete"` |
47 | Export bool `json:"export"` | 48 | Export bool `json:"export"` |
48 | Print bool `json:"print"` | 49 | Print bool `json:"print"` |
49 | Graph bool `json:"graph"` | 50 | Graph bool `json:"graph"` |
50 | } | 51 | } |
51 | 52 | ||
52 | type ListNavNode struct { | 53 | type ListNavNode struct { |
53 | ObjectType string `json:"objectType"` | 54 | ObjectType string `json:"objectType"` |
54 | LabelField string `json:"label"` | 55 | LabelField string `json:"label"` |
55 | Icon string `json:"icon"` | 56 | Icon string `json:"icon"` |
56 | ParentObjectType string `json:"parentObjectType"` | 57 | ParentObjectType string `json:"parentObjectType"` |
57 | ParentIdField string `json:"parentIdField"` | 58 | ParentIdField string `json:"parentIdField"` |
58 | } | 59 | } |
59 | 60 | ||
60 | type ListParentNode struct { | 61 | type ListParentNode struct { |
61 | ObjectType string `json:"objectType"` | 62 | ObjectType string `json:"objectType"` |
62 | LabelField string `json:"labelField"` | 63 | LabelField string `json:"labelField"` |
63 | FilterField string `json:"filterField"` | 64 | FilterField string `json:"filterField"` |
64 | } | 65 | } |
65 | 66 | ||
66 | type ListPivot struct { | 67 | type ListPivot struct { |
67 | ObjectType string `json:"objectType"` | 68 | ObjectType string `json:"objectType"` |
68 | GroupField string `json:"groupField"` | 69 | GroupField string `json:"groupField"` |
69 | DistinctField string `json:"distinctField"` | 70 | DistinctField string `json:"distinctField"` |
70 | Value string `json:"valueField"` | 71 | Value string `json:"valueField"` |
71 | } | 72 | } |
72 | 73 | ||
73 | type ListDetails struct { | 74 | type ListDetails struct { |
74 | ObjectType string `json:"objectType"` | 75 | ObjectType string `json:"objectType"` |
75 | ParentObjectType string `json:"parentObjectType"` | 76 | ParentObjectType string `json:"parentObjectType"` |
76 | ParentFilterField string `json:"parentFilterField"` | 77 | ParentFilterField string `json:"parentFilterField"` |
77 | SingleDetail bool `json:"singleDetail"` | 78 | SingleDetail bool `json:"singleDetail"` |
78 | } | 79 | } |
79 | 80 | ||
80 | type ListConfig struct { | 81 | type ListConfig struct { |
81 | ObjectType string `json:"objectType"` | 82 | ObjectType string `json:"objectType"` |
82 | Title string `json:"title"` | 83 | Title string `json:"title"` |
83 | LazyLoad bool `json:"lazyLoad"` | 84 | LazyLoad bool `json:"lazyLoad"` |
84 | InlineEdit bool `json:"inlineEdit"` | 85 | InlineEdit bool `json:"inlineEdit"` |
85 | Options ListOptions `json:"options"` | 86 | Options ListOptions `json:"options"` |
86 | Filters []ListFilter `json:"defaultFilters"` | 87 | Filters []ListFilter `json:"defaultFilters"` |
87 | Graphs []ListGraph `json:"graphs"` | 88 | Graphs []ListGraph `json:"graphs"` |
88 | Actions ListActions `json:"actions"` | 89 | Actions ListActions `json:"actions"` |
89 | Parent []ListParentNode `json:"parent"` | 90 | Parent []ListParentNode `json:"parent"` |
90 | Navigation []ListNavNode `json:"navigation"` | 91 | Navigation []ListNavNode `json:"navigation"` |
91 | Pivots []ListPivot `json:"pivots"` | 92 | Pivots []ListPivot `json:"pivots"` |
92 | Details ListDetails `json:"details"` | 93 | Details ListDetails `json:"details"` |
93 | } | 94 | } |
94 | 95 | ||
95 | func GetListConfig(db *ora.Ses, objType string) (ListConfig, error) { | 96 | func GetListConfig(db *ora.Ses, objType string) (ListConfig, error) { |
96 | resp := NewDefaultList(objType) | 97 | resp := NewDefaultList(objType) |
97 | var err error | 98 | var err error |
98 | 99 | ||
99 | err = setListParams(db, &resp, objType) | 100 | err = setListParams(db, &resp, objType) |
100 | resp.Navigation, err = getListNavigation(db, objType) | 101 | resp.Navigation, err = getListNavigation(db, objType) |
101 | resp.Actions, err = getListActions(db, objType) | 102 | resp.Actions, err = getListActions(db, objType) |
102 | resp.Filters, err = getListFilters(db, objType) | 103 | resp.Filters, err = getListFilters(db, objType) |
103 | resp.Options, err = getListOptions(db, objType) | 104 | resp.Options, err = getListOptions(db, objType) |
104 | resp.Parent, err = getListParent(db, objType) | 105 | resp.Parent, err = getListParent(db, objType) |
105 | resp.Graphs, err = getListGraph(db, objType) | 106 | resp.Graphs, err = getListGraph(db, objType) |
106 | resp.Pivots, err = getListPivot(db, objType) | 107 | resp.Pivots, err = getListPivot(db, objType) |
107 | resp.Details, err = getListDetails(db, objType) | 108 | resp.Details, err = getListDetails(db, objType) |
108 | 109 | ||
109 | if err != nil { | 110 | if err != nil { |
110 | return ListConfig{}, err | 111 | return ListConfig{}, err |
111 | } | 112 | } |
112 | 113 | ||
113 | return resp, nil | 114 | return resp, nil |
114 | } | 115 | } |
115 | 116 | ||
116 | func GetListConfigObjectIdField(db *ora.Ses, otype string) string { | 117 | func GetListConfigObjectIdField(db *ora.Ses, otype string) string { |
117 | var resp string | 118 | var resp string |
118 | var err error | 119 | var err error |
119 | var stmt *ora.Stmt | 120 | var stmt *ora.Stmt |
120 | 121 | ||
121 | stmt, err = db.Prep(`SELECT | 122 | stmt, err = db.Prep(`SELECT |
122 | ID_FIELD | 123 | ID_FIELD |
123 | FROM LIST_CONFIG_ID_FIELD | 124 | FROM LIST_CONFIG_ID_FIELD |
124 | WHERE OBJECT_TYPE = '` + otype + `'`, | 125 | WHERE OBJECT_TYPE = '` + otype + `'`, |
125 | ora.S) | 126 | ora.S) |
126 | 127 | ||
127 | defer stmt.Close() | 128 | defer stmt.Close() |
128 | 129 | ||
129 | if err != nil { | 130 | if err != nil { |
130 | return "" | 131 | return "" |
131 | } | 132 | } |
132 | 133 | ||
133 | rset, err := stmt.Qry() | 134 | rset, err := stmt.Qry() |
134 | if rset.Next() { | 135 | if rset.Next() { |
135 | resp = rset.Row[0].(string) | 136 | resp = rset.Row[0].(string) |
136 | } | 137 | } |
137 | 138 | ||
138 | if rset.Err != nil { | 139 | if rset.Err != nil { |
139 | return "" | 140 | return "" |
140 | } | 141 | } |
141 | 142 | ||
142 | return resp | 143 | return resp |
143 | } | 144 | } |
144 | 145 | ||
145 | func NewDefaultList(objType string) ListConfig { | 146 | func NewDefaultList(objType string) ListConfig { |
146 | list := ListConfig{ | 147 | list := ListConfig{ |
147 | ObjectType: objType, | 148 | ObjectType: objType, |
148 | Title: objType, | 149 | Title: objType, |
149 | LazyLoad: false, | 150 | LazyLoad: false, |
150 | Options: ListOptions{ | 151 | Options: ListOptions{ |
151 | GlobalFilter: true, | 152 | GlobalFilter: true, |
152 | LocalFilters: true, | 153 | LocalFilters: true, |
153 | RemoteFilters: false, | 154 | RemoteFilters: false, |
154 | Pagination: true, | 155 | Pagination: true, |
155 | PageSize: 20, | 156 | PageSize: 20, |
156 | }, | 157 | }, |
157 | Filters: nil, | 158 | Filters: nil, |
158 | Actions: ListActions{ | 159 | Actions: ListActions{ |
159 | Create: false, | 160 | Create: false, |
160 | Update: false, | 161 | Update: false, |
161 | Delete: false, | 162 | Delete: false, |
162 | Export: false, | 163 | Export: false, |
163 | Print: false, | 164 | Print: false, |
164 | Graph: false, | 165 | Graph: false, |
165 | }, | 166 | }, |
166 | Parent: nil, | 167 | Parent: nil, |
167 | Navigation: nil, | 168 | Navigation: nil, |
168 | } | 169 | } |
169 | 170 | ||
170 | return list | 171 | return list |
171 | } | 172 | } |
172 | 173 | ||
173 | func setListParams(db *ora.Ses, list *ListConfig, objType string) error { | 174 | func setListParams(db *ora.Ses, list *ListConfig, objType string) error { |
174 | var err error | 175 | var err error |
175 | var stmt *ora.Stmt | 176 | var stmt *ora.Stmt |
176 | query := `SELECT | 177 | query := `SELECT |
177 | OBJECT_TYPE, TITLE, LAZY_LOAD, INLINE_EDIT | 178 | OBJECT_TYPE, TITLE, LAZY_LOAD, INLINE_EDIT |
178 | FROM LIST_CONFIG | 179 | FROM LIST_CONFIG |
179 | WHERE OBJECT_TYPE = '` + objType + `'` | 180 | WHERE OBJECT_TYPE = '` + objType + `'` |
180 | 181 | ||
181 | stmt, err = db.Prep(query, ora.S, ora.S, ora.U32, ora.U32) | 182 | stmt, err = db.Prep(query, ora.S, ora.S, ora.U32, ora.U32) |
182 | if err != nil { | 183 | if err != nil { |
183 | return err | 184 | return err |
184 | } | 185 | } |
185 | defer stmt.Close() | 186 | defer stmt.Close() |
186 | 187 | ||
187 | rset, err := stmt.Qry() | 188 | rset, err := stmt.Qry() |
188 | if err != nil { | 189 | if err != nil { |
189 | return err | 190 | return err |
190 | } | 191 | } |
191 | if rset.Next() { | 192 | if rset.Next() { |
192 | otype := rset.Row[0].(string) | 193 | otype := rset.Row[0].(string) |
193 | if otype != "" { | 194 | if otype != "" { |
194 | list.ObjectType = otype | 195 | list.ObjectType = otype |
195 | } | 196 | } |
196 | 197 | ||
197 | title := rset.Row[1].(string) | 198 | title := rset.Row[1].(string) |
198 | if title != "" { | 199 | if title != "" { |
199 | list.Title = title | 200 | list.Title = title |
200 | } | 201 | } |
201 | list.LazyLoad = rset.Row[2].(uint32) != 0 | 202 | list.LazyLoad = rset.Row[2].(uint32) != 0 |
202 | list.InlineEdit = rset.Row[3].(uint32) != 0 | 203 | list.InlineEdit = rset.Row[3].(uint32) != 0 |
203 | } | 204 | } |
204 | if rset.Err != nil { | 205 | if rset.Err != nil { |
205 | return rset.Err | 206 | return rset.Err |
206 | } | 207 | } |
207 | return nil | 208 | return nil |
208 | } | 209 | } |
209 | 210 | ||
210 | func getListNavigation(db *ora.Ses, listObjType string) ([]ListNavNode, error) { | 211 | func getListNavigation(db *ora.Ses, listObjType string) ([]ListNavNode, error) { |
211 | resp := make([]ListNavNode, 0) | 212 | resp := make([]ListNavNode, 0) |
212 | var err error | 213 | var err error |
213 | var stmt *ora.Stmt | 214 | var stmt *ora.Stmt |
214 | query := `SELECT | 215 | query := `SELECT |
215 | a.OBJECT_TYPE, a.PARENT_OBJECT_TYPE, a.LABEL, a.ICON, b.PARENT_ID_FIELD, b.RB | 216 | a.OBJECT_TYPE, a.PARENT_OBJECT_TYPE, a.LABEL, a.ICON, b.PARENT_ID_FIELD, b.RB |
216 | FROM LIST_CONFIG_NAVIGATION b | 217 | FROM LIST_CONFIG_NAVIGATION b |
217 | JOIN LIST_CONFIG_CHILD a ON b.PARENT_CHILD_ID = a.PARENT_CHILD_ID | 218 | JOIN LIST_CONFIG_CHILD a ON b.PARENT_CHILD_ID = a.PARENT_CHILD_ID |
218 | WHERE b.LIST_OBJECT_TYPE = '`+listObjType+`' | 219 | WHERE b.LIST_OBJECT_TYPE = '`+listObjType+`' |
219 | ORDER BY b.RB ASC` | 220 | ORDER BY b.RB ASC` |
220 | 221 | ||
221 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S, ora.S) | 222 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S, ora.S) |
222 | if err != nil { | 223 | if err != nil { |
223 | return resp, err | 224 | return resp, err |
224 | } | 225 | } |
225 | defer stmt.Close() | 226 | defer stmt.Close() |
226 | 227 | ||
227 | rset, err := stmt.Qry() | 228 | rset, err := stmt.Qry() |
228 | if err != nil { | 229 | if err != nil { |
229 | return resp, err | 230 | return resp, err |
230 | } | 231 | } |
231 | for rset.Next() { | 232 | for rset.Next() { |
232 | resp = append(resp, ListNavNode{ | 233 | resp = append(resp, ListNavNode{ |
233 | ObjectType: rset.Row[0].(string), | 234 | ObjectType: rset.Row[0].(string), |
234 | ParentObjectType: rset.Row[1].(string), | 235 | ParentObjectType: rset.Row[1].(string), |
235 | LabelField: rset.Row[2].(string), | 236 | LabelField: rset.Row[2].(string), |
236 | Icon: rset.Row[3].(string), | 237 | Icon: rset.Row[3].(string), |
237 | ParentIdField: rset.Row[4].(string), | 238 | ParentIdField: rset.Row[4].(string), |
238 | }) | 239 | }) |
239 | } | 240 | } |
240 | if rset.Err != nil { | 241 | if rset.Err != nil { |
241 | return nil, rset.Err | 242 | return nil, rset.Err |
242 | } | 243 | } |
243 | 244 | ||
244 | return resp, nil | 245 | return resp, nil |
245 | } | 246 | } |
246 | 247 | ||
247 | func getListActions(db *ora.Ses, objType string) (ListActions, error) { | 248 | func getListActions(db *ora.Ses, objType string) (ListActions, error) { |
248 | var resp ListActions | 249 | var resp ListActions |
249 | var err error | 250 | var err error |
250 | var stmt *ora.Stmt | 251 | var stmt *ora.Stmt |
251 | query := `SELECT | 252 | query := `SELECT |
252 | ACTION_CREATE, ACTION_UPDATE, ACTION_DELETE, ACTION_EXPORT, | 253 | ACTION_CREATE, ACTION_UPDATE, ACTION_DELETE, ACTION_EXPORT, |
253 | ACTION_PRINT, ACTION_GRAPH | 254 | ACTION_PRINT, ACTION_GRAPH |
254 | FROM LIST_CONFIG | 255 | FROM LIST_CONFIG |
255 | WHERE OBJECT_TYPE = '` + objType + `'` | 256 | WHERE OBJECT_TYPE = '` + objType + `'` |
256 | 257 | ||
257 | stmt, err = db.Prep(query, ora.U32, ora.U32, ora.U32, ora.U32, | 258 | stmt, err = db.Prep(query, ora.U32, ora.U32, ora.U32, ora.U32, |
258 | ora.U32, ora.U32) | 259 | ora.U32, ora.U32) |
259 | if err != nil { | 260 | if err != nil { |
260 | return ListActions{}, err | 261 | return ListActions{}, err |
261 | } | 262 | } |
262 | defer stmt.Close() | 263 | defer stmt.Close() |
263 | 264 | ||
264 | rset, err := stmt.Qry() | 265 | rset, err := stmt.Qry() |
265 | if err != nil { | 266 | if err != nil { |
266 | return ListActions{}, err | 267 | return ListActions{}, err |
267 | } | 268 | } |
268 | if rset.Next() { | 269 | if rset.Next() { |
269 | resp.Create = rset.Row[0].(uint32) != 0 | 270 | resp.Create = rset.Row[0].(uint32) != 0 |
270 | resp.Update = rset.Row[1].(uint32) != 0 | 271 | resp.Update = rset.Row[1].(uint32) != 0 |
271 | resp.Delete = rset.Row[2].(uint32) != 0 | 272 | resp.Delete = rset.Row[2].(uint32) != 0 |
272 | resp.Export = rset.Row[3].(uint32) != 0 | 273 | resp.Export = rset.Row[3].(uint32) != 0 |
273 | resp.Print = rset.Row[4].(uint32) != 0 | 274 | resp.Print = rset.Row[4].(uint32) != 0 |
274 | resp.Graph = rset.Row[5].(uint32) != 0 | 275 | resp.Graph = rset.Row[5].(uint32) != 0 |
275 | } | 276 | } |
276 | if rset.Err != nil { | 277 | if rset.Err != nil { |
277 | return ListActions{}, rset.Err | 278 | return ListActions{}, rset.Err |
278 | } | 279 | } |
279 | return resp, nil | 280 | return resp, nil |
280 | } | 281 | } |
281 | 282 | ||
282 | func getListFilters(db *ora.Ses, objType string) ([]ListFilter, error) { | 283 | func getListFilters(db *ora.Ses, objType string) ([]ListFilter, error) { |
283 | resp := make([]ListFilter, 0) | 284 | resp := make([]ListFilter, 0) |
284 | filtersFields, err := getFilterFieldsAndPosition(db, objType) | 285 | filtersFields, err := getFilterFieldsAndPosition(db, objType) |
285 | if err != nil { | 286 | if err != nil { |
286 | return nil, err | 287 | return nil, err |
287 | } | 288 | } |
288 | for field, pos := range filtersFields { | 289 | for field, pos := range filtersFields { |
289 | filters, _ := getFiltersByFilterField(db, field) | 290 | filters, _ := getFiltersByFilterField(db, field) |
290 | for _, filter := range filters { | 291 | for _, filter := range filters { |
291 | var f ListFilter | 292 | var f ListFilter |
292 | f.Position = pos | 293 | f.Position = pos |
293 | f.ObjectType = objType | 294 | f.ObjectType = objType |
294 | f.FiltersField = field | 295 | f.FiltersField = field |
295 | f.DefaultValues = filter.DefaultValues | 296 | f.DefaultValues = filter.DefaultValues |
296 | f.FiltersLabel = filter.Label | 297 | f.FiltersLabel = filter.Label |
297 | f.FiltersType = filter.Type | 298 | f.FiltersType = filter.Type |
298 | if filter.Type == "dropdown" { | 299 | if filter.Type == "dropdown" { |
299 | f.DropdownConfig, err = getFilterDropdownConfig(db, field) | 300 | f.DropdownConfig, err = getFilterDropdownConfig(db, field) |
300 | if err != nil { | 301 | if err != nil { |
301 | return nil, err | 302 | return nil, err |
302 | } | 303 | } |
303 | } | 304 | } |
304 | resp = append(resp, f) | 305 | resp = append(resp, f) |
305 | } | 306 | } |
306 | } | 307 | } |
307 | 308 | ||
308 | sortFilters(resp) | 309 | sortFilters(resp) |
309 | 310 | ||
310 | return resp, nil | 311 | return resp, nil |
311 | } | 312 | } |
312 | 313 | ||
313 | func getFilterFieldsAndPosition(db *ora.Ses, objType string) (map[string]uint32, error) { | 314 | func getFilterFieldsAndPosition(db *ora.Ses, objType string) (map[string]uint32, error) { |
314 | filtersField := make(map[string]uint32, 0) | 315 | filtersField := make(map[string]uint32, 0) |
315 | var err error | 316 | var err error |
316 | var stmt *ora.Stmt | 317 | var stmt *ora.Stmt |
317 | query := `SELECT | 318 | query := `SELECT |
318 | FILTERS_FIELD, RB | 319 | FILTERS_FIELD, RB |
319 | FROM LIST_CONFIG_FILTERS | 320 | FROM LIST_CONFIG_FILTERS |
320 | WHERE OBJECT_TYPE = '` + objType + `'` | 321 | WHERE OBJECT_TYPE = '` + objType + `'` |
321 | 322 | ||
322 | stmt, err = db.Prep(query, ora.S, ora.U32) | 323 | stmt, err = db.Prep(query, ora.S, ora.U32) |
323 | if err != nil { | 324 | if err != nil { |
324 | return nil, err | 325 | return nil, err |
325 | } | 326 | } |
326 | defer stmt.Close() | 327 | defer stmt.Close() |
327 | 328 | ||
328 | rset, err := stmt.Qry() | 329 | rset, err := stmt.Qry() |
329 | if err != nil { | 330 | if err != nil { |
330 | return nil, err | 331 | return nil, err |
331 | } | 332 | } |
332 | for rset.Next() { | 333 | for rset.Next() { |
333 | filtersField[rset.Row[0].(string)] = rset.Row[1].(uint32) | 334 | filtersField[rset.Row[0].(string)] = rset.Row[1].(uint32) |
334 | } | 335 | } |
335 | if rset.Err != nil { | 336 | if rset.Err != nil { |
336 | return nil, rset.Err | 337 | return nil, rset.Err |
337 | } | 338 | } |
338 | return filtersField, nil | 339 | return filtersField, nil |
339 | } | 340 | } |
340 | 341 | ||
341 | type _filter struct { | 342 | type _filter struct { |
342 | DefaultValues string | 343 | DefaultValues string |
343 | Label string | 344 | Label string |
344 | Type string | 345 | Type string |
345 | } | 346 | } |
346 | 347 | ||
347 | func getFiltersByFilterField(db *ora.Ses, filtersField string) ([]_filter, error) { | 348 | func getFiltersByFilterField(db *ora.Ses, filtersField string) ([]_filter, error) { |
348 | resp := make([]_filter, 0) | 349 | resp := make([]_filter, 0) |
349 | var err error | 350 | var err error |
350 | var stmt *ora.Stmt | 351 | var stmt *ora.Stmt |
351 | query := `SELECT | 352 | query := `SELECT |
352 | FILTERS_TYPE, FILTERS_LABEL, DEFAULT_VALUES | 353 | FILTERS_TYPE, FILTERS_LABEL, DEFAULT_VALUES |
353 | FROM LIST_FILTERS_FIELD | 354 | FROM LIST_FILTERS_FIELD |
354 | WHERE FILTERS_FIELD = '` + filtersField + `'` | 355 | WHERE FILTERS_FIELD = '` + filtersField + `'` |
355 | 356 | ||
356 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S) | 357 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S) |
357 | if err != nil { | 358 | if err != nil { |
358 | return resp, err | 359 | return resp, err |
359 | } | 360 | } |
360 | defer stmt.Close() | 361 | defer stmt.Close() |
361 | 362 | ||
362 | rset, err := stmt.Qry() | 363 | rset, err := stmt.Qry() |
363 | if err != nil { | 364 | if err != nil { |
364 | return resp, err | 365 | return resp, err |
365 | } | 366 | } |
366 | for rset.Next() { | 367 | for rset.Next() { |
367 | resp = append(resp, _filter{ | 368 | resp = append(resp, _filter{ |
368 | Type: rset.Row[0].(string), | 369 | Type: rset.Row[0].(string), |
369 | Label: rset.Row[1].(string), | 370 | Label: rset.Row[1].(string), |
370 | DefaultValues: rset.Row[2].(string), | 371 | DefaultValues: rset.Row[2].(string), |
371 | }) | 372 | }) |
372 | } | 373 | } |
373 | if rset.Err != nil { | 374 | if rset.Err != nil { |
374 | return resp, rset.Err | 375 | return resp, rset.Err |
375 | } | 376 | } |
376 | return resp, nil | 377 | return resp, nil |
377 | } | 378 | } |
378 | 379 | ||
379 | func getFilterDropdownConfig(db *ora.Ses, filtersField string) (Dropdown, error) { | 380 | func getFilterDropdownConfig(db *ora.Ses, filtersField string) (Dropdown, error) { |
380 | var resp Dropdown | 381 | var resp Dropdown |
381 | var err error | 382 | var err error |
382 | var stmt *ora.Stmt | 383 | var stmt *ora.Stmt |
383 | query := `SELECT | 384 | query := `SELECT |
384 | FILTERS_FIELD, OBJECT_TYPE, ID_FIELD, LABEL_FIELD | 385 | FILTERS_FIELD, OBJECT_TYPE, ID_FIELD, LABEL_FIELD |
385 | FROM LIST_DROPDOWN_FILTER | 386 | FROM LIST_DROPDOWN_FILTER |
386 | WHERE FILTERS_FIELD = '` + filtersField + `'` | 387 | WHERE FILTERS_FIELD = '` + filtersField + `'` |
387 | 388 | ||
388 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S) | 389 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S) |
389 | if err != nil { | 390 | if err != nil { |
390 | return resp, err | 391 | return resp, err |
391 | } | 392 | } |
392 | defer stmt.Close() | 393 | defer stmt.Close() |
393 | 394 | ||
394 | rset, err := stmt.Qry() | 395 | rset, err := stmt.Qry() |
395 | if err != nil { | 396 | if err != nil { |
396 | return resp, err | 397 | return resp, err |
397 | } | 398 | } |
398 | if rset.Next() { | 399 | if rset.Next() { |
399 | resp.FiltersField = rset.Row[0].(string) | 400 | resp.FiltersField = rset.Row[0].(string) |
400 | resp.ObjectType = rset.Row[1].(string) | 401 | resp.ObjectType = rset.Row[1].(string) |
401 | resp.IdField = rset.Row[2].(string) | 402 | resp.IdField = rset.Row[2].(string) |
402 | resp.LabelField = rset.Row[3].(string) | 403 | resp.LabelField = rset.Row[3].(string) |
403 | } | 404 | } |
404 | if rset.Err != nil { | 405 | if rset.Err != nil { |
405 | return resp, rset.Err | 406 | return resp, rset.Err |
406 | } | 407 | } |
407 | return resp, nil | 408 | return resp, nil |
408 | } | 409 | } |
409 | 410 | ||
410 | func sortFilters(filters []ListFilter) { | 411 | func sortFilters(filters []ListFilter) { |
411 | done := false | 412 | done := false |
412 | var temp ListFilter | 413 | var temp ListFilter |
413 | for !done { | 414 | for !done { |
414 | done = true | 415 | done = true |
415 | for i := 0; i < len(filters) - 1; i++ { | 416 | for i := 0; i < len(filters) - 1; i++ { |
416 | if filters[i].Position > filters[i+1].Position { | 417 | if filters[i].Position > filters[i+1].Position { |
417 | done = false | 418 | done = false |
418 | temp = filters[i] | 419 | temp = filters[i] |
419 | filters[i] = filters[i+1] | 420 | filters[i] = filters[i+1] |
420 | filters[i+1] = temp | 421 | filters[i+1] = temp |
421 | } | 422 | } |
422 | } | 423 | } |
423 | } | 424 | } |
424 | } | 425 | } |
425 | 426 | ||
426 | func getListGraph(db *ora.Ses, objType string) ([]ListGraph, error) { | 427 | func getListGraph(db *ora.Ses, objType string) ([]ListGraph, error) { |
427 | resp := make([]ListGraph, 0) | 428 | resp := make([]ListGraph, 0) |
428 | var err error | 429 | var err error |
429 | var stmt *ora.Stmt | 430 | var stmt *ora.Stmt |
430 | query := `SELECT | 431 | query := `SELECT |
431 | OBJECT_TYPE, X_FIELD, Y_FIELD, GROUP_FIELD, LABEL | 432 | OBJECT_TYPE, X_FIELD, Y_FIELD, GROUP_FIELD, LABEL |
432 | FROM LIST_GRAPHS | 433 | FROM LIST_GRAPHS |
433 | WHERE OBJECT_TYPE = '` + objType + `'` | 434 | WHERE OBJECT_TYPE = '` + objType + `'` |
434 | 435 | ||
435 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S) | 436 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S) |
436 | if err != nil { | 437 | if err != nil { |
437 | return resp, err | 438 | return resp, err |
438 | } | 439 | } |
439 | defer stmt.Close() | 440 | defer stmt.Close() |
440 | 441 | ||
441 | rset, err := stmt.Qry() | 442 | rset, err := stmt.Qry() |
442 | if err != nil { | 443 | if err != nil { |
443 | return resp, err | 444 | return resp, err |
444 | } | 445 | } |
445 | for rset.Next() { | 446 | for rset.Next() { |
446 | resp = append(resp, ListGraph{ | 447 | resp = append(resp, ListGraph{ |
447 | ObjectType: rset.Row[0].(string), | 448 | ObjectType: rset.Row[0].(string), |
448 | X: rset.Row[1].(string), | 449 | X: rset.Row[1].(string), |
449 | Y: rset.Row[2].(string), | 450 | Y: rset.Row[2].(string), |
450 | GroupField: rset.Row[3].(string), | 451 | GroupField: rset.Row[3].(string), |
451 | Label: rset.Row[4].(string), | 452 | Label: rset.Row[4].(string), |
452 | }) | 453 | }) |
453 | } | 454 | } |
454 | if rset.Err != nil { | 455 | if rset.Err != nil { |
455 | return resp, rset.Err | 456 | return resp, rset.Err |
456 | } | 457 | } |
457 | return resp, nil | 458 | return resp, nil |
458 | } | 459 | } |
459 | 460 | ||
460 | func getListOptions(db *ora.Ses, objType string) (ListOptions, error) { | 461 | func getListOptions(db *ora.Ses, objType string) (ListOptions, error) { |
461 | var resp ListOptions | 462 | var resp ListOptions |
462 | var err error | 463 | var err error |
463 | var stmt *ora.Stmt | 464 | var stmt *ora.Stmt |
464 | query := `SELECT | 465 | query := `SELECT |
465 | GLOBAL_FILTER, LOCAL_FILTER, REMOTE_FILTER, PAGINATION, | 466 | GLOBAL_FILTER, LOCAL_FILTER, REMOTE_FILTER, PAGINATION, |
466 | PAGE_SIZE, PIVOT, DETAIL | 467 | PAGE_SIZE, PIVOT, DETAIL, TOTAL |
467 | FROM LIST_CONFIG | 468 | FROM LIST_CONFIG |
468 | WHERE OBJECT_TYPE = '` + objType + `'` | 469 | WHERE OBJECT_TYPE = '` + objType + `'` |
469 | 470 | ||
470 | stmt, err = db.Prep(query, ora.U32, ora.U32, ora.U32, ora.U32, | 471 | stmt, err = db.Prep(query, ora.U32, ora.U32, ora.U32, ora.U32, |
471 | ora.U64, ora.U64, ora.U32) | 472 | ora.U64, ora.U64, ora.U32, ora.U32) |
472 | if err != nil { | 473 | if err != nil { |
473 | return ListOptions{}, err | 474 | return ListOptions{}, err |
474 | } | 475 | } |
475 | defer stmt.Close() | 476 | defer stmt.Close() |
476 | 477 | ||
477 | rset, err := stmt.Qry() | 478 | rset, err := stmt.Qry() |
478 | if err != nil { | 479 | if err != nil { |
479 | return ListOptions{}, err | 480 | return ListOptions{}, err |
480 | } | 481 | } |
481 | if rset.Next() { | 482 | if rset.Next() { |
482 | resp.GlobalFilter = rset.Row[0].(uint32) != 0 | 483 | resp.GlobalFilter = rset.Row[0].(uint32) != 0 |
483 | resp.LocalFilters = rset.Row[1].(uint32) != 0 | 484 | resp.LocalFilters = rset.Row[1].(uint32) != 0 |
484 | resp.RemoteFilters = rset.Row[2].(uint32) != 0 | 485 | resp.RemoteFilters = rset.Row[2].(uint32) != 0 |
485 | resp.Pagination = rset.Row[3].(uint32) != 0 | 486 | resp.Pagination = rset.Row[3].(uint32) != 0 |
486 | resp.PageSize = rset.Row[4].(uint64) | 487 | resp.PageSize = rset.Row[4].(uint64) |
487 | resp.Pivot = rset.Row[5].(uint64) != 0 | 488 | resp.Pivot = rset.Row[5].(uint64) != 0 |
488 | resp.Detail = rset.Row[6].(uint32) != 0 | 489 | resp.Detail = rset.Row[6].(uint32) != 0 |
490 | resp.Total = rset.Row[7].(uint32) != 0 | ||
489 | } | 491 | } |
490 | if rset.Err != nil { | 492 | if rset.Err != nil { |
491 | return ListOptions{}, rset.Err | 493 | return ListOptions{}, rset.Err |
492 | } | 494 | } |
493 | return resp, nil | 495 | return resp, nil |
494 | } | 496 | } |
495 | 497 | ||
496 | func getListParent(db *ora.Ses, objType string) ([]ListParentNode, error) { | 498 | func getListParent(db *ora.Ses, objType string) ([]ListParentNode, error) { |
497 | resp := make([]ListParentNode, 0) | 499 | resp := make([]ListParentNode, 0) |
498 | var err error | 500 | var err error |
499 | var stmt *ora.Stmt | 501 | var stmt *ora.Stmt |
500 | query := `SELECT | 502 | query := `SELECT |
501 | PARENT_OBJECT_TYPE, PARENT_LABEL_FIELD, PARENT_FILTER_FIELD | 503 | PARENT_OBJECT_TYPE, PARENT_LABEL_FIELD, PARENT_FILTER_FIELD |
502 | FROM LIST_CONFIG_CHILD | 504 | FROM LIST_CONFIG_CHILD |
503 | WHERE OBJECT_TYPE = '` + objType + `'` | 505 | WHERE OBJECT_TYPE = '` + objType + `'` |
504 | 506 | ||
505 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S) | 507 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S) |
506 | if err != nil { | 508 | if err != nil { |
507 | return resp, err | 509 | return resp, err |
508 | } | 510 | } |
509 | defer stmt.Close() | 511 | defer stmt.Close() |
510 | 512 | ||
511 | rset, err := stmt.Qry() | 513 | rset, err := stmt.Qry() |
512 | if err != nil { | 514 | if err != nil { |
513 | return resp, err | 515 | return resp, err |
514 | } | 516 | } |
515 | for rset.Next() { | 517 | for rset.Next() { |
516 | resp = append(resp, ListParentNode{ | 518 | resp = append(resp, ListParentNode{ |
517 | ObjectType: rset.Row[0].(string), | 519 | ObjectType: rset.Row[0].(string), |
518 | LabelField: rset.Row[1].(string), | 520 | LabelField: rset.Row[1].(string), |
519 | FilterField: rset.Row[2].(string), | 521 | FilterField: rset.Row[2].(string), |
520 | }) | 522 | }) |
521 | } | 523 | } |
522 | if rset.Err != nil { | 524 | if rset.Err != nil { |
523 | return nil, rset.Err | 525 | return nil, rset.Err |
524 | } | 526 | } |
525 | 527 | ||
526 | return resp, nil | 528 | return resp, nil |
527 | } | 529 | } |
528 | 530 | ||
529 | func getListPivot(db *ora.Ses, objType string) ([]ListPivot, error) { | 531 | func getListPivot(db *ora.Ses, objType string) ([]ListPivot, error) { |
530 | resp := make([]ListPivot, 0) | 532 | resp := make([]ListPivot, 0) |
531 | var err error | 533 | var err error |
532 | var stmt *ora.Stmt | 534 | var stmt *ora.Stmt |
533 | query := `SELECT | 535 | query := `SELECT |
534 | OBJECT_TYPE, GROUP_FIELD, DISTINCT_FIELD, VALUE_FIELD | 536 | OBJECT_TYPE, GROUP_FIELD, DISTINCT_FIELD, VALUE_FIELD |
535 | FROM LIST_PIVOTS | 537 | FROM LIST_PIVOTS |
536 | WHERE OBJECT_TYPE = '` + objType + `'` | 538 | WHERE OBJECT_TYPE = '` + objType + `'` |
537 | 539 | ||
538 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S) | 540 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.S) |
539 | if err != nil { | 541 | if err != nil { |
540 | return resp, err | 542 | return resp, err |
541 | } | 543 | } |
542 | defer stmt.Close() | 544 | defer stmt.Close() |
543 | 545 | ||
544 | rset, err := stmt.Qry() | 546 | rset, err := stmt.Qry() |
545 | if err != nil { | 547 | if err != nil { |
546 | return resp, err | 548 | return resp, err |
547 | } | 549 | } |
548 | for rset.Next() { | 550 | for rset.Next() { |
549 | resp = append(resp, ListPivot{ | 551 | resp = append(resp, ListPivot{ |
550 | ObjectType: rset.Row[0].(string), | 552 | ObjectType: rset.Row[0].(string), |
551 | GroupField: rset.Row[1].(string), | 553 | GroupField: rset.Row[1].(string), |
552 | DistinctField: rset.Row[2].(string), | 554 | DistinctField: rset.Row[2].(string), |
553 | Value: rset.Row[3].(string), | 555 | Value: rset.Row[3].(string), |
554 | }) | 556 | }) |
555 | } | 557 | } |
556 | if rset.Err != nil { | 558 | if rset.Err != nil { |
557 | return nil, rset.Err | 559 | return nil, rset.Err |
558 | } | 560 | } |
559 | 561 | ||
560 | return resp, nil | 562 | return resp, nil |
561 | } | 563 | } |
562 | 564 | ||
563 | func getListDetails(db *ora.Ses, objType string) (ListDetails, error) { | 565 | func getListDetails(db *ora.Ses, objType string) (ListDetails, error) { |
564 | var resp ListDetails | 566 | var resp ListDetails |
565 | var err error | 567 | var err error |
566 | var stmt *ora.Stmt | 568 | var stmt *ora.Stmt |
567 | query := `SELECT | 569 | query := `SELECT |
568 | OBJECT_TYPE, PARENT_OBJECT_TYPE, PARENT_FILTER_FIELD, SINGLE_DETAIL | 570 | OBJECT_TYPE, PARENT_OBJECT_TYPE, PARENT_FILTER_FIELD, SINGLE_DETAIL |
569 | FROM LIST_CONFIG_DETAIL | 571 | FROM LIST_CONFIG_DETAIL |
570 | WHERE PARENT_OBJECT_TYPE = '` + objType + `'` | 572 | WHERE PARENT_OBJECT_TYPE = '` + objType + `'` |
571 | 573 | ||
572 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.U32) | 574 | stmt, err = db.Prep(query, ora.S, ora.S, ora.S, ora.U32) |
573 | if err != nil { | 575 | if err != nil { |
574 | return resp, err | 576 | return resp, err |
575 | } | 577 | } |
576 | defer stmt.Close() | 578 | defer stmt.Close() |
577 | 579 | ||
578 | rset, err := stmt.Qry() | 580 | rset, err := stmt.Qry() |
579 | if err != nil { | 581 | if err != nil { |
580 | return resp, err | 582 | return resp, err |
581 | } | 583 | } |
582 | if rset.Next() { | 584 | if rset.Next() { |
583 | resp.ObjectType = rset.Row[0].(string) | 585 | resp.ObjectType = rset.Row[0].(string) |
584 | resp.ParentObjectType = rset.Row[1].(string) | 586 | resp.ParentObjectType = rset.Row[1].(string) |
585 | resp.ParentFilterField = rset.Row[2].(string) | 587 | resp.ParentFilterField = rset.Row[2].(string) |
586 | resp.SingleDetail = rset.Row[3].(uint32) != 0 | 588 | resp.SingleDetail = rset.Row[3].(uint32) != 0 |
587 | } | 589 | } |
588 | if rset.Err != nil { | 590 | if rset.Err != nil { |
589 | return resp, rset.Err | 591 | return resp, rset.Err |
590 | } | 592 | } |
591 | 593 | ||
592 | return resp, nil | 594 | return resp, nil |
593 | } | 595 | } |
594 | 596 |