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');
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
17 user.buildPermOrgSelector(
18 ['UPDATE_ORG_UNIT', 'ADMIN_ORG_UNIT'],
22 dojo.connect(contextOrgSelector, 'onChange', drawChildren)
23 // set the value to the root of the tree (instead of ws_ou).
24 contextOrgSelector.store.fetch({
26 onComplete : function(list) {
27 contextOrgSelector.attr('value', list[0].id);
35 function drawChildren() {
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);
44 dndSource.selectAll();
45 dndSource.deleteSelectedNodes();
46 dndSource.clearItems();
48 var org = fieldmapper.aou.findOrgUnit(contextOrgSelector.attr('value'));
49 if (!org.children()) return;
51 // fetch the full child org units
54 function(c) { return fieldmapper.aou.findOrgUnit(c.id()) }
58 // sort by sibling order, fall back to name
59 var children = org.children().sort(
61 if (a.sibling_order() < b.sibling_order()) {
63 } else if (a.sibling_order() > b.sibling_order()) {
65 } else if (a.name() < b.name()) {
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]);
83 function updateSiblingOrder() {
87 dndSource.getAllNodes(),
89 childId = node.getAttribute('child');
90 var child = fieldmapper.aou.findOrgUnit(childId);
91 if (child.sibling_order() != pos) {
92 child.sibling_order(pos);
99 if (toUpdate.length == 0) return;
100 pcrud.update(toUpdate); // run sync to prevent UI changes mid-update
103 openils.Util.addOnLoad(pageInit);