3 <eg-acq-cancel-dialog #cancelDialog></eg-acq-cancel-dialog>
8 <button class="btn btn-info btn-sm" ngbDropdownToggle i18n>Actions</button>
10 <a ngbDropdownItem routerLink="../brief-record"
11 queryParamsHandling="merge" i18n>Add Brief Record</a>
12 <div class="dropdown-divider"></div>
13 <h6 class="dropdown-header" i18n>Selection List Actions</h6>
14 <button ngbDropdownItem (click)="deleteLineitems()"
15 [disabled]="!picklistId" i18n>Delete Selected Lineitems</button>
16 <button ngbDropdownItem (click)="createPo()"
17 [disabled]="!picklistId" i18n>Create Purchase Order from Selected Lineitems</button>
18 <button ngbDropdownItem (click)="createPo(true)"
19 [disabled]="!picklistId" i18n>Create Purchase Order from All Lineitems</button>
20 <div class="dropdown-divider"></div>
21 <h6 class="dropdown-header" i18n>Purchase Order Actions</h6>
22 <button ngbDropdownItem (click)="receiveSelected()"
23 [disabled]="!poId" i18n>Mark Selected Lineitems as Received</button>
24 <button ngbDropdownItem (click)="unReceiveSelected()"
25 [disabled]="!poId" i18n>Un-Receive Selected Lineitems</button>
26 <button ngbDropdownItem (click)="cancelSelected()"
27 [disabled]="!poId" i18n>Cancel Selected Lineitems</button>
31 <div class="col-lg-5">
32 <input type="text" class="form-control" [(ngModel)]="batchNote"
33 placeholder="New Line Item Note..." i18n-placeholder/>
35 <div class="col-lg-4 form-inline">
36 <div class="form-check mr-2">
37 <input class="form-check-input" type="checkbox"
38 id="vendor-public" [(ngModel)]="noteIsPublic">
39 <label class="form-check-label" for="vendor-public">
43 <button class="btn btn-outline-dark" (click)="applyBatchNote()"
44 [disabled]="!selectedIds().length" i18n>
50 <div *ngIf="batchFailure" class="row mt-2 p-2">
51 <div class="col-lg-12 p-2 border border-danger label-with-material-icon" i18n>
52 <span class="material-icons text-danger pr-2">report</span>
53 Batch operation failed:
54 {{batchFailure.textcode}} {{batchFailure.desc}}
56 <a class="ml-auto" href="javascript:;"
57 (click)="batchFailure = null" title="Close" i18n-title>
58 <span class="material-icons text-danger">close</span>
63 <!-- NAVIGATION / EXPANDY -->
65 <div class="row mt-3 mb-1 border border-info rounded toolbar">
66 <div class="col-lg-12 d-flex">
67 <div class="d-flex justify-content-center flex-column h-100">
68 <div class="form-check">
69 <input class="form-check-input" id='toggle-page-cbox'
70 [(ngModel)]="batchSelectPage" (change)="toggleSelectAll(false)" type="checkbox"/>
71 <label class="form-check-label" for='toggle-page-cbox' i18n>Items In Page</label>
75 <div class="d-flex justify-content-center flex-column h-100 ml-3">
76 <div class="form-check">
77 <input class="form-check-input" id='toggle-all-cbox'
78 [(ngModel)]="batchSelectAll" (change)="toggleSelectAll(true)" type="checkbox"/>
79 <label class="form-check-label" for='toggle-all-cbox' i18n>All Items</label>
83 <div class="d-flex ml-3 justify-content-center flex-column h-100">
84 <span class="font-italic" style="font-size:90%" i18n>
85 {{selectedIds().length}} Selected
89 <div class="flex-1"></div>
91 <div class="btn-toolbar">
92 <button type="button" (click)="toggleExpandAll()"
93 class="btn btn-sm btn-outline-dark mr-1">
94 <span title="Expand All" i18n-title *ngIf="!expandAll"
95 class="material-icons mat-icon-in-button">unfold_more</span>
96 <span title="Collapse All" i18n-title *ngIf="expandAll"
97 class="material-icons mat-icon-in-button">unfold_less</span>
99 <button [disabled]="pager.isFirstPage()" type="button"
100 class="btn btn-sm btn-outline-dark mr-1" (click)="pager.toFirst(); goToPage()">
101 <span title="First Page" i18n-title
102 class="material-icons mat-icon-in-button">first_page</span>
104 <button [disabled]="pager.isFirstPage()" type="button"
105 class="btn btn-sm btn-outline-dark mr-1" (click)="pager.decrement(); goToPage()">
106 <span title="Previous Page" i18n-title
107 class="material-icons mat-icon-in-button">keyboard_arrow_left</span>
109 <button [disabled]="pager.isLastPage()" type="button"
110 class="btn btn-sm btn-outline-dark mr-1" (click)="pager.increment(); goToPage()">
111 <span title="Next Page" i18n-title
112 class="material-icons mat-icon-in-button">keyboard_arrow_right</span>
114 <div ngbDropdown class="mr-1" placement="bottom-right">
115 <button ngbDropdownToggle class="btn btn-outline-dark text-button">
116 <span title="Select Row Count" i18n-title i18n>
120 <div class="dropdown-menu" ngbDropdownMenu>
121 <a class="dropdown-item" (click)="pageSizeChange(count)"
122 *ngFor="let count of [5, 10, 25, 50, 100, 500, 1000, 10000]">
123 <span class="ml-2">{{count}}</span>
127 </div><!-- buttons -->
131 <!-- LINEITEM LIST -->
133 <ng-container *ngFor="let li of pageOfLineitems">
134 <div class="row mt-2 border-bottom pt-2 pb-2 li-state-{{li.state()}}">
135 <div class="col-lg-12 d-flex">
136 <div class="jacket-wrapper">
137 <ng-container *ngIf="jacketIdent(li)">
138 <a href="/opac/extras/ac/jacket/large/{{jacketIdent(li)}}">
140 src='/opac/extras/ac/jacket/small/{{jacketIdent(li)}}'/>
143 <ng-container *ngIf="!jacketIdent(li)"><img class="jacket"/></ng-container>
146 <div class="ml-2 flex-1"> <!-- lineitem summary info -->
148 <div class="col-lg-12">
149 <input type="checkbox" [(ngModel)]="selected[li.id()]"/>
150 <a class="ml-2" queryParamsHandling="merge" [id]="li.id()"
151 routerLink="./lineitem/{{li.id()}}/detail">
152 {{displayAttr(li, 'title')}}
157 <div class="col-lg-12">
158 <span class="pr-1">{{displayAttr(li, 'author')}}</span>
159 <span class="pr-1">{{displayAttr(li, 'isbn')}}</span>
160 <span class="pr-1">{{displayAttr(li, 'issn')}}</span>
161 <span class="pr-1">{{displayAttr(li, 'edition')}}</span>
162 <span class="pr-1">{{displayAttr(li, 'pubdate')}}</span>
163 <span class="pr-1">{{displayAttr(li, 'publisher')}}</span>
164 <span class="pr-1">{{li.source_label()}}</span>
167 <div class="row" *ngIf="li.purchase_order()">
168 <div class="col-lg-12">
169 <eg-lineitem-order-summary [li]="li"></eg-lineitem-order-summary>
173 <div class="col-lg-12">
174 <span title="Lineitem ID" i18n-title i18n># {{li.id()}}</span>
175 <span class="ml-1 mr-1" i18n> | </span>
176 <span title="Existing Item Count" i18n-title i18n
177 [ngClass]="{'text-danger font-weight-bold': existingCopyCounts[li.id()] > 0}">
178 {{existingCopyCounts[li.id()]}}</span>
179 <span class="ml-1 mr-1" i18n> | </span>
180 <a class="label-with-material-icon" title="Items" i18n-title
181 routerLink="./lineitem/{{li.id()}}/items" queryParamsHandling="merge">
182 <span class="material-icons small mr-1">shopping_basket</span>
183 <span i18n>Items ({{li.lineitem_details().length}})</span>
185 <span class="ml-1 mr-1" i18n> | </span>
186 <a class="label-with-material-icon" title="Expand" i18n-title
187 href="javascript:;" (click)="toggleShowExpand(li.id())">
188 <ng-container *ngIf="showExpandFor != li.id()">
189 <span class="material-icons small mr-1">unfold_more</span>
190 <span i18n>Expand</span>
192 <ng-container *ngIf="showExpandFor == li.id()">
193 <span class="material-icons small mr-1">unfold_less</span>
194 <span i18n>Collapse</span>
197 <span class="ml-1 mr-1" i18n> | </span>
198 <a class="label-with-material-icon" title="Notes" i18n-title
199 href="javascript:;" (click)="toggleShowNotes(li.id())">
200 <span class="material-icons small mr-1">event_note</span>
201 <span i18n>Notes ({{li.lineitem_notes().length}})</span>
202 <span *ngIf="liHasAlerts(li)" class="text-danger material-icons"
203 title="Has Alerts" i18n-title>flag</span>
205 <span class="ml-1 mr-1" i18n> | </span>
206 <a class="label-with-material-icon"
207 routerLink="lineitem/{{li.id()}}/worksheet/">
208 <span class="material-icons small mr-1">create</span>
209 <span i18n>Worksheet</span>
211 <span class="ml-1 mr-1" i18n> | </span>
212 <a class="label-with-material-icon"
213 [queryParams]="{f: 'jub:id', val1: li.id()}"
214 routerLink="/staff/acq/search/invoices">
215 <span class="material-icons small mr-1">list</span>
216 <span i18n>Invoice(s)</span>
218 <ng-container *ngIf="li.eg_bib_id()">
219 <span class="ml-1 mr-1" i18n> | </span>
220 <a class="label-with-material-icon mr-2"
221 routerLink="/staff/catalog/record/{{li.eg_bib_id()}}">
222 <span class="material-icons small mr-1">library_books</span>
223 <span i18n>Catalog</span>
227 <ng-container *ngIf="!poId && li.purchase_order()">
228 <span class="ml-1 mr-1" i18n> | </span>
229 <a class="label-with-material-icon"
230 title="Purchase Order" i18n-title
231 routerLink="/staff/acq/po/{{li.purchase_order().id()}}">
232 <span class="material-icons small mr-1">center_focus_weak</span>
233 <span i18n>{{li.purchase_order().id()}}</span>
236 <ng-container *ngIf="!picklistId && li.picklist()">
237 <span class="ml-1 mr-1" i18n> | </span>
238 <a class="label-with-material-icon"
239 title="Selection List" i18n-title
240 routerLink="/staff/acq/picklist/{{li.picklist().id()}}">
241 <span class="material-icons small mr-1">widgets</span>
242 <span i18n>{{li.picklist().name()}}</span>
245 <ng-container *ngIf="li.provider()">
246 <span class="ml-1 mr-1" i18n> | </span>
247 <a class="label-with-material-icon"
248 title="Selection List" i18n-title
249 routerLink="/staff/acq/provider/{{li.provider().id()}}/details">
250 <span class="material-icons small mr-1">store</span>
251 <span i18n>{{li.provider().name()}}</span>
258 <!-- actions along the right -->
259 <div class="d-flex flex-column justify-content-end">
261 <div class="col-lg-12 d-flex">
262 <div class="flex-1"> </div>
263 <!-- w-auto allows the input group to stick to the right
264 as the status label grows -->
265 <div class="input-group w-auto">
266 <div class="input-group-prepend">
268 <button class="btn btn-outline-dark btn-sm" ngbDropdownToggle
269 title="Order Identifier Type" i18n-title
270 [ngClass]="{'btn-warning': !selectedIdent(li)}">
271 <ng-container *ngIf="orderIdentTypes[li.id()]=='isbn'" i18n>ISBN</ng-container>
272 <ng-container *ngIf="orderIdentTypes[li.id()]=='upc'" i18n>UPC</ng-container>
273 <ng-container *ngIf="orderIdentTypes[li.id()]=='issn'" i18n>ISSN</ng-container>
275 <div ngbDropdownMenu>
276 <button class="btn-sm" ngbDropdownItem
277 (click)="orderIdentTypes[li.id()]='isbn'" i18n>ISBN</button>
278 <button class="btn-sm" ngbDropdownItem
279 (click)="orderIdentTypes[li.id()]='upc'" i18n>UPC</button>
280 <button class="btn-sm" ngbDropdownItem
281 (click)="orderIdentTypes[li.id()]='issn'" i18n>ISSN</button>
285 <eg-combobox [entries]="identOptions(li)" [smallFormControl]="true"
286 placeholder="Order Identifer..." i18n-placeholder
287 [allowFreeText]="true" [selectedId]="selectedIdent(li)"
288 (onChange)="orderIdentChanged(li, $event)">
293 <div class="row mt-2">
294 <div class="col-lg-12 d-flex">
295 <div class="flex-1"></div>
297 <ng-container [ngSwitch]="li.state()">
299 class="p-1 text-dark border border-dark bg-light rounded-lg"
300 *ngSwitchCase="'new'">New</div>
302 class="p-1 text-dark border border-dark bg-light rounded-lg"
303 *ngSwitchCase="'selector-ready'">Selector-Ready</div>
305 class="p-1 text-dark border border-dark bg-light rounded-lg"
306 *ngSwitchCase="'order-ready'">Order-Ready</div>
308 class="p-1 text-dark border border-dark bg-light rounded-lg"
309 *ngSwitchCase="'approved'">Approved</div>
311 class="p-1 text-dark border border-dark bg-light rounded-lg"
312 *ngSwitchCase="'pending-order'">Pending-Order</div>
314 class="p-1 text-primary border border-primary bg-light rounded-lg"
315 *ngSwitchCase="'on-order'">On-Order</div>
317 class="p-1 text-success border border-success bg-light rounded-lg"
318 *ngSwitchCase="'received'">Received</div>
320 class="p-1 text-danger border border-danger bg-light rounded-lg"
321 *ngSwitchCase="'cancelled'">Canceled</div>
326 <button class="btn btn-info btn-sm" ngbDropdownToggle i18n>Actions</button>
327 <div ngbDropdownMenu>
328 <button ngbDropdownItem [disabled]="li.state() != 'on-order'"
329 (click)="markReceived([li.id()])" i18n>Mark Received</button>
330 <button ngbDropdownItem [disabled]="li.state() != 'received'"
331 (click)="markUnReceived([li.id()])" i18n>Mark Un-Received</button>
332 <button ngbDropdownItem [disabled]="!liHasRealCopies(li)"
333 (click)="editHoldings(li)" i18n>Holdings Maintenance</button>
334 <a ngbDropdownItem routerLink="lineitem/{{li.id()}}/history"
335 queryParamsHandling="merge" i18n>View History</a>
340 <input type="text" class="form-control-sm medium"
341 [ngClass]="{'border border-danger text-danger': !liPriceIsValid(li)}"
342 placeholder='Price...' i18n-placeholder
343 (change)="liPriceChange(li)" [ngModel]="li.estimated_unit_price()"
344 (ngModelChange)="li.estimated_unit_price($event)"/>
352 <div class="row" *ngIf="showNotesFor == li.id()">
353 <div class="col-lg-10 offset-lg-1 p-2 mt-2">
354 <eg-lineitem-notes [lineitem]="li" (closeRequested)="showNotesFor = null">
358 <div class="row" *ngIf="showExpandFor == li.id() || expandAll">
359 <div class="col-lg-10 offset-lg-1 p-2 mt-2 shadow">
361 <!-- Note the flex values are set so they also match the layout
362 of the list of copies in the copies component. -->
363 <div class="div d-flex font-weight-bold">
364 <div class="flex-1 p-1" i18n>Owning Branch</div>
365 <div class="flex-1 p-1" i18n>Copy Location</div>
366 <div class="flex-1 p-1" i18n>Collection Code</div>
367 <div class="flex-1 p-1" i18n>Fund</div>
368 <div class="flex-1 p-1" i18n>Circ Modifier</div>
369 <div class="flex-1 p-1" i18n>Callnumber</div>
370 <div class="flex-1 p-1" i18n>Barcode</div>
372 <div class="batch-copy-row" *ngFor="let copy of li.lineitem_details()">
373 <eg-lineitem-copy-attrs [embedded]="true" [copy]="copy">
374 </eg-lineitem-copy-attrs>
380 <div class="row" *ngIf="loading">
381 <div class="offset-lg-3 col-lg-6">
382 <eg-progress-inline *ngIf="loading"></eg-progress-inline>