]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/share/patron/summary.component.html
LP1904036 Patron penalty note is now usr_message
[working/Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / share / patron / summary.component.html
1
2 <div class="patron-summary-container">
3
4   <div class="row d-flex patron-status-color rounded {{patronStatusColor()}}">
5     <div class="flex-1 pt-1 {{patronStatusColor()}}">
6       <h4 class="font-weight-bold" i18n>
7         {{patronService.namePart(p(), 'family_name')}}, 
8         {{patronService.namePart(p(), 'first_given_name')}} 
9         {{patronService.namePart(p(), 'second_given_name')}}
10       </h4>
11     </div>
12   </div>
13
14   <div class="row mb-1 alert alert-danger p-0" 
15     *ngIf="summary.alerts.accountExpiresSoon">
16     <div class="col-lg-12" i18n>
17       Patron account will expire soon.  Please renew.
18     </div>
19   </div>
20
21   <div class="row mb-1 alert alert-warning p-0" *ngIf="p().juvenile() == 't'">
22     <div class="col-lg-12" i18n>
23       Juvenile Account
24     </div>
25   </div>
26
27   <div class="row mb-1 alert alert-danger p-0" 
28     *ngFor="let pen of summary.alerts.alertPenalties">
29     <div class="col-lg-9"
30       title="{{pen.standing_penalty().name()}}">
31       {{pen.usr_message() || pen.standing_penalty().label()}}
32     </div>
33     <div class="col-lg-3">{{pen.set_date() | date:'shortDate'}}</div>
34   </div>
35
36   <div class="row mb-1">
37     <div class="col-lg-5" i18n>Profile</div>
38     <div class="col-lg-7">{{p().profile().name()}}</div>
39   </div>
40   <div class="row mb-1">
41     <div class="col-lg-5" i18n>Home Library</div>
42     <div class="col-lg-7">{{orgSn(p().home_ou())}}</div>
43   </div>
44   <div class="row mb-1">
45     <div class="col-lg-5" i18n>Net Access</div>
46     <div class="col-lg-7">{{p().net_access_level().name()}}</div>
47   </div>
48   <div class="row mb-1">
49     <div class="col-lg-5" i18n>Date of Birth</div>
50     <div class="col-lg-7">{{p().dob() | date}}</div>
51   </div>
52   <div class="row mb-1">
53     <div class="col-lg-5" i18n>Parent/Guardian</div>
54     <div class="col-lg-7">{{p().guardian()}}</div>
55   </div>
56   <div class="row mb-1">
57     <div class="col-lg-5" i18n>Last Activity</div>
58     <div class="col-lg-7">
59       <ng-container *ngIf="p().usr_activity()[0]">
60         {{p().usr_activity()[0].event_time() | date:'shortDate'}}
61       </ng-container>
62     </div>
63   </div>
64   <div class="row mb-1">
65     <div class="col-lg-5" i18n>Last Updated</div>
66     <div class="col-lg-7">{{p().last_update_time() | date:'shortDate'}}</div>
67   </div>
68   <div class="row mb-1">
69     <div class="col-lg-5" i18n>Create Date</div>
70     <div class="col-lg-7">{{p().create_date() | date:'shortDate'}}</div>
71   </div>
72   <div class="row" [ngClass]="{'alert alert-danger p-0': summary.alerts.accountExpired}">
73     <div class="col-lg-5" i18n>Expire Date</div>
74     <div class="col-lg-7">{{p().expire_date() | date:'shortDate'}}</div>
75   </div>
76
77   <hr class="m-1"/>
78
79   <ng-container *ngIf="summary">
80
81     <div class="row mb-1"
82       [ngClass]="{'alert alert-danger p-0': summary.stats.fines.balance_owed > 0}">
83       <div class="col-lg-5" i18n>Fines Owed</div>
84       <div class="col-lg-7">{{summary.stats.fines.balance_owed | currency}}</div>
85     </div>
86
87     <ng-container 
88       *ngIf="summary.stats.fines.group_balance_owed > summary.stats.fines.balance_owed">
89       <div class="row mb-1 alert alert-danger p-0">
90         <div class="col-lg-5" i18n>Group Fines</div>
91         <div class="col-lg-7">{{summary.stats.fines.group_balance_owed | currency}}</div>
92       </div>
93     </ng-container>
94
95     <div class="row mb-1">
96       <div class="col-lg-5" i18n>Items Out</div>
97       <div class="col-lg-7">{{summary.stats.checkouts.total_out}}</div>
98     </div>
99     <div class="row mb-1"
100       [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.overdue > 0}">
101       <div class="col-lg-5" i18n>Overdue</div>
102       <div class="col-lg-7">{{summary.stats.checkouts.overdue}}</div>
103     </div>
104     <div class="row mb-1"
105       [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.long_overdue > 0}">
106       <div class="col-lg-5" i18n>Long Overdue</div>
107       <div class="col-lg-7">{{summary.stats.checkouts.long_overdue}}</div>
108     </div>
109     <div class="row mb-1"
110       [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.claims_returned > 0}">
111       <div class="col-lg-5" i18n>Claimed Returned</div>
112       <div class="col-lg-7">{{summary.stats.checkouts.claims_returned}}</div>
113     </div>
114     <div class="row mb-1"
115       [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.lost > 0}">
116       <div class="col-lg-5" i18n>Lost</div>
117       <div class="col-lg-7">{{summary.stats.checkouts.lost}}</div>
118     </div>
119     <div class="row mb-1">
120       <div class="col-lg-5" i18n>Non-Cataloged</div>
121       <div class="col-lg-7">{{summary.stats.checkouts.noncat}}</div>
122     </div>
123     <div class="row">
124       <div class="col-lg-5" i18n>Holds</div>
125       <div class="col-lg-7">
126         {{summary.stats.holds.ready}} / {{summary.stats.holds.total}}
127       </div>
128     </div>
129
130     <hr class="m-1"/>
131   </ng-container>
132
133   <div class="row mb-1">
134     <div class="col-lg-5" i18n>Card</div>
135     <div class="col-lg-7">
136       {{p().card() ? p().card().barcode() : ''}}
137     </div>
138   </div>
139   <div class="row mb-1">
140     <div class="col-lg-5" i18n>Username</div>
141     <div class="col-lg-7">{{p().usrname()}}</div>
142   </div>
143   <div class="row mb-1">
144     <div class="col-lg-5" i18n>Day Phone</div>
145     <div class="col-lg-7">{{p().day_phone()}}</div> 
146   </div>
147   <div class="row mb-1">
148     <div class="col-lg-5" i18n>Evening Phone</div>
149     <div class="col-lg-7">{{p().evening_phone()}}</div> 
150   </div>
151   <div class="row mb-1">
152     <div class="col-lg-5" i18n>Other Phone</div>
153     <div class="col-lg-7">{{p().other_phone()}}</div> 
154   </div>
155   <div class="row mb-1">
156     <div class="col-lg-5" i18n>ID1 </div>
157     <div class="col-lg-7">{{p().ident_value()}}</div> 
158   </div>
159   <div class="row mb-1">
160     <div class="col-lg-5" i18n>ID2</div>
161     <div class="col-lg-7">{{p().ident_value2()}}</div> 
162   </div>
163   <div class="row mb-1">
164     <div class="col-lg-5" i18n>Email</div>
165     <div class="col-lg-7">
166       <a *ngIf="p().email()" href="mailto:{{p().email()}}">{{p().email()}}</a>
167     </div> 
168   </div>
169   <div class="row mb-1" *ngIf="p().name_keywords()">
170     <div class="col-lg-5" i18n>Name Keywords</div>
171     <div class="col-lg-7">{{p().name_keywords()}}</div> 
172   </div>
173
174   <ng-container *ngIf="p().waiver_entries().length">
175     <hr class="m-1"/>
176     <div class="row mb-1 alert alert-info p-0">
177       <div class="col-lg-12" i18n>Allow others to use my account</div>
178     </div>
179     <div class="row mb-1" *ngFor="let waiver of p().waiver_entries()">
180       <div class="col-lg-5" i18n>{{waiver.name()}}</div>
181       <div class="col-lg-7">
182         <ul>
183           <li *ngIf="waiver.place_holds() == 't'" i18n>Place holds</li>
184           <li *ngIf="waiver.pickup_holds() == 't'" i18n>Pick up holds</li>
185           <li *ngIf="waiver.view_history() == 't'" i18n>View borrowing history</li>
186           <li *ngIf="waiver.checkout_items() == 't'" i18n>Check out items</li>
187         </ul>
188       </div>
189     </div>
190   </ng-container>
191
192   <hr class="m-1"/>
193
194   <div class="row mb-1" *ngFor="let addr of p().addresses()">
195     <div class="col-lg-12">
196       <fieldset>
197         <legend class="d-flex" [ngClass]="{'alert alert-danger p-0': addr.valid() == 'f'}">
198           <div class="flex-1">{{addr.address_type()}}</div>
199           <div>
200             <a class="mr-2" href="javascript:;" 
201               (click)="copyAddress(addr)" i18n>copy</a>
202             <a class="mr-2" href="javascript:;" 
203               (click)="printAddress(addr)" i18n>print</a>
204           </div>
205         </legend>
206         <div i18n>{{addr.street1()}} {{addr.street2()}}</div>
207         <div i18n>{{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</div>
208       </fieldset>
209
210       <!-- hidden textare used only for copying the text -->
211       <textarea id="patron-address-copy-{{addr.id()}}" rows="2"              
212         style="visibility:hidden">
213 {{p().first_given_name()}} {{p().second_given_name()}} {{p().family_name()}}
214 {{addr.street1()}} {{addr.street2()}}
215 {{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</textarea>
216     </div>
217   </div>
218 </div>