]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/circ/checkout.js
d65c83f294979b7492138d3303dc992a4d156581
[Evergreen.git] / Open-ILS / xul / staff_client / server / circ / checkout.js
1 dump('entering circ.checkout.js\n');
2
3 if (typeof patron == 'undefined') patron = {};
4 circ.checkout = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('util.network'); this.network = new util.network();
8 }
9
10 circ.checkout.prototype = {
11
12         'init' : function( params ) {
13
14                 var obj = this;
15
16                 obj.session = params['session'];
17                 obj.patron_id = params['patron_id'];
18
19                 JSAN.use('circ.util');
20                 var columns = circ.util.columns( 
21                         { 
22                                 'barcode' : { 'hidden' : false },
23                                 'title' : { 'hidden' : false },
24                                 'due_date' : { 'hidden' : false },
25                         } 
26                 );
27
28                 JSAN.use('util.list'); obj.list = new util.list('checkout_list');
29                 obj.list.init(
30                         {
31                                 'columns' : columns,
32                                 'map_row_to_column' : function(row,col) {
33                                         // row contains { 'my' : { 'acp' : {}, 'circ' : {}, 'mvr' : {} } }
34                                         // col contains one of the objects listed above in columns
35                                         var my = row.my;
36                                         return eval( col.render );
37                                 },
38                         }
39                 );
40                 
41                 JSAN.use('util.controller'); obj.controller = new util.controller();
42                 obj.controller.init(
43                         {
44                                 'control_map' : {
45                                         'checkout_barcode_entry_textbox' : [
46                                                 ['keypress'],
47                                                 function(ev) {
48                                                         if (ev.keyCode && ev.keyCode == 13) {
49                                                                 obj.checkout();
50                                                         }
51                                                 }
52                                         ],
53                                         'cmd_broken' : [
54                                                 ['command'],
55                                                 function() { alert('Not Yet Implemented'); }
56                                         ],
57                                         'cmd_checkout_submit_barcode' : [
58                                                 ['command'],
59                                                 function() {
60                                                         obj.checkout();
61                                                 }
62                                         ],
63                                         'cmd_checkout_print' : [
64                                                 ['command'],
65                                                 function() {
66                                                 }
67                                         ],
68                                         'cmd_checkout_reprint' : [
69                                                 ['command'],
70                                                 function() {
71                                                 }
72                                         ],
73                                         'cmd_checkout_done' : [
74                                                 ['command'],
75                                                 function() {
76                                                 }
77                                         ],
78                                 }
79                         }
80                 );
81                 this.controller.view.checkout_barcode_entry_textbox.focus();
82
83         },
84
85         'checkout' : function() {
86                 var obj = this;
87                 try {
88                         var barcode = obj.controller.view.checkout_barcode_entry_textbox.value;
89                         var permit = obj.network.request(
90                                 api.checkout_permit_via_barcode.app,
91                                 api.checkout_permit_via_barcode.method,
92                                 [ obj.session, barcode, obj.patron_id, 0 ]
93                         );
94
95                         if (permit.status == 0) {
96                                 var checkout = obj.network.request(
97                                         api.checkout_via_barcode.app,
98                                         api.checkout_via_barcode.method,
99                                         [ obj.session, barcode, obj.patron_id ]
100                                 );
101                                 obj.list.append(
102                                         {
103                                                 'row' : {
104                                                         'my' : {
105                                                         'circ' : checkout.circ,
106                                                         'mvr' : checkout.record,
107                                                         'acp' : checkout.copy
108                                                         }
109                                                 }
110                                         //I could override map_row_to_column here
111                                         }
112                                 );
113                                 if (typeof obj.on_checkout == 'function') {
114                                         obj.on_checkout(checkout);
115                                 }
116                                 if (typeof window.xulG == 'object' && typeof window.xulG.on_checkout == 'function') {
117                                         obj.error.sdump('D_CIRC','circ.checkout: Calling external .on_checkout()\n');
118                                         window.xulG.on_checkout(checkout);
119                                 } else {
120                                         obj.error.sdump('D_CIRC','circ.checkout: No external .on_checkout()\n');
121                                 }
122
123                         } else {
124                                 throw(permit.text);
125                         }
126                 } catch(E) {
127                         alert('FIXME: need special alert and error handling\n'
128                                 + js2JSON(E));
129                         if (typeof obj.on_failure == 'function') {
130                                 obj.on_failure(E);
131                         }
132                         if (typeof window.xulG == 'object' && typeof window.xulG.on_failure == 'function') {
133                                 obj.error.sdump('D_CIRC','circ.checkout: Calling external .on_failure()\n');
134                                 window.xulG.on_failure(E);
135                         } else {
136                                 obj.error.sdump('D_CIRC','circ.checkout: No external .on_failure()\n');
137                         }
138                 }
139
140         },
141
142         'on_checkout' : function() {
143                 this.controller.view.checkout_barcode_entry_textbox.value = '';
144                 this.controller.view.checkout_barcode_entry_textbox.focus();
145         },
146
147         'on_failure' : function() {
148                 this.controller.view.checkout_barcode_entry_textbox.select();
149                 this.controller.view.checkout_barcode_entry_textbox.focus();
150         }
151 }
152
153 dump('exiting circ.checkout.js\n');