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