1 import {Component, Input, OnInit, ViewChild} from '@angular/core';
2 import {Router, ActivatedRoute, ParamMap} from '@angular/router';
3 import {of, Observable} from 'rxjs';
4 import {tap, take, map} from 'rxjs/operators';
5 import {IdlObject, IdlService} from '@eg/core/idl.service';
6 import {NetService} from '@eg/core/net.service';
7 import {AuthService} from '@eg/core/auth.service';
8 import {OrgService} from '@eg/core/org.service';
9 import {PcrudService} from '@eg/core/pcrud.service';
10 import {ServerStoreService} from '@eg/core/server-store.service';
11 import {ComboboxEntry, ComboboxComponent} from '@eg/share/combobox/combobox.component';
12 import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
13 import {EventService, EgEvent} from '@eg/core/event.service';
14 import {ConfirmDialogComponent} from '@eg/share/dialog/confirm.component';
15 import {PoService} from './po.service';
16 import {LineitemService} from '../lineitem/lineitem.service';
17 import {CancelDialogComponent} from '../lineitem/cancel-dialog.component';
21 templateUrl: 'create.component.html',
22 selector: 'eg-acq-po-create'
24 export class PoCreateComponent implements OnInit {
27 lineitems: number[] = [];
30 provider: ComboboxEntry;
31 prepaymentRequired = false;
35 private router: Router,
36 private route: ActivatedRoute,
37 private evt: EventService,
38 private idl: IdlService,
39 private net: NetService,
40 private org: OrgService,
41 private pcrud: PcrudService,
42 private auth: AuthService,
43 private store: ServerStoreService,
44 private liService: LineitemService,
45 private poService: PoService
49 this.route.queryParamMap.subscribe((params: ParamMap) => {
50 this.lineitems = params.getAll('li').map(id => Number(id));
53 this.load().then(_ => this.initDone = true);
56 load(): Promise<any> {
57 return Promise.resolve();
60 orgChange(org: IdlObject) {
61 this.orderAgency = org ? org.id() : null;
64 canCreate(): boolean {
65 return (Boolean(this.orderAgency) && Boolean(this.provider));
70 const po = this.idl.create('acqpo');
71 po.ordering_agency(this.orderAgency);
72 po.provider(this.provider.id);
73 po.name(this.poName || null);
74 po.prepayment_required(this.prepaymentRequired ? 't' : 'f');
77 if (this.lineitems.length > 0) {
78 args.lineitems = this.lineitems;
81 if (this.createAssets) {
82 // This version simply creates all records sans Vandelay merging, etc.
83 // TODO: go to asset creator.
85 import_no_match: true,
86 queue_name: `ACQ ${new Date().toISOString()}`
90 this.net.request('open-ils.acq',
91 'open-ils.acq.purchase_order.create',
92 this.auth.token(), po, args
93 ).toPromise().then(resp => {
94 if (resp && resp.purchase_order) {
96 ['/staff/acq/po/' + resp.purchase_order.id()]);