From: Galen Charlton Date: Wed, 13 Jul 2022 00:16:10 +0000 (+0000) Subject: LP#1942220: (follow-up) implement claiming from LI X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=82e18f5e799149361cb12fa73b93ef78952258d8;p=working%2FEvergreen.git LP#1942220: (follow-up) implement claiming from LI Signed-off-by: Galen Charlton --- diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html index 5926390b75..8368690eab 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html @@ -5,6 +5,7 @@ + @@ -389,6 +390,8 @@ (click)="editHoldings(li)" i18n>Update Barcodes + View History diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.ts index d6bab06925..135a7e981b 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.ts @@ -22,6 +22,7 @@ import {AddCopiesDialogComponent} from './add-copies-dialog.component'; import {LinkInvoiceDialogComponent} from './link-invoice-dialog.component'; import {ExportAttributesDialogComponent} from './export-attributes-dialog.component'; import {ClaimPolicyDialogComponent} from './claim-policy-dialog.component'; +import {ManageClaimsDialogComponent} from './manage-claims-dialog.component'; import {LineitemAlertDialogComponent} from './lineitem-alert-dialog.component'; const DELETABLE_STATES = [ @@ -125,6 +126,7 @@ export class LineitemListComponent implements OnInit { @ViewChild('linkInvoiceDialog') linkInvoiceDialog: LinkInvoiceDialogComponent; @ViewChild('exportAttributesDialog') exportAttributesDialog: ExportAttributesDialogComponent; @ViewChild('claimPolicyDialog') claimPolicyDialog: ClaimPolicyDialogComponent; + @ViewChild('manageClaimsDialog') manageClaimsDialog: ManageClaimsDialogComponent; @ViewChild('lineItemsUpdatedString', { static: false }) lineItemsUpdatedString: StringComponent; @ViewChild('noActionableLIs', { static: true }) private noActionableLIs: AlertDialogComponent; @ViewChild('selectorReadyConfirmDialog', { static: true }) selectorReadyConfirmDialog: ConfirmDialogComponent; @@ -895,6 +897,22 @@ export class LineitemListComponent implements OnInit { window.open('/eg2/staff/catalog/record/' + li.eg_bib_id() + '/holdings', '_blank'); } + manageClaims(li: IdlObject) { + this.manageClaimsDialog.li = li; + this.manageClaimsDialog.open().subscribe(result => { + if (result) { + delete this.liService.liCache[li.id()]; + this.loadPageOfLis(); + } + }); + } + + countClaims(li: IdlObject): number { + let total = 0; + li.lineitem_details().forEach(lid => total += lid.claims().length); + return total; + } + receiveSelected() { this.markReceived(this.selectedIds()); } diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts index 49f6734caa..8247e35b05 100644 --- a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts @@ -24,6 +24,7 @@ import {AddCopiesDialogComponent} from './add-copies-dialog.component'; import {LinkInvoiceDialogComponent} from './link-invoice-dialog.component'; import {ExportAttributesDialogComponent} from './export-attributes-dialog.component'; import {ClaimPolicyDialogComponent} from './claim-policy-dialog.component'; +import {ManageClaimsDialogComponent} from './manage-claims-dialog.component'; import {LineitemAlertDialogComponent} from './lineitem-alert-dialog.component'; import {MarcEditModule} from '@eg/staff/share/marc-edit/marc-edit.module'; import {AcqCommonModule} from '../acq-common.module'; @@ -46,6 +47,7 @@ import {AcqCommonModule} from '../acq-common.module'; LinkInvoiceDialogComponent, ExportAttributesDialogComponent, ClaimPolicyDialogComponent, + ManageClaimsDialogComponent, LineitemAlertDialogComponent, BriefRecordComponent, CreateAssetsComponent, @@ -60,6 +62,7 @@ import {AcqCommonModule} from '../acq-common.module'; LinkInvoiceDialogComponent, ExportAttributesDialogComponent, ClaimPolicyDialogComponent, + ManageClaimsDialogComponent, LineitemAlertDialogComponent ], imports: [ diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/manage-claims-dialog.component.html b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/manage-claims-dialog.component.html new file mode 100644 index 0000000000..4b30bd5914 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/manage-claims-dialog.component.html @@ -0,0 +1,70 @@ + +
+ + + + +
+
+ + +
+

