dojo.require('dijit.Dialog');
dojo.require('dijit.form.Button');
dojo.require('dijit.form.TextBox');
+dojo.require('dijit.form.FilteringSelect');
dojo.require('dijit.form.Button');
dojo.require('dojox.grid.cells.dijit');
dojo.require('openils.acq.Picklist');
dojo.require('openils.Util');
+dojo.require('openils.widget.ProgressDialog');
var listAll = false;
var plCache = {};
function loadGrid() {
+
+ dojo.connect(plMergeDialog, 'onOpen', function(){loadLeadPlSelector();});
+
var method = 'open-ils.acq.picklist.user.retrieve';
if(listAll)
method = method.replace(/user/, 'user.all');
var store = new dojo.data.ItemFileWriteStore({data:acqpl.initStoreData()});
plListGrid.setStore(store);
plListGrid.render();
- dojo.connect(store, 'onSet', plGridChanged);
fieldmapper.standardRequest(
['open-ils.acq', method],
plCache[pl.id()] = pl;
store.newItem(acqpl.toStoreItem(pl));
}
- }
+ },
}
);
}
}
);
}
-function plGridChanged(item, attr, oldVal, newVal) {
- var pl = plCache[plListGrid.store.getValue(item, 'id')];
- console.log("changing pl " + pl.id() + " object: " + attr + " = " + newVal);
- pl[attr](newVal);
- pl.ischanged(true);
- plSaveButton.setDisabled(false);
-}
-function saveChanges() {
- plListGrid.doclick(0);
- var changedObjects = [];
- for(var i in plCache){
- var pl = plCache[i];
- if(pl.ischanged())
- changedObjects.push(pl);
- }
- _saveChanges(changedObjects, 0);
-}
-function _saveChanges(changedObjects, idx) {
-
- if(idx >= changedObjects.length) {
- // we've made it through the list
- plSaveButton.setDisabled(true);
- return;
- }
-
- var pl = changedObjects[idx];
- var owner = pl.owner();
- pl.owner(owner.id()); // un-flesh the owner object
-
- fieldmapper.standardRequest(
- ['open-ils.acq', 'open-ils.acq.picklist.update'],
- { async: true,
- params: [openils.User.authtoken, pl],
- oncomplete: function(r) {
- if(stat = openils.Util.readResponse(r)) {
- _saveChanges(changedObjects, ++idx);
- }
- }
- }
- );
-}
function getDateTimeField(rowIndex, item) {
if(!item) return '';
openils.acq.Picklist.deleteList(list);
}
+function cloneSelectedPl(fields) {
+
+ var selected = plListGrid.selection.getSelected();
+ if(selected.length == 0 || !(fields.name)) return;
+
+ var item = selected[0]; // clone the first selected
+ progressDialog.show();
+ progressDialog.update({maximum:item.entry_count, progress:0});
+
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.picklist.clone'],
+ { async: true,
+ params: [openils.User.authtoken, item.id, fields.name],
+ onresponse : function(r) {
+ var resp = openils.Util.readResponse(r);
+ if(!resp) return;
+ progressDialog.update({progress:resp.li});
+ if(resp.complete) {
+ progressDialog.hide();
+ var pl = resp.picklist;
+ plCache[pl.id()] = pl;
+ pl.owner(openils.User.user);
+ plListGrid.store.newItem(fieldmapper.acqpl.toStoreItem(pl));
+ }
+ }
+ }
+ );
+}
+
+function loadLeadPlSelector() {
+ var store = new dojo.data.ItemFileWriteStore({data:acqpl.initStoreData()});
+ var selected = plListGrid.selection.getSelected();
+ dojo.forEach(selected, function(item) {
+ var pl = plCache[plListGrid.store.getValue(item, 'id')];
+ store.newItem(fieldmapper.acqpl.toStoreItem(pl));
+ });
+ plMergeLeadSelector.store = store;
+ plMergeLeadSelector.startup();
+}
+
+function mergeSelectedPl(fields) {
+ if(!fields.lead) return;
+
+ var ids = [];
+ var totalLi = 0;
+ var selected = plListGrid.selection.getSelected();
+ var leadPl = plCache[fields.lead];
+
+ dojo.forEach(selected, function(item) {
+ var id = plListGrid.store.getValue(item, 'id');
+ if(id == fields.lead) return;
+ totalLi += new Number(plListGrid.store.getValue(item, 'entry_count'));
+ ids.push(id);
+ });
+
+ progressDialog.show();
+ progressDialog.update({maximum:totalLi, progress:0});
+
+ fieldmapper.standardRequest(
+ ['open-ils.acq', 'open-ils.acq.picklist.merge'],
+ { async: true,
+ params: [openils.User.authtoken, fields.lead, ids],
+ onresponse : function(r) {
+ var resp = openils.Util.readResponse(r);
+ if(!resp) return;
+ progressDialog.update({progress:resp.li});
+
+ if(resp.complete) {
+ progressDialog.hide();
+ leadPl.entry_count( leadPl.entry_count() + totalLi );
+
+ // remove the deleted lists from the grid
+ dojo.forEach(selected, function(item) {
+ var id = plListGrid.store.getValue(item, 'id');
+ if(id != fields.lead)
+ plListGrid.store.deleteItem(item);
+ });
+ }
+ }
+ }
+ );
+
+}
+
openils.Util.addOnLoad(loadGrid);
}
</script>
<div class='oils-acq-actions-div'>
- <div dojoType="dijit.form.DropDownButton">
- <span>New Selection List</span>
- <div dojoType="dijit.TooltipDialog" execute="createPL(arguments[0]);">
- <table class='dijitTooltipTable'>
- <tr>
- <td><label for="name">Name:</label></td>
- <td><input dojoType="dijit.form.TextBox" name="name"/></td>
+
+ <div dojoType="dijit.form.DropDownButton">
+ <span>New Selection List</span>
+ <div dojoType="dijit.TooltipDialog" execute="createPL(arguments[0]);">
+ <table class='dijitTooltipTable'>
+ <tr>
+ <td><label for="name">Name:</label></td>
+ <td><input dojoType="dijit.form.TextBox" name="name"/></td>
</tr>
<tr>
<td colspan='2' align='center'>
</table>
</div>
</div>
- <button dojoType='dijit.form.Button' onclick="saveChanges();" disabled='disabled' jsId="plSaveButton">Save Changes</button>
- <button dojoType="dijit.form.Button" onclick="deleteFromGrid();">
- Delete Selected
- </button>
+
+ <button dojoType="dijit.form.Button" onclick="deleteFromGrid();">Delete Selected</button>
+
+ <div dojoType="dijit.form.DropDownButton">
+ <span>Clone Selected</span>
+ <div dojoType="dijit.TooltipDialog" execute="cloneSelectedPl(arguments[0]);">
+ <table class='dijitTooltipTable'>
+ <tr>
+ <td><label for="name">New Name:</label></td>
+ <td><input dojoType="dijit.form.TextBox" name="name"/></td>
+ </tr>
+ <tr>
+ <td colspan='2' align='center'>
+ <button dojoType='dijit.form.Button' type="submit">Clone</button>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
+ <div dojoType="dijit.form.DropDownButton">
+ <span>Merge Selected</span>
+ <div dojoType="dijit.TooltipDialog" execute="mergeSelectedPl(arguments[0]);" jsId='plMergeDialog'>
+ <table class='dijitTooltipTable'>
+ <tr>
+ <td><label for="name">Choose the Lead Selection List:</label></td>
+ <td><input jsId='plMergeLeadSelector' dojoType="dijit.form.FilteringSelect" name="lead"/></td>
+ </tr>
+ <tr>
+ <td colspan='2' align='center'>
+ <button dojoType='dijit.form.Button' type="submit">Merge</button>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="top">
</div>
</div>
+<div class='hidden'><div jsId='progressDialog' dojoType='openils.widget.ProgressDialog'/></div>
+
[% END %]