From d98bda3a8213cac1162e25a84ad45befe812e865 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Wed, 16 Jun 2021 17:55:08 -0400 Subject: [PATCH] LPXXX Item Status Angular WIP Signed-off-by: Bill Erickson --- .../src/eg2/src/app/staff/cat/item/item.module.ts | 8 +- .../eg2/src/app/staff/cat/item/routing.module.ts | 7 ++ .../src/app/staff/cat/item/status.component.html | 43 +++++++ .../eg2/src/app/staff/cat/item/status.component.ts | 140 +++++++++++++++++++++ .../src/app/staff/cat/item/summary.component.html | 1 + .../src/app/staff/cat/item/summary.component.ts | 45 +++++++ 6 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 Open-ILS/src/eg2/src/app/staff/cat/item/status.component.html create mode 100644 Open-ILS/src/eg2/src/app/staff/cat/item/status.component.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.html create mode 100644 Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.ts diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/item.module.ts b/Open-ILS/src/eg2/src/app/staff/cat/item/item.module.ts index 9c501fbf8e..9da299216d 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/item/item.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/cat/item/item.module.ts @@ -5,16 +5,22 @@ import {ItemRoutingModule} from './routing.module'; import {HoldingsModule} from '@eg/staff/share/holdings/holdings.module'; import {PatronModule} from '@eg/staff/share/patron/patron.module'; import {MarkItemMissingPiecesComponent} from './missing-pieces.component'; +import {ItemStatusComponent} from './status.component'; +import {BarcodesModule} from '@eg/staff/share/barcodes/barcodes.module'; +import {ItemSummaryComponent} from './summary.component'; @NgModule({ declarations: [ - MarkItemMissingPiecesComponent + MarkItemMissingPiecesComponent, + ItemSummaryComponent, + ItemStatusComponent ], imports: [ StaffCommonModule, CommonWidgetsModule, ItemRoutingModule, HoldingsModule, + BarcodesModule, PatronModule ], providers: [ diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/cat/item/routing.module.ts index b3e775957b..c26e28fac5 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/item/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/cat/item/routing.module.ts @@ -1,6 +1,7 @@ import {NgModule} from '@angular/core'; import {RouterModule, Routes} from '@angular/router'; import {MarkItemMissingPiecesComponent} from './missing-pieces.component'; +import {ItemStatusComponent} from './status.component'; const routes: Routes = [{ path: 'missing_pieces', @@ -8,6 +9,12 @@ const routes: Routes = [{ }, { path: 'missing_pieces/:id', component: MarkItemMissingPiecesComponent + }, { + path: ':id/:tab', + component: ItemStatusComponent + }, { + path: ':id', + component: ItemStatusComponent }]; @NgModule({ diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/status.component.html b/Open-ILS/src/eg2/src/app/staff/cat/item/status.component.html new file mode 100644 index 0000000000..ba0a811079 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/cat/item/status.component.html @@ -0,0 +1,43 @@ + + + + + +
+
+
+
+ Barcode +
+ +
+ +
+
+ + + +
+ +
+ + +
+ + +
+ +
+ diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/status.component.ts b/Open-ILS/src/eg2/src/app/staff/cat/item/status.component.ts new file mode 100644 index 0000000000..0d0fa46003 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/cat/item/status.component.ts @@ -0,0 +1,140 @@ +import {Component, Input, OnInit, AfterViewInit, ViewChild} from '@angular/core'; +import {Router, ActivatedRoute, ParamMap} from '@angular/router'; +import {IdlObject} from '@eg/core/idl.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {AuthService} from '@eg/core/auth.service'; +import {NetService} from '@eg/core/net.service'; +import {PrintService} from '@eg/share/print/print.service'; +import {HoldingsService} from '@eg/staff/share/holdings/holdings.service'; +import {EventService} from '@eg/core/event.service'; +import {PatronPenaltyDialogComponent} from '@eg/staff/share/patron/penalty-dialog.component'; +import {BarcodeSelectComponent} from '@eg/staff/share/barcodes/barcode-select.component'; +import {CatalogService} from '@eg/share/catalog/catalog.service'; +import {NgbNav, NgbNavChangeEvent} from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + templateUrl: 'status.component.html' +}) + +export class ItemStatusComponent implements OnInit, AfterViewInit { + + itemId: number; + itemBarcode: string; + noSuchItem = false; + item: IdlObject; + tab: string; + + @ViewChild('barcodeSelect') barcodeSelect: BarcodeSelectComponent; + + constructor( + private router: Router, + private route: ActivatedRoute, + private net: NetService, + private printer: PrintService, + private pcrud: PcrudService, + private auth: AuthService, + private evt: EventService, + private cat: CatalogService, + private holdings: HoldingsService + ) {} + + ngOnInit() { + + this.itemId = +this.route.snapshot.paramMap.get('id'); + this.tab = this.route.snapshot.paramMap.get('tab'); + + if (!this.tab) { + if (this.itemId) { + this.router.navigate([`/staff/cat/item/${this.itemId}/summary`]) + .then(ok => {if (ok) { this.load(); }}); + return; + } else { + this.tab = 'list'; + } + } + + this.load(); + } + + load() { + + this.cat.fetchCcvms() + .then(_ => this.cat.fetchCmfs()) + .then(_ => { + if (this.itemId) { + return this.getItemById(this.itemId); + } + }) + .then(_ => { + // Avoid watching for changes until after ngOnInit is complete + // so we don't grab the same copy twice. + + this.route.paramMap.subscribe((params: ParamMap) => { + this.tab = params.get('tab'); + const id = +params.get('id'); + + if (id !== this.itemId) { + this.itemId = id; + if (id) { + this.getItemById(id); + } + } + }); + }); + } + + ngAfterViewInit() { + this.selectInput(); + } + + tabChange(evt: NgbNavChangeEvent) { + this.router.navigate([`/staff/cat/item/${this.itemId}/${evt.nextId}`]); + } + + getItemByBarcode(): Promise { + this.itemId = null; + this.item = null; + + if (!this.itemBarcode) { return Promise.resolve(); } + + return this.barcodeSelect.getBarcode('asset', this.itemBarcode) + .then(res => { + if (!res.id) { + this.noSuchItem = true; + } else { + this.itemBarcode = null; + this.selectInput(); + return this.getItemById(res.id); + } + }); + } + + selectInput() { + setTimeout(() => { + const node: HTMLInputElement = + document.getElementById('item-barcode-input') as HTMLInputElement; + if (node) { node.select(); } + }); + } + + getItemById(id: number): Promise { + + const flesh = { + flesh: 3, + flesh_fields: { + acp: ['call_number'], + acn: ['record'], + bre: ['flat_display_entries'] + } + }; + + return this.pcrud.retrieve('acp', this.itemId, flesh) + .toPromise().then(item => { + this.item = item; + this.itemId = item.id(); + this.selectInput(); + }); + } +} + + diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.html b/Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.html new file mode 100644 index 0000000000..ac3fd698f4 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.html @@ -0,0 +1 @@ +summary diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.ts b/Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.ts new file mode 100644 index 0000000000..6fac2c1da7 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.ts @@ -0,0 +1,45 @@ +import {Component, Input, OnInit, AfterViewInit, ViewChild} from '@angular/core'; +import {Router, ActivatedRoute, ParamMap} from '@angular/router'; +import {IdlObject} from '@eg/core/idl.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {AuthService} from '@eg/core/auth.service'; +import {NetService} from '@eg/core/net.service'; +import {PrintService} from '@eg/share/print/print.service'; +import {HoldingsService} from '@eg/staff/share/holdings/holdings.service'; +import {EventService} from '@eg/core/event.service'; +import {PatronPenaltyDialogComponent} from '@eg/staff/share/patron/penalty-dialog.component'; +import {BarcodeSelectComponent} from '@eg/staff/share/barcodes/barcode-select.component'; +import {CatalogService} from '@eg/share/catalog/catalog.service'; +import {NgbNav, NgbNavChangeEvent} from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'eg-item-summary', + templateUrl: 'summary.component.html' +}) + +export class ItemSummaryComponent implements OnInit { + + @Input() item: IdlObject; + + constructor( + private router: Router, + private route: ActivatedRoute, + private net: NetService, + private printer: PrintService, + private pcrud: PcrudService, + private auth: AuthService, + private evt: EventService, + private cat: CatalogService, + private holdings: HoldingsService + ) {} + + ngOnInit() { + + } + + + tabChange(evt: NgbNavChangeEvent) { + this.router.navigate([`/staff/cat/item/${this.item.id()}/${evt.nextId}`]); + } +} + -- 2.11.0