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() {
contextOrgSelector,
null,
function() {
- dojo.connect(contextOrgSelector, 'onChange', filterPage);
+ dojo.connect(contextOrgSelector, 'onChange', drawPage);
}
);
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});
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) {
locMapTbody.removeChild(node);
}
- dojo.forEach(groupMaps,
+ dojo.forEach(currentGroupMaps,
function(map) {
var row = locMapRowTemplate.cloneNode(true);
row.setAttribute('map', map.id());
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) {
if(r.orders) {
orders = r.order;
progressDialog.hide();
- filterPage(contextOrg);
+ drawPage(contextOrg);
return;
}
progressDialog.update(r);