]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/patron/patron_utils.js
user_request is now optionally async'able. Aggressive async of patron select in...
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / patron / patron_utils.js
1 sdump('D_TRACE','Loading patron_utils.js\n');
2
3 function fake_patron() {
4         sdump('D_PATRON_UTILS',arg_dump(arguments));
5         var p = new au(); 
6         p.family_name( 'Retrieving' ); 
7         p.checkouts( [] ); 
8         p.hold_requests( [] ); 
9         p.credit_forward_balance('0.00');
10         p.bills = [];
11         return p;
12 }
13
14 function hold_status_as_text( status ) {
15         sdump('D_PATRON_UTILS',arg_dump(arguments));
16         if (typeof(status) == 'object') status = status.status();
17         var text;
18         switch(status) {
19                 case "1" : text = getString('holds_status_waiting_for_copy'); break;
20                 case "2" : text = getString('holds_status_waiting_for_capture'); break;
21                 case "3" : text = getString('holds_status_in_transit'); break;
22                 case "4" : text = getString('holds_status_available'); break;
23                 default : text = "Eh?"; break;
24         }
25         return text;
26 }
27
28 function patron_get_full_name( au ) {
29         sdump('D_PATRON_UTILS',arg_dump(arguments));
30         var name = '';
31         if (au.prefix()) name += au.prefix() + ' ';     
32         if (au.family_name()) name += au.family_name() + ', ';  
33         if (au.first_given_name()) name += au.first_given_name() + ' '; 
34         if (au.second_given_name()) name += au.second_given_name() + ' ';       
35         if (au.suffix()) name += au.suffix() + ' ';     
36         return name;
37 }
38
39 function patron_get_barcode( au ) {
40         sdump('D_PATRON_UTILS',arg_dump(arguments));
41         try {
42                 if (au && au.card && au.card() ) {
43                         if ( (au.card()!='null') && (typeof(au.card())=='object') ) {
44                                 return au.card().barcode();
45                         } else {
46                                 return find_id_object_in_list( au.cards(), au.card() ).barcode();
47                         }
48                 }
49         } catch(E) {
50                 sdump('D_ERROR',E);
51         }
52         return '???';
53 }
54
55 function patron_get_bills( au, f ) {
56         sdump('D_PATRON_UTILS',arg_dump(arguments));
57         try {
58                 var bills = user_request(
59                         'open-ils.actor',
60                         'open-ils.actor.user.transactions',
61                         [ mw.G.auth_ses[0], au.id() ],
62                         f
63                 )[0];
64
65                 if (!f) {
66                         sdump('D_PATRON_UTILS','bills = ' + js2JSON(bills) + '\n');
67                         au.bills = bills;   // FIXME: make bills a virtual field of au
68                         return bills;
69                 }
70         } catch(E) {
71                 sdump('D_ERROR',js2JSON(E) + '\n');
72                 return null;
73         }
74
75 }
76
77 function patron_get_bills_total( au ) {
78         sdump('D_PATRON_UTILS',arg_dump(arguments));
79         if (au.bills == null || au.bills == undefined)
80                 return '???';
81         else {
82                 var total = 0;
83                 for (var i = 0; i < au.bills.length; i++) {
84                         total += parseFloat( au.bills[i].balance_owed() );
85                 }
86                 sdump('D_PATRON_UTILS','bills_total $$$ = ' + total + '\n');
87                 return '$' + total;
88         }
89
90 }
91
92 function patron_get_credit_total( au ) {
93         sdump('D_PATRON_UTILS',arg_dump(arguments));
94         /* FIXME: I can use CSS to style this number as money. */
95         return '$' + au.credit_forward_balance();
96 }
97
98 function patron_get_checkouts( au, f ) {
99         sdump('D_PATRON_UTILS',arg_dump(arguments));
100         try {
101                 var checkouts = user_request(
102                         'open-ils.circ',
103                         'open-ils.circ.actor.user.checked_out',
104                         [ mw.G.auth_ses[0], au.id() ],
105                         f
106                 )[0];
107
108                 if (!f) {
109                         sdump('D_PATRON_UTILS','checkouts = ' + js2JSON(au.checkouts()) + '\n');
110                         au.checkouts( checkouts );
111                         return checkouts;
112                 }
113         } catch(E) {
114                 sdump('D_ERROR',js2JSON(E) + '\n');
115                 return null;
116         }
117 }
118
119 function patron_get_checkouts_total( au ) {
120         sdump('D_PATRON_UTILS',arg_dump(arguments));
121         if (au.checkouts() == null)
122                 return '???';
123         else
124                 return au.checkouts().length;
125 }
126
127 // Need an API call or virtual field to determine this
128 function patron_get_checkouts_overdue_total( au ) {
129         sdump('D_PATRON_UTILS',arg_dump(arguments));
130         if (! au.checkouts()) patron_get_checkouts( au );
131         var total = 0;
132         if ( (au.checkouts() != null) && (typeof(au.checkouts())=='object') ) {
133                 for (var i = 0; i < au.checkouts().length; i++) {
134                         var item = au.checkouts()[i];
135                         var due_date = item.circ.due_date();
136                         due_date = due_date.substr(0,4) + due_date.substr(5,2) + due_date.substr(8,2);
137                         var today = formatted_date( new Date() , '%Y%m%d' );
138                         if (today > due_date) total++;
139                 }
140         }
141         sdump('D_PATRON_UTILS','\toverdue = ' + total + '\n');
142         return total;
143 }
144
145 function patron_get_holds( au, f ) {
146         sdump('D_PATRON_UTILS',arg_dump(arguments));
147         try {
148                 var hold_requests = user_request(
149                         'open-ils.circ',
150                         'open-ils.circ.holds.retrieve',
151                         [ mw.G.auth_ses[0], au.id() ],
152                         f
153                 )[0];
154
155                 if (!f) {
156                         sdump('D_PATRON_UTILS','holds = ' + js2JSON(au.hold_requests()) + '\n');
157                         au.hold_requests( hold_requests );
158                         return hold_requests;
159                 }
160         } catch(E) {
161                 sdump('D_ERROR',js2JSON(E) + '\n');
162                 return null;
163         }
164 }
165
166 function patron_get_holds_total( au ) {
167         sdump('D_PATRON_UTILS',arg_dump(arguments));
168         if (au.hold_requests() == null)
169                 return '???';
170         else
171                 return au.hold_requests().length;
172 }
173
174 function patron_get_hold_status( hold, f ) {
175         sdump('D_PATRON_UTILS',arg_dump(arguments));
176         try {
177                 var status = user_request(
178                         'open-ils.circ',
179                         'open-ils.circ.hold.status.retrieve',
180                         [ mw.G.auth_ses[0], hold.id() ],
181                         f
182                 )[0];
183
184                 if (!f) {
185                         sdump('D_PATRON_UTILS','status = ' + status + '\n');
186                         hold.status( status );
187                         return status;
188                 }
189         } catch(E) {
190                 sdump('D_ERROR',js2JSON(E) + '\n');
191                 return null;
192         }
193 }
194
195 function patron_get_holds_available_total( au ) {
196         sdump('D_PATRON_UTILS',arg_dump(arguments));
197         var total = 0;
198         if ( (au.hold_requests() != null) && (typeof(au.hold_requests()) == 'object') ) {
199                 for (var i = 0; i < au.hold_requests().length; i++) {
200                         var hold = au.hold_requests()[i];
201                         if (hold.capture_time()) total++;
202                 }
203         }
204         sdump('D_PATRON_UTILS','\tavailable = ' + total + '\n');
205         return total;
206 }
207
208 function patron_get_home_ou_name( au ) {
209         sdump('D_PATRON_UTILS',arg_dump(arguments));
210         if (au && 
211                 au.home_ou && 
212                 au.home_ou() && 
213                 mw.G.org_tree_hash &&
214                 mw.G.org_tree_hash[ au.home_ou() ] && 
215                 mw.G.org_tree_hash[ au.home_ou() ].name &&
216                 mw.G.org_tree_hash[ au.home_ou() ].name()
217         ) {
218                 return mw.G.org_tree_hash[ au.home_ou() ].name();
219         } else {
220                 return null;
221         }
222 }
223
224 function patron_get_ident1_type_as_text( au ) {
225         sdump('D_PATRON_UTILS',arg_dump(arguments));
226         if (au && 
227                 au.ident_type && 
228                 au.ident_type() && 
229                 mw.G.cit_hash &&
230                 mw.G.cit_hash[ au.ident_type() ] && 
231                 mw.G.cit_hash[ au.ident_type() ].name &&
232                 mw.G.cit_hash[ au.ident_type() ].name()
233         ) {
234                 return mw.G.cit_hash[ au.ident_type() ].name();
235         } else {
236                 return null;
237         }
238 }
239
240 function patron_get_ident2_type_as_text( au ) {
241         sdump('D_PATRON_UTILS',arg_dump(arguments));
242         if (au && 
243                 au.ident_type2 && 
244                 au.ident_type2() && 
245                 mw.G.cit_hash &&
246                 mw.G.cit_hash[ au.ident_type2() ] && 
247                 mw.G.cit_hash[ au.ident_type2() ].name &&
248                 mw.G.cit_hash[ au.ident_type2() ].name()
249         ) {
250                 return mw.G.cit_hash[ au.ident_type2() ].name();
251         } else {
252                 return null;
253         }
254 }
255
256 function patron_get_profile_as_text( au ) {
257         sdump('D_PATRON_UTILS',arg_dump(arguments));
258         if (au && 
259                 au.profile && 
260                 au.profile() && 
261                 mw.G.ap_hash &&
262                 mw.G.ap_hash[ au.profile() ] && 
263                 mw.G.ap_hash[ au.profile() ].name &&
264                 mw.G.ap_hash[ au.profile() ].name()
265         ) {
266                 return mw.G.ap_hash[ au.profile() ].name();
267         } else {
268                 return null;
269         }
270 }
271
272 function patron_get_standing_as_text( au ) {
273         sdump('D_PATRON_UTILS',arg_dump(arguments));
274         if (au && 
275                 au.standing && 
276                 au.standing() && 
277                 mw.G.cst_hash &&
278                 mw.G.cst_hash[ au.standing() ] && 
279                 mw.G.cst_hash[ au.standing() ].value &&
280                 mw.G.cst_hash[ au.standing() ].value()
281         ) {
282                 return mw.G.cst_hash[ au.standing() ].value();
283         } else {
284                 return null;
285         }
286 }
287
288 function patron_get_standing_css_style( value ) {
289         sdump('D_PATRON_UTILS',arg_dump(arguments,{0:true}));
290         switch(value) {
291                 case 'Good' : case '1' : return 'background-color: lightgreen;'; break;
292                 case 'Barred' : case '2' : return 'background-color: yellow;'; break;
293                 case 'Blocked' : case '3' : return 'background-color: red;'; break;
294                 default: return 'background-color: white;'; break;
295         }
296 }
297
298 function retrieve_patron_by_barcode( barcode, f ) {
299         sdump('D_PATRON_UTILS',arg_dump(arguments));
300         if (!barcode) return null;
301         return user_request( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve_by_barcode', [ mw.G.auth_ses[0], barcode ], f )[0];
302 }
303
304 function retrieve_patron_by_id( id, f ) {
305         sdump('D_PATRON_UTILS',arg_dump(arguments));
306         if (!id) return null;
307         return user_request( 'open-ils.actor', 'open-ils.actor.user.fleshed.retrieve', [ mw.G.auth_ses[0], id ], f )[0];
308 }
309
310 function save_patron( au, f ) {
311         sdump('D_PATRON_UTILS',arg_dump(arguments));
312         try {
313                 var result = user_request(
314                         'open-ils.actor',
315                         'open-ils.actor.patron.update',
316                         [ mw.G.auth_ses[0], au ],
317                         f
318                 )[0];
319                 if (!f) sdump('D_PATRON_UTILS','result = ' + js2JSON(result) + '\n');
320                 return result;
321         } catch(E) {
322                 handle_error(E);
323                 return null;
324         }
325 }