From d5cdbd2bca76be86152663ad4beb4830dcf34970 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Fri, 17 Feb 2012 16:14:16 -0500 Subject: [PATCH] copy loc groups: admin UI Signed-off-by: Bill Erickson --- .../conify/global/asset/copy_location_group.tt2 | 131 ++++++++++++ .../conify/global/asset/copy_location_group.js | 236 +++++++++++++++++++++ 2 files changed, 367 insertions(+) create mode 100644 Open-ILS/src/templates/conify/global/asset/copy_location_group.tt2 create mode 100644 Open-ILS/web/js/ui/default/conify/global/asset/copy_location_group.js diff --git a/Open-ILS/src/templates/conify/global/asset/copy_location_group.tt2 b/Open-ILS/src/templates/conify/global/asset/copy_location_group.tt2 new file mode 100644 index 0000000000..875c81aa4b --- /dev/null +++ b/Open-ILS/src/templates/conify/global/asset/copy_location_group.tt2 @@ -0,0 +1,131 @@ +[% WRAPPER base.tt2 %] +[% ctx.page_title = l('Copy Location Group') %] + + + + +
+ [% l('Copy Location Groups') %] + [% l('Context Org Unit') %] + + +
+ +
+
+
[% l('Location Groups') %]
+
    +
    +
    +
    + + + +
    [% l('Group Entries') %]
    +
    +
    + + + + + + + + +
    +
    +
    +
    +
    + + + +
    [% l('Copy Locations') %]
    +
    +
    + + + + + + + + +
    +
    +
    +
    + + + + +[% END %] diff --git a/Open-ILS/web/js/ui/default/conify/global/asset/copy_location_group.js b/Open-ILS/web/js/ui/default/conify/global/asset/copy_location_group.js new file mode 100644 index 0000000000..8578fa6eea --- /dev/null +++ b/Open-ILS/web/js/ui/default/conify/global/asset/copy_location_group.js @@ -0,0 +1,236 @@ +dojo.require('dijit.layout.ContentPane'); +dojo.require('dijit.layout.BorderContainer'); +dojo.require("dojo.dnd.Container"); +dojo.require("dojo.dnd.Source"); +dojo.require('fieldmapper.OrgUtils'); +dojo.require('openils.User'); +dojo.require('openils.Util'); +dojo.require('openils.PermaCrud'); +dojo.require('openils.widget.AutoGrid'); +dojo.require('openils.widget.ProgressDialog'); +dojo.require('openils.widget.OrgUnitFilteringSelect'); + +var user; +var groups; +var groupMaps; +var locations; +var source; + +function init() { + + user = new openils.User(); + source = new dojo.dnd.Source('acplg-list'); + + user.buildPermOrgSelector( + 'ADMIN_COPY_LOCATION_GROUP', + contextOrgSelector, + null, + function() { + dojo.connect(contextOrgSelector, 'onChange', filterPage); + } + ); + + var pcrud = new openils.PermaCrud({authtoken : user.authtoken}); + pcrud.retrieveAll('acpl', // this can take some time... + { async : true, + order_by : {aou : 'shortname'}, + oncomplete : function(r) { + locations = openils.Util.readResponse(r); + filterPage(user.user.ws_ou()); + } + } + ); +} + +var locTbody; +var locRowTemplate; +function drawLocations(org) { + + if (!locTbody) { + locTbody = dojo.byId('acplg-loc-tbody'); + locRowTemplate = locTbody.removeChild(dojo.byId('acplg-loc-row')); + } else { + // clear out the previous table + while (node = locTbody.childNodes[0]) + locTbody.removeChild(node); + } + + var allMyOrgs = fieldmapper.aou.fullPath(org, true); + + dojo.forEach(locations, + function(loc) { + if (allMyOrgs.indexOf(loc.owning_lib()) == -1) return; + var row = locRowTemplate.cloneNode(true); + row.setAttribute('location', loc.id()); + dojo.query('[name=name]', row)[0].innerHTML = loc.name(); + dojo.query('[name=owning_lib]', row)[0].innerHTML = fieldmapper.aou.findOrgUnit(loc.owning_lib()).shortname(); + locTbody.appendChild(row); + } + ); +} + +function filterPage(org) { + drawLocations(org); + + var pcrud = new openils.PermaCrud({authtoken : user.authtoken}); + groups = pcrud.search('acplg', {owner : org}, {order_by : {acplg : 'pos'}}); + + source.selectAll(); + source.deleteSelectedNodes(); + source.clearItems(); + var drag = dojo.byId('dnd-drag-actions').cloneNode(true); + drag.id = ''; + + dojo.forEach(groups, + function(group) { + if(!group) return; + var node = source.insertNodes(false, [ + { + data : drag.innerHTML.replace(/GRPID/g, group.id()).replace(/GRPNAME/g, group.name()), + type : [group.id()+''] // use the type field to store the ID + } + ]); + } + ); + + editGroupEntries(groups[0].id()); +} + +function editGroup(grpId) { + // show EditDialog +} +function deleteGroup(grpId) { + // confirm and delete +} + +var locMapTbody; +var locMapRowTemplate; +function editGroupEntries(grpId) { + var pcrud = new openils.PermaCrud({authtoken : user.authtoken}); + groupMaps = pcrud.search('acplgm', {lgroup : grpId}); + + dojo.query('[group]').forEach( + function(node) { + if (node.getAttribute('group') == grpId) { + openils.Util.addCSSClass(node, 'acplg-group-selected'); + } else { + openils.Util.removeCSSClass(node, 'acplg-group-selected'); + } + } + ); + + if (!locMapTbody) { + locMapTbody = dojo.byId('acplg-loc-map-tbody'); + locMapRowTemplate = locMapTbody.removeChild(dojo.byId('acplg-loc-map-row')); + } else { + // clear out the previous table + while (node = locMapTbody.childNodes[0]) + locMapTbody.removeChild(node); + } + + dojo.forEach(groupMaps, + function(map) { + var row = locMapRowTemplate.cloneNode(true); + row.setAttribute('map', map.id()); + var loc = locations.filter( + function(loc) { return (loc.id() == map.location()) })[0]; + dojo.query('[name=name]', row)[0].innerHTML = loc.name(); + dojo.query('[name=owning_lib]', row)[0].innerHTML = + fieldmapper.aou.findOrgUnit(loc.owning_lib()).shortname(); + locMapTbody.appendChild(row); + } + ); +} + +/* +function filterPage(org) { + + // fetch the groups and groupMaps + if(!orders) { + dojo.forEach + for (var grp + groupMaps = pcrud.search('acplgm', + {lgroupowning_lib : fieldmapper.aou.orgNodeTrail(fieldmapper.aou.findOrgUnit(org), true)}, + {order_by : {acpl : 'name'}} + ); + } + + // init the DnD environment + source.selectAll(); + source.deleteSelectedNodes(); + source.clearItems(); + + var locs = []; + + // sort and append by existing order settings + dojo.forEach(orders, + function(order) { + locs.push( + locations.filter(function(l) {return l.id() == order.location()})[0] + ); + } + ); + + // append any non-sorted locations + dojo.forEach(locations, + function(l) { + if(!locs.filter(function(ll) { return ll.id() == l.id() })[0]) + locs.push(l); + } + ); + + // shove them into the DnD environment + dojo.forEach(locs, + function(loc) { + if(!loc) return; + var node = source.insertNodes(false, [ + { + data : loc.name() + ' (' + fieldmapper.aou.findOrgUnit(loc.owning_lib()).shortname()+')', + type : [loc.id()+''] // use the type field to store the ID + } + ]); + } + ); +} + +function applyChanges() { + progressDialog.show(); + + var newOrders = []; + var contextOrg = contextOrgSelector.attr('value'); + + // pull the locations out of the DnD environment and create order entries for them + dojo.forEach( + source.getAllNodes(), + function(node) { + var item = source.getItem(node.id); + var o = new fieldmapper.acplo(); + o.position(newOrders.length + 1); + o.location(item.type[0]); // location.id() is stored in DnD item type + o.org(contextOrg); + newOrders.push(o); + } + ); + + fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.copy_location_order.update'], + { + async : true, + params : [openils.User.authtoken, newOrders], + onresponse : function(r) { + if(r = openils.Util.readResponse(r)) { + if(r.orders) { + orders = r.order; + progressDialog.hide(); + filterPage(contextOrg); + return; + } + progressDialog.update(r); + } + }, + } + ); +} +*/ + +openils.Util.addOnLoad(init); -- 2.11.0