5 ({{user.family_name()}}, {{user.first_given_name()}})
9 <div class="col-lg-2 text-right">
10 <button class="btn btn-outline-dark btn-sm" [disabled]="true">
11 <span class="material-icons mat-icon-in-button align-middle"
12 i18n-title title="Search for Patron">search</span>
13 <span class="align-middle" i18n>Search for Patron</span>
18 <form class="form form-validated common-form"
19 autocomplete="off" (keydown.enter)="$event.preventDefault()">
21 <div class="col-lg-6 common-form striped-odd">
22 <div class="row mt-2">
23 <div class="col-lg-6">
24 <div class="form-check">
25 <input class="form-check-input" type="radio"
26 (change)="holdForChanged()"
27 name="holdFor" value="patron" [(ngModel)]="holdFor"/>
28 <label class="form-check-label" i18n>
29 Place hold for patron by barcode:
33 <div class="col-lg-6">
34 <div class="input-group">
35 <input type='text' class="form-control" name="userBarcode"
36 [disabled]="holdFor!='patron'" id='patron-barcode'
37 (keyup.enter)="userBarcodeChanged()"
38 [(ngModel)]="userBarcode" (change)="userBarcodeChanged()"/>
39 <div class="input-group-append">
40 <button class="btn btn-outline-dark" (click)="userBarcodeChanged()">Submit</button>
45 <div class="row mt-2">
46 <div class="col-lg-6">
47 <div class="form-check">
48 <input class="form-check-input" type="radio"
49 (change)="holdForChanged()"
50 name="holdFor" value="staff" [(ngModel)]="holdFor"/>
51 <label class="form-check-label" i18n>
52 Place hold for this staff account:
56 <div class="col-lg-6 font-weight-bold">{{requestor.usrname()}}</div>
58 <div class="row mt-2">
59 <div class="col-lg-6">
60 <label i18n>Pickup Location: </label>
62 <div class="col-lg-6">
63 <eg-org-select [applyOrgId]="pickupLib"></eg-org-select>
66 <div class="row mt-2">
67 <div class="col-lg-6">
68 <div class="form-check">
69 <input class="form-check-input" type="checkbox"
70 name="suspend" [(ngModel)]="suspend"/>
71 <label class="form-check-label" i18n>Suspend Hold</label>
74 <div class="col-lg-6">
75 <eg-date-select (onChangeAsISO)="activeDateSelected($event)"
76 [disabled]="!suspend">
80 </div><!-- left column -->
81 <div class="col-lg-6">
83 <div class="card-header">
84 <h4 i18n>Notifications</h4>
86 <ul class="list-group list-group-flush">
87 <li class="list-group-item d-flex">
89 <div class="form-check">
90 <input class="form-check-input" type="checkbox" name="notifyEmail"
91 [disabled]="!user || !user.email()" [(ngModel)]="notifyEmail"/>
92 <label class="form-check-label" i18n>Notify by Email</label>
96 <div class="input-group">
97 <div class="input-group-prepend">
98 <span class="input-group-text" i18n>Email Address</span>
100 <input type="text" class="form-control" name="userEmail"
101 [disabled]="true" value="{{user ? user.email() : ''}}"/>
105 <li class="list-group-item d-flex">
107 <div class="form-check">
108 <input class="form-check-input" type="checkbox"
109 name="notifyPhone" [(ngModel)]="notifyPhone"/>
110 <label class="form-check-label" i18n>Notify by Phone</label>
114 <div class="input-group">
115 <div class="input-group-prepend">
116 <span class="input-group-text" i18n>Phone Number</span>
118 <input type="text" class="form-control" [disabled]="!notifyPhone"
119 name="phoneValue" [(ngModel)]="phoneValue"/>
123 <li *ngIf="smsEnabled" class="list-group-item d-flex">
125 <div class="form-check">
126 <input class="form-check-input" type="checkbox"
127 name="notifySms" [(ngModel)]="notifySms"/>
128 <label class="form-check-label" i18n>Notify by SMS</label>
132 <div class="input-group">
133 <div class="input-group-prepend">
134 <span class="input-group-text" i18n>SMS Number</span>
136 <input type="text" class="form-control" [disabled]="!notifySms"
137 name="smsValue" [(ngModel)]="smsValue"/>
141 <li *ngIf="smsEnabled" class="list-group-item d-flex">
143 <label i18n>SMS Carrier</label>
146 <eg-combobox [disabled]="!notifySms"
147 placeholder="SMS Carriers" i18n-placeholder
148 [entries]="smsCarriers">
156 <div class="row mt-2">
157 <div class="col-lg-3">
158 <button class="btn btn-success" (click)="placeHolds()"
159 [disabled]="!user || placeHoldsClicked" i18n>Place Hold(s)</button>
164 <div class="row"><div class="col-lg-12"><hr/></div></div>
166 <div class="row font-weight-bold pt-3 ml-1 mr-1">
167 <div class="col-lg-12" i18n>Placing
168 <ng-container *ngIf="holdType == 'M'">METARECORD</ng-container>
169 <ng-container *ngIf="holdType == 'T'">TITLE</ng-container>
170 <ng-container *ngIf="holdType == 'V'">VOLUME</ng-container>
171 <ng-container *ngIf="holdType == 'F'">FORCE COPY</ng-container>
172 <ng-container *ngIf="holdType == 'C'">COPY</ng-container>
173 <ng-container *ngIf="holdType == 'R'">RECALL</ng-container>
174 <ng-container *ngIf="holdType == 'I'">ISSUANCE</ng-container>
175 <ng-container *ngIf="holdType == 'P'">PARTS</ng-container>
176 hold on record(s)</div>
179 <ng-template #anyValue>
180 <span class="font-italic" i18n>ANY</span>
184 TODO: add a section per hold context for metarecord holds
185 listing the possible formats and languages.
187 TODO: add a secion per hold context for T holds providing a
188 link to the metarecord hold equivalent (AKA "Advanced Hold
189 Options") for each record that has selectable filters (and
190 only when metarecord holds are enabled).
193 <div class="hold-records-list common-form striped-even">
195 <div class="row mt-2 ml-1 mr-1 font-weight-bold">
196 <div class="col-lg-1" i18n>Format</div>
197 <div class="col-lg-3" i18n>Title</div>
198 <div class="col-lg-2" i18n>Author</div>
199 <div class="col-lg-2" i18n>Call Number</div>
200 <div class="col-lg-1" i18n>Barcode</div>
201 <div class="col-lg-2" i18n>Holds Status</div>
202 <div class="col-lg-1" i18n>Override</div>
204 <div class="row mt-1 ml-1 mr-1" *ngFor="let ctx of holdContexts">
205 <div class="col-lg-12" *ngIf="ctx.holdMeta">
207 <div class="col-lg-1">
209 *ngFor="let code of ctx.holdMeta.bibSummary.attributes.icon_format">
211 alt="{{iconFormatLabel(code)}}"
212 title="{{iconFormatLabel(code)}}"
213 src="/images/format_icons/icon_format/{{code}}.png"/>
216 <!-- TODO: link for a metarecord should
217 jump to constituent bib list search page? -->
218 <div class="col-lg-3">
219 <a routerLink="/staff/catalog/record/{{ctx.holdMeta.bibId}}">
220 {{ctx.holdMeta.bibSummary.display.title}}
223 <div class="col-lg-2">{{ctx.holdMeta.bibSummary.display.author}}</div>
224 <div class="col-lg-2">
225 <ng-container *ngIf="ctx.holdMeta.volume; else anyValue">
226 {{ctx.holdMeta.volume.label()}}
229 <div class="col-lg-1">
230 <ng-container *ngIf="ctx.holdMeta.copy; else anyValue">
231 {{ctx.holdMeta.copy.barcode()}}
234 <div class="col-lg-2">
235 <ng-container *ngIf="!ctx.lastRequest && !ctx.processing">
236 <div class="alert alert-info" i18n>Hold Pending</div>
238 <ng-container *ngIf="ctx.processing">
239 <div class="alert alert-primary" i18n>Hold Processing...</div>
241 <ng-container *ngIf="ctx.lastRequest">
242 <ng-container *ngIf="ctx.lastRequest.result.success">
243 <div class="alert alert-success" i18n>Hold Succeeded</div>
245 <ng-container *ngIf="!ctx.lastRequest.result.success">
246 <div class="alert alert-danger">
247 {{ctx.lastRequest.result.evt.textcode}}
252 <div class="col-lg-1">
253 <ng-container *ngIf="canOverride(ctx)">
254 <button class="btn btn-info" (click)="override(ctx)">Override</button>
258 <!-- note: using inline style since class-level styling for rows
259 is superseded by the striped-even styling of the container -->
260 <div class="row" *ngIf="hasMetaFilters(ctx)"
261 style="background-color:inherit; border:none">
262 <div class="col-lg-1"><label i18n>Formats: </label></div>
263 <div class="col-lg-11 d-flex">
265 *ngFor="let ccvm of ctx.holdMeta.metarecord_filters.formats">
266 <div class="form-check ml-3">
267 <input class="form-check-input" type="checkbox"
268 [disabled]="ctx.holdMeta.metarecord_filters.formats.length == 1"
269 [(ngModel)]="ctx.selectedFormats.formats[ccvm.code()]"/>
271 alt="{{iconFormatLabel(ccvm.code())}}"
272 title="{{iconFormatLabel(ccvm.code())}}"
273 src="/images/format_icons/icon_format/{{ccvm.code()}}.png"/>
274 <label class="form-check-label ml-1">
275 {{ccvm.search_label() || ccvm.value()}}
281 <div class="row" *ngIf="hasMetaFilters(ctx)"
282 style="background-color:inherit; border:none">
283 <div class="col-lg-1"><label i18n>Languages: </label></div>
284 <div class="col-lg-11 d-flex">
286 *ngFor="let ccvm of ctx.holdMeta.metarecord_filters.langs">
287 <div class="form-check ml-3">
288 <input class="form-check-input" type="checkbox"
289 [disabled]="ctx.holdMeta.metarecord_filters.langs.length == 1"
290 [(ngModel)]="ctx.selectedFormats.langs[ccvm.code()]"/>
291 <label class="form-check-label ml-1">
292 {{ccvm.search_label() || ccvm.value()}}