picklist merge dialog
authorJason Etheridge <jason@EquinoxInitiative.org>
Mon, 11 Nov 2019 13:43:29 +0000 (08:43 -0500)
committerGalen Charlton <gmc@equinoxinitiative.org>
Thu, 16 Jan 2020 21:38:28 +0000 (16:38 -0500)
Open-ILS/src/eg2/src/app/staff/acq/search/acq-search.module.ts
Open-ILS/src/eg2/src/app/staff/acq/search/picklist-merge-dialog.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/acq/search/picklist-merge-dialog.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/acq/search/picklist-results.component.html
Open-ILS/src/eg2/src/app/staff/acq/search/picklist-results.component.ts

index 7a76f6e..47124a4 100644 (file)
@@ -9,6 +9,7 @@ import {PicklistResultsComponent} from './picklist-results.component';
 import {PicklistCreateDialogComponent} from './picklist-create-dialog.component';
 import {PicklistCloneDialogComponent} from './picklist-clone-dialog.component';
 import {PicklistDeleteDialogComponent} from './picklist-delete-dialog.component';
+import {PicklistMergeDialogComponent} from './picklist-merge-dialog.component';
 
 @NgModule({
   declarations: [
@@ -19,7 +20,8 @@ import {PicklistDeleteDialogComponent} from './picklist-delete-dialog.component'
     PicklistResultsComponent,
     PicklistCreateDialogComponent,
     PicklistCloneDialogComponent,
-    PicklistDeleteDialogComponent
+    PicklistDeleteDialogComponent,
+    PicklistMergeDialogComponent
   ],
   imports: [
     StaffCommonModule,
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/search/picklist-merge-dialog.component.html b/Open-ILS/src/eg2/src/app/staff/acq/search/picklist-merge-dialog.component.html
new file mode 100644 (file)
index 0000000..0569d65
--- /dev/null
@@ -0,0 +1,29 @@
+<ng-template #dialogContent>
+  <div class="modal-header bg-info">
+    <h3 class="modal-title" i18n>Merge Selection Lists</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>Lead Selection List:</h4>
+      <select [(ngModel)]="leadList">
+        <option *ngFor="let list of selectedLists"
+          value="{{list.id()}}">{{list.name()}}</option>
+      </select>
+    <h4 i18n>Merge the following selection lists?</h4>
+    <ul>
+      <li *ngFor="let listName of listNames">{{listName}}</li>
+    </ul>
+  </div>
+  <div class="modal-footer">
+    <button type="button" class="btn btn-success"
+      (click)="mergeLists()" i18n>Merge</button>
+    <button type="button" class="btn btn-warning"
+      (click)="close()" i18n>Cancel</button>
+  </div>
+</ng-template>
+<eg-alert-dialog #fail i18n-dialogBody
+  dialogBody="Could not merge the selection lists.">
+</eg-alert-dialog>
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/search/picklist-merge-dialog.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/search/picklist-merge-dialog.component.ts
new file mode 100644 (file)
index 0000000..a347689
--- /dev/null
@@ -0,0 +1,56 @@
+import {Component, Input, ViewChild, TemplateRef, OnInit} from '@angular/core';
+import {Observable, forkJoin, from, empty, throwError} from 'rxjs';
+import {DialogComponent} from '@eg/share/dialog/dialog.component';
+import {IdlService, IdlObject} from '@eg/core/idl.service';
+import {NetService} from '@eg/core/net.service';
+import {AuthService} from '@eg/core/auth.service';
+import {NgbModal} from '@ng-bootstrap/ng-bootstrap';
+import {ComboboxEntry} from '@eg/share/combobox/combobox.component';
+
+@Component({
+  selector: 'eg-picklist-merge-dialog',
+  templateUrl: './picklist-merge-dialog.component.html'
+})
+
+export class PicklistMergeDialogComponent
+  extends DialogComponent implements OnInit {
+
+  @Input() grid: any;
+  listNames: string[];
+  leadList: number;
+  selectedLists: IdlObject[];
+
+  constructor(
+    private idl: IdlService,
+    private net: NetService,
+    private auth: AuthService,
+    private modal: NgbModal
+  ) {
+    super(modal);
+  }
+
+  ngOnInit() {
+  }
+
+  update() {
+    this.selectedLists = this.grid.context.getSelectedRows();
+    this.listNames = this.selectedLists.map( r => r.name() );
+  }
+
+  mergeLists() {
+    var that = this;
+    this.net.request(
+      'open-ils.acq',
+      'open-ils.acq.picklist.merge',
+      this.auth.token(), this.leadList,
+      this.selectedLists.map( list => list.id() ).filter(function(p) { return p != that.leadList; })
+    ).subscribe(
+      (res) => console.log('res',res),
+      (err) => throwError(err),
+      () => this.close(true)
+    );
+  }
+
+}
+
+
index d3690be..42a48ba 100644 (file)
@@ -4,6 +4,8 @@
 </eg-string>
 <eg-string #deleteSelectionListString i18n-text text="Selection List(s) Deleted">
 </eg-string>
+<eg-string #mergeSelectionListString i18n-text text="Selection Lists Merged">
+</eg-string>
 
 <ng-template #nameTmpl let-selectionlist="row">
   <a href="/eg/acq/picklist/view/{{selectionlist.id()}}"
   </a>
 </ng-template>
 
-<eg-confirm-dialog #delConfirm
-  i18n-dialogTitle i18n-dialogBody
-  dialogTitle="Confirm Delete"
-  dialogBody="Delete Selection List {{selected ? selected.label : ''}}?">
-</eg-confirm-dialog>
-
 <eg-picklist-create-dialog #picklistCreateDialog>
 </eg-picklist-create-dialog>
 
@@ -27,6 +23,9 @@
 <eg-picklist-delete-dialog #picklistDeleteDialog [grid]="picklistResultsGrid">
 </eg-picklist-delete-dialog>
 
+<eg-picklist-merge-dialog #picklistMergeDialog [grid]="picklistResultsGrid">
+</eg-picklist-merge-dialog>
+
 <eg-grid #acqSearchPicklistsGrid
   persistKey="acq.search.selectionlists"
   [stickyHeader]="true"
index f2c4ff8..a373e1f 100644 (file)
@@ -15,6 +15,7 @@ import {AcqSearchService} from './acq-search.service';
 import {PicklistCreateDialogComponent} from './picklist-create-dialog.component';
 import {PicklistCloneDialogComponent} from './picklist-clone-dialog.component';
 import {PicklistDeleteDialogComponent} from './picklist-delete-dialog.component';
+import {PicklistMergeDialogComponent} from './picklist-merge-dialog.component';
 
 @Component({
   selector: 'eg-picklist-results',
@@ -28,9 +29,11 @@ export class PicklistResultsComponent implements OnInit {
     @ViewChild('picklistCreateDialog', { static: true }) picklistCreateDialog: PicklistCreateDialogComponent;
     @ViewChild('picklistCloneDialog', { static: true }) picklistCloneDialog: PicklistCloneDialogComponent;
     @ViewChild('picklistDeleteDialog', { static: true }) picklistDeleteDialog: PicklistDeleteDialogComponent;
+    @ViewChild('picklistMergeDialog', { static: true }) picklistMergeDialog: PicklistMergeDialogComponent;
     @ViewChild('createSelectionListString', { static: true }) createSelectionListString: StringComponent;
     @ViewChild('cloneSelectionListString', { static: true }) cloneSelectionListString: StringComponent;
     @ViewChild('deleteSelectionListString', { static: true }) deleteSelectionListString: StringComponent;
+    @ViewChild('mergeSelectionListString', { static: true }) mergeSelectionListString: StringComponent;
 
     permissions: {[name: string]: boolean};
     noSelectedRows: (rows: IdlObject[]) => boolean;
@@ -94,4 +97,15 @@ export class PicklistResultsComponent implements OnInit {
         );
         this.picklistDeleteDialog.update(); // update the dialog UI with selections
     }
+
+    openMergeDialog(rows: IdlObject[]) {
+        this.picklistMergeDialog.open().subscribe(
+            modified => {
+                this.mergeSelectionListString.current().then(msg => this.toast.success(msg));
+                this.picklistResultsGrid.reload(); // FIXME - spec calls for removed grid rows and not refresh
+            }
+        );
+        this.picklistMergeDialog.update(); // update the dialog UI with selections
+    }
+
 }