]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/circ/checkin/checkin.component.html
LP1904036 Mark Damaged always handles checkin
[Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / circ / checkin / checkin.component.html
1 <eg-staff-banner *ngIf="!isHoldCapture" i18n-bannerText bannerText="Checkin Items">
2 </eg-staff-banner>
3
4 <eg-staff-banner *ngIf="isHoldCapture" i18n-bannerText bannerText="Capture Holds">
5 </eg-staff-banner>
6
7 <eg-mark-damaged-dialog #markDamagedDialog [handleCheckin]="true"></eg-mark-damaged-dialog>
8 <eg-circ-components></eg-circ-components>
9 <eg-progress-dialog #progressDialog></eg-progress-dialog>
10 <eg-barcode-select #barcodeSelect></eg-barcode-select>
11 <eg-copy-alerts-dialog #copyAlertsDialog></eg-copy-alerts-dialog>
12 <eg-bucket-dialog #bucketDialog></eg-bucket-dialog>
13 <eg-string #itemNeverCircedStr i18n-text 
14   text="Item CONC40000598 has never circulated."></eg-string>
15 <eg-backdate-dialog #backdateDialog></eg-backdate-dialog>
16 <eg-cancel-transit-dialog #cancelTransitDialog></eg-cancel-transit-dialog>
17 <eg-worklog-strings-components></eg-worklog-strings-components>
18
19 <div class="row" *ngIf="hasAlerts()">
20   <div class="col-lg-12 alert alert-danger p-1">
21     <span class="mr-2 pr-2 border-right border-dark" 
22       *ngIf="backdate" i18n>Backdated Check In {{backdate | date:'shortDate'}}</span>
23     <span class="mr-2 pr-2 border-right border-dark" 
24       *ngIf="backdate && backdateUntilLogout" i18n>Use Effective Date Until Logout</span>
25     <span class="mr-2 pr-2 border-right border-dark" 
26       *ngIf="modifiers.no_precat_alert" i18n>Ignore Pre-Cataloged Items</span>
27     <span class="mr-2 pr-2 border-right border-dark" 
28       *ngIf="modifiers.noop" i18n>Suppress Holds and Transits</span>
29     <span class="mr-2 pr-2 border-right border-dark" 
30       *ngIf="modifiers.void_overdues" i18n>Amnesty Mode</span>
31     <span class="mr-2 pr-2 border-right border-dark" 
32       *ngIf="modifiers.auto_print_holds_transits" i18n>Auto-Print Hold and Transit Slips</span>
33     <span class="mr-2 pr-2 border-right border-dark" 
34       *ngIf="modifiers.clear_expired" i18n>Clear Holds Shelf</span>
35     <ng-container *ngIf="modifiers.retarget_holds">
36       <span class="mr-2 pr-2 border-right border-dark" 
37         *ngIf="modifiers.retarget_holds_all" i18n>Always Retarget Local Holds</span>
38       <span class="mr-2 pr-2 border-right border-dark" 
39         *ngIf="!modifiers.retarget_holds_all" i18n>Retarget Local Holds</span>
40     </ng-container>
41     <span class="mr-2 pr-2 border-right border-dark" 
42       *ngIf="modifiers.hold_as_transit" i18n>Capture Local Holds As Transits</span>
43     <span class="mr-2 pr-2 border-right border-dark" 
44       *ngIf="modifiers.manual_float" i18n>Manual Floating Active</span>
45     <span class="mr-2 pr-2 border-right border-dark" 
46       *ngIf="modifiers.do_inventory_update" i18n>Update Inventory</span>
47   </div>
48 </div>
49
50 <div class="row mb-3 pb-3 border-bottom">
51   <div class="col-lg-12 d-flex">
52     <div class="form-inline">
53       <div class="input-group">
54         <div class="input-group-prepend">
55           <span class="input-group-text" i18n>Barcode</span>
56         </div>
57         <input type="text" class="form-control" id="barcode-input"
58           placeholder="Barcode..." i18n-placeholder [(ngModel)]="barcode"
59           i18n-aria-label aria-label="Barcode Input" (keydown.enter)="checkin()" />
60         <div class="input-group-append">
61           <button class="btn btn-outline-dark" (keydown.enter)="checkin()" 
62             (click)="checkin()" i18n>Submit</button>
63         </div>
64       </div>
65     </div>
66     <div class="flex-1"></div>
67     <div class="mr-2">
68       <div class="form-check form-check-inline">
69         <input class="form-check-input" type="checkbox" 
70           id="use-date-cbox" [(ngModel)]="backdateUntilLogout"/>
71         <label class="form-check-label" 
72           for="use-date-cbox" i18n>Use effective date until logout</label>
73       </div>
74     </div>
75     <div class="mr-2" i18n>Effective Date:</div>
76     <eg-date-select [initialIso]="backdate" [(ngModel)]="backdateDate"
77       (onChangeAsIso)="backdate = $event"></eg-date-select>
78     <button class="btn btn-sm btn-outline-dark ml-1" 
79       (click)="backdateDate=null; backdate=null" i18n>Clear</button>
80   </div>
81 </div>
82
83 <div *ngIf="fineTally > 0">
84   <span class="mr-2" i18n>Fine Tally: </span>
85   <span class="badge badge-danger">{{fineTally | currency}}</span>
86 </div>
87
88 <!-- doc_id below because checkin returns an MVR -->
89 <ng-template #titleTemplate let-r="row">
90   <ng-container *ngIf="r.record">
91     <a routerLink="/staff/catalog/record/{{r.record.doc_id()}}">{{r.title}}</a>
92   </ng-container>
93   <ng-container *ngIf="!r.record">{{r.title}}</ng-container>
94 </ng-template>
95
96 <ng-template #barcodeTemplate let-r="row">
97   <ng-container *ngIf="r.copy">
98     <a href="/eg/staff/cat/item/{{r.copy.id()}}">{{r.copy.barcode()}}</a>
99   </ng-container>
100 </ng-template>
101
102 <div class="row">
103   <div class="col-lg-12">
104     <eg-grid #grid [dataSource]="gridDataSource" [sortable]="true"
105       [useLocalSort]="true" [cellTextGenerator]="cellTextGenerator"
106       [disablePaging]="true" [persistKey]="persistKey">
107
108       <eg-grid-toolbar-action
109         group="Mark" i18n-group i18n-label label="Mark Item Damaged"
110         (onClick)="markDamaged($event)"></eg-grid-toolbar-action>
111
112       <eg-grid-toolbar-action
113         group="Mark" i18n-group i18n-label label="Mark Missing Pieces"
114         (onClick)="markMissingPieces($event)"></eg-grid-toolbar-action>
115
116       <eg-grid-toolbar-action
117         i18n-group group="Edit" i18n-label label="Manage Item Alerts"
118         [disabled]="grid.context.rowSelector.selected().length !== 1"
119         (onClick)="manageItemAlerts($event)">
120       </eg-grid-toolbar-action>
121
122       <eg-grid-toolbar-action
123         i18n-group group="Edit" i18n-label label="Edit Holdings"
124         (onClick)="editHoldings($event)">
125       </eg-grid-toolbar-action>
126
127       <eg-grid-toolbar-action
128         i18n-group group="Edit" i18n-label label="Edit Items"
129         (onClick)="editItems($event)">
130       </eg-grid-toolbar-action>
131
132       <eg-grid-toolbar-action
133         i18n-group group="Print" i18n-label label="Print Labels"
134         (onClick)="openItemPrintLabels($event)">
135       </eg-grid-toolbar-action>
136
137       <eg-grid-toolbar-action
138         i18n-group group="Add" i18n-label label="Add Item Alerts"
139         (onClick)="addItemAlerts($event)">
140       </eg-grid-toolbar-action>
141
142       <eg-grid-toolbar-action
143         i18n-group group="Add" i18n-label label="Add Items To Bucket"
144         (onClick)="openBucketDialog($event)">
145       </eg-grid-toolbar-action>
146
147       <eg-grid-toolbar-action
148         i18n-group group="Circulation" i18n-label label="Backdate Post-Checkin"
149         (onClick)="backdatePostCheckin($event)">
150       </eg-grid-toolbar-action>
151
152       <eg-grid-toolbar-action
153         i18n-group group="Circulation" i18n-label label="Cancel Transits"
154         (onClick)="cancelTransits($event)">
155       </eg-grid-toolbar-action>
156
157       <eg-grid-toolbar-action
158         i18n-group group="Show" i18n-label 
159         label="Retrieve Last Patron Who Circulated Item"
160         [disabled]="grid.context.rowSelector.selected().length !== 1"
161         (onClick)="retrieveLastPatron($event)">
162       </eg-grid-toolbar-action>
163
164       <eg-grid-toolbar-action
165         i18n-group group="Show" i18n-label 
166         label="Show Record Holds"
167         [disabled]="grid.context.rowSelector.selected().length !== 1"
168         (onClick)="showRecordHolds($event)">
169       </eg-grid-toolbar-action>
170
171       <eg-grid-toolbar-action
172         i18n-group group="Show" i18n-label 
173         label="Show Last Few Circs"
174         [disabled]="grid.context.rowSelector.selected().length !== 1"
175         (onClick)="showRecentCircs($event)">
176       </eg-grid-toolbar-action>
177
178       <!-- COLUMNS -->
179
180       <eg-grid-column path="index" [index]="true" 
181         label="Row Index" i18n-label [hidden]="true"></eg-grid-column>
182
183       <eg-grid-column path="copy.alert_message" label="Alert Message"
184         i18n-label></eg-grid-column>
185
186       <eg-grid-column path="mbts.balance_owed" label="Balance Owed" 
187         datatype="money" i18n-label></eg-grid-column>
188
189       <eg-grid-column path="copy.barcode" label="Barcode" 
190         i18n-label [cellTemplate]="barcodeTemplate"></eg-grid-column>
191
192       <eg-grid-column i18n-label label="Call Number" path="volume.label">
193       </eg-grid-column>
194
195       <eg-grid-column path="copy.circ_lib.shortname"
196         label="Circulation Library" i18n-label></eg-grid-column>
197
198       <eg-grid-column path="title" label="Title" i18n-label 
199         [cellTemplate]="titleTemplate"></eg-grid-column>
200
201       <eg-grid-column path="patron.family_name" label="Last Name" i18n-label>
202       </eg-grid-column>
203
204       <eg-grid-column path="patron.first_given_name" label="First Name" i18n-label>
205       </eg-grid-column>
206
207       <eg-grid-column path="copy.location.name" label="Location" i18n-label [hidden]="true">
208       </eg-grid-column>
209
210       <eg-grid-column path="circ.id" label="Bill #" i18n-label [hidden]="true">
211       </eg-grid-column>
212
213       <eg-grid-column path="circ.checkin_time" label="Checkin Date" i18n-label
214         datatype="timestamp" [datePlusTime]="true" [hidden]="true"></eg-grid-column>
215
216       <eg-grid-column name="routeTo" label="Route To" i18n-label>
217       </eg-grid-column>
218
219       <eg-grid-column path="circ.xact_finish" label="Finish" i18n-label
220         [hidden]="true" datatype="timestamp" [datePlusTime]="true"></eg-grid-column>
221
222       <eg-grid-column path="circ.xact_start" label="Start" i18n-label [hidden]="true" 
223         datatype="timestamp" [datePlusTime]="true"></eg-grid-column>
224
225       <eg-grid-column path="copy.circ_modifier" [hidden]="true" 
226         label="Circulation Modifier" i18n-label></eg-grid-column>
227
228       <eg-grid-column path="copy.status.name" [hidden]="true"
229         label="Item Status" i18n-label></eg-grid-column>
230
231       <eg-grid-column path="circ.due_date" label="Due Date" i18n-label
232         timezoneContextOrg="circ.circ_lib" dateOnlyIntervalField="circ.duration"
233         [hidden]="true" datatype="timestamp"></eg-grid-column>
234
235       <eg-grid-column path="copy.*" idlClass="acp" [hidden]="true"></eg-grid-column>
236       <eg-grid-column path="volume.*" idlClass="acn" [hidden]="true"></eg-grid-column>
237       <eg-grid-column path="circ.*" idlClass="circ" [hidden]="true"></eg-grid-column>
238       <eg-grid-column path="mbts.*" idlClass="mbts" [hidden]="true"></eg-grid-column>
239       <eg-grid-column path="patron.*" idlClass="au" [hidden]="true"></eg-grid-column>
240       <eg-grid-column path="record.*" idlClass="mvr" [hidden]="true"></eg-grid-column>
241       <eg-grid-column path="hold.*" idlClass="ahr" [hidden]="true"></eg-grid-column>
242       <eg-grid-column path="transit.*" idlClass="atc" [hidden]="true"></eg-grid-column>
243
244     </eg-grid>
245   </div>
246 </div>
247
248 <div class="row mt-3 pt-3">
249   <div class="col-lg-12 d-flex">
250     <div class="flex-1"></div>
251     <div class="mr-3">
252       <button class="btn btn-outline-dark" 
253         (click)="printReceipt()" i18n>Print Receipt</button>
254     </div>
255     <div class="mr-3">
256       <div class="form-check form-check-inline">
257         <input class="form-check-input" type="checkbox" 
258           id="trim-list-cbox" [(ngModel)]="trimList"/>
259         <label class="form-check-label" 
260           for="trim-list-cbox" i18n>Trim List (20)</label>
261       </div>
262     </div>
263     <div class="mr-3">
264       <div class="form-check form-check-inline">
265         <input class="form-check-input" type="checkbox" 
266           (ngModelChange)="toggleStrictBarcode($event)"
267           id="strict-barcode-cbox" [(ngModel)]="strictBarcode"/>
268         <label class="form-check-label" 
269           for="strict-barcode-cbox" i18n>Strict Barcode</label>
270       </div>
271     </div>
272     <div>
273       <div ngbDropdown>
274         <button class="btn btn-outline-dark" 
275           ngbDropdownToggle i18n>Checkin Modifiers</button>
276         <div ngbDropdownMenu>
277           <a ngbDropdownItem (click)="toggleMod('no_precat_alert')">
278             <span *ngIf="modifiers.no_precat_alert" 
279               class="badge badge-success mr-2">&#x2713;</span>
280             <span *ngIf="!modifiers.no_precat_alert" 
281               class="badge badge-warning mr-2">&#x2717;</span>
282             <span i18n>Ignore Pre-cataloged Items</span>
283           </a>
284           <a ngbDropdownItem *ngIf="!isHoldCapture" (click)="toggleMod('noop')">
285             <span *ngIf="modifiers.noop" 
286               class="badge badge-success mr-2">&#x2713;</span>
287             <span *ngIf="!modifiers.noop" 
288               class="badge badge-warning mr-2">&#x2717;</span>
289             <span i18n>Suppress Holds and Transits</span>
290           </a>
291           <a ngbDropdownItem (click)="toggleMod('void_overdues')">
292             <span *ngIf="modifiers.void_overdues" 
293               class="badge badge-success mr-2">&#x2713;</span>
294             <span *ngIf="!modifiers.void_overdues"
295               class="badge badge-warning mr-2">&#x2717;</span>
296             <span i18n>Amnesty Mode</span>
297           </a>
298           <a ngbDropdownItem *ngIf="!isHoldCapture"
299             (click)="toggleMod('auto_print_holds_transits')">
300             <span *ngIf="modifiers.auto_print_holds_transits" 
301               class="badge badge-success mr-2">&#x2713;</span>
302             <span *ngIf="!modifiers.auto_print_holds_transits"
303               class="badge badge-warning mr-2">&#x2717;</span>
304             <span>Auto-Print Hold and Transit Slips</span>
305           </a>
306           <a ngbDropdownItem (click)="toggleMod('clear_expired')">
307             <span *ngIf="modifiers.clear_expired" 
308               class="badge badge-success mr-2">&#x2713;</span>
309             <span *ngIf="!modifiers.clear_expired"
310               class="badge badge-warning mr-2">&#x2717;</span>
311             <span i18n>Clear Holds Shelf</span>
312           </a>
313           <a ngbDropdownItem (click)="toggleMod('retarget_holds')">
314             <span *ngIf="modifiers.retarget_holds" 
315               class="badge badge-success mr-2">&#x2713;</span>
316             <span *ngIf="!modifiers.retarget_holds"
317               class="badge badge-warning mr-2">&#x2717;</span>
318             <span i18n>Retarget Local Holds</span>
319           </a>
320           <a ngbDropdownItem (click)="toggleMod('retarget_holds_all')">
321             <span *ngIf="modifiers.retarget_holds_all" 
322               class="badge badge-success mr-2">&#x2713;</span>
323             <span *ngIf="!modifiers.retarget_holds_all"
324               class="badge badge-warning mr-2">&#x2717;</span>
325             <span i18n>Retarget All Statuses</span>
326           </a>
327           <a ngbDropdownItem (click)="toggleMod('hold_as_transit')">
328             <span *ngIf="modifiers.hold_as_transit" 
329               class="badge badge-success mr-2">&#x2713;</span>
330             <span *ngIf="!modifiers.hold_as_transit"
331               class="badge badge-warning mr-2">&#x2717;</span>
332             <span i18n>Capture Local Holds As Transits</span>
333           </a>
334           <a ngbDropdownItem (click)="toggleMod('manual_float')">
335             <span *ngIf="modifiers.manual_float"
336               class="badge badge-success mr-2">&#x2713;</span>
337             <span *ngIf="!modifiers.manual_float"
338               class="badge badge-warning mr-2">&#x2717;</span>
339             <span i18n>Manual Floating Active</span>
340           </a>
341           <a ngbDropdownItem *ngIf="!isHoldCapture"
342             (click)="toggleMod('do_inventory_update')">
343             <span *ngIf="modifiers.do_inventory_update"
344               class="badge badge-success mr-2">&#x2713;</span>
345             <span *ngIf="!modifiers.do_inventory_update"
346               class="badge badge-warning mr-2">&#x2717;</span>
347             <span i18n>Update Inventory</span>
348           </a>
349         </div>
350       </div>
351     </div>
352   </div>
353 </div>
354
355