add pcrud controller for ccmcmtm and ccmcmt
[working/Evergreen.git] / Open-ILS / web / js / ui / default / conify / global / config / circ_matrix_matchpoint.js
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');
7
8 var circModEditor = null;
9 var circModGroupTables = [];
10 var circModGroupCache = {};
11 var circModEntryCache = {};
12 var matchPoint;
13
14 function load(){
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'));
18 }
19
20 function byName(name, ctxt) {
21     return dojo.query('[name=' + name + ']', ctxt)[0];
22 }
23
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();
29
30     byName('add-circ-mod-group', node).onclick = function() {
31         addCircModGroup(node, tableTmpl)
32     }
33
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); } );
37     } 
38
39     editPane.domNode.appendChild(node);
40 }
41
42
43 function addCircModGroup(node, tableTmpl, group) {
44
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);
48
49     var entries = [];
50     if(group) {
51         entries = new openils.PermaCrud().search('ccmcmtm', {circ_mod_test : group.id()});
52         table.setAttribute('group', group.id());
53     }
54
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);
63         }
64     }
65
66     dojo.forEach(entries, function(e) { addMod(e.circ_mod()); });
67
68     byName('circ-mod-count', table).value = (group) ? group.items_out() : 0;
69
70     var selector = new openils.widget.AutoFieldWidget({
71         fmClass : 'ccmcmtm',
72         fmField : 'circ_mod',
73         parentNode : byName('circ-mod-selector', table)
74     });
75     selector.build();
76
77     byName('add-circ-mod', table).onclick = function() {
78         addMod(selector.widget.attr('value'), selector.widget.attr('displayedValue'));
79     }
80
81     node.insertBefore(table, byName('add-circ-mod-group-span', node));
82     node.insertBefore(dojo.create('hr'), byName('add-circ-mod-group-span', node));
83 }
84
85 function applyCircModChanges() {
86     var pcrud = new openils.PermaCrud();
87     progressDialog.show(true);
88
89     for(var idx in circModGroupTables) {
90         var table = circModGroupTables[idx];
91         var gp = table.getAttribute('group');
92
93         var count = byName('circ-mod-count', table).value;
94         var mods = [];
95         var entries = [];
96
97         dojo.forEach(dojo.query('[name=circ-mod]', table), function(td) { 
98             mods.push(td.getAttribute('code'));
99         });
100
101         var group = circModGroupCache[gp];
102
103         if(!group) {
104
105             group = new fieldmapper.ccmcmt();
106             group.isnew(true);
107             dojo.forEach(mods, function(mod) {
108                 var entry = new fieldmapper.ccmcmtm();
109                 entry.isnew(true);
110                 entry.circ_mod(mod);
111                 entries.push(entry);
112             });
113
114
115         } else {
116         }
117
118         group.items_out(count);
119         group.matchpoint(matchPoint);
120
121         if(group.isnew()) {
122
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();
130                         }
131                     });
132                 }
133             });
134
135         } else {
136
137         }
138
139     }
140 }
141
142 openils.Util.addOnLoad(load);
143