]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/acq/po/print.component.ts
LP1929741 ACQ Selection List & PO Angluar Port
[Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / acq / po / print.component.ts
1 import {Component, OnInit, AfterViewInit} from '@angular/core';
2 import {Observable} from 'rxjs';
3 import {map, take} from 'rxjs/operators';
4 import {ActivatedRoute, ParamMap} from '@angular/router';
5 import {IdlObject} from '@eg/core/idl.service';
6 import {NetService} from '@eg/core/net.service';
7 import {AuthService} from '@eg/core/auth.service';
8 import {PcrudService} from '@eg/core/pcrud.service';
9 import {IdlService} from '@eg/core/idl.service';
10 import {OrgService} from '@eg/core/org.service';
11 import {PrintService} from '@eg/share/print/print.service';
12 import {BroadcastService} from '@eg/share/util/broadcast.service';
13 import {PoService} from './po.service';
14
15 @Component({
16   templateUrl: 'print.component.html'
17 })
18 export class PrintComponent implements OnInit, AfterViewInit {
19
20     poId: number;
21     outlet: Element;
22     po: IdlObject;
23     printing: boolean;
24     closing: boolean;
25     initDone = false;
26
27     constructor(
28         private route: ActivatedRoute,
29         private idl: IdlService,
30         private org: OrgService,
31         private net: NetService,
32         private auth: AuthService,
33         private pcrud: PcrudService,
34         private poService: PoService,
35         private broadcaster: BroadcastService,
36         private printer: PrintService) {
37     }
38
39     ngOnInit() {
40         this.route.parent.paramMap.subscribe((params: ParamMap) => {
41             const poId = +params.get('poId');
42             if (poId !== this.poId) {
43                 this.poId = poId;
44                 if (poId && this.initDone) { this.load(); }
45             }
46         });
47
48         this.load();
49     }
50
51     ngAfterViewInit() {
52         this.outlet = document.getElementById('print-outlet');
53     }
54
55     load() {
56         if (!this.poId) { return; }
57
58         this.po = null;
59         this.poService.getFleshedPo(this.poId, {
60             flesh_provider_addresses: true,
61             flesh_lineitems: true,
62             flesh_lineitem_attrs: true,
63             flesh_lineitem_notes: true,
64             flesh_lineitem_details: true,
65             clear_marc: true,
66             flesh_notes: true
67         }, true)
68         .then(po => this.po = po)
69         .then(_ => this.populatePreview())
70         .then(_ => this.initDone = true);
71     }
72
73     populatePreview(): Promise<any> {
74
75         return this.printer.compileRemoteTemplate({
76             templateName: 'purchase_order',
77             printContext: 'default',
78             contextData: {po: this.po}
79
80         }).then(response => {
81             this.outlet.innerHTML = response.content;
82         });
83     }
84
85     addLiPrintNotes(): Promise<any> {
86
87         const notes = [];
88         this.po.lineitems().forEach(li => {
89             const note = this.idl.create('acqlin');
90             note.isnew(true);
91             note.lineitem(li.id());
92             note.value('printed: ' + this.auth.user().usrname());
93             notes.push(note);
94         });
95
96         return this.net.request('open-ils.acq',
97             'open-ils.acq.lineitem_note.cud.batch', this.auth.token(), notes)
98         .toPromise().then(_ => {
99             this.broadcaster.broadcast(
100                 'eg.acq.lineitem.notes.update', {
101                 lineitems: notes.map(n => Number(n.lineitem()))
102             });
103         });
104     }
105
106     printPo(closeTab?: boolean) {
107         this.addLiPrintNotes().then(_ => this.printPo2(closeTab));
108     }
109
110     printPo2(closeTab?: boolean) {
111         if (closeTab || this.closing) {
112             const sub: any = this.printer.printJobQueued$.subscribe(req => {
113                 if (req.templateName === 'purchase_order') {
114                     setTimeout(() => {
115                         window.close();
116                         sub.unsubscribe();
117                     }, 2000); // allow for a time cushion past queueing.
118                 }
119             });
120         }
121
122         this.printer.print({
123             templateName: 'purchase_order',
124             printContext: 'default',
125             contextData: {po: this.po}
126         });
127     }
128 }
129