From: Bill Erickson Date: Fri, 30 Nov 2018 16:27:07 +0000 (-0500) Subject: mono part merge dialog X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=ae22152c0bc2cb07816a0bf83821adb3b5d1804d;p=working%2FEvergreen.git mono part merge dialog Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts b/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts index 3289e607b8..d5b0eeb357 100644 --- a/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts @@ -18,6 +18,7 @@ import {BasketActionsComponent} from './basket-actions.component'; import {HoldComponent} from './hold/hold.component'; import {HoldService} from '@eg/staff/share/hold.service'; import {PartsComponent} from './record/parts.component'; +import {PartMergeDialogComponent} from './record/part-merge-dialog.component'; @NgModule({ declarations: [ @@ -33,7 +34,8 @@ import {PartsComponent} from './record/parts.component'; RecordActionsComponent, BasketActionsComponent, HoldComponent, - PartsComponent + PartsComponent, + PartMergeDialogComponent ], imports: [ StaffCommonModule, diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/record/part-merge-dialog.component.html b/Open-ILS/src/eg2/src/app/staff/catalog/record/part-merge-dialog.component.html new file mode 100644 index 0000000000..ef702ebfea --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/catalog/record/part-merge-dialog.component.html @@ -0,0 +1,28 @@ + + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/record/part-merge-dialog.component.ts b/Open-ILS/src/eg2/src/app/staff/catalog/record/part-merge-dialog.component.ts new file mode 100644 index 0000000000..de0bbc53ab --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/catalog/record/part-merge-dialog.component.ts @@ -0,0 +1,66 @@ +import {Component, Input, ViewChild, TemplateRef} from '@angular/core'; +import {DialogComponent} from '@eg/share/dialog/dialog.component'; +import {IdlService, IdlObject} from '@eg/core/idl.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {NgbModal, NgbModalOptions} from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'eg-catalog-part-merge-dialog', + templateUrl: './part-merge-dialog.component.html' +}) + +/** + * Ask the user which part is the lead part then merge others parts in. + */ +export class PartMergeDialogComponent extends DialogComponent { + + // What parts are we merging + parts: IdlObject[]; + copyPartMaps: IdlObject[]; + leadPart: number; + + constructor( + private idl: IdlService, + private pcrud: PcrudService, + private modal: NgbModal) { + super(modal); + } + + mergeParts() { + console.log('Merging parts into lead part ', this.leadPart); + + if (!this.leadPart) { return; } + + this.leadPart = Number(this.leadPart); + + // 1. Migrate copy maps to the lead part. + const partIds = this.parts + .filter(p => Number(p.id()) !== this.leadPart) + .map(p => Number(p.id())); + + const maps = []; + this.pcrud.search('acpm', {part: partIds}) + .subscribe( + map => { + map.part(this.leadPart); + map.ischanged(true); + maps.push(map); + }, + err => {}, + () => { + // 2. Delete the now-empty subordinate parts. Note the + // delete must come after the part map changes are committed. + this.pcrud.autoApply(maps) + .toPromise().then(() => this.deleteParts()); + } + ); + } + + deleteParts() { + const parts = this.parts.filter(p => Number(p.id()) !== this.leadPart); + parts.forEach(p => p.isdeleted(true)); + this.pcrud.autoApply(parts).toPromise().then(res => this.close(res)); + } +} + + diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.html b/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.html index caa28b9b4e..f5693c18e5 100644 --- a/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.html +++ b/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.html @@ -1,3 +1,5 @@ + +
diff --git a/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.ts b/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.ts index 4df2c37cc3..e74fc12d42 100644 --- a/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/catalog/record/parts.component.ts @@ -7,6 +7,7 @@ import {PermService} from '@eg/core/perm.service'; import {GridDataSource} from '@eg/share/grid/grid'; import {GridComponent} from '@eg/share/grid/grid.component'; import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; +import {PartMergeDialogComponent} from './part-merge-dialog.component'; @Component({ selector: 'eg-catalog-record-parts', @@ -19,6 +20,7 @@ export class PartsComponent implements OnInit { initDone: boolean; @ViewChild('partsGrid') partsGrid: GridComponent; @ViewChild('editDialog') editDialog: FmRecordEditorComponent; + @ViewChild('mergeDialog') mergeDialog: PartMergeDialogComponent; canCreate: boolean; canDelete: boolean; @@ -108,11 +110,14 @@ export class PartsComponent implements OnInit { ); }; - this.mergeSelected = (parts: IdlObject[]) => this.mergeParts(parts); - } - - mergeParts(parts: IdlObject[]) { - console.log('merging parts for rec', parts, this.recId); + this.mergeSelected = (parts: IdlObject[]) => { + if (parts.length < 2) { return; } + this.mergeDialog.parts = parts; + this.mergeDialog.open().then( + ok => this.partsGrid.reload(), + err => console.debug('Dialog dismissed') + ); + }; } }