LP#1775466 Implement reprint last receipt
authorBill Erickson <berickxx@gmail.com>
Thu, 21 Jun 2018 19:23:58 +0000 (15:23 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Jun 2018 19:23:58 +0000 (15:23 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/eg2/src/app/share/print/print.component.ts
Open-ILS/src/eg2/src/app/share/print/print.service.ts
Open-ILS/src/eg2/src/app/staff/nav.component.html
Open-ILS/src/eg2/src/app/staff/nav.component.ts

index 81b8020..8102831 100644 (file)
@@ -1,5 +1,6 @@
 import {Component, OnInit, TemplateRef, ElementRef, Renderer2} from '@angular/core';
 import {PrintService, PrintRequest} from './print.service';
+import {StoreService} from '@eg/core/store.service';
 
 @Component({
     selector: 'eg-print',
@@ -20,6 +21,7 @@ export class PrintComponent implements OnInit {
     constructor(
         private renderer: Renderer2,
         private elm: ElementRef,
+        private store: StoreService,
         private printer: PrintService
     ) {}
 
@@ -61,6 +63,22 @@ export class PrintComponent implements OnInit {
     }
 
     dispatchPrint(printReq: PrintRequest) {
+
+        if (!printReq.text) {
+            // Sometimes the results come from an externally-parsed HTML
+            // template, other times they come from an in-page template.
+            printReq.text = this.elm.nativeElement.innerHTML;
+        }
+
+        // Retain a copy of each printed document in localStorage
+        // so it may be reprinted.
+        this.store.setLocalItem('eg.print.last_printed', {
+            content: printReq.text,
+            context: printReq.printContext,
+            content_type: printReq.contentType, 
+            show_dialog: printReq.showDialog
+        });
+
         if (0 /* this.hatch.isActive */) {
             this.printViaHatch(printReq);
         } else {
@@ -71,12 +89,6 @@ export class PrintComponent implements OnInit {
 
     printViaHatch(printReq: PrintRequest) {
 
-        if (!printReq.text) {
-            // Sometimes the results come from an externally-parsed HTML
-            // template, other times they come from an in-page template.
-            printReq.text = this.elm.nativeElement.innerHTML;
-        }
-
         // Send a full HTML document to Hatch
         const html = `<html><body>${printReq.text}</body></html>`;
 
index e296720..5ae6844 100644 (file)
@@ -1,4 +1,5 @@
 import {Injectable, EventEmitter, TemplateRef} from '@angular/core';
+import {StoreService} from '@eg/core/store.service';
 
 export interface PrintRequest {
     template?: TemplateRef<any>;
@@ -6,6 +7,7 @@ export interface PrintRequest {
     text?: string;
     printContext: string;
     contentType?: string; // defaults to text/html
+    showDialog?: boolean;
 }
 
 @Injectable()
@@ -13,12 +15,27 @@ export class PrintService {
 
     onPrintRequest$: EventEmitter<PrintRequest>;
 
-    constructor() {
+    constructor(private store: StoreService) {
         this.onPrintRequest$ = new EventEmitter<PrintRequest>();
     }
 
     print(printReq: PrintRequest) {
         this.onPrintRequest$.emit(printReq);
     }
+
+    reprintLast() {
+        const prev = this.store.getLocalItem('eg.print.last_printed');
+
+        if (prev) {
+            const req: PrintRequest = {
+                text: prev.content,
+                printContext: prev.context || 'default',
+                contentType: prev.content_type || 'text/html',
+                showDialog: Boolean(prev.show_dialog)
+            };
+
+            this.print(req);
+        }
+    }
 }
 
index 5b022dd..3f51440 100644 (file)
             <span i18n>Scan Item as Missing Pieces</span>
           </a>
           <div class="dropdown-divider"></div>
-          <a class="dropdown-item disabled" href="/eg/staff/splash">
+          <a class="dropdown-item" (click)="reprintLast()">
             <span class="material-icons">redo</span>
             <span i18n>Reprint Last Receipt</span>
           </a>
index 922962d..c528d03 100644 (file)
@@ -1,6 +1,7 @@
 import {Component, OnInit, ViewChild} from '@angular/core';
 import {ActivatedRoute, Router} from '@angular/router';
 import {AuthService} from '@eg/core/auth.service';
+import {PrintService} from '@eg/share/print/print.service';
 
 @Component({
     selector: 'eg-staff-nav-bar',
@@ -12,7 +13,8 @@ export class StaffNavComponent implements OnInit {
 
     constructor(
         private router: Router,
-        private auth: AuthService
+        private auth: AuthService,
+        private printer: PrintService
     ) {}
 
     ngOnInit() {
@@ -37,6 +39,10 @@ export class StaffNavComponent implements OnInit {
         this.auth.broadcastLogout();
         this.router.navigate(['/staff/login']);
     }
+
+    reprintLast() {
+        this.printer.reprintLast();
+    }
 }