0cdc45c6c6b6d8e0a691cb49b49be7b0f5fdbb3a
[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/circ/patron/app.js"></script>
22 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/regctl.js"></script>
23
24 <!-- load the rest on demand? -->
25
26 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/checkout.js"></script>
27 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/items_out.js"></script>
28 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/holds.js"></script>
29 <script src="[% ctx.media_prefix %]/js/ui/default/staff/circ/patron/bills.js"></script>
30
31 <!-- TODO: APP_JS should really be called APP_ADDONS or some such.
32     It just means "load these things, too, and load them last" -->
33 <link rel="stylesheet" href="[% ctx.base_path %]/staff/css/circ.css" />
34
35 <script>
36 angular.module('egCoreMod').run(['egStrings', function(s) {
37   s.ANNOTATE_PAYMENT_MSG = "[% l('Please annotate this payment') %]";
38   s.CONFIRM_REFUND_PAYMENT = 
39     "[% |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 %]";
40   s.EDIT_BILL_PAY_NOTE = "[% l('Enter new note for #[_1]:','{{ids}}') %]";
41   s.GROUP_ADD_USER = "[% l('Enter the patron barcode') %]";
42   s.RENEW_ITEMS = "[% l('Renew Items?') %]";
43   s.RENEW_ALL_ITEMS = "[% l('Renew All Items?') %]";
44   s.CHECK_IN_CONFIRM = "[% l('Check In Items?') %]";
45   s.REG_INVALID_FIELDS = 
46     "[% l('Please enter valid values for all required fields.') %]"
47   s.PAYMENT_WARN_AMOUNT = "[% l('Are you sure you want to apply a payment of $[_1]?', '{{payment_amount}}') %]";
48   s.PAYMENT_WARN_AMOUNT_TITLE = "[% l('Verify Payment Amount') %]";
49   s.PAYMENT_OVER_MAX = "[% l('Payments over $[_1] are denied by policy.', '{{max_amount}}') %]";
50 }]);
51 </script>
52
53 <!-- add room for the fixed navigation elements -->
54 <style ng-if="is_patron_edit">
55   #top-content-container { padding-top: 120px; }
56 </style>
57 <style ng-if="!is_patron_edit">
58   #top-content-container { padding-top: 80px; }
59 </style>
60
61 [% END %]
62
63 <div class="row" id="patron-fixed-tabs">
64   <div class="col-md-3 patron-name-header">
65     <div ng-show="patron()">
66       <h4 title="{{patron().id()}}">
67         <div class="flex-row">
68           <div class="flex-cell"
69           ng-class="{'patron-summary-alert' : hasAlerts()}">
70             [% l('[_1], [_2] [_3]', 
71                 '{{patron().family_name()}}',
72                 '{{patron().first_given_name()}}',
73                 '{{patron().second_given_name()}}') %]
74           </div>
75           <div ng-show="tab != 'search'">
76             <a href ng-click="toggle_expand_summary()"
77               title="[% l('Collapse Patron Summary Display') %]"
78               ng-hide="collapse_summary()">
79               <span class="glyphicon glyphicon-resize-small"></span>
80             </a>
81             <a href ng-click="toggle_expand_summary()"
82               title="[% l('Expand Patron Summary Display') %]"
83               ng-show="collapse_summary()">
84               <span class="glyphicon glyphicon-resize-full"></span>
85             </a>
86           </div>
87         </div>
88       </h4>
89     </div>
90   </div>
91
92   <div class="col-md-9">
93     <ul class="nav nav-pills nav-pills-like-tabs">
94       <li ng-class="{active : tab == 'checkout', disabled : !patron()}">
95         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/checkout">[% l('Check Out') %]</a>
96       </li>
97       <li ng-class="{active : tab == 'items_out', disabled : !patron()}">
98         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/items_out">
99           [% l('Items Out') %] 
100           <span ng-if="patron()"><!-- lack of space / newline below intentional -->
101           (<span ng-class="{'patron-summary-alert-small' : patron_stats().checkouts.overdue}">{{patron_stats().checkouts.total_out}}</span>)
102           </span>
103         </a>
104       </li>
105       <li ng-class="{active : tab == 'holds', disabled : !patron()}">
106         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/holds">
107           [% l('Holds') %]
108           <span ng-if="patron()">
109             (<span>{{patron_stats().holds.ready}} / {{patron_stats().holds.total}}</span>)
110           </span>
111         </a>
112       </li>
113       <li ng-class="{active : tab == 'bills', disabled : !patron()}">
114         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/bills">
115           [% l('Bills') %]
116           <span ng-if="patron()">
117             (<span ng-class="{'patron-summary-alert-small' : patron_stats().fines.balance_owed}">{{patron_stats().fines.balance_owed | currency}}</span>)
118           </span>
119         </a>
120       </li>
121       <li ng-class="{active : tab == 'messages', disabled : !patron()}">
122         <a a-disabled="!patron()" href="./circ/patron/{{patron().id()}}/messages">[% l('Messages') %]</a>
123       </li>
124       <li ng-class="{active : tab == 'edit', disabled : !patron()}">
125         <a href="./circ/patron/{{patron().id()}}/edit">[% l('Edit') %]</a>
126       </li>
127       <li uib-dropdown ng-class="{active : tab == 'other', disabled : !patron()}">
128         <a a-disabled="!patron()" href uib-dropdown-toggle>
129             [% l('Other') %]
130             <b class="caret"></b>
131         </a>
132         <ul uib-dropdown-menu>
133           <li>
134             <a href="./circ/patron/{{patron().id()}}/alerts">
135               [% l('Display Alert and Messages') %]
136             </a>
137           </li>
138           <li>
139             <a href="./circ/patron/{{patron().id()}}/notes">
140               [% l('Notes') %]
141             </a>
142           </li>
143           <li>
144             <a href="./circ/patron/{{patron().id()}}/triggered_events">
145               [% l('Triggered Events / Notifications') %]
146             </a>
147           </li>
148           <li>
149             <a href="./circ/patron/{{patron().id()}}/message_center">
150               [% l('Message Center') %]
151             </a>
152           </li>
153           <li>
154             <a href="./circ/patron/{{patron().id()}}/stat_cats">
155               [% l('Statistical Categories') %]
156             </a>
157           </li>
158           <li>
159             <a href="./circ/patron/{{patron().id()}}/group">
160               [% l('Group Member Details') %]
161             </a>
162           </li>
163           <li>
164             <a href="./circ/patron/{{patron().id()}}/edit_perms">
165               [% l('User Permission Editor') %]
166             </a>
167           </li>
168           <li>
169             <a href="./circ/patron/{{patron().id()}}/credentials">
170               [% l('Test Password') %]
171             </a>
172           </li>
173           <li>
174             <a href="./booking/legacy/booking/reservation?patron_barcode={{patron().card().barcode()}}" target="_top">
175               [% l('Booking: Create or Cancel Reservations') %]
176             </a>
177           </li>
178           <li>
179             <a href="./booking/legacy/booking/pickup?patron_barcode={{patron().card().barcode()}}" target="_top">
180               [% l('Booking: Pick Up Reservations') %]
181             </a>
182           </li>
183           <li>
184             <a href="./booking/legacy/booking/return?patron_barcode={{patron().card().barcode()}}" target="_top">
185               [% l('Booking: Return Reservations') %]
186             </a>
187           </li>
188        </ul>
189       </li>
190       <li ng-class="{active : tab == 'search'}" class="pull-right">
191         <a href="./circ/patron/search">[% l('Patron Search') %]</a>
192       </li>
193     </ul>
194     <div class="flex-row patron-reg-actions-bar" ng-if="is_patron_edit()">
195       [% INCLUDE 'staff/circ/patron/reg_actions.tt2' %]
196     </div>
197
198   </div><!-- col -->
199 </div><!-- row -->
200
201 <div class="row">
202   <div class="col-md-3" ng-hide="collapse_summary()">
203     [% INCLUDE 'staff/circ/patron/t_summary.tt2' %]
204   </div>
205   <div ng-class="{'col-md-12' : collapse_summary(),'col-md-9' : !collapse_summary()}">
206     <div class="tab-content">
207       <div class="tab-pane active">
208         <div ng-view></div>
209       </div>
210     </div>
211   </div><!-- col -->
212 </div><!-- row -->
213
214 [% END %]