]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/actor/org_unit/sibling_order.js
Revert "Stamping upgrade script for "Org unit selective hiding and sorting in tpac...
[working/Evergreen.git] / Open-ILS / web / js / ui / default / actor / org_unit / sibling_order.js
1 dojo.require("dijit.form.Button");
2 dojo.require("dojo.dnd.Source");
3 dojo.require("openils.User");
4 dojo.require("openils.Util");
5 dojo.require("openils.PermaCrud");
6 dojo.require('openils.widget.OrgUnitFilteringSelect');
7
8 var user;
9 var pcrud;
10 var dndSource;
11
12 function pageInit() {
13     user = new openils.User();
14     pcrud = new openils.PermaCrud({authtoken : user.authtoken});
15     fieldmapper.aou.slim_ok = false; // we need full orgs for updates
16
17     user.buildPermOrgSelector(
18         ['UPDATE_ORG_UNIT', 'ADMIN_ORG_UNIT'],
19         contextOrgSelector, 
20         null, 
21         function() {
22             dojo.connect(contextOrgSelector, 'onChange', drawChildren)
23             // set the value to the root of the tree (instead of ws_ou).
24             contextOrgSelector.store.fetch({
25                 query : {id : '*'},
26                 onComplete : function(list) {
27                     contextOrgSelector.attr('value', list[0].id);
28                 }
29             });
30         }
31     );
32 }
33
34 var tbody, rowTmpl;
35 function drawChildren() {
36
37     if(!tbody) {
38         tbody = dojo.byId('child-tbody');
39         rowTmpl = tbody.removeChild(dojo.byId('row-template'));
40         dndSource = new dojo.dnd.Source(tbody);
41         dojo.connect(dndSource, 'onDndDrop', updateSiblingOrder);
42     }
43
44     dndSource.selectAll();
45     dndSource.deleteSelectedNodes();
46     dndSource.clearItems();
47
48     var org = fieldmapper.aou.findOrgUnit(contextOrgSelector.attr('value'));
49     if (!org.children()) return;
50    
51     // fetch the full child org units
52     org.children( 
53         org.children().map(
54             function(c) { return fieldmapper.aou.findOrgUnit(c.id()) }
55         )
56     );
57
58     // sort by sibling order, fall back to name
59     var children = org.children().sort(
60         function(a, b) {
61             if (a.sibling_order() < b.sibling_order()) {
62                 return -1;
63             } else if (a.sibling_order() > b.sibling_order()) {
64                 return 1;
65             } else if (a.name() < b.name()) {
66                 return -1;
67             }
68             return 1;
69         }
70     );
71
72     dojo.forEach(
73         children,
74         function(child) {
75             var row = tbody.appendChild(rowTmpl.cloneNode(true));
76             row.setAttribute('child', child.id());
77             dojo.query('[name=name]', row)[0].innerHTML = child.name();
78             dndSource.insertNodes(false, [row]);
79         }
80     );
81 }
82
83 function updateSiblingOrder() {
84     var pos = 0;
85     var toUpdate = [];
86     dojo.forEach(
87         dndSource.getAllNodes(),
88         function(node) {
89             childId = node.getAttribute('child');
90             var child = fieldmapper.aou.findOrgUnit(childId);
91             if (child.sibling_order() != pos) {
92                 child.sibling_order(pos);
93                 toUpdate.push(child);
94             }
95             pos++;
96         }
97     );
98
99     if (toUpdate.length == 0) return;
100     pcrud.update(toUpdate); // run sync to prevent UI changes mid-update 
101 }
102
103 openils.Util.addOnLoad(pageInit);