]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/templates/staff/circ/patron/index.tt2
LP#1684988: add opt-in check to patron service
[working/Evergreen.git] / Open-ILS / src / templates / staff / circ / patron / index.tt2
1 [%
2   WRAPPER "staff/base.tt2";
3   ctx.page_title = l("Patron"); 
4   ctx.page_app = "egPatronApp";
5   ctx.page_ctrl = "PatronCtrl";
6 %]
7
8 [% BLOCK APP_JS %]
9 <script src="[% ctx.media_prefix %]/js/ui/default/staff/services/grid.js"></script>
10 <script src="[% ctx.media_prefix %]/js/ui/default/staff/services/ui.js"></script>
11 <script src="[% ctx.media_prefix %]/js/ui/default/staff/services/user.js"></script>
12 <script src="[% ctx.media_prefix %]/js/ui/default/staff/services/eframe.js"></script>
13 <script src="[% ctx.media_prefix %]/js/ui/default/staff/services/date.js"></script>
14 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/services/patrons.js"></script>
15 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/services/billing.js"></script>
16 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/services/circ.js"></script>
17 [% INCLUDE 'staff/circ/share/circ_strings.tt2' %]
18 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/services/holds.js"></script>
19 [% INCLUDE 'staff/circ/share/hold_strings.tt2' %]
20 <script src="[% ctx.media_prefix %]/js/ui/default/staff/cat/services/record.js"></script>
21 <script src="[% ctx.media_prefix %]/js/ui/default/staff/services/patron_search.js"></script>
22 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/app.js"></script>
23 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/regctl.js"></script>
24
25 <!-- load the rest on demand? -->
26
27 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/checkout.js"></script>
28 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/items_out.js"></script>
29 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/holds.js"></script>
30 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/bills.js"></script>
31
32 <!-- TODO: APP_JS should really be called APP_ADDONS or some such.
33     It just means "load these things, too, and load them last" -->
34 <link rel="stylesheet" href="[% ctx.base_path %]/staff/css/circ.css" />
35
36 <script>
37 angular.module('egCoreMod').run(['egStrings', function(s) {
38   s.ANNOTATE_PAYMENT_MSG = "[% l('Please annotate this payment') %]";
39   s.CONFIRM_ADJUST_TO_ZERO = 
40     "[% |l('{{xactIds}}') -%]Are you sure you would like to adjust to zero the balance on bills [_1]?[% END %]";
41   s.CONFIRM_VOID_BILLINGS = 
42     "[% l('Are you sure you would like to void $[_1] for these line-item billings? [_2]','{{amount|number:2}}','{{billIds}}') %]";
43   s.CONFIRM_REFUND_PAYMENT = 
44     "[% |l('{{xactIds}}') -%]Are you sure you would like to refund excess payment on bills [_1]?  This action will simply put the amount in the Payment Pending column as a negative value.  You must still select Apply Payment!  Certain types of payments may not be refunded.  The refund may be applied to checked transactions that follow the refunded transaction.[% END %]";
45   s.EDIT_BILL_PAY_NOTE = "[% l('Enter new note for #[_1]:','{{ids}}') %]";
46   s.GROUP_ADD_USER = "[% l('Enter the patron barcode') %]";
47   s.RENEW_ITEMS = "[% l('Renew Items?') %]";
48   s.RENEW_ALL_ITEMS = "[% l('Renew All Items?') %]";
49   s.CHECK_IN_CONFIRM = "[% l('Check In Items?') %]";
50   s.REG_INVALID_FIELDS = 
51     "[% l('Please enter valid values for all required fields.') %]"
52   s.PAYMENT_WARN_AMOUNT = "[% l('Are you sure you want to apply a payment of $[_1]?', '{{payment_amount}}') %]";
53   s.PAYMENT_WARN_AMOUNT_TITLE = "[% l('Verify Payment Amount') %]";
54   s.PAYMENT_OVER_MAX = "[% l('Payments over $[_1] are denied by policy.', '{{max_amount}}') %]";
55   s.PATRON_NOTE_DELETE_CONFIRM_TITLE = "[% l('Delete Note?') %]";
56   s.PATRON_NOTE_DELETE_CONFIRM = "[% l('Delete the note titled \"[_1]\" created on [_2]?', '{{note_title}}', '{{create_date | date}}') %]";
57   s.PATRON_PURGE_CONFIRM_TITLE = "[% l('Completely Purge Patron Account?') %]";
58   s.PATRON_PURGE_CONFIRM = "[% l('Completely OBLITERATE this patron account, including bills, payments, bookbags, etc? This is IRREVERSIBLE.') %]";
59   s.PATRON_PURGE_LAST_CHANCE = "[% l('Last chance, are you sure you want to completely delete this account?') %]";
60   s.PATRON_PURGE_STAFF_PROMPT = "[% l('The account you are attempting to delete has STAFF_LOGIN privileges. Please enter the barcode for a destination account to receive miscellaneous staff artifacts (reports, etc.) from the account to be deleted.') %]";
61   s.PATRON_PURGE_STAFF_BAD_BARCODE = "[% l('Could not retrieve a destination account with the barcode provided. Aborting the purge...') %]";
62   s.PATRON_PURGE_OVERRIDE_PROMPT = "[% l('The account has open transactions (circulations and/or unpaid bills). Purge anyway?') %]";
63   s.PATRON_EDIT_COLLISION = "[% l('Patron record was modified by another user while you were editing it. Your changes were not saved; please reapply them.') %]";
64 }]);
65 </script>
66
67 <!-- add room for the fixed navigation elements -->
68 <style ng-if="is_patron_edit">
69   #top-content-container { padding-top: 120px; }
70 </style>
71 <style ng-if="!is_patron_edit">
72   #top-content-container { padding-top: 80px; }
73 </style>
74
75 [% END %]
76
77 <div class="row" id="patron-fixed-tabs">
78   <div class="col-md-3 patron-name-header">
79     <div ng-show="patron()">
80       <h4 title="{{patron().id()}}">
81         <div class="flex-row">
82           <div class="flex-cell"
83           ng-class="{'patron-summary-alert' : hasAlerts()}">
84             [% l('[_1], [_2] [_3]', 
85                 '{{patron().family_name()}}',
86                 '{{patron().first_given_name()}}',
87                 '{{patron().second_given_name()}}') %]
88           </div>
89
90           <p ng-show="patron().notes().length > 0"><a class='patron-summary-has-notes' href="./circ/patron/{{patron().id()}}/notes"><span class="label label-warning">Notes &nbsp;{{patron().notes().length}}</span></a></p>
91           <div ng-show="tab != 'search'">
92             <a href ng-click="toggle_expand_summary()"
93               title="[% l('Collapse Patron Summary Display') %]"
94               ng-hide="collapse_summary()">
95               <span class="glyphicon glyphicon-resize-small"></span>
96             </a>
97             <a href ng-click="toggle_expand_summary()"
98               title="[% l('Expand Patron Summary Display') %]"
99               ng-show="collapse_summary()">
100               <span class="glyphicon glyphicon-resize-full"></span>
101             </a>
102           </div>
103         </div>
104       </h4>
105     </div>
106   </div>
107
108   <div class="col-md-9">
109     <ul class="nav nav-pills nav-pills-like-tabs">
110       <li ng-class="{active : tab == 'checkout', disabled : !patron()}">
111         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/checkout">[% l('Check Out') %]</a>
112       </li>
113       <li ng-class="{active : tab == 'items_out', disabled : !patron()}">
114         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/items_out">
115           [% l('Items Out') %] 
116           <span ng-if="patron()"><!-- lack of space / newline below intentional -->
117           (<span ng-class="{'patron-summary-alert-small' : patron_stats().checkouts.overdue}">{{patron_stats().checkouts.total_out}}</span>)
118           </span>
119         </a>
120       </li>
121       <li ng-class="{active : tab == 'holds', disabled : !patron()}">
122         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/holds">
123           [% l('Holds') %]
124           <span ng-if="patron()">
125             (<span>{{patron_stats().holds.ready}} / {{patron_stats().holds.total}}</span>)
126           </span>
127         </a>
128       </li>
129       <li ng-class="{active : tab == 'bills', disabled : !patron()}">
130         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/bills">
131           [% l('Bills') %]
132           <span ng-if="patron()">
133             (<span ng-class="{'patron-summary-alert-small' : patron_stats().fines.balance_owed}">{{patron_stats().fines.balance_owed | currency}}</span>)
134           </span>
135         </a>
136       </li>
137       <li ng-class="{active : tab == 'messages', disabled : !patron()}">
138         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/messages">[% l('Messages') %]</a>
139       </li>
140       <li ng-class="{active : tab == 'edit', disabled : !patron()}">
141         <a href="./circ/patron/{{patron().id()}}/edit">[% l('Edit') %]</a>
142       </li>
143       <li uib-dropdown ng-class="{active : tab == 'other', disabled : !patron()}">
144         <a a-disabled="!patron()" href uib-dropdown-toggle>
145             [% l('Other') %]
146             <b class="caret"></b>
147         </a>
148         <ul uib-dropdown-menu>
149           <li>
150             <a href="./circ/patron/{{patron().id()}}/alerts">
151               [% l('Display Alert and Messages') %]
152             </a>
153           </li>
154           <li>
155             <a href="./circ/patron/{{patron().id()}}/notes">
156               [% l('Notes') %]
157             </a>
158           </li>
159           <li>
160             <a href="./circ/patron/{{patron().id()}}/triggered_events">
161               [% l('Triggered Events / Notifications') %]
162             </a>
163           </li>
164           <li>
165             <a href="./circ/patron/{{patron().id()}}/message_center">
166               [% l('Message Center') %]
167             </a>
168           </li>
169           <li>
170             <a href="./circ/patron/{{patron().id()}}/stat_cats">
171               [% l('Statistical Categories') %]
172             </a>
173           </li>
174           <li>
175             <a href="./circ/patron/{{patron().id()}}/surveys">
176               [% l('Surveys') %]
177             </a>
178           </li>
179           <li>
180             <a href="./circ/patron/{{patron().id()}}/group">
181               [% l('Group Member Details') %]
182             </a>
183           </li>
184           <li>
185             <a href="./circ/patron/{{patron().id()}}/edit_perms">
186               [% l('User Permission Editor') %]
187             </a>
188           </li>
189           <li>
190             <a href="./circ/patron/{{patron().id()}}/credentials">
191               [% l('Test Password') %]
192             </a>
193           </li>
194           <li>
195             <a href="./booking/legacy/booking/reservation?patron_barcode={{patron().card().barcode()}}" target="_top">
196               [% l('Booking: Create or Cancel Reservations') %]
197             </a>
198           </li>
199           <li>
200             <a href="./booking/legacy/booking/pickup?patron_barcode={{patron().card().barcode()}}" target="_top">
201               [% l('Booking: Pick Up Reservations') %]
202             </a>
203           </li>
204           <li>
205             <a href="./booking/legacy/booking/return?patron_barcode={{patron().card().barcode()}}" target="_top">
206               [% l('Booking: Return Reservations') %]
207             </a>
208           </li>
209           <li>
210             <a href ng-click="purge_account()" a-disabled="patron().super_user() == 't' || patron().id() == auth_user_id">
211               [% l('Completely Purge Account') %]
212             </a>
213           </li>
214        </ul>
215       </li>
216       <li ng-class="{active : tab == 'search'}" class="pull-right">
217         <a href="./circ/patron/search">[% l('Patron Search') %]</a>
218       </li>
219     </ul>
220     <div class="flex-row patron-reg-actions-bar" ng-if="is_patron_edit()">
221       [% INCLUDE 'staff/circ/patron/reg_actions.tt2' %]
222     </div>
223
224   </div><!-- col -->
225 </div><!-- row -->
226
227 <div class="row">
228   <div class="col-md-3" ng-hide="collapse_summary()">
229     [% INCLUDE 'staff/circ/patron/t_summary.tt2' %]
230   </div>
231   <div ng-class="{'col-md-12' : collapse_summary(),'col-md-9' : !collapse_summary()}">
232     <div class="tab-content">
233       <div class="tab-pane active">
234         <div ng-view></div>
235       </div>
236     </div>
237   </div><!-- col -->
238 </div><!-- row -->
239
240 [% END %]