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="font-weight-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-danger p-0"
28 *ngFor="let pen of summary.alerts.alertPenalties">
30 title="{{pen.standing_penalty().name()}}">
31 {{pen.usr_message() || pen.standing_penalty().label()}}
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>Date of Birth</div>
50 <div class="col-lg-7">{{p().dob() | date}}</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>
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'}}
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>
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>
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>
79 <ng-container *ngIf="summary">
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>
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>
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>
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>
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>
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>
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>
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>
124 <div class="col-lg-5" i18n>Holds</div>
125 <div class="col-lg-7">
126 {{summary.stats.holds.ready}} / {{summary.stats.holds.total}}
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() : ''}}
139 <div class="row mb-1">
140 <div class="col-lg-5" i18n>Username</div>
141 <div class="col-lg-7">{{p().usrname()}}</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>
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>
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>
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>
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>
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>
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>
174 <ng-container *ngIf="p().waiver_entries().length">
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>
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">
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>
194 <div class="row mb-1" *ngFor="let addr of p().addresses()">
195 <div class="col-lg-12">
197 <legend class="d-flex" [ngClass]="{'alert alert-danger p-0': addr.valid() == 'f'}">
198 <div class="flex-1">{{addr.address_type()}}</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>
206 <div i18n>{{addr.street1()}} {{addr.street2()}}</div>
207 <div i18n>{{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</div>
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>