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';
16 templateUrl: 'print.component.html'
18 export class PrintComponent implements OnInit, AfterViewInit {
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) {
40 this.route.parent.paramMap.subscribe((params: ParamMap) => {
41 const poId = +params.get('poId');
42 if (poId !== this.poId) {
44 if (poId && this.initDone) { this.load(); }
52 this.outlet = document.getElementById('print-outlet');
56 if (!this.poId) { return; }
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,
68 .then(po => this.po = po)
69 .then(_ => this.populatePreview())
70 .then(_ => this.initDone = true);
73 populatePreview(): Promise<any> {
75 return this.printer.compileRemoteTemplate({
76 templateName: 'purchase_order',
77 printContext: 'default',
78 contextData: {po: this.po}
81 this.outlet.innerHTML = response.content;
85 addLiPrintNotes(): Promise<any> {
88 this.po.lineitems().forEach(li => {
89 const note = this.idl.create('acqlin');
91 note.lineitem(li.id());
92 note.value('printed: ' + this.auth.user().usrname());
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()))
106 printPo(closeTab?: boolean) {
107 this.addLiPrintNotes().then(_ => this.printPo2(closeTab));
110 printPo2(closeTab?: boolean) {
111 if (closeTab || this.closing) {
112 const sub: any = this.printer.printJobQueued$.subscribe(req => {
113 if (req.templateName === 'purchase_order') {
117 }, 2000); // allow for a time cushion past queueing.
123 templateName: 'purchase_order',
124 printContext: 'default',
125 contextData: {po: this.po}