]> git.evergreen-ils.org Git - evergreen/pines.git/blob - Open-ILS/src/templates/staff/offline-interface.tt2
remove offline blocked list download button
[evergreen/pines.git] / Open-ILS / src / templates / staff / offline-interface.tt2
1 [%
2   WRAPPER "staff/base.tt2";
3   ctx.page_title = l("Offline"); 
4   ctx.page_app = "egOffline";
5 %]
6
7
8 <script type="text/ng-template" id="offline-template">
9
10 <div class="row">
11   <div class="col-md-12">
12     <div class="input-group">
13       <div class="input-group-addon"><b>[% l('Workstation') %]</b></div>
14       <div class="input-group-addon">
15         <select class="form-control" required
16           ng-model="workstation"
17           ng-options="ws.id as ws.name for ws in workstations"></select>
18       </div>
19       <div class="input-group-addon"><b>[% l('Working location') %]</b></div>
20       <div class="input-group-addon">
21         <eg-org-selector sticky-setting="eg.org.offline_location" selected="org"></eg-org-selector>
22       </div>
23       <div class="input-group-addon">
24         <button
25           class="btn btn-primary"
26           ng-disabled="all_xact.length == 0 || active_tab == 'register'"
27           ng-click="save()">
28             [% l('Save Transactions') %]
29         </button>
30         <button
31           class="btn btn-default"
32           ng-disabled="!printed"
33           ng-click="reprintLast()">
34             [% l('Reprint Last Receipt') %]
35         </button>
36         <!-- removing this until blocked list infrastructure is repaired
37         <button
38           class="btn btn-default"
39           ng-if="logged_in"
40           ng-click="downloadBlockList()">
41             [% l('Download block list') %]
42         </button>
43         -->
44         <button
45           class="btn btn-default"
46           ng-disabled="pending_xacts.length == 0"
47           eg-line-exporter
48           ng-if="!logged_in"
49           default-file-name="pending.xacts"
50           json-array="pending_xacts"
51         >[% l('Export Transactions') %]</button>
52       </div>
53     </div>
54   </div>
55 </div>
56
57 <div class="row col-md-offset-3 col-md-6 pad-vert">
58   <div ng-show="logged_in && active_tab != 'session'" class="alert alert-danger">
59     <h2>[% l('Warning') %]</h2>
60     [% l('You are about to enter offline mode. If you proceed, you will be logged out.') %]
61     <br/>
62     <br/>
63     <button class="btn btn-danger" ng-click="logout()">[% l('Proceed') %]</button>
64   </div>
65 </div>
66
67 <div class="row col-md-12 pad-vert">
68   <div class="col-md-12">
69     <uib-tabset active="active_tab">
70       <!-- note that non-numeric index values must be enclosed in single-quotes,
71            otherwise selecting the active table won't work cleanly -->
72       <uib-tab ng-show="logged_in" index="'session'" heading="[% l('Session Management') %]">
73         <div class="col-md-12" ng-controller="OfflineSessionCtrl">
74           <uib-tabset active="active_session_tab">
75             <uib-tab index="'pending'" heading="[% l('Pending Transactions') %]">
76               <div class="row">
77                 <div class="col-md-12 container">
78                   <button
79                     class="btn btn-default"
80                     ng-disabled="pending_xacts.length == 0"
81                     eg-line-exporter
82                     default-file-name="pending.xacts"
83                     json-array="pending_xacts"
84                   >[% l('Export Transactions') %]</button>
85                   <div class="btn-group">
86                     <span class="btn btn-default btn-file">
87                       [% l('Import Transactions') %]
88                       <input type="file" eg-file-reader container="imported_pending_xacts.data">
89                     </span>
90                   </div>
91                 <button class="btn btn-warning pull-right" ng-click="clear_pending()">[% l('Clear Transactions') %]</button>
92                 </div>
93               </div>
94               <div class="row">
95                 <div class="col-md-12 container">
96                   <table class="table">
97                     <thead>
98                       <tr>
99                         <th>[% l('Type') %]</th>
100                         <th>[% l('Timestamp') %]</th>
101                         <th>[% l('Patron Barcode') %]</th>
102                         <th>[% l('Item Barcode') %]</th>
103                         <th>[% l('Non-cataloged Type') %]</th>
104                         <th>[% l('Checkout Date') %]</th>
105                         <th>[% l('Due Date') %]</th>
106                         <th>[% l('Checkin Date') %]</th>
107                         <th>[% l('First Name') %]</th>
108                         <th>[% l('Last Name') %]</th>
109                       </tr>
110                     </thead>
111                     <tbody>
112                       <tr ng-repeat="xact in pending_xacts track by $index">
113                         <td>{{xact.type}}</td>
114                         <td>{{createDate(xact.timestamp, true) | date:'short'}}</td>
115                         <td>{{xact.patron_barcode || xact.user.card.barcode}}</td>
116                         <td>{{xact.barcode}}</td>
117                         <td>{{lookupNoncatTypeName(xact.noncat_type)}}</td>
118                         <td>{{createDate(xact.checkout_time) | date:'short'}}</td>
119                         <td>{{createDate(xact.due_date) | date:'shortDate'}}</td>
120                         <td>{{createDate(xact.backdate) | date:'shortDate'}}</td>
121                         <td>{{xact.user.first_given_name}}</td>
122                         <td>{{xact.user.family_name}}</td>
123                       </tr>
124                     </tbody>
125                   </table>
126                 </div>
127               </div>
128             </uib-tab>
129             <uib-tab index="'offline_sessions'" heading="[% l('Offline Sessions') %]">
130               <div class="row">
131                 <div class="col-md-12">
132                   <button
133                     class="btn btn-primary"
134                     ng-disabled="!logged_in"
135                     ng-click="createSession()">[% l('Create Session') %]</button>
136                   <button
137                     class="btn btn-default pull-right"
138                     ng-disabled="!logged_in"
139                     ng-click="refreshSessions()">[% l('Refresh') %]</button>
140                 </div>
141               </div>
142               <div class="row">
143                 <div class="col-md-12"><h2>[% l('Session List') %]</h2></div>
144               </div>
145               <div class="row">
146                 <div class="col-md-12">
147                   <table class="table" ts-wrapper>
148                     <thead>
149                       <tr>
150                         <th ts-criteria="org">[% l('Organization') %]</th>
151                         <th ts-criteria="creator">[% l('Created By') %]</th>
152                         <th ts-criteria="description">[% l('Description') %]</th>
153                         <th ts-criteria="create_time|parseInt" ts-default="descending">[% l('Date Created') %]</th>
154                         <th>[% l('Upload Count') %]</th>
155                         <th>[% l('Transactions Processed') %]</th>
156                         <th ts-criteria="end_time|parseInt">[% l('Date Completed') %]</th>
157                         <th></th>
158                       </tr>
159                     </thead>
160                     <tbody>
161                       <tr ts-repeat
162                         ng-repeat="ses in sessions track by $index"
163                         ng-click="setSession(ses, $index)"
164                         ng-class="{'bg-info':current_session_index==$index}"
165                       >
166                         <td>{{ses.org}}</td>
167                         <td>{{ses.creator}}</td>
168                         <td>{{ses.description}}</td>
169                         <td>{{createDate(ses.create_time, true) | date:'short'}}</td>
170                         <td>{{ses.total}}</td>
171                         <td>{{ses.num_complete}}</td>
172                         <td>{{createDate(ses.end_time, true) | date:'short'}}</td>
173                         <td>
174                           <button
175                             class="btn btn-info btn-xs"
176                             ng-disabled="!logged_in || pending_xacts.length == 0 || ses.end_time"
177                             ng-click="uploadPending(ses, $index)"
178                           >[% l('Upload') %]</button>
179                           <button
180                             class="btn btn-warning btn-xs"
181                             ng-disabled="!logged_in || ses.total == 0 || ses.end_time"
182                             ng-click="processSession(ses, $index)"
183                           >[% l('Process') %]</button>
184                         </td>
185                       </tr>
186                     </tbody>
187                   </table>
188                 </div>
189               </div>
190               <div class="row">
191                     <div class="col-md-12"><hr/></div>
192               </div>
193               <div class="row">
194                     <div class="col-md-12"><h2>[% l('Exception List') %]</h2></div>
195               </div>
196               <div class="row">
197                 <div class="col-md-12">
198                   <table class="table">
199                     <thead>
200                       <tr>
201                         <th>[% l('Workstation') %]</th>
202                         <th>[% l('Type') %]</th>
203                         <th>[% l('Timestamp') %]</th>
204                         <th>[% l('Event Name') %]</th>
205                         <th>[% l('Patron Barcode') %]</th>
206                         <th>[% l('Item Barcode') %]</th>
207                         <th>[% l('Non-cataloged Type') %]</th>
208                         <th>[% l('Checkout Date') %]</th>
209                         <th>[% l('Due Date') %]</th>
210                         <th>[% l('Checkin Date') %]</th>
211                         <th></th>
212                       </tr>
213                     </thead>
214                     <tbody>
215                       <tr ng-repeat="xact in current_session.exceptions track by $index">
216                         <td>{{xact.command._workstation}}</td>
217                         <td>{{xact.command.type}}</td>
218                         <td>{{createDate(xact.command.timestamp, true) | date:'short'}}</td>
219                         <td>{{xact.event.textcode}}</td>
220                         <td>{{xact.command.patron_barcode || xact.command.user.card.barcode}}</td>
221                         <td>{{xact.command.barcode}}</td>
222                         <td>{{lookupNoncatTypeName(xact.command.noncat_type)}}</td>
223                         <td>{{createDate(xact.command.checkout_time) | date:'short'}}</td>
224                         <td>{{createDate(xact.command.due_date) | date:'shortDate'}}</td>
225                         <td>{{createDate(xact.command.backdate) | date:'shortDate'}}</td>
226                         <td>
227                           <button
228                             class="btn btn-info btn-xs"
229                             ng-disabled="!logged_in || !xact.command.barcode"
230                             ng-click="retrieveItem(xact.command.barcode)">[% l('Item') %]</button>
231                           <button
232                             class="btn btn-info btn-xs"
233                             ng-disabled="!logged_in || (!xact.command.patron_barcode && xact.command.user.card.barcode)"
234                             ng-click="retrievePatron(xact.command.patron_barcode)">[% l('Patron') %]</button>
235                           <button
236                             class="btn btn-info btn-xs"
237                             ng-disabled="!logged_in"
238                             ng-click="retrieveDetails(xact)">[% l('Debug') %]</button>
239                         </td>
240                       </tr>
241                     </tbody>
242                   </table>
243                 </div>
244               </div>
245             </uib-tab>
246           </uib-tabset>
247         </div>
248       </uib-tab>
249       <uib-tab index="'checkout'" heading="[% l('Checkout') %]">
250
251         <div class="row">
252
253           <!-- left-hand side -->
254           <div class="col-md-6" style="border-right:solid 1px;">
255             <div class="row">
256               <div class="col-md-1"></div>
257               <div class="col-md-4">
258                 [% l('Due Date:') %]
259               </div>
260               <div class="col-md-4">
261                 <eg-date-input id="co_duedate" ng-model="shared.due_date" out-of-range="shared.outOfRange" min-date="minDate"></eg-date-input>
262               </div>
263               <div class="col-md-3">
264                 <select class="form-control" ng-model="shared.due_date_offset" ng-change="resetDueDate()">
265                   <option value="">[% l('No Offset') %]</option>
266                   <option value="3">[% l('Today + 3 days') %]</option>
267                   <option value="7">[% l('Today + 7 days') %]</option>
268                   <option value="14">[% l('Today + 14 days') %]</option>
269                   <option value="30">[% l('Today + 30 days') %]</option>
270                 </select>
271               </div>
272             </div>
273
274             <div class="row pad-vert">
275               <div class="col-md-1"></div>
276               <div class="col-md-4">
277                 [% l('Patron barcode:') %]
278               </div>
279               <div class="col-md-7">
280                 <input class="form-control" type="text" ng-model="checkout.patron_barcode" next-on-enter="co_barcode"/>
281               </div>
282             </div>
283
284             <div class="row pad-vert">
285               <div class="col-md-1">
286                 <input type="radio" ng-model="barcode_type" value="barcode" id="bc_radio"/>
287               </div>
288               <div class="col-md-4">
289                 <label style="font-weight:normal !important;" for="bc_radio">[% l('Item Barcode:') %]</label>
290               </div>
291               <div class="col-md-7">
292                 <input id="co_barcode"
293                     class="form-control"
294                     ng-init="barcode_type = 'barcode'"
295                     ng-disabled="barcode_type != 'barcode'"
296                     type="text"
297                     ng-model="checkout.barcode"
298                     eg-enter="!notEnough('checkout') && add('checkout')"
299                 />
300               </div>
301             </div>
302
303             <div class="row">
304               <div class="col-md-1">
305                 <input type="radio" ng-model="barcode_type" value="noncat" id="nc_radio"/>
306               </div>
307               <div class="col-md-4">
308                 <label style="font-weight:normal !important;" for="nc_radio">[% l('Non-cataloged Type:') %]</label>
309               </div>
310               <div class="col-md-5">
311                 <select
312                     class="form-control"
313                     ng-disabled="barcode_type != 'noncat'"
314                     ng-options="nct.id() as nct.name() for nct in noncats"
315                     ng-model="checkout.noncat_type"
316                 >
317                   <option value="">[% l('Select Non-cataloged Type') %]</option>
318                 </select>
319               </div>
320               <div class="col-md-2">
321                 <input
322                     class="form-control"
323                     ng-disabled="barcode_type != 'noncat'"
324                     type="number"
325                     min="1"
326                     max="100"
327                     ng-model="checkout.noncat_count"
328                 />
329               </div>
330             </div>
331
332             <div class="row pad-vert">
333               <div class="col-md-2">
334                 <button class="btn btn-warning" ng-click="clear('checkout')">[% l('Clear') %]</button>
335               </div>
336               <div class="col-md-4">
337                 <input id="do_check_co" type="checkbox" ng-model="strict_barcode" ng-click="changeCheck()"></input>
338                 <label for="do_check_co">[% l('Strict Barcode') %]</label>
339               </div>
340               <div class="col-md-6">
341                 <input id="do_print_co" type="checkbox" ng-model="do_print" ng-click="changePrint()"></input>
342                 <label for="do_print_co">[% l('Print receipt') %]</label>
343                 <button class="btn btn-primary pull-right" ng-disabled="notEnough('checkout')" ng-click="add('checkout','co_barcode')">[% l('Checkout') %]</button>
344               </div>
345             </div>
346
347           </div>
348
349           <!-- right-hand side -->
350           <div class="col-md-6 container">
351             <table class="table">
352               <thead>
353                 <tr>
354                   <th>[% l('Patron barcode') %]</th>
355                   <th>[% l('Item barcode') %]</th>
356                   <th>[% l('Due date') %]</th>
357                 </tr>
358               </thead>
359               <tbody>
360                 <tr ng-repeat="xact in xact_page.checkout track by $index">
361                   <td>{{xact.patron_barcode}}</td>
362                   <td>{{xact.barcode}}</td>
363                   <td>{{xact.due_date | date:'shortDate'}}</td>
364                 </tr>
365               </tbody>
366             </table>
367           </div>
368
369         </div>
370
371       </uib-tab>
372       <uib-tab index="'renew'" heading="[% l('Renew') %]">
373
374         <div class="row">
375
376           <!-- left-hand side -->
377           <div class="col-md-6" style="border-right:solid 1px;">
378             <div class="row">
379               <div class="col-md-1"></div>
380               <div class="col-md-4">
381                 [% l('Due Date:') %]
382               </div>
383               <div class="col-md-4">
384                 <eg-date-input ng-model="shared.due_date" out-of-range="shared.outOfRange" min-date="minDate"></eg-date-input>
385               </div>
386               <div class="col-md-3">
387                 <select class="form-control" ng-model="shared.due_date_offset" ng-change="resetDueDate()">
388                   <option value="">[% l('No Offset') %]</option>
389                   <option value="3">[% l('Today + 3 days') %]</option>
390                   <option value="7">[% l('Today + 7 days') %]</option>
391                   <option value="14">[% l('Today + 14 days') %]</option>
392                   <option value="30">[% l('Today + 30 days') %]</option>
393                 </select>
394               </div>
395             </div>
396
397             <div class="row pad-vert">
398               <div class="col-md-1"></div>
399               <div class="col-md-4">
400                 [% l('Patron barcode:') %]
401               </div>
402               <div class="col-md-7">
403                 <input class="form-control" type="text" ng-model="renew.patron_barcode" next-on-enter="re_barcode"/>
404               </div>
405             </div>
406
407             <div class="row pad-vert">
408               <div class="col-md-1"></div>
409               <div class="col-md-4">
410                 [% l('Item Barcode:') %]
411               </div>
412               <div class="col-md-7">
413                 <input class="form-control" type="text" ng-model="renew.barcode" id="re_barcode" eg-enter="!notEnough('renew') && add('renew')"/>
414               </div>
415             </div>
416
417             <div class="row pad-vert">
418               <div class="col-md-2">
419                 <button class="btn btn-warning" ng-click="clear('renew')">[% l('Clear') %]</button>
420               </div>
421               <div class="col-md-4">
422                 <input id="do_check_r" type="checkbox" ng-model="strict_barcode" ng-click="changeCheck()"></input>
423                 <label for="do_check_r">[% l('Strict Barcode') %]</label>
424               </div>
425               <div class="col-md-6">
426                 <input id="do_print_r" type="checkbox" ng-model="do_print" ng-click="changePrint()"></input>
427                 <label for="do_print_r">[% l('Print receipt') %]</label>
428                 <button class="btn btn-primary pull-right" ng-disabled="notEnough('renew')" ng-click="add('renew','re_barcode')">[% l('Renew') %]</button>
429               </div>
430             </div>
431
432           </div>
433
434           <!-- right-hand side -->
435           <div class="col-md-6 container">
436             <table class="table">
437               <thead>
438                 <tr>
439                   <th>[% l('Patron barcode') %]</th>
440                   <th>[% l('Item barcode') %]</th>
441                   <th>[% l('Due date') %]</th>
442                 </tr>
443               </thead>
444               <tbody>
445                 <tr ng-repeat="xact in xact_page.renew track by $index">
446                   <td>{{xact.patron_barcode}}</td>
447                   <td>{{xact.barcode}}</td>
448                   <td>{{xact.due_date | date:'shortDate'}}</td>
449                 </tr>
450               </tbody>
451             </table>
452           </div>
453
454         </div>
455
456       </uib-tab>
457       <uib-tab index="'in_house_use'" heading="[% l('In-house Use') %]">
458
459         <div class="row">
460
461           <!-- left-hand side -->
462           <div class="col-md-6 container" style="border-right:solid 1px;">
463
464             <div class="row">
465               <div class="col-md-1"></div>
466               <div class="col-md-5">
467                 [% l('Use count:') %]
468               </div>
469               <div class="col-md-6">
470                 <input class="form-control" type="number" min="1" max="100" next-on-enter="ihu_barcode" ng-model="in_house_use.count"/>
471               </div>
472             </div>
473
474             <div class="row pad-vert">
475               <div class="col-md-1"></div>
476               <div class="col-md-5">
477                 [% l('Item Barcode:') %]
478               </div>
479               <div class="col-md-6">
480                 <input class="form-control" type="text" ng-model="in_house_use.barcode" eg-enter="add('in_house_use')" id="ihu_barcode"/>
481               </div>
482             </div>
483
484             <div class="row pad-vert">
485               <div class="col-md-2">
486                 <button class="btn btn-warning" ng-click="clear('in_house_use')">[% l('Clear') %]</button>
487               </div>
488               <div class="col-md-4">
489                 <input id="do_check_ihu" type="checkbox" ng-model="strict_barcode" ng-click="changeCheck()"></input>
490                 <label for="do_check_ihu">[% l('Strict Barcode') %]</label>
491               </div>
492               <div class="col-md-6">
493                 <input id="do_print_ihu" type="checkbox" ng-model="do_print" ng-click="changePrint()"></input>
494                 <label for="do_print_ihu">[% l('Print receipt') %]</label>
495                 <button class="btn btn-primary pull-right" ng-disabled="notEnough('in_house_use')" ng-click="add('in_house_use','ihu_barcode')">[% l('Record Use') %]</button>
496               </div>
497             </div>
498
499           </div>
500
501           <!-- right-hand side -->
502           <div class="col-md-6 container">
503             <table class="table">
504               <thead>
505                 <tr>
506                   <th>[% l('Item barcode') %]</th>
507                   <th>[% l('Use count') %]</th>
508                 </tr>
509               </thead>
510               <tbody>
511                 <tr ng-repeat="xact in xact_page.in_house_use track by $index">
512                   <td>{{xact.barcode}}</td>
513                   <td>{{xact.count}}</td>
514                 </tr>
515               </tbody>
516             </table>
517           </div>
518
519         </div>
520
521       </uib-tab>
522       <uib-tab index="'checkin'" heading="[% l('Checkin') %]">
523
524         <div class="row">
525
526           <!-- left-hand side -->
527           <div class="col-md-6" style="border-right:solid 1px;">
528
529             <div class="row">
530               <div class="col-md-1"></div>
531               <div class="col-md-5">
532                 [% l('Checkin Date:') %]
533               </div>
534               <div class="col-md-6">
535                 <eg-date-input ng-model="checkin.backdate"></eg-date-input>
536               </div>
537             </div>
538
539             <div class="row pad-vert">
540               <div class="col-md-1"></div>
541               <div class="col-md-5">
542                 [% l('Item Barcode:') %]
543               </div>
544               <div class="col-md-6">
545                 <input id="ci_barcode" class="form-control" type="text" ng-model="checkin.barcode" eg-enter="!notEnough('checkin') && add('checkin')"/>
546               </div>
547             </div>
548
549             <div class="row pad-vert">
550               <div class="col-md-2">
551                 <button class="btn btn-warning" ng-click="clear('checkin')">[% l('Clear') %]</button>
552               </div>
553               <div class="col-md-4">
554                 <input id="do_check_ci" type="checkbox" ng-model="strict_barcode" ng-click="changeCheck()"></input>
555                 <label for="do_check_ci">[% l('Strict Barcode') %]</label>
556               </div>
557               <div class="col-md-6">
558                 <input id="do_print_ci" type="checkbox" ng-model="do_print" ng-click="changePrint()"></input>
559                 <label for="do_print_ci">[% l('Print receipt') %]</label>
560                 <button class="btn btn-primary pull-right" ng-disabled="notEnough('checkin')" ng-click="add('checkin','ci_barcode')">[% l('Checkin') %]</button>
561                     
562               </div>
563             </div>
564
565           </div>
566
567           <!-- right-hand side -->
568           <div class="col-md-6 container">
569             <table class="table">
570               <thead>
571                 <tr>
572                   <th>[% l('Item barcode') %]</th>
573                   <th>[% l('Effective Checkin date') %]</th>
574                 </tr>
575               </thead>
576               <tbody>
577                 <tr ng-repeat="xact in xact_page.checkin track by $index">
578                   <td>{{xact.barcode}}</td>
579                   <td>{{xact.backdate | date:'shortDate'}}</td>
580                 </tr>
581               </tbody>
582             </table>
583           </div>
584
585         </div>
586
587       </uib-tab>
588       <uib-tab index="'register'" heading="[% l('Register Patron') %]">
589         <div ng-controller="PatronRegCtrl">
590           <div>[% INCLUDE 'staff/circ/patron/t_edit.tt2' %]</div>
591         </div>
592       </uib-tab>
593     </uib-tabset>
594   </div>
595 </div>
596
597 </script>
598
599 [% BLOCK APP_JS %]
600 <!-- offline page app -->
601 <script src="[% ctx.media_prefix %]/js/ui/default/staff/services/file.js"></script>
602 <script src="[% ctx.media_prefix %]/js/ui/default/staff/offline.js"></script>
603 <script src="[% ctx.media_prefix %]/js/ui/default/staff/build/js/angular-tablesort.js"></script>
604 <script>
605 angular.module('egCoreMod').run(['egStrings', function(s) {
606   s.OFFLINE_BLOCKLIST_SUCCESS = "[% l('Offline blocklist downloaded') %]";
607   s.OFFLINE_BLOCKLIST_FAIL = "[% l('Error downloading offline blocklist') %]";
608   s.DUPLICATE_BARCODE = "[% l('Duplicate item barcode') %]";
609
610   s.ALLOW = "[% l('Allow') %]";
611   s.REJECT = "[% l('Reject') %]";
612
613   s.REG_ADDR_TYPE = "[% l('Mailing') %]";
614   s.REG_INVALID_FIELDS =
615     "[% l('Please enter valid values for all required fields.') %]"
616   s.REG_ADDR_REQUIRED =
617     "[% l('An address is required during registration.') %]"
618
619   s.PATRON_BLOCKED_WHY = {};
620   s.PATRON_BLOCKED_WHY.D = "[% l('Patron has penalties') %]";
621   s.PATRON_BLOCKED_WHY.L = "[% l('Barcode is reported Lost') %]";
622   s.PATRON_BLOCKED_WHY.E = "[% l('Patron account is Expired') %]";
623   s.PATRON_BLOCKED_WHY.B = "[% l('Patron account is Barred') %]";
624
625 }]);
626 </script>
627 <link rel="stylesheet" href="[% ctx.base_path %]/staff/css/circ.css" />
628 <link rel="stylesheet" href="[% ctx.media_prefix %]/js/ui/default/staff/build/css/tablesort.css" />
629 [% END %]
630
631 <div ng-view></div> 
632
633 [% END %]
634