]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/ue.js
wired up the profile page
[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                 /*
78                 uEditFetchSurveys() );
79                 */
80 }
81
82
83 /* creates a new patron object with card attached */
84 function uEditNewPatron() {
85         var patron = new au(); 
86         patron.isnew(1);
87         patron.id(-1);
88         card = new ac();
89         card.id(-1);
90         patron.card(card);
91         patron.cards([card]);
92         patron.stat_cat_entries([]);
93         patron.survey_responses([]);
94         return patron;
95 }
96
97 /* Creates a new blank address, adds it to the user and the fields array */
98 var uEditVirtualAddrId = -1;
99 function uEditCreateNewAddr() {
100         var addr = new aua();
101         addr.id(uEditVirtualAddrId--);
102         addr.isnew(1);
103         addr.usr(patron.id());
104         addr.state(defaultState);
105         addr.country(defaultCountry);
106         if(patron.addresses().length == 0) {
107                 patron.mailing_address(addr);
108                 patron.billing_address(addr);
109         }
110         uEditBuildAddrFields(patron, addr);
111         patron.addresses().push(addr);
112 }
113
114
115 /* kicks off the UI drawing */
116 function uEditDraw(identTypes, groups, statCats, surveys ) {
117         hideMe($('uedit_loading'));
118         unHideMe($('ue_maintd'));
119
120         dataFields = [];
121         uEditDrawIDTypes(identTypes);
122         uEditDrawGroups(groups);
123         uEditDrawStatCats(statCats);
124         uEditDefineData(patron);
125
126         for( var f in dataFields ) 
127                 uEditActivateField(dataFields[f]);
128 }
129
130
131 /** Applies the event handlers and sets the data for the field */
132 function uEditActivateField(field) {
133
134         if( field.widget.id ) {
135                 field.widget.node = $(field.widget.id);
136
137         } else {
138                 field.widget.node = 
139                         $n(field.widget.base, field.widget.name);
140         }
141
142         uEditSetOnchange(field);
143
144         var val = field.object[field.key]();
145         if(val == null) return;
146
147         if( field.widget.type == 'input' )
148                 field.widget.node.value = val;
149
150         if( field.widget.type == 'select' )
151                 setSelector(field.widget.node, val);
152
153         if( field.widget.type == 'checkbox' )
154                 field.widget.node.checked = 
155                         (val && val != 'f') ? true : false;
156
157         if( field.widget.onload ) 
158                 field.widget.onload(val);
159 }
160
161
162 /* set up the onchange event for the field */
163 function uEditSetOnchange(field) {
164         var func = function() {uEditOnChange( field );}
165         field.widget.node.onchange = func;
166         field.widget.node.onkeyup = func;
167 }
168
169 /* find the current value of the field object's widget */
170 function uEditNodeVal(field) {
171         if(field.widget.type == 'input')
172                 return field.widget.node.value;
173
174         if(field.widget.type == 'checkbox')
175                 return field.widget.node.checked;
176
177         if(field.widget.type == 'select')
178                 return getSelectorVal(field.widget.node);
179 }
180
181
182 /* update a field value */
183 function uEditOnChange(field) {
184         var newval = uEditNodeVal(field);
185
186         if(newval) {
187
188                 if(field.widget.regex) { 
189                         if(newval.match(field.widget.regex)) 
190                                 removeCSSClass(field.widget.node, CSS_INVALID_DATA);
191                         else
192                                 addCSSClass(field.widget.node, CSS_INVALID_DATA);
193
194                 } else {
195                         removeCSSClass(field.widget.node, CSS_INVALID_DATA);
196                 }
197
198         } else {
199
200                 if(field.required) {
201                         addCSSClass(field.widget.node, CSS_INVALID_DATA);
202
203                 } else {
204                         removeCSSClass(field.widget.node, CSS_INVALID_DATA);
205                 }
206         }
207
208         field.object[field.key](newval);
209         field.object.ischanged(1);
210
211         if(field.widget.onpostchange)
212                 field.widget.onpostchange(field, newval);
213 }
214
215 /* find a field object by object key */
216 function uEditFindFieldByKey(key) {
217         var fields = grep( dataFields,
218                 function(item) { return (item.key == key); });
219         return (fields) ? fields[0] : null;
220 }
221
222 /* find a field object by widget id */
223 function uEditFindFieldByWId(id) {
224         var fields = grep( dataFields,
225                 function(item) { return (item.widget.id == id); });
226         return (fields) ? fields[0] : null;
227 }
228
229
230 /* send the user to the database */
231 function uEditSaveUser() {
232
233         var req = new Request(UPDATE_PATRON, SESSION, patron);
234         req.send(true);
235         var result = req.result();
236
237         var es = patron.stat_cat_entries();
238         for( var e in es ) alert(js2JSON(es[e]));
239         return;
240
241         if( checkILSEvent(result) ) 
242                 alert(js2JSON(result));
243         else 
244                 alert($('ue_success').innerHTML);
245
246         if (window.xulG && typeof window.xulG.save == 'function') {
247                 window.xulG.on_save(patron); 
248         }
249 }
250
251