<div class="well-row">
<div class="well-label" i18n>Check Out Date</div>
<div class="well-value">
- {{circ.xact_start() | formatValue:'timestamp'}}
+ {{circ.xact_start() | egDateTime}}
</div>
<div class="well-label" i18n>Due Date</div>
<div class="well-value">
</div>
<div class="well-label" i18n>Stop Fines Time</div>
<div class="well-value">
- {{circ.stop_fines_time() | formatValue:'timestamp'}}
+ {{circ.stop_fines_time() | egDateTime}}
</div>
<div class="well-label" i18n>Checkin Time</div>
<div class="well-value">
- {{circ.checkin_time() | formatValue:'timestamp'}}
+ {{circ.checkin_time() | egDateTime}}
</div>
</div>
<div class="well-row">
--- /dev/null
+
+<div class="row pt-3">
+ <div class="col-lg-6">
+ <div *ngIf="!hold" class="alert alert-info" i18n>
+ Item is not captured for a hold
+ </div>
+ <div *ngIf="hold" class="well-table">
+ <h3 i18n>Captured Hold Info</h3>
+ <div class="well-row">
+ <div class="well-label" i18n>Patron</div>
+ <div class="well-value">
+ <a i18n
+ routerLink="/staff/circ/patron/{{hold.usr().id()}}">
+ {{hold.usr().family_name()}},
+ {{hold.usr().first_given_name()}},
+ {{hold.usr().second_given_name()}} :
+ {{hold.usr().card().barcode()}}
+ </a>
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Requestor</div>
+ <div class="well-value">
+ <a i18n
+ routerLink="/staff/circ/patron/{{hold.requestor().id()}}">
+ {{hold.requestor().family_name()}},
+ {{hold.requestor().first_given_name()}},
+ {{hold.requestor().second_given_name()}} :
+ {{hold.requestor().card().barcode()}}
+ </a>
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Pickup Lib</div>
+ <div class="well-value">{{hold.pickup_lib().shortname()}}</div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Current Shelf Lib</div>
+ <div class="well-value">
+ <ng-container *ngIf="hold.current_shelf_lib()">
+ {{hold.current_shelf_lib().shortname()}}
+ </ng-container>
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Request Date</div>
+ <div class="well-value">
+ {{hold.request_time() | egDateTime}}
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Capture Date</div>
+ <div class="well-value">
+ {{hold.capture_time() | egDateTime}}
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Shelf Time</div>
+ <div class="well-value">
+ {{hold.shelf_time() | egDateTime}}
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Shelf Expire Time</div>
+ <div class="well-value">
+ {{hold.shelf_expire_time() | egDateTime}}
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Hold Expire Time</div>
+ <div class="well-value">
+ {{hold.expire_time() | egDateTime}}
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Behind Desk</div>
+ <div class="well-value">
+ <eg-bool [value]="hold.behind_desk() === 't'"></eg-bool>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="col-lg-6">
+ <div *ngIf="!transit" class="alert alert-info" i18n>
+ Item has not transited
+ </div>
+ <div *ngIf="transit" class="well-table">
+ <h3 i18n>Most Recent Transit</h3>
+
+ <div class="well-row">
+ <div class="well-label" i18n>Transit Source</div>
+ <div class="well-value">{{transit.source().shortname()}}</div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Transit Destination</div>
+ <div class="well-value">{{transit.dest().shortname()}}</div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Transit Send Time</div>
+ <div class="well-value">
+ {{transit.source_send_time() | egDateTime}}
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Transit Receive Time</div>
+ {{transit.dest_recv_time() | egDateTime}}
+ <div class="well-value">
+ </div>
+ </div>
+ <div class="well-row">
+ <div class="well-label" i18n>Transit Cancel Time</div>
+ <div class="well-value">
+ {{transit.cancel_time() | egDateTime}}
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
--- /dev/null
+import {Component, Input, OnInit, AfterViewInit, ViewChild} from '@angular/core';
+import {Router, ActivatedRoute, ParamMap} from '@angular/router';
+import {tap, concatMap} from 'rxjs/operators';
+import {IdlService, 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 {OrgService} from '@eg/core/org.service';
+import {EventService} from '@eg/core/event.service';
+
+@Component({
+ selector: 'eg-item-holds-transits',
+ templateUrl: 'holds.component.html'
+})
+
+export class ItemHoldsTransitsComponent implements OnInit {
+
+ @Input() item: IdlObject;
+ hold: IdlObject;
+ transit: IdlObject;
+ loading = true;
+
+ constructor(
+ private router: Router,
+ private route: ActivatedRoute,
+ private net: NetService,
+ private org: OrgService,
+ private pcrud: PcrudService,
+ private auth: AuthService,
+ private idl: IdlService,
+ private evt: EventService
+ ) { }
+
+ ngOnInit() {
+ this.load();
+ }
+
+ load(): Promise<any> {
+ this.loading = true;
+
+ return this.pcrud.search('ahr', {
+ current_copy: 2523,
+ cancel_time: null,
+ fulfillment_time: null,
+ capture_time: {'<>': null}
+ }, {
+ flesh: 2,
+ flesh_fields: {ahr: ['requestor', 'usr'], au: ['card']}
+ }).pipe(concatMap(hold => {
+ hold.pickup_lib(this.org.get(hold.pickup_lib()));
+ hold.current_shelf_lib(this.org.get(hold.current_shelf_lib()));
+ this.hold = hold;
+ return this.pcrud.search('atc',
+ {target_copy: this.item.id()},
+ {order_by: {atc: 'source_send_time DESC'}, limit: 1}
+ )
+ }))
+ .pipe(tap(transit => {
+ transit.source(this.org.get(transit.source()));
+ transit.dest(this.org.get(transit.dest()));
+ this.transit = transit;
+ }))
+ .toPromise().then(_ => this.loading = false);
+ }
+}
+
import {ItemSummaryComponent} from './summary.component';
import {ItemRecentHistoryComponent} from './recent-history.component';
import {ItemCircHistoryComponent} from './circ-history.component';
+import {ItemHoldsTransitsComponent} from './holds.component';
@NgModule({
declarations: [
ItemSummaryComponent,
ItemStatusComponent,
ItemRecentHistoryComponent,
+ ItemHoldsTransitsComponent,
ItemCircHistoryComponent
],
imports: [
<div class="well-row">
<div class="well-label" i18n>Checkout Date</div>
<div class="well-value">
- {{circInfo.prevCircSummary.start_time() | formatValue:'timestamp'}}
+ {{circInfo.prevCircSummary.start_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Last Renewed On</div>
<div class="well-value">
- {{circInfo.prevCircSummary.last_renewal_time() | formatValue:'timestamp'}}
+ {{circInfo.prevCircSummary.last_renewal_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Stop Fines Time</div>
<div class="well-value">
- {{circInfo.prevCircSummary.last_stop_fines_time() | formatValue:'timestamp'}}
+ {{circInfo.prevCircSummary.last_stop_fines_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Checkin Time</div>
<div class="well-value">
- {{circInfo.prevCircSummary.last_checkin_time() | formatValue:'timestamp'}}
+ {{circInfo.prevCircSummary.last_checkin_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Checkin Scan Time</div>
<div class="well-value">
- {{circInfo.prevCircSummary.last_checkin_scan_time() | formatValue:'timestamp'}}
+ {{circInfo.prevCircSummary.last_checkin_scan_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Checkin Workstation</div>
- <div class="well-value">{{circInfo.prevCircSummary.last_checkin_workstation()}}</div>
+ <div class="well-value">
+ {{circInfo.prevCircSummary.last_checkin_workstation()}}
+ </div>
</div>
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Checkout Date</div>
<div class="well-value">
- {{circInfo.circSummary.start_time() | formatValue:'timestamp'}}
+ {{circInfo.circSummary.start_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Last Renewed On</div>
<div class="well-value">
- {{circInfo.circSummary.last_renewal_time() | formatValue:'timestamp'}}
+ {{circInfo.circSummary.last_renewal_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Stop Fines Time</div>
<div class="well-value">
- {{circInfo.currentCirc.stop_fines_time() | formatValue:'timestamp'}}
+ {{circInfo.currentCirc.stop_fines_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Checkin Time</div>
<div class="well-value">
- {{circInfo.currentCirc.checkin_time() | formatValue:'timestamp'}}
+ {{circInfo.currentCirc.checkin_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Checkin Scan Time</div>
<div class="well-value">
- {{circInfo.currentCirc.checkin_scan_time() | formatValue:'timestamp'}}
+ {{circInfo.currentCirc.checkin_scan_time() | egDateTime}}
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Checkin Workstation</div>
- <div class="well-value">{{circInfo.currentCirc.checkin_workstation()}}</div>
+ <div class="well-value">
+ <ng-container *ngIf="circInfo.currentCirc.checkin_workstation()">
+ {{circInfo.currentCirc.checkin_workstation().name()}}
+ </ng-container>
+ </div>
</div>
</div>
<eg-item-circ-history [item]="item"></eg-item-circ-history>
</ng-template>
</li>
+ <li ngbNavItem="holds-transits">
+ <a ngbNavLink i18n>Holds / Transits</a>
+ <ng-template ngbNavContent>
+ <eg-item-holds-transits [item]="item"></eg-item-holds-transits>
+ </ng-template>
+ </li>
</ul>
<div [ngbNavOutlet]="itemNav"></div>
<div class="well-label" i18n>Checkout Date</div>
<div class="well-value">
<ng-container *ngIf="circInfo.currentCirc">
- {{circInfo.circSummary.start_time() | date:'shortDate'}}
+ {{circInfo.circSummary.start_time() | egDateTime}}
</ng-container>
</div>
</div>
<div class="well-row">
<div class="well-label" i18n>Date Created</div>
- <div class="well-value">{{item.create_date() | date:'shortDate'}}</div>
+ <div class="well-value">{{item.create_date() | egDateTime}}</div>
<div class="well-label" i18n>Fine Level</div>
<div class="well-value">
<div *ngIf="item.fine_level() == 1" i18n>Low</div>
<div class="well-row">
<div class="well-label" i18n>Date Active</div>
- <div class="well-value">{{item.active_date() | date:'shortDate'}}</div>
+ <div class="well-value">{{item.active_date() | egDate}}</div>
<div class="well-label" i18n>Reference</div>
<div class="well-value"><eg-bool [value]="item.ref()"></eg-bool></div>
<div class="well-row">
<div class="well-label" i18n>Status Changed</div>
- <div class="well-value">{{item.status_changed_time() | date:'shortDate'}}</div>
+ <div class="well-value">{{item.status_changed_time() | egDateTime}}</div>
<div class="well-label" i18n>OPAC Visible</div>
<div class="well-value"><eg-bool [value]="item.opac_visible()"></eg-bool></div>
<div class="well-value">
<ng-container *ngIf="circInfo.currentCirc">
{{circInfo.currentCirc.checkin_time() ||
- circInfo.circSummary.last_checkin_time() | date:'shortDate'}}
+ circInfo.circSummary.last_checkin_time() | egDateTime}}
</ng-container>
</div>
</div>
<div class="well-value">
<ng-container *ngIf="circInfo.currentCirc">
{{circInfo.currentCirc.checkin_scan_time() ||
- circInfo.circSummary.last_checkin_scan_time() | date:'shortDate'}}
+ circInfo.circSummary.last_checkin_scan_time() | egDateTime}}
</ng-container>
</div>
</div>
<div class="well-label" i18n>Inventory Date</div>
<div class="well-value">
<ng-container *ngIf="item.latest_inventory()">
- {{item.latest_inventory().inventory_date() | date:'shortDate'}}
+ {{item.latest_inventory().inventory_date() | egDateTime}}
</ng-container>
</div>