]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/actor/user/register.js
plugged in saving of new users
[working/Evergreen.git] / Open-ILS / web / js / ui / default / actor / user / register.js
1 dojo.require('dojo.data.ItemFileReadStore');
2 dojo.require('dijit.form.Textarea');
3 dojo.require('dijit.form.FilteringSelect');
4 dojo.require('dijit.form.ComboBox');
5 dojo.require('fieldmapper.IDL');
6 dojo.require('openils.PermaCrud');
7 dojo.require('openils.widget.AutoGrid');
8 dojo.require('openils.widget.AutoFieldWidget');
9 dojo.require('dijit.form.CheckBox');
10 dojo.require('dijit.form.Button');
11
12 var pcrud;
13 var fmClasses = ['au', 'ac', 'aua', 'actsc', 'asv', 'asvq', 'asva'];
14 var fieldDoc = {};
15 var statCats;
16 var statCatTempate;
17 var surveys;
18 var staff;
19 var patron;
20 var uEditUsePhonePw = false;
21 var widgetPile = [];
22 var uEditCardVirtId = -1;
23 var uEditAddrVirtId = -1;
24
25
26 function load() {
27     staff = new openils.User().user;
28     pcrud = new openils.PermaCrud();
29     
30     var list = pcrud.search('fdoc', {fm_class:fmClasses});
31     for(var i in list) {
32         var doc = list[i];
33         if(!fieldDoc[doc.fm_class()])
34             fieldDoc[doc.fm_class()] = {};
35         fieldDoc[doc.fm_class()][doc.field()] = doc;
36     }
37
38     var tbody = dojo.byId('uedit-tbody');
39     statCatTemplate = tbody.removeChild(dojo.byId('stat-cat-row-template'));
40     surveyTemplate = tbody.removeChild(dojo.byId('survey-row-template'));
41     surveyQuestionTemplate = tbody.removeChild(dojo.byId('survey-question-row-template'));
42
43     loadStaticFields(tbody);
44     loadStatCats(tbody);
45     loadSurveys(tbody);
46 }
47
48 function loadStaticFields(tbody) {
49     // draw static user/addr fields
50     for(var idx = 0; tbody.childNodes[idx]; idx++) {
51         var row = tbody.childNodes[idx];
52         if(row.nodeType != row.ELEMENT_NODE) continue;
53         var fmcls = row.getAttribute('fmclass');
54         if(!fmcls) continue;
55         fleshFMRow(row, fmcls);
56     }
57 }
58
59 function loadStatCats(tbody) {
60     statCats = fieldmapper.standardRequest(
61         ['open-ils.circ', 'open-ils.circ.stat_cat.actor.retrieve.all'],
62         {params : [openils.User.authtoken, staff.ws_ou()]}
63     );
64
65     // draw stat cats
66     for(var idx in statCats) {
67         var stat = statCats[idx];
68         var row = statCatTemplate.cloneNode(true);
69         row.id = 'stat-cat-row-' + idx;
70         tbody.appendChild(row);
71         getByName(row, 'name').innerHTML = stat.name();
72         var valtd = getByName(row, 'widget');
73         var span = valtd.appendChild(document.createElement('span'));
74         var store = new dojo.data.ItemFileReadStore(
75                 {data:fieldmapper.actsc.toStoreData(stat.entries())});
76         var comboBox = new dijit.form.ComboBox({store:store}, span);
77         comboBox.labelAttr = 'value';
78         comboBox.searchAttr = 'value';
79
80         comboBox._wtype = 'statcat';
81         comboBox._statcat = stat.id();
82         widgetPile.push(comboBox); 
83
84     }
85 }
86
87 function loadSurveys(tbody) {
88
89     surveys = fieldmapper.standardRequest(
90         ['open-ils.circ', 'open-ils.circ.survey.retrieve.all'],
91         {params : [openils.User.authtoken]}
92     );
93
94     // draw surveys
95     for(var idx in surveys) {
96         var survey = surveys[idx];
97         var srow = surveyTemplate.cloneNode(true);
98         tbody.appendChild(srow);
99         getByName(srow, 'name').innerHTML = survey.name();
100
101         for(var q in survey.questions()) {
102             var quest = survey.questions()[q];
103             var qrow = surveyQuestionTemplate.cloneNode(true);
104             tbody.appendChild(qrow);
105             getByName(qrow, 'question').innerHTML = quest.question();
106
107             var span = getByName(qrow, 'answers').appendChild(document.createElement('span'));
108             var store = new dojo.data.ItemFileReadStore(
109                 {data:fieldmapper.asva.toStoreData(quest.answers())});
110             var select = new dijit.form.FilteringSelect({store:store}, span);
111             select.labelAttr = 'answer';
112             select.searchAttr = 'answer';
113
114             select._wtype = 'survey';
115             select._survey = survey.id();
116             select._question = quest.id();
117             widgetPile.push(select); 
118         }
119     }
120 }
121
122
123 function fleshFMRow(row, fmcls) {
124     var fmfield = row.getAttribute('fmfield');
125     var wclass = row.getAttribute('wclass');
126     var wstyle = row.getAttribute('wstyle');
127     var fieldIdl = fieldmapper.IDL.fmclasses[fmcls].field_map[fmfield];
128
129     var existing = dojo.query('td', row);
130     var htd = existing[0] || row.appendChild(document.createElement('td'));
131     var ltd = existing[1] || row.appendChild(document.createElement('td'));
132     var wtd = existing[2] || row.appendChild(document.createElement('td'));
133
134     openils.Util.addCSSClass(htd, 'uedit-help');
135     if(fieldDoc[fmcls] && fieldDoc[fmcls][fmfield]) {
136         var link = dojo.byId('uedit-help-template').cloneNode(true);
137         link.id = '';
138         link.setAttribute('href', 'javascript:ueLoadContextHelp("'+fmcls+'","'+fmfield+'")');
139         openils.Util.removeCSSClass(link, 'hidden');
140         htd.appendChild(link);
141     }
142
143     if(!ltd.textContent) {
144         var span = document.createElement('span');
145         ltd.appendChild(document.createTextNode(fieldIdl.label));
146     }
147
148     span = document.createElement('span');
149     wtd.appendChild(span);
150
151     var widget = new openils.widget.AutoFieldWidget({
152         idlField : fieldIdl,
153         fmObject : null, // XXX
154         fmClass : fmcls,
155         parentNode : span,
156         widgetClass : wclass,
157         dijitArgs : {style: wstyle},
158         orgLimitPerms : ['UPDATE_USER'],
159     });
160     widget.build();
161
162     widget._wtype = fmcls;
163     widget._fmfield = fmfield;
164     widget._addr = uEditAddrVirtId;
165     widgetPile.push(widget);
166 }
167
168 function getByName(node, name) {
169     return dojo.query('[name='+name+']', node)[0];
170 }
171
172
173 function ueLoadContextHelp(fmcls, fmfield) {
174     openils.Util.removeCSSClass(dojo.byId('uedit-help-div'), 'hidden');
175     dojo.byId('uedit-help-field').innerHTML = fieldmapper.IDL.fmclasses[fmcls].field_map[fmfield].label;
176     dojo.byId('uedit-help-text').innerHTML = fieldDoc[fmcls][fmfield].string();
177 }
178
179
180 /* creates a new patron object with card attached */
181 function uEditNewPatron() {
182     patron = new au();
183     patron.isnew(1);
184     patron.id(-1);
185     card = new ac();
186     card.id(uEditCardVirtId--);
187     card.isnew(1);
188     patron.card(card);
189     patron.cards([card]);
190     //patron.net_access_level(defaultNetLevel);
191     patron.stat_cat_entries([]);
192     patron.survey_responses([]);
193     patron.addresses([]);
194     //patron.home_ou(USER.ws_ou());
195     uEditMakeRandomPw(patron);
196 }
197
198 function uEditMakeRandomPw(patron) {
199     if(uEditUsePhonePw) return;
200     var rand  = Math.random();
201     rand = parseInt(rand * 10000) + '';
202     while(rand.length < 4) rand += '0';
203 /*
204     appendClear($('ue_password_plain'),text(rand));
205     unHideMe($('ue_password_gen'));
206 */
207     patron.passwd(rand);
208     return rand;
209 }
210
211 function uEditWidgetVal(w) {
212     var val = (w.getFormattedValue) ? w.getFormattedValue() : w.attr('value');
213     if(val == '') val = null;
214     return val;
215 }
216
217 function uEditSave() {
218     if(!patron) uEditNewPatron();
219
220     for(var idx in widgetPile) {
221         var w = widgetPile[idx];
222         console.log(w._wtype + ' : ' + w._fmfield + ' : ' + uEditWidgetVal(w));
223
224         switch(w._wtype) {
225             case 'au':
226                 patron[w._fmfield](uEditWidgetVal(w));
227                 break;
228
229             case 'ac':
230                 patron.card()[w._fmfield](uEditWidgetVal(w));
231                 break;
232
233             case 'aua':
234                 var addr = patron.addresses().filter(function(i){return (i.id() == w._addr)})[0];
235                 if(!addr) {
236                     addr = new fieldmapper.aua();
237                     addr.id(w._addr);
238                     addr.isnew(1);
239                     patron.addresses().push(addr);
240                     console.log("pushing address " + addr.id());
241                 }
242                 addr[w._fmfield](uEditWidgetVal(w));
243                 break;
244
245             case 'survey':
246                 var val = uEditWidgetVal(w);
247                 if(val == null) break;
248                 var resp = new fieldmapper.asvr();
249                 resp.isnew(1);
250                 resp.survey(w._survey)
251                 resp.usr(patron.id());
252                 resp.question(w._question)
253                 resp.answer(val);
254                 patron.survey_responses().push(resp);
255                 break;
256
257             case 'statcat':
258                 var val = uEditWidgetVal(w);
259                 if(val == null) break;
260                 var map = new fieldmapper.actscecm();
261                 map.isnew(1);
262                 map.stat_cat(w._statcat);
263                 map.stat_cat_entry(val);
264                 map.target_usr(patron.id());
265                 patron.stat_cat_entries().push(map);
266                 break;
267         }
268     }
269
270     console.log(js2JSON(patron.addresses()));
271     alert(js2JSON(patron));
272
273     fieldmapper.standardRequest(
274         ['open-ils.actor', 'open-ils.actor.patron.update'],
275         {   async: true,
276             params: [openils.User.authtoken, patron],
277             oncomplete: function(r) {
278                 patron = openils.Util.readResponse(r);
279                 if(patron) {
280                     alert('success');
281                     //uEditRefresh();
282                 } else {
283                     alert('no success?');
284                 }
285             }
286         }
287     );
288 }
289
290 function uEditRefresh() {
291     var href = location.href;
292     href = href.replace(/\&?clone=\d+/, '');
293     location.href = href;
294 }
295
296
297
298
299
300
301
302 openils.Util.addOnLoad(load);
303