2 <div class="patron-summary-container">
4 <div class="row d-flex patron-status-color rounded {{patronStatusColor()}}">
5 <div class="flex-1 pt-1 {{patronStatusColor()}}">
6 <h4 class="fw-bold" i18n>
7 {{patronService.namePart(p(), 'family_name')}},
8 {{patronService.namePart(p(), 'first_given_name')}}
9 {{patronService.namePart(p(), 'second_given_name')}}
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.
21 <div class="row mb-1 alert alert-warning p-0" *ngIf="p().juvenile() === 't'">
22 <div class="col-lg-12" i18n>
27 <div class="row mb-1 alert alert-anger p-0"
28 *ngFor="let pen of summary.alerts.alertPenalties">
30 title="{{pen.standing_penalty().name()}}">
33 <div class="col-lg-3">{{pen.set_date() | date:'shortDate'}}</div>
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>
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>
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>
48 <div class="row mb-1">
49 <div class="col-lg-5" i18n>
50 <a href="javascript:;" (click)="showDob = !showDob">Date of Birth</a>
52 <div class="col-lg-7">
53 <ng-container *ngIf="showDob">{{p().dob() | date}}</ng-container>
54 <ng-container *ngIf="!showDob" i18n><Hidden></ng-container>
57 <div class="row mb-1">
58 <div class="col-lg-5" i18n>Parent/Guardian</div>
59 <div class="col-lg-7">{{p().guardian()}}</div>
61 <div class="row mb-1">
62 <div class="col-lg-5" i18n>Last Activity</div>
63 <div class="col-lg-7">
64 <ng-container *ngIf="p().usr_activity()[0]">
65 {{p().usr_activity()[0].event_time() | date:'shortDate'}}
69 <div class="row mb-1">
70 <div class="col-lg-5" i18n>Last Updated</div>
71 <div class="col-lg-7">{{p().last_update_time() | date:'shortDate'}}</div>
73 <div class="row mb-1">
74 <div class="col-lg-5" i18n>Create Date</div>
75 <div class="col-lg-7">{{p().create_date() | date:'shortDate'}}</div>
77 <div class="row" [ngClass]="{'alert alert-danger p-0': summary.alerts.accountExpired}">
78 <div class="col-lg-5" i18n>Expire Date</div>
79 <div class="col-lg-7">{{p().expire_date() | date:'shortDate'}}</div>
84 <ng-container *ngIf="summary">
87 [ngClass]="{'alert alert-danger p-0': summary.stats.fines.balance_owed > 0}">
88 <div class="col-lg-5" i18n>Fines Owed</div>
89 <div class="col-lg-7">{{summary.stats.fines.balance_owed | currency}}</div>
93 *ngIf="summary.stats.fines.group_balance_owed > summary.stats.fines.balance_owed">
94 <div class="row mb-1 alert alert-danger p-0">
95 <div class="col-lg-5" i18n>Group Fines</div>
96 <div class="col-lg-7">{{summary.stats.fines.group_balance_owed | currency}}</div>
100 <div class="row mb-1">
101 <div class="col-lg-5" i18n>Items Out</div>
102 <div class="col-lg-7">{{summary.stats.checkouts.total_out}}</div>
104 <div class="row mb-1"
105 [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.overdue > 0}">
106 <div class="col-lg-5" i18n>Overdue</div>
107 <div class="col-lg-7">{{summary.stats.checkouts.overdue}}</div>
109 <div class="row mb-1"
110 [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.long_overdue > 0}">
111 <div class="col-lg-5" i18n>Long Overdue</div>
112 <div class="col-lg-7">{{summary.stats.checkouts.long_overdue}}</div>
114 <div class="row mb-1"
115 [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.claims_returned > 0}">
116 <div class="col-lg-5" i18n>Claimed Returned</div>
117 <div class="col-lg-7">{{summary.stats.checkouts.claims_returned}}</div>
119 <div class="row mb-1"
120 [ngClass]="{'alert alert-danger p-0': summary.stats.checkouts.lost > 0}">
121 <div class="col-lg-5" i18n>Lost</div>
122 <div class="col-lg-7">{{summary.stats.checkouts.lost}}</div>
124 <div class="row mb-1">
125 <div class="col-lg-5" i18n>Non-Cataloged</div>
126 <div class="col-lg-7">{{summary.stats.checkouts.noncat}}</div>
129 <div class="col-lg-5" i18n>Holds</div>
130 <div class="col-lg-7">
131 {{summary.stats.holds.ready}} / {{summary.stats.holds.total}}
138 <div class="row mb-1">
139 <div class="col-lg-5" i18n>Card</div>
140 <div class="col-lg-7">
141 {{p().card() ? p().card().barcode() : ''}}
144 <div class="row mb-1">
145 <div class="col-lg-5" i18n>Username</div>
146 <div class="col-lg-7">{{p().usrname()}}</div>
148 <div class="row mb-1">
149 <div class="col-lg-5" i18n>Day Phone</div>
150 <div class="col-lg-7">{{p().day_phone()}}</div>
152 <div class="row mb-1">
153 <div class="col-lg-5" i18n>Evening Phone</div>
154 <div class="col-lg-7">{{p().evening_phone()}}</div>
156 <div class="row mb-1">
157 <div class="col-lg-5" i18n>Other Phone</div>
158 <div class="col-lg-7">{{p().other_phone()}}</div>
160 <div class="row mb-1">
161 <div class="col-lg-5" i18n>ID1 </div>
162 <div class="col-lg-7">{{p().ident_value()}}</div>
164 <div class="row mb-1">
165 <div class="col-lg-5" i18n>ID2</div>
166 <div class="col-lg-7">{{p().ident_value2()}}</div>
168 <div class="row mb-1">
169 <div class="col-lg-5" i18n>Email</div>
170 <div class="col-lg-7">
171 <a *ngIf="p().email()" href="mailto:{{p().email()}}">{{p().email()}}</a>
174 <div class="row mb-1" *ngIf="p().name_keywords()">
175 <div class="col-lg-5" i18n>Name Keywords</div>
176 <div class="col-lg-7">{{p().name_keywords()}}</div>
179 <ng-container *ngIf="p().waiver_entries().length">
181 <div class="row mb-1 alert alert-info p-0">
182 <div class="col-lg-12" i18n>Allow others to use my account</div>
184 <div class="row mb-1" *ngFor="let waiver of p().waiver_entries()">
185 <div class="col-lg-5" i18n>{{waiver.name()}}</div>
186 <div class="col-lg-7">
188 <li *ngIf="waiver.place_holds() === 't'" i18n>Place holds</li>
189 <li *ngIf="waiver.pickup_holds() === 't'" i18n>Pick up holds</li>
190 <li *ngIf="waiver.view_history() === 't'" i18n>View borrowing history</li>
191 <li *ngIf="waiver.checkout_items() === 't'" i18n>Check out items</li>
199 <div class="row mb-1" *ngFor="let addr of p().addresses()">
200 <div class="col-lg-12">
202 <legend class="d-flex" [ngClass]="{'alert alert-danger p-0': addr.valid() === 'f'}">
203 <div class="flex-1">{{addr.address_type()}}</div>
205 <a class="me-2" href="javascript:;"
206 (click)="copyAddress(addr)" i18n>copy</a>
207 <a class="me-2" href="javascript:;"
208 (click)="printAddress(addr)" i18n>print</a>
211 <div i18n>{{addr.street1()}} {{addr.street2()}}</div>
212 <div i18n>{{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</div>
215 <!-- hidden textare used only for copying the text -->
216 <textarea id="patron-address-copy-{{addr.id()}}" rows="2"
217 style="visibility:hidden">
218 {{p().first_given_name()}} {{p().second_given_name()}} {{p().family_name()}}
219 {{addr.street1()}} {{addr.street2()}}
220 {{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</textarea>