LP1904036 Patron items out: printing
authorBill Erickson <berickxx@gmail.com>
Mon, 22 Feb 2021 22:53:41 +0000 (17:53 -0500)
committerGalen Charlton <gmc@equinoxOLI.org>
Fri, 28 Oct 2022 00:13:24 +0000 (20:13 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Open-ILS/src/eg2/src/app/staff/circ/patron/items.component.ts
Open-ILS/src/eg2/src/app/staff/share/circ/grid.component.html
Open-ILS/src/eg2/src/app/staff/share/circ/grid.component.ts
Open-ILS/src/sql/Pg/upgrade/XXXX.data.angular-patron.sql

index b68c989..bc275c7 100644 (file)
@@ -191,6 +191,7 @@ export class ItemsComponent implements OnInit, AfterViewInit {
 
         .pipe(tap(circ => {
             const entry: CircGridEntry = {
+                index: `ancc-${circ.id()}`,
                 title: circ.item_type().name(),
                 dueDate: circ.duedate()
             };
index 1d86af2..410cbf5 100644 (file)
   [disablePaging]="true" [persistKey]="persistKey">
 
   <eg-grid-toolbar-action
+    i18n-group group="View" i18n-label label="Print Item Receipt(s)"
+    (onClick)="printReceipts($event)">
+  </eg-grid-toolbar-action>
+
+  <eg-grid-toolbar-action
     i18n-group group="Add" i18n-label label="Add Item Alerts"
     (onClick)="openItemAlerts($event, 'create')">
   </eg-grid-toolbar-action>
 
-  <eg-grid-column [index]="true" path="circ.id" 
+  <eg-grid-column [index]="true" path="index" [hidden]="true"
+    label="Row Index" i18n-label></eg-grid-column>
+
+  <eg-grid-column path="circ.id" 
     label="Circ ID" i18n-label></eg-grid-column>
 
   <!-- TODO 
index 9d3b91e..fd489f3 100644 (file)
@@ -17,8 +17,10 @@ import {AudioService} from '@eg/share/util/audio.service';
 import {CopyAlertsDialogComponent
     } from '@eg/staff/share/holdings/copy-alerts-dialog.component';
 import {ArrayUtil} from '@eg/share/util/array';
+import {PrintService} from '@eg/share/print/print.service';
 
 export interface CircGridEntry {
+    index: string; // class + id -- row index
     title?: string;
     author?: string;
     isbn?: string;
@@ -56,6 +58,7 @@ const CIRC_FLESH_FIELDS = {
 export class CircGridComponent implements OnInit {
 
     @Input() persistKey: string;
+    @Input() printTemplate: string; // defaults to items_out
 
     entries: CircGridEntry[] = null;
     gridDataSource: GridDataSource = new GridDataSource();
@@ -72,6 +75,7 @@ export class CircGridComponent implements OnInit {
         public circ: CircService,
         private audio: AudioService,
         private store: StoreService,
+        private printer: PrintService,
         private serverStore: ServerStoreService
     ) {}
 
@@ -137,6 +141,7 @@ export class CircGridComponent implements OnInit {
     gridify(circ: IdlObject): CircGridEntry {
 
         const entry: CircGridEntry = {
+            index: `circ-${circ.id()}`,
             circ: circ,
             dueDate: circ.due_date(),
             copyAlertCount: 0 // TODO
@@ -194,5 +199,15 @@ export class CircGridComponent implements OnInit {
             }
         );
     }
+
+    printReceipts(rows: any) {
+        if (rows.length > 0) {
+            this.printer.print({
+                templateName: this.printTemplate || 'items_out',
+                contextData: {circulations: rows},
+                printContext: 'default'
+            });
+        }
+    }
 }
 
index c7b9bad..0a7457f 100644 (file)
@@ -13,7 +13,6 @@ VALUES (
         'cwst', 'label'
     )
 );
-*/
 
 eg.circ.patron.holds.prefetch
 
@@ -21,4 +20,43 @@ eg.grid.circ.patron.holds
 
 holds_for_patron print template
 
+items out print template
+*/
+
+-- insert then update for easier iterative development tweaks
+/*
+INSERT INTO config.print_template 
+    (name, label, owner, active, locale, content_type, template)
+VALUES ('items_out', 'Patron Items Out', 1, TRUE, 'en-US', 'text/html', '');
+*/
+
+UPDATE config.print_template SET template = $TEMPLATE$
+[% 
+       USE date;
+       circulations = template_data.circulations;
+%]
+<div>
+  <div>Welcome to [% staff_org.name %]</div>
+  <div>You have the following items:</div>
+  <hr/>
+  <ol>
+  [% FOR checkout IN circulations %]
+    <li>
+      <div>[% checkout.title %]</div>
+      <div>
+           [% IF checkout.copy %]Barcode: [% checkout.copy.barcode %][% END %]
+               Due: [% date.format(helpers.format_date(checkout.dueDate, staff_org_timezone), '%x %r') %]
+      </div>
+    </li>
+  [% END %]
+  </ol>
+  <hr/>
+  <div>[% staff_org.name %] [% date.format(date.now, '%x %r') %]</div>
+  <div>You were helped by [% staff.first_given_name %]</div>
+  <br/>
+</div>
+$TEMPLATE$ WHERE name = 'items_out';
+
 COMMIT;
+
+