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