From 20401fadddcf0c9ac24a7a91917bd00520e58b84 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Fri, 17 Feb 2012 17:25:15 -0500 Subject: [PATCH] copy loc groups: admin UI Signed-off-by: Bill Erickson --- .../conify/global/asset/copy_location_group.tt2 | 8 +- .../conify/global/asset/copy_location_group.js | 135 +++++++++++++++------ 2 files changed, 103 insertions(+), 40 deletions(-) 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 index 875c81aa4b..d28bb8fee5 100644 --- a/Open-ILS/src/templates/conify/global/asset/copy_location_group.tt2 +++ b/Open-ILS/src/templates/conify/global/asset/copy_location_group.tt2 @@ -72,14 +72,14 @@
- +
[% l('Group Entries') %]
- + @@ -90,7 +90,7 @@
- +
[% l('Copy Locations') %]
@@ -98,7 +98,7 @@ - + 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 index 8578fa6eea..58d05b3cc1 100644 --- 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 @@ -12,9 +12,15 @@ dojo.require('openils.widget.OrgUnitFilteringSelect'); var user; var groups; -var groupMaps; var locations; var source; +var locTbody; +var locRowTemplate; +var locMapTbody; +var locMapRowTemplate; +var currentGroupId; +var currentGroupMaps; +var currentOrg; function init() { @@ -26,7 +32,7 @@ function init() { contextOrgSelector, null, function() { - dojo.connect(contextOrgSelector, 'onChange', filterPage); + dojo.connect(contextOrgSelector, 'onChange', drawPage); } ); @@ -36,40 +42,14 @@ function init() { order_by : {aou : 'shortname'}, oncomplete : function(r) { locations = openils.Util.readResponse(r); - filterPage(user.user.ws_ou()); + drawPage(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) { +function drawPage(org) { drawLocations(org); var pcrud = new openils.PermaCrud({authtoken : user.authtoken}); @@ -96,18 +76,52 @@ function filterPage(org) { editGroupEntries(groups[0].id()); } +function drawLocations(org) { + currentOrg = 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; + + // don't show locations contained in the current group + if (currentGroupMaps) { + var existing = currentGroupMaps.filter( + function(map) { return (map.location() == loc.id()) }); + if (existing.length > 0) 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 editGroup(grpId) { // show EditDialog } + function deleteGroup(grpId) { // confirm and delete } -var locMapTbody; -var locMapRowTemplate; function editGroupEntries(grpId) { + currentGroupId = grpId; var pcrud = new openils.PermaCrud({authtoken : user.authtoken}); - groupMaps = pcrud.search('acplgm', {lgroup : grpId}); + currentGroupMaps = pcrud.search('acplgm', {lgroup : grpId}); dojo.query('[group]').forEach( function(node) { @@ -128,7 +142,7 @@ function editGroupEntries(grpId) { locMapTbody.removeChild(node); } - dojo.forEach(groupMaps, + dojo.forEach(currentGroupMaps, function(map) { var row = locMapRowTemplate.cloneNode(true); row.setAttribute('map', map.id()); @@ -138,12 +152,61 @@ function editGroupEntries(grpId) { dojo.query('[name=owning_lib]', row)[0].innerHTML = fieldmapper.aou.findOrgUnit(loc.owning_lib()).shortname(); locMapTbody.appendChild(row); + + // if the location is in the group, remove it from the location selection list + removeLocationRow(loc.id()); + } + ); +} + +function editLocations(action) { + var maps = []; + var tbody = (action == 'create') ? locTbody : locMapTbody; + dojo.forEach(tbody.getElementsByTagName('tr'), + function(row) { + var selector = dojo.query('[name=selector]', row)[0]; + if (selector.checked) { + var map = new fieldmapper.acplgm(); + map.lgroup(currentGroupId); + if (action == 'create') { + map.location(row.getAttribute('location')); + } else { + map.id(row.getAttribute('map')); + } + maps.push(map); + } } ); + + if (maps.length == 0) return; + + // check for dupes + var pcrud = new openils.PermaCrud({authtoken : user.authtoken}); + pcrud[action](maps, { + oncomplete : function() { + editGroupEntries(currentGroupId) + if (action != 'create') { + drawLocations(currentOrg); + } + } + }); +} + +function deSelectAll(node) { + dojo.query('[name=selector]', node).forEach( + function(selector) { + selector.checked = false; + } + ); +} + +function removeLocationRow(locId) { + var row = dojo.query('[location=' + locId + ']', locTbody)[0]; + if (row) locTbody.removeChild(row); } /* -function filterPage(org) { +function drawPage(org) { // fetch the groups and groupMaps if(!orders) { @@ -222,7 +285,7 @@ function applyChanges() { if(r.orders) { orders = r.order; progressDialog.hide(); - filterPage(contextOrg); + drawPage(contextOrg); return; } progressDialog.update(r); -- 2.11.0