]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/ue.js
new batch of user editor files, eventually will replace the existing
[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 /* if they don't have these perms, they shouldn't be here */
16 var myPerms = [ 'CREATE_USER', 'UPDATE_USER', 'CREATE_PATRON_STAT_CAT_ENTRY_MAP' ];
17
18
19 /*
20 var regexes             = {};
21 regexes.phone   = /\d{3}-\d{3}-\d{4}/;
22 regexes.email   = /.+\@.+\..+/;
23 regexes.date    = /^\d{4}-\d{2}-\d{2}/;
24 regexes.isnum   = /^\d+$/;
25 */
26
27
28 /* fetch the necessary data to start off */
29 function uEditInit() {
30
31         cgi             = new CGI();
32         session = cgi.param('ses');
33         if(cgi.param('adv')) advanced = true 
34         if(!session) throw "User session is not defined";
35
36
37         fetchUser(session);
38         $('uedit_user').appendChild(text(USER.usrname()));
39         uEditShowPage('uedit_userid');
40
41         setTimeout( function() { uEditBuild(); }, 20 );
42 }
43
44
45 function uEditBuild() {
46         fetchHighestPermOrgs( SESSION, USER.id(), myPerms );
47
48         /* these have to be synchronous */
49         uEditBuildLibSelector();
50
51         patron = fetchFleshedUser(cgi.param('usr'));
52         if(!patron) patron = uEditNewPatron();
53
54         uEditDraw( 
55                 uEditFetchIdentTypes(),
56                 uEditFetchGroups(),
57                 uEditFetchStatCats(),
58                 uEditFetchSurveys() );
59 }
60
61
62 /* creates a new patron object with card attached */
63 function uEditNewPatron() {
64         var patron = new au(); 
65         patron.isnew(1);
66         patron.id(-1);
67         card = new ac();
68         card.id(-1);
69         patron.card(card);
70         patron.cards([card]);
71         patron.stat_cat_entries([]);
72         patron.survey_responses([]);
73         return patron;
74 }
75
76
77 /* ------------------------------------------------------------------------------ */
78 /* Fetch code
79 /* ------------------------------------------------------------------------------ */
80 function uEditFetchIdentTypes() {
81         var req = new Request(FETCH_ID_TYPES);
82         req.send(true);
83         return req.result();
84 }
85
86 function uEditFetchStatCats() {
87         var req = new Request(SC_FETCH_ALL, SESSION);
88         req.send(true);
89         return req.result();
90 }
91
92 function uEditFetchSurveys() {
93         var req = new Request(SV_FETCH_ALL, SESSION);
94         req.send(true);
95         return req.result();
96 }
97
98 function uEditFetchGroups() {
99         var req = new Request(FETCH_GROUPS);
100         req.send(true);
101         return req.result();
102 }
103 /* ------------------------------------------------------------------------------ */
104
105
106 function uEditBuildLibSelector( node, depth, selector ) {
107         if(!selector) selector = $('ue_org_selector');
108         if(!node) { depth = 0; node = globalOrgTree; }
109         
110         var opt = insertSelectorVal( selector, -1, node.name(), node.id(), null, depth++ );
111
112         if(!findOrgType(node.ou_type()).can_have_users()) opt.disabled = true; 
113
114         if( node.id() == USER.ws_ou() ) 
115                 setSelector(selector, node.id());
116
117         for( var c in node.children() ) 
118                 uEditBuildLibSelector(node.children()[c], depth, selector);
119 }
120
121 function uEditDrawIDTypes(types) {
122         var pri_sel = $('ue_primary_ident_type');
123         var sec_sel = $('ue_secondary_ident_type');
124         var idx = 1;
125         for( var t in types ) {
126                 var type = types[t];
127                 if(!type.name()) continue;
128                 identTypesCache[type.id()] = type;
129                 setSelectorVal( pri_sel, idx, type.name(), type.id() );
130                 setSelectorVal( sec_sel, idx++, type.name(), type.id() );
131         }
132 }
133
134
135
136
137 function uEditDraw(identTypes, groups, statCats, surveys ) {
138
139         hideMe($('uedit_loading'));
140         unHideMe($('ue_maintd'));
141
142         uEditDrawIDTypes(identTypes);
143         uEditDefineData(patron, identTypes, groups, statCats, surveys );
144
145         for( var f in dataFields ) {
146
147                 var field = dataFields[f];
148
149                 if( field.widget.id ) {
150                         field.widget.node = $(field.widget.id);
151
152                 } else {
153                         field.widget.node = 
154                                 $n(field.widget.base, field.widget.name);
155                 }
156
157                 uEditSetOnchange(field);
158
159                 var val = field.object[field.key]();
160                 if(val == null) continue;
161
162                 if( field.widget.type == 'input' )
163                         field.widget.node.value = val;
164
165                 if( field.widget.type == 'select' )
166                         setSelector(field.widget.node, val);
167
168                 if( field.widget.onload ) 
169                         field.widget.onload(val);
170         }
171
172 }
173
174 function uEditSetOnchange(field) {
175         var func = function() {uEditOnChange( field );}
176         field.widget.node.onchange = func;
177         field.widget.node.onkeyup = func;
178 }
179
180 function uEditNodeVal(field) {
181         if(field.widget.type == 'input')
182                 return field.widget.node.value;
183
184         if(field.widget.type == 'select')
185                 return getSelectorVal(field.widget.node);
186 }
187
188
189 function uEditOnChange(field) {
190         var newval = uEditNodeVal(field);
191
192         if(newval) {
193
194                 if(field.widget.regex) { 
195                         if(newval.match(field.widget.regex)) 
196                                 removeCSSClass(field.widget.node, 'invalid_value');
197                         else
198                                 addCSSClass(field.widget.node, 'invalid_value');
199
200                 } else {
201                         removeCSSClass(field.widget.node, 'invalid_value');
202                 }
203
204         } else {
205
206                 if(field.required) {
207                         addCSSClass(field.widget.node, 'invalid_value');
208
209                 } else {
210                         removeCSSClass(field.widget.node, 'invalid_value');
211                 }
212         }
213
214         field.object[field.key](newval);
215         field.object.ischanged(1);
216
217         if(field.widget.onpostchange)
218                 field.widget.onpostchange(field, newval);
219 }
220
221 function uEditFindFieldByKey(key) {
222         var fields = grep( dataFields,
223                 function(item) { return (item.key == key); });
224         return (fields) ? fields[0] : null;
225 }
226
227 function uEditFindFieldByWId(id) {
228         var fields = grep( dataFields,
229                 function(item) { return (item.widget.id == id); });
230         return (fields) ? fields[0] : null;
231 }
232
233 function uEditSaveUser() {
234
235         var req = new Request(UPDATE_PATRON, SESSION, patron);
236         req.send(true);
237         var result = req.result();
238
239         if( checkILSEvent(result) ) 
240                 alert(js2JSON(result));
241         else 
242                 alert($('ue_success').innerHTML);
243
244         if (window.xulG && typeof window.xulG.save == 'function') {
245                 window.xulG.on_save(patron); 
246         }
247 }
248
249