Claim Voucher

+
+ +
+
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/manage-claims-dialog.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/manage-claims-dialog.component.ts new file mode 100644 index 0000000000..0cd56d5d38 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/manage-claims-dialog.component.ts @@ -0,0 +1,113 @@ +import {Component, Input, ViewChild, TemplateRef} from '@angular/core'; +import {Observable} from 'rxjs'; +import {NgbModal, NgbModalOptions} from '@ng-bootstrap/ng-bootstrap'; +import {DialogComponent} from '@eg/share/dialog/dialog.component'; +import {IdlService, IdlObject} from '@eg/core/idl.service'; +import {NetService} from '@eg/core/net.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {AuthService} from '@eg/core/auth.service'; +import {ComboboxEntry} from '@eg/share/combobox/combobox.component'; +import {LineitemService} from '../lineitem/lineitem.service'; +import {PrintService} from '@eg/share/print/print.service'; + +@Component({ + selector: 'eg-acq-manage-claims-dialog', + templateUrl: './manage-claims-dialog.component.html' +}) + +export class ManageClaimsDialogComponent extends DialogComponent { + @Input() li: IdlObject; + + @ViewChild('printTemplate', { static: true }) private printTemplate: TemplateRef; + + lidsWithClaims: IdlObject[] = []; + + note = ''; + claimEventTypes: number[] = []; + selectedClaimEventTypes: number[] = []; + claimType: ComboboxEntry; + + constructor( + private modal: NgbModal, + private net: NetService, + private auth: AuthService, + private pcrud: PcrudService, + private printer: PrintService, + private liService: LineitemService + ) { super(modal); } + + open(args?: NgbModalOptions): Observable { + if (!args) { + args = {}; + } + + this.lidsWithClaims = this.getLidsWithClaims(); + this.note = ''; + this.claimEventTypes = []; + this.selectedClaimEventTypes = []; + this.getClaimEventTypes(); + + return super.open(args); + } + + getLidsWithClaims(): IdlObject[] { + return this.li.lineitem_details().filter(x => x.claims().length > 0); + } + + getClaimEventTypes() { + this.pcrud.retrieveAll('acqclet', + { 'order_by': {'acqclet': 'code'}, flesh: 1, flesh_fields: {acqclet: ['org_unit']} }, + {} + ).subscribe(t => this.claimEventTypes.push(t)); + } + + canPerformClaim(): boolean { + if (!this.claimType) { return false; } + if (!this.claimType.id) { return false; } + const lidsToClaim = this.li.lineitem_details().filter(x => x._selected_for_claim); + if (lidsToClaim.length < 1) { return false; } + return true; + } + + claimItems() { + if (!this.canPerformClaim()) { return; } + const lidsToClaim = this.li.lineitem_details() + .filter(x => x._selected_for_claim) + .map(x => x.id()); + this.net.request( + 'open-ils.acq', + 'open-ils.acq.claim.lineitem_detail.atomic', + this.auth.token(), + lidsToClaim, null, + this.claimType.id, + this.note, + null, + this.selectedClaimEventTypes + ).subscribe(result => { + if (result && result.length) { + const voucher = result.map(x => x.template_output().data()).join('
'); + this.printer.print({ + template: this.printTemplate, + contextData: { voucher: voucher }, + printContext: 'default' + }); + } + this.close(true); + }); + } + + printVoucher(lidId: number) { + this.net.request( + 'open-ils.acq', + 'open-ils.acq.claim.voucher.by_lineitem_detail', + this.auth.token(), lidId + ).subscribe(result => { + if (!result) { return; } + this.printer.print({ + template: this.printTemplate, + contextData: { voucher: result.template_output().data() }, + printContext: 'default' + }); + }); + } +}