LP1936233 Holds/transit tab
authorBill Erickson <berickxx@gmail.com>
Wed, 14 Jul 2021 22:06:01 +0000 (18:06 -0400)
committerBill Erickson <berickxx@gmail.com>
Wed, 14 Jul 2021 22:06:01 +0000 (18:06 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/staff/cat/item/circ-history.component.html
Open-ILS/src/eg2/src/app/staff/cat/item/holds.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/cat/item/holds.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/cat/item/item.module.ts
Open-ILS/src/eg2/src/app/staff/cat/item/recent-history.component.html
Open-ILS/src/eg2/src/app/staff/cat/item/status.component.html
Open-ILS/src/eg2/src/app/staff/cat/item/summary.component.html

index 44d0987..5ab7414 100644 (file)
@@ -26,7 +26,7 @@
     <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">
diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/holds.component.html b/Open-ILS/src/eg2/src/app/staff/cat/item/holds.component.html
new file mode 100644 (file)
index 0000000..4473809
--- /dev/null
@@ -0,0 +1,119 @@
+
+<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>
+
diff --git a/Open-ILS/src/eg2/src/app/staff/cat/item/holds.component.ts b/Open-ILS/src/eg2/src/app/staff/cat/item/holds.component.ts
new file mode 100644 (file)
index 0000000..822c714
--- /dev/null
@@ -0,0 +1,66 @@
+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);
+    }
+}
+
index 28d527c..3204e52 100644 (file)
@@ -12,6 +12,7 @@ import {CircModule} from '@eg/staff/share/circ/circ.module';
 import {ItemSummaryComponent} from './summary.component';
 import {ItemRecentHistoryComponent} from './recent-history.component';
 import {ItemCircHistoryComponent} from './circ-history.component';
+import {ItemHoldsTransitsComponent} from './holds.component';
 
 @NgModule({
   declarations: [
@@ -19,6 +20,7 @@ import {ItemCircHistoryComponent} from './circ-history.component';
     ItemSummaryComponent,
     ItemStatusComponent,
     ItemRecentHistoryComponent,
+    ItemHoldsTransitsComponent,
     ItemCircHistoryComponent
   ],
   imports: [
index 39b30dc..d0c2c58 100644 (file)
@@ -26,7 +26,7 @@
       <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>
 
@@ -38,7 +38,7 @@
       <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>
index 6a619b5..f33d454 100644 (file)
         <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>
 
index b87b92b..86d90e5 100644 (file)
@@ -72,7 +72,7 @@
     <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>