]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/display.js
patron display
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / display.js
1 dump('entering patron/display.js\n');
2
3 if (typeof patron == 'undefined') patron = {};
4 patron.display = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('main.window'); this.window = new main.window();
8         JSAN.use('main.network'); this.network = new main.network();
9         this.w = window;
10 }
11
12 patron.display.prototype = {
13
14         'init' : function( params ) {
15
16                 this.session = params['session'];
17                 this.barcode = params['barcode'];
18
19                 JSAN.use('OpenILS.data'); this.OpenILS = {}; 
20                 this.OpenILS.data = new OpenILS.data( { 'session' : params.session } ); this.OpenILS.data.init(true);
21
22                 var obj = this;
23                 obj.view = {}; obj.render_list = [];
24
25                 var control_map = {
26                         'cmd_broken' : [
27                                 ['command'],
28                                 function() { alert('Not Yet Implemented'); }
29                         ],
30                         'patron_name' : [
31                                 ['render'],
32                                 function(e) {
33                                         return function() { 
34                                                 e.setAttribute('value',
35                                                         obj.patron.family_name() + ', ' + obj.patron.first_given_name()
36                                                 );
37                                                 e.setAttribute('style','background-color: lime');
38                                                 //FIXME//bills should become a virtual field
39                                                 if (obj.patron.bills.length > 0)
40                                                         e.setAttribute('style','background-color: yellow');
41                                                 if (obj.patron.standing() == 2)
42                                                         e.setAttribute('style','background-color: lightred');
43
44                                         };
45                                 }
46                         ],
47                         'patron_profile' : [
48                                 ['render'],
49                                 function(e) {
50                                         return function() { 
51                                                 e.setAttribute('value',
52                                                         obj.OpenILS.data.hash.pgt[
53                                                                 obj.patron.profile()
54                                                         ].name()
55                                                 );
56                                         };
57                                 }
58                         ],
59                         'patron_standing' : [
60                                 ['render'],
61                                 function(e) {
62                                         return function() {
63                                                 e.setAttribute('value',
64                                                         obj.OpenILS.data.hash.cst[
65                                                                 obj.patron.standing()
66                                                         ].value()
67                                                 );
68                                         };
69                                 }
70                         ],
71                         'patron_credit' : [
72                                 ['render'],
73                                 function(e) {
74                                         return function() { 
75                                                 JSAN.use('util.money');
76                                                 e.setAttribute('value',
77                                                         util.money.cents_as_dollars(
78                                                                 obj.patron.credit_forward_balance()
79                                                         )
80                                                 );
81                                         };
82                                 }
83                         ],
84                         'patron_bill' : [
85                                 ['render'],
86                                 function(e) {
87                                         return function() { 
88                                                 JSAN.use('util.money');
89                                                 var total = 0;
90                                                 //FIXME//adjust when .bills becomes a virtual field
91                                                 for (var i = 0; i < obj.patron.bills.length; i++) {
92                                                         total += util.money.dollars_float_to_cents_integer( 
93                                                                 obj.patron.bills[i].balance_owed() 
94                                                         );
95                                                 }
96                                                 e.setAttribute('value',
97                                                         util.money.cents_as_dollars( total )
98                                                 );
99                                         };
100                                 }
101                         ],
102                         'patron_checkouts' : [
103                                 ['render'],
104                                 function(e) {
105                                         return function() { 
106                                                 e.setAttribute('value',
107                                                         obj.patron.checkouts.length     
108                                                 );
109                                         };
110                                 }
111                         ],
112                         'patron_overdue' : [
113                                 ['render'],
114                                 function(e) {
115                                         return function() { 
116                                                 //FIXME//Get Bill to do this correctly on server side
117                                                 JSAN.use('util.date');
118                                                 var total = 0;
119                                                 for (var i = 0; i < obj.patron.checkouts().length; i++) {
120                                                         var item = obj.patron.checkouts()[i];
121                                                         var due_date = item.circ.due_date();
122                                                         due_date = due_date.substr(0,4) 
123                                                                 + due_date.substr(5,2) + due_date.substr(8,2);
124                                                         var today = util.date.formatted_date( new Date() , '%Y%m%d' );
125                                                         if (today > due_date) total++;
126                                                 }
127                                                 e.setAttribute('value',
128                                                         total
129                                                 );
130                                         };
131                                 }
132                         ],
133                         'patron_holds' : [
134                                 ['render'],
135                                 function(e) {
136                                         return function() { 
137                                                 e.setAttribute('value',
138                                                         obj.patron.hold_requests.length
139                                                 );
140                                         };
141                                 }
142                         ],
143                         'patron_holds_available' : [
144                                 ['render'],
145                                 function(e) {
146                                         return function() { 
147                                                 var total = 0;
148                                                 for (var i = 0; i < obj.patron.hold_requests().length; i++) {
149                                                         var hold = obj.patron.hold_requests()[i];
150                                                         if (hold.capture_time()) total++;
151                                                 }
152                                                 e.setAttribute('value',
153                                                         total
154                                                 );
155                                         };
156                                 }
157                         ],
158                         'patron_card' : [
159                                 ['render'],
160                                 function(e) {
161                                         return function() { 
162                                                 e.setAttribute('value',
163                                                         obj.patron.card().barcode()
164                                                 );
165                                         };
166                                 }
167                         ],
168                         'patron_ident_type_1' : [
169                                 ['render'],
170                                 function(e) {
171                                         return function() { 
172                                                 var ident_string = '';
173                                                 var ident = obj.OpenILS.data.hash.cit[
174                                                         obj.patron.ident_type()
175                                                 ];
176                                                 if (ident) ident_string = ident.name()
177                                                 e.setAttribute('value',
178                                                         ident_string
179                                                 );
180                                         };
181                                 }
182                         ],
183                         'patron_ident_value_1' : [
184                                 ['render'],
185                                 function(e) {
186                                         return function() { 
187                                                 e.setAttribute('value',
188                                                         obj.patron.ident_value()
189                                                 );
190                                         };
191                                 }
192                         ],
193                         'patron_ident_type_2' : [
194                                 ['render'],
195                                 function(e) {
196                                         return function() { 
197                                                 var ident_string = '';
198                                                 var ident = obj.OpenILS.data.hash.cit[
199                                                         obj.patron.ident_type2()
200                                                 ];
201                                                 if (ident) ident_string = ident.name()
202                                                 e.setAttribute('value',
203                                                         ident_string
204                                                 );
205                                         };
206                                 }
207                         ],
208                         'patron_ident_value_2' : [
209                                 ['render'],
210                                 function(e) {
211                                         return function() { 
212                                                 e.setAttribute('value',
213                                                         obj.patron.ident_value2()
214                                                 );
215                                         };
216                                 }
217                         ],
218                         'patron_date_of_birth' : [
219                                 ['render'],
220                                 function(e) {
221                                         return function() { 
222                                                 e.setAttribute('value',
223                                                         obj.patron.dob()
224                                                 );
225                                         };
226                                 }
227                         ],
228                         'patron_day_phone' : [
229                                 ['render'],
230                                 function(e) {
231                                         return function() { 
232                                                 e.setAttribute('value',
233                                                         obj.patron.day_phone()
234                                                 );
235                                         };
236                                 }
237                         ],
238                         'patron_evening_phone' : [
239                                 ['render'],
240                                 function(e) {
241                                         return function() { 
242                                                 e.setAttribute('value',
243                                                         obj.patron.evening_phone()
244                                                 );
245                                         };
246                                 }
247                         ],
248                         'patron_other_phone' : [
249                                 ['render'],
250                                 function(e) {
251                                         return function() { 
252                                                 e.setAttribute('value',
253                                                         obj.patron.other_phone()
254                                                 );
255                                         };
256                                 }
257                         ],
258                         'patron_email' : [
259                                 ['render'],
260                                 function(e) {
261                                         return function() { 
262                                                 e.setAttribute('value',
263                                                         obj.patron.email()
264                                                 );
265                                         };
266                                 }
267                         ],
268                         'patron_photo_url' : [
269                                 ['render'],
270                                 function(e) {
271                                         return function() { 
272                                                 e.setAttribute('src',
273                                                         obj.patron.photo_url()
274                                                 );
275                                         };
276                                 }
277                         ],
278                         'patron_library' : [
279                                 ['render'],
280                                 function(e) {
281                                         return function() { 
282                                                 e.setAttribute('value',
283                                                         obj.OpenILS.data.hash.aou[
284                                                                 obj.patron.home_ou()
285                                                         ].shortname()
286                                                 );
287                                                 e.setAttribute('tooltiptext',
288                                                         obj.OpenILS.data.hash.aou[
289                                                                 obj.patron.home_ou()
290                                                         ].name()
291                                                 );
292                                         };
293                                 }
294                         ],
295                         'patron_last_library' : [
296                                 ['render'],
297                                 function(e) {
298                                         return function() { 
299                                                 e.setAttribute('value',
300                                                         obj.OpenILS.data.hash.aou[
301                                                                 obj.patron.home_ou()
302                                                         ].shortname()
303                                                 );
304                                                 e.setAttribute('tooltiptext',
305                                                         obj.OpenILS.data.hash.aou[
306                                                                 obj.patron.home_ou()
307                                                         ].name()
308                                                 );
309                                         };
310                                 }
311                         ],
312                         'patron_mailing_address_street1' : [
313                                 ['render'],
314                                 function(e) {
315                                         return function() { 
316                                                 e.setAttribute('value',
317                                                         obj.patron.mailing_address().street1()
318                                                 );
319                                         };
320                                 }
321                         ],
322                         'patron_mailing_address_street2' : [
323                                 ['render'],
324                                 function(e) {
325                                         return function() { 
326                                                 e.setAttribute('value',
327                                                         obj.patron.mailing_address().street2()
328                                                 );
329                                         };
330                                 }
331                         ],
332                         'patron_mailing_address_city' : [
333                                 ['render'],
334                                 function(e) {
335                                         return function() { 
336                                                 e.setAttribute('value',
337                                                         obj.patron.mailing_address().city()
338                                                 );
339                                         };
340                                 }
341                         ],
342                         'patron_mailing_address_state' : [
343                                 ['render'],
344                                 function(e) {
345                                         return function() { 
346                                                 e.setAttribute('value',
347                                                         obj.patron.mailing_address().state()
348                                                 );
349                                         };
350                                 }
351                         ],
352                         'patron_mailing_address_post_code' : [
353                                 ['render'],
354                                 function(e) {
355                                         return function() { 
356                                                 e.setAttribute('value',
357                                                         obj.patron.mailing_address().post_code()
358                                                 );
359                                         };
360                                 }
361                         ],
362                         'patron_physical_address_street1' : [
363                                 ['render'],
364                                 function(e) {
365                                         return function() { 
366                                                 e.setAttribute('value',
367                                                         obj.patron.billing_address().street1()
368                                                 );
369                                         };
370                                 }
371                         ],
372                         'patron_physical_address_street2' : [
373                                 ['render'],
374                                 function(e) {
375                                         return function() { 
376                                                 e.setAttribute('value',
377                                                         obj.patron.billing_address().street2()
378                                                 );
379                                         };
380                                 }
381                         ],
382                         'patron_physical_address_city' : [
383                                 ['render'],
384                                 function(e) {
385                                         return function() { 
386                                                 e.setAttribute('value',
387                                                         obj.patron.billing_address().city()
388                                                 );
389                                         };
390                                 }
391                         ],
392                         'patron_physical_address_state' : [
393                                 ['render'],
394                                 function(e) {
395                                         return function() { 
396                                                 e.setAttribute('value',
397                                                         obj.patron.billing_address().state()
398                                                 );
399                                         };
400                                 }
401                         ],
402                         'patron_physical_address_post_code' : [
403                                 ['render'],
404                                 function(e) {
405                                         return function() { 
406                                                 e.setAttribute('value',
407                                                         obj.patron.billing_address().post_code()
408                                                 );
409                                         };
410                                 }
411                         ]
412                 };
413
414                 for (var i in control_map) {
415                         var cmd = this.w.document.getElementById(i);
416                         if (cmd) {
417                                 for (var j in control_map[i][0]) {
418                                         if (control_map[i][1]) {
419                                                 var ev_type = control_map[i][0][j];
420                                                 switch(ev_type) {
421                                                         case 'render':
422                                                                 obj.render_list.push( control_map[i][1](cmd) ); 
423                                                         break;
424                                                         default: cmd.addEventListener(ev_type,control_map[i][1],false);
425                                                 }
426                                         }
427                                 }
428                         }
429                         obj.view[i] = cmd;
430                 }
431
432                 obj.retrieve();
433
434         },
435
436         'retrieve' : function() {
437
438                 var patron;
439                 try {
440
441                         var obj = this;
442
443                         var chain = [];
444
445                         // Retrieve the patron
446                         chain.push(
447                                 function() {
448                                         try {
449                                                 var patron = obj.network.request(
450                                                         'open-ils.actor',
451                                                         'open-ils.actor.user.fleshed.retrieve_by_barcode',
452                                                         [ obj.session, obj.barcode ]
453                                                 );
454                                                 if (patron) {
455
456                                                         if (instanceOf(patron,au)) {
457
458                                                                 obj.patron = patron;
459
460                                                         } else {
461
462                                                                 throw('patron is not an au fm object');
463                                                         }
464                                                 } else {
465
466                                                         throw('patron == false');
467                                                 }
468
469                                         } catch(E) {
470                                                 var error = ('patron.display.retrieve : ' + js2JSON(E));
471                                                 obj.error.sdump('D_ERROR',error);
472                                                 alert(error);
473                                                 //FIXME// abort the chain
474                                         }
475                                 }
476                         );
477
478                         // Retrieve the bills
479                         chain.push(
480                                 function() {
481                                         try {
482                                                 var bills = obj.network.request(
483                                                         'open-ils.actor',
484                                                         'open-ils.actor.user.transactions.have_balance',
485                                                         [ obj.session, obj.patron.id() ]
486                                                 );
487                                                 //FIXME// obj.patron.bills( bills );
488                                                 obj.patron.bills = bills;
489                                         } catch(E) {
490                                                 var error = ('patron.display.retrieve : ' + js2JSON(E));
491                                                 obj.error.sdump('D_ERROR',error);
492                                                 alert(error);
493                                                 //FIXME// abort the chain
494                                         }
495                                 }
496                         );
497
498                         // Retrieve the checkouts
499                         chain.push(
500                                 function() {
501                                         try {
502                                                 var checkouts = obj.network.request(
503                                                         'open-ils.circ',
504                                                         'open-ils.circ.actor.user.checked_out',
505                                                         [ obj.session, obj.patron.id() ]
506                                                 );
507                                                 obj.patron.checkouts( checkouts );
508                                         } catch(E) {
509                                                 var error = ('patron.display.retrieve : ' + js2JSON(E));
510                                                 obj.error.sdump('D_ERROR',error);
511                                                 alert(error);
512                                                 //FIXME// abort the chain
513                                         }
514                                 }
515                         );
516
517                         // Retrieve the holds
518                         chain.push(
519                                 function() {
520                                         try {
521                                                 var holds = obj.network.request(
522                                                         'open-ils.circ',
523                                                         'open-ils.circ.holds.retrieve',
524                                                         [ obj.session, obj.patron.id() ]
525                                                 );
526                                                 obj.patron.hold_requests( holds );
527                                         } catch(E) {
528                                                 var error = ('patron.display.retrieve : ' + js2JSON(E));
529                                                 obj.error.sdump('D_ERROR',error);
530                                                 alert(error);
531                                                 //FIXME// abort the chain
532                                         }
533                                 }
534                         );
535
536                         // Update the screen
537                         chain.push( function() { obj.render(); } );
538
539                         // Do it
540                         JSAN.use('util.exec');
541                         util.exec.chain( chain );
542
543                 } catch(E) {
544                         var error = ('patron.display.retrieve : ' + js2JSON(E));
545                         this.error.sdump('D_ERROR',error);
546                         alert(error);
547                 }
548         },
549
550         'render' : function() {
551
552                 for (var i in this.render_list) {
553                         try {
554                                 this.render_list[i]();
555                         } catch(E) {
556                                 var error = 'Problem in patron.display.render with\n' + this.render_list[i] + '\n\n' + js2JSON(E);
557                                 this.error.sdump('D_ERROR',error);
558                         }
559                 }
560         }
561
562 }
563
564 dump('exiting patron/display.js\n');