2 <div class="patron-summary-container">
4 <h3 *ngIf="patron()" class="font-weight-bold" i18n>
5 {{patronService.namePart(patron(), 'family_name')}},
6 {{patronService.namePart(patron(), 'first_given_name')}}
7 {{patronService.namePart(patron(), 'second_given_name')}}
10 <div class="row mb-1 alert alert-danger p-0"
11 *ngIf="context.alerts.accountExpiresSoon">
12 <div class="col-lg-12" i18n>
13 Patron account will expire soon. Please renew.
17 <div class="row mb-1">
18 <div class="col-lg-5" i18n>Profile</div>
19 <div class="col-lg-7">{{patron().profile().name()}}</div>
21 <div class="row mb-1">
22 <div class="col-lg-5" i18n>Home Library</div>
23 <div class="col-lg-7">{{context.orgSn(patron().home_ou())}}</div>
25 <div class="row mb-1">
26 <div class="col-lg-5" i18n>Net Access</div>
27 <div class="col-lg-7">{{patron().net_access_level().name()}}</div>
29 <div class="row mb-1">
30 <div class="col-lg-5" i18n>Date of Birth</div>
31 <div class="col-lg-7">{{patron().dob() | date:'shortDate'}}</div>
33 <div class="row mb-1">
34 <div class="col-lg-5" i18n>Parent/Guardian</div>
35 <div class="col-lg-7">{{patron().guardian()}}</div>
37 <div class="row mb-1">
38 <div class="col-lg-5" i18n>Last Activity</div>
39 <div class="col-lg-7">
40 <ng-container *ngIf="patron().usr_activity()[0]">
41 {{patron().usr_activity()[0].event_time() | date:'shortDate'}}
45 <div class="row mb-1">
46 <div class="col-lg-5" i18n>Last Updated</div>
47 <div class="col-lg-7">{{patron().last_update_time() | date:'shortDate'}}</div>
49 <div class="row mb-1">
50 <div class="col-lg-5" i18n>Create Date</div>
51 <div class="col-lg-7">{{patron().create_date() | date:'shortDate'}}</div>
53 <div class="row" [ngClass]="{'alert alert-danger p-0': context.alerts.accountExpired}">
54 <div class="col-lg-5" i18n>Expire Date</div>
55 <div class="col-lg-7">{{patron().expire_date() | date:'shortDate'}}</div>
60 <ng-container *ngIf="context.patronStats">
63 [ngClass]="{'alert alert-danger p-0': context.patronStats.fines.total_owed > 0}">
64 <div class="col-lg-5" i18n>Fines Owed</div>
65 <div class="col-lg-7">{{context.patronStats.fines.total_owed | currency}}</div>
68 <!-- TODO GROUP FINES -->
70 <div class="row mb-1">
71 <div class="col-lg-5" i18n>Items Out</div>
72 <div class="col-lg-7">{{context.patronStats.checkouts.total_out}}</div>
75 [ngClass]="{'alert alert-danger p-0': context.patronStats.checkouts.overdue > 0}">
76 <div class="col-lg-5" i18n>Overdue</div>
77 <div class="col-lg-7">{{context.patronStats.checkouts.overdue}}</div>
80 [ngClass]="{'alert alert-danger p-0': context.patronStats.checkouts.long_overdue > 0}">
81 <div class="col-lg-5" i18n>Long Overdue</div>
82 <div class="col-lg-7">{{context.patronStats.checkouts.long_overdue}}</div>
85 [ngClass]="{'alert alert-danger p-0': context.patronStats.checkouts.claims_returned > 0}">
86 <div class="col-lg-5" i18n>Claimed Returned</div>
87 <div class="col-lg-7">{{context.patronStats.checkouts.claims_returned}}</div>
90 [ngClass]="{'alert alert-danger p-0': context.patronStats.checkouts.lost > 0}">
91 <div class="col-lg-5" i18n>Lost</div>
92 <div class="col-lg-7">{{context.patronStats.checkouts.lost}}</div>
94 <div class="row mb-1">
95 <div class="col-lg-5" i18n>Non-Cataloged</div>
96 <div class="col-lg-7">{{context.patronStats.checkouts.noncat}}</div>
99 <div class="col-lg-5" i18n>Holds</div>
100 <div class="col-lg-7">
101 {{context.patronStats.holds.ready}} / {{context.patronStats.holds.total}}
108 <div class="row mb-1">
109 <div class="col-lg-5" i18n>Card</div>
110 <div class="col-lg-7">
111 {{patron().card() ? patron().card().barcode() : ''}}
114 <div class="row mb-1">
115 <div class="col-lg-5" i18n>Username</div>
116 <div class="col-lg-7">{{patron().usrname()}}</div>
118 <div class="row mb-1">
119 <div class="col-lg-5" i18n>Day Phone</div>
120 <div class="col-lg-7">{{patron().day_phone()}}</div>
122 <div class="row mb-1">
123 <div class="col-lg-5" i18n>Evening Phone</div>
124 <div class="col-lg-7">{{patron().evening_phone()}}</div>
126 <div class="row mb-1">
127 <div class="col-lg-5" i18n>Other Phone</div>
128 <div class="col-lg-7">{{patron().other_phone()}}</div>
130 <div class="row mb-1">
131 <div class="col-lg-5" i18n>ID1 </div>
132 <div class="col-lg-7">{{patron().ident_value()}}</div>
134 <div class="row mb-1">
135 <div class="col-lg-5" i18n>ID2</div>
136 <div class="col-lg-7">{{patron().ident_value2()}}</div>
138 <div class="row mb-1">
139 <div class="col-lg-5" i18n>Email</div>
140 <div class="col-lg-7">
141 <!-- TODO: mailto link -->
148 <div class="row mb-1" *ngFor="let addr of patron().addresses()">
149 <div class="col-lg-12">
151 <legend class="d-flex" [ngClass]="{'alert alert-danger p-0': addr.valid() == 'f'}">
152 <div class="flex-1">{{addr.address_type()}}</div>
154 <a class="mr-2" href="javascript:;"
155 (click)="copyAddress(addr)" i18n>copy</a>
156 <a class="mr-2" href="javascript:;"
157 (click)="printAddress(addr)" i18n>print</a>
160 <div i18n>{{addr.street1()}} {{addr.street2()}}</div>
161 <div i18n>{{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</div>
164 <!-- hidden textare used only for copying the text -->
165 <textarea id="patron-address-copy-{{addr.id()}}" rows="2"
166 style="visibility:hidden">
167 {{patron().first_given_name()}} {{patron().second_given_name()}} {{patron().family_name()}}
168 {{addr.street1()}} {{addr.street2()}}
169 {{addr.city()}}, {{addr.state()}} {{addr.post_code()}}</textarea>