1 dojo.require('dijit.layout.ContentPane');
2 dojo.require('dijit.form.Button');
3 dojo.require('openils.widget.AutoGrid');
4 dojo.require('openils.widget.AutoFieldWidget');
5 dojo.require('openils.PermaCrud');
6 dojo.require('openils.widget.ProgressDialog');
8 var circModEditor = null;
9 var circModGroupTables = [];
10 var circModGroupCache = {};
11 var circModEntryCache = {};
15 cmGrid.loadAll({order_by:{ccmm:'circ_modifier'}});
16 cmGrid.onEditPane = buildEditPaneAdditions;
17 circModEditor = dojo.byId('circ-mod-editor').parentNode.removeChild(dojo.byId('circ-mod-editor'));
20 function byName(name, ctxt) {
21 return dojo.query('[name=' + name + ']', ctxt)[0];
24 function buildEditPaneAdditions(editPane) {
25 var node = circModEditor.cloneNode(true);
26 var tableTmpl = node.removeChild(byName('circ-mod-group-table', node));
27 circModGroupTables = [];
28 matchPoint = editPane.fmObject.id();
30 byName('add-circ-mod-group', node).onclick = function() {
31 addCircModGroup(node, tableTmpl)
34 if(editPane.mode == 'update') {
35 var groups = new openils.PermaCrud().search('ccmcmt', {matchpoint: editPane.fmObject.id()});
36 dojo.forEach(groups, function(g) { addCircModGroup(node, tableTmpl, g); } );
39 editPane.domNode.appendChild(node);
43 function addCircModGroup(node, tableTmpl, group) {
45 var table = tableTmpl.cloneNode(true);
46 var circModRowTmpl = byName('circ-mod-entry-tbody', table).removeChild(byName('circ-mod-entry-row', table));
47 circModGroupTables.push(table);
51 entries = new openils.PermaCrud().search('ccmcmtm', {circ_mod_test : group.id()});
52 table.setAttribute('group', group.id());
55 function addMod(code, name) {
56 name = name || code; // XXX
57 var row = circModRowTmpl.cloneNode(true);
58 byName('circ-mod', row).innerHTML = name;
59 byName('circ-mod', row).setAttribute('code', code);
60 byName('circ-mod-entry-tbody', table).appendChild(row);
61 byName('remove-circ-mod', row).onclick = function() {
62 byName('circ-mod-entry-tbody', table).removeChild(row);
66 dojo.forEach(entries, function(e) { addMod(e.circ_mod()); });
68 byName('circ-mod-count', table).value = (group) ? group.items_out() : 0;
70 var selector = new openils.widget.AutoFieldWidget({
73 parentNode : byName('circ-mod-selector', table)
77 byName('add-circ-mod', table).onclick = function() {
78 addMod(selector.widget.attr('value'), selector.widget.attr('displayedValue'));
81 node.insertBefore(table, byName('add-circ-mod-group-span', node));
82 node.insertBefore(dojo.create('hr'), byName('add-circ-mod-group-span', node));
85 function applyCircModChanges() {
86 var pcrud = new openils.PermaCrud();
87 progressDialog.show(true);
89 for(var idx in circModGroupTables) {
90 var table = circModGroupTables[idx];
91 var gp = table.getAttribute('group');
93 var count = byName('circ-mod-count', table).value;
97 dojo.forEach(dojo.query('[name=circ-mod]', table), function(td) {
98 mods.push(td.getAttribute('code'));
101 var group = circModGroupCache[gp];
105 group = new fieldmapper.ccmcmt();
107 dojo.forEach(mods, function(mod) {
108 var entry = new fieldmapper.ccmcmtm();
118 group.items_out(count);
119 group.matchpoint(matchPoint);
123 pcrud.create(group, {
124 oncomplete : function(r) {
125 var group = openils.Util.readResponse(r);
126 dojo.forEach(entries, function(e) { e.circ_mod_test(group.id()) } );
127 pcrud.create(entries, {
128 oncomplete : function() {
129 progressDialog.hide();
142 openils.Util.addOnLoad(load);