LP#1942220: hook up claim policies
authorGalen Charlton <gmc@equinoxOLI.org>
Mon, 29 Nov 2021 16:11:02 +0000 (11:11 -0500)
committerBill Erickson <berickxx@gmail.com>
Tue, 4 Jan 2022 16:00:35 +0000 (11:00 -0500)
- Display claim policy (if set) in the LI table
- Add the 'Apply Claim Policy to Selected Lineitems' action

Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Open-ILS/src/eg2/src/app/staff/acq/lineitem/claim-policy-dialog.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/acq/lineitem/claim-policy-dialog.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.html
Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem-list.component.ts
Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.module.ts
Open-ILS/src/eg2/src/app/staff/acq/lineitem/lineitem.service.ts

diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/claim-policy-dialog.component.html b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/claim-policy-dialog.component.html
new file mode 100644 (file)
index 0000000..a1f8ce9
--- /dev/null
@@ -0,0 +1,24 @@
+<ng-template #dialogContent>
+  <form class="form-validated">
+    <div class="modal-header bg-info">
+      <h3 class="modal-title" i18n>Apply Claim Policy</h3>
+      <button type="button" class="close"
+        i18n-aria-label aria-label="Close" (click)="close()">
+        <span aria-hidden="true">&times;</span>
+      </button>
+    </div>
+    <div class="modal-body">
+      <h4 i18n>Select a claim policy:</h4>
+      <eg-combobox domId="acq-claim-policy-dialog" name="acq-claim-policy-dialog" 
+        [asyncSupportsEmptyTermClick]="true"
+        idlClass="acqclp" [(ngModel)]="claimPolicy"></eg-combobox>
+    </div>
+    <div class="modal-footer">
+      <button type="button" class="btn btn-success" [disabled]="!claimPolicy" 
+        (click)="close(claimPolicy.id)" i18n>Apply</button>
+      <button type="button" class="btn btn-warning"
+        (click)="close()" i18n>Exit Dialog</button>
+    </div>
+  </form>
+</ng-template>
+
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/lineitem/claim-policy-dialog.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/lineitem/claim-policy-dialog.component.ts
new file mode 100644 (file)
index 0000000..419fbc4
--- /dev/null
@@ -0,0 +1,15 @@
+import {Component, Input, ViewChild, TemplateRef, OnInit} from '@angular/core';
+import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
+import {DialogComponent} from '@eg/share/dialog/dialog.component';
+import {IdlService, IdlObject} from '@eg/core/idl.service';
+import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
+
+@Component({
+  selector: 'eg-acq-claim-policy-dialog',
+  templateUrl: './claim-policy-dialog.component.html'
+})
+
+export class ClaimPolicyDialogComponent extends DialogComponent {
+    claimPolicy: number;
+    constructor(private modal: NgbModal) { super(modal); }
+}
index c471ade..397fc60 100644 (file)
@@ -1,6 +1,7 @@
 
 <!-- BATCH ACTIONS -->
 <eg-acq-cancel-dialog #cancelDialog></eg-acq-cancel-dialog>
+<eg-acq-claim-policy-dialog #claimPolicyDialog></eg-acq-claim-policy-dialog>
 
 <div class="row mt-3" *ngIf="poId || picklistId">
   <div class="col-lg-1">
@@ -25,6 +26,8 @@
           [disabled]="!poId" i18n>Un-Receive Selected Lineitems</button>
         <button ngbDropdownItem (click)="cancelSelected()" 
           [disabled]="!poId" i18n>Cancel Selected Lineitems</button>
+        <button ngbDropdownItem (click)="applyClaimPolicyToSelected()" 
+          [disabled]="!poId || !selectedIds().length" i18n>Apply Claim Policy to Selected Lineitems</button>
       </div>
     </div>
   </div>
               <span i18n>Invoice(s)</span>
             </a>
 
-            <!-- TODO: claim policy -->
+            <ng-container *ngIf="li.claim_policy()">
+              <span class="ml-1 mr-1" i18n> | </span>
+              <span i18n>Claim policy: {{li.claim_policy().name()}}</span>
+            </ng-container>
 
             <ng-container *ngIf="li.provider()">
               <span class="ml-1 mr-1" i18n> | </span>
index 941bc9f..c0690d9 100644 (file)
@@ -12,6 +12,7 @@ import {LineitemService} from './lineitem.service';
 import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
 import {HoldingsService} from '@eg/staff/share/holdings/holdings.service';
 import {CancelDialogComponent} from './cancel-dialog.component';
+import {ClaimPolicyDialogComponent} from './claim-policy-dialog.component';
 
 const DELETABLE_STATES = [
     'new', 'selector-ready', 'order-ready', 'approved', 'pending-order'
@@ -58,6 +59,7 @@ export class LineitemListComponent implements OnInit {
     focusLi: number;
 
     @ViewChild('cancelDialog') cancelDialog: CancelDialogComponent;
+    @ViewChild('claimPolicyDialog') claimPolicyDialog: ClaimPolicyDialogComponent;
 
     constructor(
         private router: Router,
@@ -488,6 +490,31 @@ export class LineitemListComponent implements OnInit {
         });
     }
 
+    applyClaimPolicyToSelected() {
+        const liIds = this.selectedIds();
+        if (liIds.length === 0) { return; }
+
+        this.claimPolicyDialog.open().subscribe(claimPolicy => {
+            if (!claimPolicy) { return; }
+
+            const lis: IdlObject[] = [];
+            this.liService.getFleshedLineitems(liIds, { fromCache: true }).subscribe(
+                liStruct => {
+                    liStruct.lineitem.claim_policy(claimPolicy);
+                    lis.push(liStruct.lineitem);
+                },
+                err => { },
+                () => {
+                    this.net.request(
+                        'open-ils.acq',
+                        'open-ils.acq.lineitem.update',
+                        this.auth.token(), lis
+                    ).toPromise().then(resp => this.postBatchAction(resp, liIds));
+                }
+            );
+        });
+    }
+
     markReceived(liIds: number[]) {
         if (liIds.length === 0) { return; }
 
index 888830f..e86b6af 100644 (file)
@@ -16,6 +16,7 @@ import {LineitemCopyAttrsComponent} from './copy-attrs.component';
 import {LineitemHistoryComponent} from './history.component';
 import {BriefRecordComponent} from './brief-record.component';
 import {CancelDialogComponent} from './cancel-dialog.component';
+import {ClaimPolicyDialogComponent} from './claim-policy-dialog.component';
 import {MarcEditModule} from '@eg/staff/share/marc-edit/marc-edit.module';
 
 @NgModule({
@@ -30,12 +31,14 @@ import {MarcEditModule} from '@eg/staff/share/marc-edit/marc-edit.module';
     LineitemCopyAttrsComponent,
     LineitemHistoryComponent,
     CancelDialogComponent,
+    ClaimPolicyDialogComponent,
     BriefRecordComponent,
     LineitemWorksheetComponent
   ],
   exports: [
     LineitemListComponent,
-    CancelDialogComponent
+    CancelDialogComponent,
+    ClaimPolicyDialogComponent
   ],
   imports: [
     StaffCommonModule,
index e320294..fd48a56 100644 (file)
@@ -101,6 +101,7 @@ export class LineitemService {
             flesh_pl: true,
             flesh_formulas: true,
             flesh_copies: true,
+            flesh_claim_policy: true,
             clear_marc: false,
             apply_order_identifiers: true
         }, params.fleshMore || {});