]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/ue.js
added surveys
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / ue.js
1 var cgi                                 = null;
2 var advanced                    = false;
3 var SC_FETCH_ALL                = 'open-ils.circ:open-ils.circ.stat_cat.actor.retrieve.all';
4 var SC_CREATE_MAP               = 'open-ils.circ:open-ils.circ.stat_cat.actor.user_map.create';
5 var SV_FETCH_ALL                = 'open-ils.circ:open-ils.circ.survey.retrieve.all';
6 var FETCH_ID_TYPES      = 'open-ils.actor:open-ils.actor.user.ident_types.retrieve';
7 var FETCH_GROUPS                = 'open-ils.actor:open-ils.actor.groups.tree.retrieve';
8 var UPDATE_PATRON               = 'open-ils.actor:open-ils.actor.patron.update';
9 var defaultState                = 'GA';
10 var counter                             = 0;
11 var dataFields;
12 var patron;
13 var identTypesCache     = {};
14 /*
15 var statCatsCache               = {};
16 */
17
18
19 /* fetch the necessary data to start off */
20 function uEditInit() {
21
22         cgi             = new CGI();
23         session = cgi.param('ses');
24         if(cgi.param('adv')) advanced = true 
25         if(!session) throw "User session is not defined";
26
27
28         fetchUser(session);
29         $('uedit_user').appendChild(text(USER.usrname()));
30         uEditShowPage('uedit_userid');
31
32         setTimeout( function() { uEditBuild(); }, 20 );
33 }
34
35 /* ------------------------------------------------------------------------------ */
36 /* Fetch code
37 /* ------------------------------------------------------------------------------ */
38 function uEditFetchIdentTypes() {
39         var req = new Request(FETCH_ID_TYPES);
40         req.send(true);
41         return req.result();
42 }
43
44 function uEditFetchStatCats() {
45         var req = new Request(SC_FETCH_ALL, SESSION);
46         req.send(true);
47         return req.result();
48 }
49
50 function uEditFetchSurveys() {
51         var req = new Request(SV_FETCH_ALL, SESSION);
52         req.send(true);
53         return req.result();
54 }
55
56 function uEditFetchGroups() {
57         var req = new Request(FETCH_GROUPS);
58         req.send(true);
59         return req.result();
60 }
61 /* ------------------------------------------------------------------------------ */
62
63
64
65 /* fetches necessary and builds the UI */
66 function uEditBuild() {
67         //fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
68
69         uEditBuildLibSelector();
70         patron = fetchFleshedUser(cgi.param('usr'));
71         if(!patron) patron = uEditNewPatron();
72
73         uEditDraw( 
74                 uEditFetchIdentTypes(),
75                 uEditFetchGroups(),
76                 uEditFetchStatCats(),
77                 uEditFetchSurveys() );
78 }
79
80
81 /* creates a new patron object with card attached */
82 function uEditNewPatron() {
83         var patron = new au(); 
84         patron.isnew(1);
85         patron.id(-1);
86         card = new ac();
87         card.id(-1);
88         patron.card(card);
89         patron.cards([card]);
90         patron.stat_cat_entries([]);
91         patron.survey_responses([]);
92         return patron;
93 }
94
95 /* Creates a new blank address, adds it to the user and the fields array */
96 var uEditVirtualAddrId = -1;
97 function uEditCreateNewAddr() {
98         var addr = new aua();
99         addr.id(uEditVirtualAddrId--);
100         addr.isnew(1);
101         addr.usr(patron.id());
102         addr.state(defaultState);
103         addr.country(defaultCountry);
104         if(patron.addresses().length == 0) {
105                 patron.mailing_address(addr);
106                 patron.billing_address(addr);
107         }
108         uEditBuildAddrFields(patron, addr);
109         patron.addresses().push(addr);
110 }
111
112
113 /* kicks off the UI drawing */
114 function uEditDraw(identTypes, groups, statCats, surveys ) {
115         hideMe($('uedit_loading'));
116         unHideMe($('ue_maintd'));
117
118         dataFields = [];
119         uEditDrawIDTypes(identTypes);
120         uEditDrawGroups(groups);
121         uEditDrawStatCats(statCats);
122         uEditDrawSurveys(surveys);
123         uEditDefineData(patron);
124
125         for( var f in dataFields ) 
126                 uEditActivateField(dataFields[f]);
127 }
128
129
130 /** Applies the event handlers and sets the data for the field */
131 function uEditActivateField(field) {
132
133         if( field.widget.id ) {
134                 field.widget.node = $(field.widget.id);
135
136         } else {
137                 field.widget.node = 
138                         $n(field.widget.base, field.widget.name);
139         }
140
141         uEditSetOnchange(field);
142
143         var val = field.object[field.key]();
144         if(val == null) return;
145
146         if( field.widget.type == 'input' )
147                 field.widget.node.value = val;
148
149         if( field.widget.type == 'select' )
150                 setSelector(field.widget.node, val);
151
152         if( field.widget.type == 'checkbox' )
153                 field.widget.node.checked = 
154                         (val && val != 'f') ? true : false;
155
156         if( field.widget.onload ) 
157                 field.widget.onload(val);
158 }
159
160
161 /* set up the onchange event for the field */
162 function uEditSetOnchange(field) {
163         var func = function() {uEditOnChange( field );}
164         field.widget.node.onchange = func;
165         field.widget.node.onkeyup = func;
166 }
167
168 /* find the current value of the field object's widget */
169 function uEditNodeVal(field) {
170         if(field.widget.type == 'input')
171                 return field.widget.node.value;
172
173         if(field.widget.type == 'checkbox')
174                 return field.widget.node.checked;
175
176         if(field.widget.type == 'select')
177                 return getSelectorVal(field.widget.node);
178 }
179
180
181 /* update a field value */
182 function uEditOnChange(field) {
183         var newval = uEditNodeVal(field);
184
185         if(newval) {
186
187                 if(field.widget.regex) { 
188                         if(newval.match(field.widget.regex)) 
189                                 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
190                         else
191                                 addCSSClass(field.widget.node, CSS_INVALID_DATA);
192
193                 } else {
194                         removeCSSClass(field.widget.node, CSS_INVALID_DATA);
195                 }
196
197         } else {
198
199                 if(field.required) {
200                         addCSSClass(field.widget.node, CSS_INVALID_DATA);
201
202                 } else {
203                         removeCSSClass(field.widget.node, CSS_INVALID_DATA);
204                 }
205         }
206
207         field.object[field.key](newval);
208         field.object.ischanged(1);
209
210         if(field.widget.onpostchange)
211                 field.widget.onpostchange(field, newval);
212 }
213
214 /* find a field object by object key */
215 function uEditFindFieldByKey(key) {
216         var fields = grep( dataFields,
217                 function(item) { return (item.key == key); });
218         return (fields) ? fields[0] : null;
219 }
220
221 /* find a list of fields by object key */
222 function uEditFindFieldsByKey(key) {
223         return grep( dataFields,
224                 function(item) { return (item.key == key); });
225 }
226
227 /* find a field object by widget id */
228 function uEditFindFieldByWId(id) {
229         var fields = grep( dataFields,
230                 function(item) { return (item.widget.id == id); });
231         return (fields) ? fields[0] : null;
232 }
233
234
235 /* send the user to the database */
236 function uEditSaveUser() {
237
238         /*
239         var es = patron.survey_responses();
240         for( var e in es ) alert(js2JSON(es[e]));
241         return;
242         */
243
244         var req = new Request(UPDATE_PATRON, SESSION, patron);
245         req.send(true);
246         var result = req.result();
247
248         if( checkILSEvent(result) ) 
249                 alert(js2JSON(result));
250         else 
251                 alert($('ue_success').innerHTML);
252
253         if (window.xulG && typeof window.xulG.save == 'function') {
254                 window.xulG.on_save(patron); 
255         } else {
256                 location.href = location.href;
257         }
258 }
259
260 function uEditShowSummary() {
261 }
262
263
264
265