]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/xul/source-browse.js
adding "Enable nullability selection" switch to allow complete control over join...
[working/Evergreen.git] / Open-ILS / web / reports / xul / source-browse.js
1 dojo.requireLocalization("openils.reports", "reports");
2
3 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
4
5 function sourceTreeHandlerDblClick (ev) { return sourceTreeHandler(ev,true) }
6
7 function sourceTreeHandler (ev, dbl) {
8
9         var row = {}, col = {}, part = {}, item;
10         var tree = $('idl-browse-tree');
11
12
13         try {
14                 tree.treeBoxObject.getCellAt(ev.clientX, ev.clientY, row, col, part);
15                 item = tree.contentView.getItemAtIndex(row.value);
16         } catch (e) {
17                 // ... meh
18         }
19
20         if (part.value == 'twisty' || dbl) { // opening or closing
21                 if (item.getAttribute('open') == 'true' && item.lastChild.childNodes.length == 0) {
22                         //var subtree = item.lastChild;
23                         //while (subtree.childNodes.length)
24                         //      subtree.removeChild(subtree.lastChild);
25
26                         var p = getIDLClass( item.getAttribute('idlclass') );
27
28                         var subtreeList = [];
29                         var link_fields = p.getElementsByTagName('link');
30
31                         for ( var i = 0; i < link_fields.length; i++ ) {
32                                 var field = getIDLField( p, link_fields[i].getAttribute('field') );
33
34                                 if (!field) continue;
35
36                                 var name = field.getAttributeNS(rptNS,'label');
37                                 if (!name) name = field.getAttribute('name');
38
39                                 var idlclass = link_fields[i].getAttribute('class');
40                                 var map = link_fields[i].getAttribute('map');
41                                 var link = link_fields[i].getAttribute('field');
42                                 var key = link_fields[i].getAttribute('key');
43                                 var reltype = link_fields[i].getAttribute('reltype');
44
45                                 if (map) continue;
46
47                                 var pathList = [];
48                                 findAnscestorStack( item, 'treeitem', pathList );
49
50                                 var fullpath = '';
51
52                                 for (var j in pathList.reverse()) {
53                                         var n = pathList[j].getAttribute('idlclass');
54                                         var f = pathList[j].getAttribute('field');
55                                         var j = pathList[j].getAttribute('join');
56
57                                         if (f) fullpath += "-" + f;
58                                         if (f && j != 'undefined') fullpath += '>' + j;
59
60                                         if (fullpath) fullpath += ".";
61                                         fullpath += n;
62
63                                 }
64
65                                 fullpath += "-" + link;
66
67                                 subtreeList.push(
68                                         { name : name,
69                       nullable : 'Default',
70                                           idlclass : idlclass,
71                                           map : map,
72                                           key : key,
73                                           field : field.getAttribute('name'),
74                                           reltype : reltype,
75                                           link : link,
76                                           fullpath : fullpath
77                                         }
78                                 );
79
80                 if ($('nullable-source-control').checked) {
81                         if (reltype == 'has_a') {
82                                         subtreeList.push(
83                                                 { name : name,
84                                   nullable : 'Parent', //rpt_strings.LINK_NULLABLE_RIGHT,
85                                                   idlclass : idlclass,
86                                                   map : map,
87                                                   key : key,
88                                                       join : 'right',
89                                                   field : field.getAttribute('name'),
90                                                   reltype : reltype,
91                                                   link : link,
92                                                   fullpath : fullpath + '>right'
93                                                 }
94                                         );
95         
96                                         subtreeList.push(
97                                                 { name : name,
98                                   nullable : 'None',  //rpt_strings.LINK_NULLABLE_NONE
99                                                   idlclass : idlclass,
100                                                   map : map,
101                                                       key : key,
102                                                       join : 'inner',
103                                                   field : field.getAttribute('name'),
104                                                   reltype : reltype,
105                                                   link : link,
106                                                   fullpath : fullpath + '>inner'
107                                                 }
108                                         );
109         
110                         } else{
111                                         subtreeList.push(
112                                                 { name : name,
113                                   nullable : 'Child', //rpt_strings.LINK_NULLABLE_LEFT,
114                                                   idlclass : idlclass,
115                                                   map : map,
116                                                   key : key,
117                                                       join : 'left',
118                                                   field : field.getAttribute('name'),
119                                                   reltype : reltype,
120                                                   link : link,
121                                                   fullpath : fullpath + '>left'
122                                                 }
123                                         );
124         
125                                         subtreeList.push(
126                                                 { name : name,
127                                   nullable : 'None',  //rpt_strings.LINK_NULLABLE_NONE
128                                                   idlclass : idlclass,
129                                                   map : map,
130                                                       key : key,
131                                                       join : 'inner',
132                                                   field : field.getAttribute('name'),
133                                                   reltype : reltype,
134                                                   link : link,
135                                                   fullpath : fullpath + '>inner'
136                                                 }
137                                         );
138         
139                         }
140                 }
141                         }
142
143                         populateSourcesSubtree( item.lastChild, subtreeList );
144                 }
145         } else if (item) {
146                 var classtree = $('class-treetop');
147
148                 while (classtree.childNodes.length)
149                         classtree.removeChild(classtree.lastChild);
150
151                 var c = getIDLClass( item.getAttribute('idlclass') );
152
153                 populateDetailTree(
154                         classtree,
155                         c,
156                         item
157                 );
158         }
159
160         return true;
161 }
162
163 function transformSelectHandler (noswap) {
164         var transform_tree = $('trans-view');
165         var transform = getSelectedItems(transform_tree)[0];
166
167         if (transform) {
168                 if (transform.getAttribute('aggregate') == 'true') {
169                         $( 'filter_tab' ).setAttribute('disabled','true');
170                         $( 'aggfilter_tab' ).setAttribute('disabled','false');
171
172                         if (!noswap && $( 'filter_tab' ).selected)
173                                 $( 'filter_tab' ).parentNode.selectedItem = $( 'aggfilter_tab' );
174                 } else {
175                         $( 'filter_tab' ).setAttribute('disabled','false');
176                         $( 'aggfilter_tab' ).setAttribute('disabled','true');
177
178                         if (!noswap && $( 'aggfilter_tab' ).selected)
179                                 $( 'aggfilter_tab' ).parentNode.selectedItem = $( 'filter_tab' );
180                 }
181         }
182
183         if ($( 'filter_tab' ).selected) {
184                 if ($( 'filter_tab' ).getAttribute('disabled') == 'true')
185                         $( 'source-add' ).setAttribute('disabled','true');
186                 else
187                         $( 'source-add' ).setAttribute('disabled','false');
188
189         } else if ($( 'aggfilter_tab' ).selected) {
190                 if ($( 'aggfilter_tab' ).getAttribute('disabled') == 'true')
191                         $( 'source-add' ).setAttribute('disabled','true');
192                 else
193                         $( 'source-add' ).setAttribute('disabled','false');
194
195         } else if ($( 'dis_tab' ).selected) {
196                 $( 'source-add' ).setAttribute('disabled','false');
197         }
198 }
199
200 function detailTreeHandler (args) {
201         var class_tree = $('class-view');
202         var transform_tree = $('trans-treetop');
203
204         while (transform_tree.childNodes.length)
205                 transform_tree.removeChild(transform_tree.lastChild);
206
207         var class_items = getSelectedItems(class_tree);;
208
209         var transforms = new Object(); 
210         for (var i in class_items) {
211                 var item = class_items[i];
212                 var dtype = item.lastChild.lastChild.getAttribute('label');
213
214                 var item_transforms = getTransforms({ datatype : dtype });
215
216                 for (var j in item_transforms) {
217                         transforms[item_transforms[j]] = OILS_RPT_TRANSFORMS[item_transforms[j]];
218                         transforms[item_transforms[j]].name = item_transforms[j];
219                 }
220         }
221
222         var transformList = [];
223         for (var i in transforms) {
224                 transformList.push( transforms[i] );
225         }
226
227         transformList.sort( sortHashLabels );
228
229         $( 'aggfilter_tab' ).setAttribute('disabled','true');
230
231         for (var i in transformList) {
232                 var t = transformList[i];
233                 transform_tree.appendChild(
234                         createTreeItem(
235                                 { aggregate : t.aggregate,
236                                   name : t.name,
237                                   alias : t.label,
238                                   params : t.params
239                                 },
240                                 createTreeRow(
241                                         {},
242                                         createTreeCell( { label : t.label } ),
243                                         createTreeCell( { label : t.params ? t.params : '0' } ),
244                                         createTreeCell( { label : t.datatype.length > 0 ?  t.datatype.join(', ') : 'all' } ),
245                                         createTreeCell( { label : t.aggregate ?  rpt_strings.SOURCE_BROWSE_AGGREGATE : rpt_strings.SOURCE_BROWSE_NON_AGGREGATE } )
246                                 )
247                         )
248                 );
249
250                 if (t.aggregate) $( 'aggfilter_tab' ).setAttribute('disabled','false');
251         }
252
253         transformSelectHandler(true);
254
255         return true;
256 }
257
258
259