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');
13 var fmClasses = ['au', 'ac', 'aua', 'actsc', 'asv', 'asvq', 'asva'];
20 var uEditUsePhonePw = false;
22 var uEditCardVirtId = -1;
23 var uEditAddrVirtId = -1;
27 staff = new openils.User().user;
28 pcrud = new openils.PermaCrud();
30 var list = pcrud.search('fdoc', {fm_class:fmClasses});
33 if(!fieldDoc[doc.fm_class()])
34 fieldDoc[doc.fm_class()] = {};
35 fieldDoc[doc.fm_class()][doc.field()] = doc;
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'));
43 loadStaticFields(tbody);
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');
55 fleshFMRow(row, fmcls);
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()]}
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';
80 comboBox._wtype = 'statcat';
81 comboBox._statcat = stat.id();
82 widgetPile.push(comboBox);
87 function loadSurveys(tbody) {
89 surveys = fieldmapper.standardRequest(
90 ['open-ils.circ', 'open-ils.circ.survey.retrieve.all'],
91 {params : [openils.User.authtoken]}
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();
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();
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';
114 select._wtype = 'survey';
115 select._survey = survey.id();
116 select._question = quest.id();
117 widgetPile.push(select);
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];
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'));
134 openils.Util.addCSSClass(htd, 'uedit-help');
135 if(fieldDoc[fmcls] && fieldDoc[fmcls][fmfield]) {
136 var link = dojo.byId('uedit-help-template').cloneNode(true);
138 link.setAttribute('href', 'javascript:ueLoadContextHelp("'+fmcls+'","'+fmfield+'")');
139 openils.Util.removeCSSClass(link, 'hidden');
140 htd.appendChild(link);
143 if(!ltd.textContent) {
144 var span = document.createElement('span');
145 ltd.appendChild(document.createTextNode(fieldIdl.label));
148 span = document.createElement('span');
149 wtd.appendChild(span);
151 var widget = new openils.widget.AutoFieldWidget({
153 fmObject : null, // XXX
156 widgetClass : wclass,
157 dijitArgs : {style: wstyle},
158 orgLimitPerms : ['UPDATE_USER'],
162 widget._wtype = fmcls;
163 widget._fmfield = fmfield;
164 widget._addr = uEditAddrVirtId;
165 widgetPile.push(widget);
168 function getByName(node, name) {
169 return dojo.query('[name='+name+']', node)[0];
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();
180 /* creates a new patron object with card attached */
181 function uEditNewPatron() {
186 card.id(uEditCardVirtId--);
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);
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';
204 appendClear($('ue_password_plain'),text(rand));
205 unHideMe($('ue_password_gen'));
211 function uEditWidgetVal(w) {
212 var val = (w.getFormattedValue) ? w.getFormattedValue() : w.attr('value');
213 if(val == '') val = null;
217 function uEditSave() {
218 if(!patron) uEditNewPatron();
220 for(var idx in widgetPile) {
221 var w = widgetPile[idx];
222 console.log(w._wtype + ' : ' + w._fmfield + ' : ' + uEditWidgetVal(w));
226 patron[w._fmfield](uEditWidgetVal(w));
230 patron.card()[w._fmfield](uEditWidgetVal(w));
234 var addr = patron.addresses().filter(function(i){return (i.id() == w._addr)})[0];
236 addr = new fieldmapper.aua();
239 patron.addresses().push(addr);
240 console.log("pushing address " + addr.id());
242 addr[w._fmfield](uEditWidgetVal(w));
246 var val = uEditWidgetVal(w);
247 if(val == null) break;
248 var resp = new fieldmapper.asvr();
250 resp.survey(w._survey)
251 resp.usr(patron.id());
252 resp.question(w._question)
254 patron.survey_responses().push(resp);
258 var val = uEditWidgetVal(w);
259 if(val == null) break;
260 var map = new fieldmapper.actscecm();
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);
270 console.log(js2JSON(patron.addresses()));
271 alert(js2JSON(patron));
273 fieldmapper.standardRequest(
274 ['open-ils.actor', 'open-ils.actor.patron.update'],
276 params: [openils.User.authtoken, patron],
277 oncomplete: function(r) {
278 patron = openils.Util.readResponse(r);
283 alert('no success?');
290 function uEditRefresh() {
291 var href = location.href;
292 href = href.replace(/\&?clone=\d+/, '');
293 location.href = href;
302 openils.Util.addOnLoad(load);