Revert "LP1929749 ACQ Load MARC Order Records port"
authorChris Sharp <csharp@georgialibraries.org>
Mon, 10 Jan 2022 16:16:20 +0000 (11:16 -0500)
committerChris Sharp <csharp@georgialibraries.org>
Mon, 10 Jan 2022 16:16:20 +0000 (11:16 -0500)
This reverts commit 504b3249a34855910b4bfa88865ebb38508d3665.

Open-ILS/src/eg2/src/app/staff/acq/picklist/acq-picklist.module.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/acq/picklist/routing.module.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.component.html [deleted file]
Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.component.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.service.ts [deleted file]
Open-ILS/src/eg2/src/app/staff/acq/routing.module.ts
Open-ILS/src/eg2/src/app/staff/nav.component.html
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.data.picklist_uploader_templates.sql [deleted file]
Open-ILS/src/templates/staff/navbar.tt2

diff --git a/Open-ILS/src/eg2/src/app/staff/acq/picklist/acq-picklist.module.ts b/Open-ILS/src/eg2/src/app/staff/acq/picklist/acq-picklist.module.ts
deleted file mode 100644 (file)
index 4f8f4e1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-import {NgModule} from '@angular/core';
-import {StaffCommonModule} from '@eg/staff/common.module';
-import {CatalogCommonModule} from '@eg/share/catalog/catalog-common.module';
-import {PicklistRoutingModule} from './routing.module';
-import {HttpClientModule} from '@angular/common/http';
-import {UploadComponent} from './upload.component';
-
-@NgModule({
-  declarations: [
-    UploadComponent
-  ],
-  imports: [
-    StaffCommonModule,
-    CatalogCommonModule,
-    PicklistRoutingModule,
-    HttpClientModule
-  ]
-})
-
-export class AcqPicklistModule {}
\ No newline at end of file
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/picklist/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/acq/picklist/routing.module.ts
deleted file mode 100644 (file)
index da8dea2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-import {NgModule} from '@angular/core';
-import {RouterModule, Routes} from '@angular/router';
-import {UploadComponent} from './upload.component';
-import {VandelayService} from '@eg/staff/cat/vandelay/vandelay.service';
-import {PicklistUploadService} from './upload.service'
-
-
-const routes: Routes = [{
-  path: 'upload',
-  component: UploadComponent
-}];
-
-@NgModule({
-  imports: [RouterModule.forChild(routes)],
-  exports: [RouterModule],
-  providers: [VandelayService, PicklistUploadService]
-})
-
-export class PicklistRoutingModule {}
\ No newline at end of file
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.component.html b/Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.component.html
deleted file mode 100644 (file)
index 567b8fc..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-<eg-staff-banner bannerText="Load MARC Order Records" i18n-bannerText>
-</eg-staff-banner>
-
-<div class="row">
-  <div class="ml-auto mr-3"><a i18n href="/eg/staff/acq/legacy/picklist/upload">Legacy Upload Interface</a></div>
-</div>
-
-
-<eg-alert-dialog #dupeQueueAlert i18n-dialogBody 
-  dialogBody="A queue with the requested name already exists.">
-</eg-alert-dialog>
-
-<div class="common-form striped-odd form-validated ml-3 mr-3">
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="template-select" i18n>Apply/Create Form Template</label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox #formTemplateSelector
-        id="template-select"
-        (onChange)="templateSelectorChange($event)"
-        [allowFreeText]="true"
-        [startId]="selectedTemplate"
-        [startIdFiresOnChange]="true"
-        [entries]="formatTemplateEntries()">
-      </eg-combobox>
-    </div>
-    <div class="col-lg-6">
-      <button class="btn btn-success"
-        [disabled]="!selectedTemplate"
-        (click)="saveTemplate()" i18n>Save As New Template</button>
-      <button class="btn btn-outline-primary ml-3"
-        [disabled]="!selectedTemplate"
-        (click)="markTemplateDefault()" i18n>Mark Template as Default</button>
-      <button class="btn btn-danger ml-3"
-        [disabled]="!selectedTemplate"
-        (click)="deleteTemplate()" i18n>Delete Template</button>
-    </div>
-  </div>
-
-  <h2>Purchase Order</h2>
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="provider-select" i18n>Provider</label>
-    </div>
-  
-    <div class="col-lg-3">
-      <eg-combobox #providerSelector
-        id="provider-select"
-        [entries]="formatEntries('providersList')"
-        (onChange)="selectEntry($event, 'providersList')"
-        [required]="true"
-        [startId]="selectedProvider">
-      </eg-combobox>
-    </div>
-
-    <div class="col-lg-3">
-      <label for="create-po" i18n>Create Purchase Order</label>
-  </div>
-  <div class="col-lg-3">
-    <input class="form-check-input" type="checkbox" 
-      id="create-po"
-      [(ngModel)]="createPurchaseOrder">
-  </div>
-</div>
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="type-select" i18n>Ordering Agency</label>
-    </div>
-      <div class="col-lg-3">
-        <eg-org-select
-        [applyOrgId]="orderingAgency"
-        (onChange)="orgOnChange($event)">
-        </eg-org-select>
-      </div>
-
-      <div class="col-lg-3">
-        <label for="activate-po" i18n>Activate Purchase Order</label>
-    </div>
-    
-    <div class="col-lg-3">
-      <input class="form-check-input" type="checkbox" 
-        id="activate-po"
-        [(ngModel)]="activatePurchaseOrder">
-    </div>
-    </div>
-
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="year-select" i18n>Fiscal Year</label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox #fiscalYearSelector
-        id="year-select"
-        [startId]="selectedFiscalYear"
-        [entries]="formatEntries('fiscalYears')"
-        [required]="true"
-        (onChange)="selectEntry($event, 'fiscalYears')">
-      </eg-combobox>
-    </div>
-  </div>
-
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="sl-select" i18n>Add to Selection List?</label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox #selectionListSelector
-        id="sl-select"
-        [startId]="selectedSelectionList"
-        [entries]="formatEntries('selectionLists')"
-        (onChange)="selectedSelectionList=$event" i18n-placeholder
-        [allowFreeText]="true">
-      </eg-combobox>
-    </div>
-  </div>
-
-
-  <h2>Upload Settings</h2>
-
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="source-select" i18n>Record Source</label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox #bibSourceSelector
-        id="source-select"
-        [entries]="formatEntries('bibSources')" 
-        (onChange)="selectEntry($event, 'bibSources')"
-        [startId]="selectedBibSource">
-      </eg-combobox>
-    </div>
-    <div class="col-lg-3">
-      <label for="import-non-matching" i18n>Import Non-Matching Records</label>
-  </div>
-  <div class="col-lg-3">
-    <input class="form-check-input" type="checkbox" 
-      id="import-non-matching"
-      [(ngModel)]="importNonMatching">
-  </div>
-  </div>
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="match-set-select" i18n>Record Match Set</label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox #matchSetSelector
-        id="match-set-select"
-        [entries]="formatEntries('matchSets')" 
-        [disabled]="(selectedQueue && !selectedQueue.freetext) || importSelection()"
-        [startId]="selectedMatchSet || defaultMatchSet"
-        (onChange)="selectEntry($event, 'matchSets')">
-      </eg-combobox>
-    </div>
-    <div class="col-lg-3">
-      <label for="merge-on-exact" i18n>Merge On Exact Match (901c)</label>
-  </div>
-  <div class="col-lg-3">
-    <input class="form-check-input" type="checkbox" 
-      id="merge-on-exact" [(ngModel)]="mergeOnExact">
-  </div>
- </div>
-
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="merge-profiles" i18n>Merge Profile</label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox #mergeProfileSelector
-        id="merge-profiles"
-        [entries]="formatEntries('mergeProfiles')"
-        (onChange)="selectEntry($event, 'mergeProfiles')"
-        [startId]="selectedMergeProfile">
-      </eg-combobox>
-    </div>
-    <div class="col-lg-3">
-        <label for="merge-on-single" i18n>Merge On Single Match</label>
-    </div>
-    <div class="col-lg-3">
-      <input class="form-check-input" type="checkbox" 
-        id="merge-on-single" [(ngModel)]="mergeOnSingleMatch">
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="insuff-merge-profiles" i18n>
-        Insufficient Quality Fall-Through Profile
-    </label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox #fallThruMergeProfileSelector
-        id="insuff-merge-profiles"
-        [entries]="formatEntries('mergeProfiles')"
-        (onChange)="selectEntry($event, 'FallThruMergeProfile')"
-        [startId]="selectedFallThruMergeProfile">
-      </eg-combobox>
-    </div>
-    <div class="col-lg-3">
-      <label for="merge-on-best" i18n>Merge On Best Match</label>
-    </div>
-    <div class="col-lg-3">
-      <input class="form-check-input" type="checkbox" 
-        id="merge-on-best" [(ngModel)]="mergeOnBestMatch">
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="min-quality-ratio" i18n>
-        Best/Single Match Minimum Quality Ratio
-      </label>
-    </div>
-    <div class="col-lg-3">
-      <input type="number" step="0.1" id="min-quality-ratio" 
-        class="form-control" [(ngModel)]="minQualityRatio">
-    </div>
-    <div class="col-lg-3">
-      <label for="load-items" i18n>Load Items for Imported Records</label>
-    </div>
-    <div class="col-lg-3">
-      <input class="form-check-input" type="checkbox" 
-        id="load-items"
-        [(ngModel)]="loadItems">
-    </div>
-  </div>
-
-  <h2>This Upload</h2>
-  <div class="row">
-    <div class="col-lg-3">
-      <label for="queue-select" i18n>Select or Create a Queue</label>
-    </div>
-    <div class="col-lg-3">
-      <eg-combobox [entries]="formatEntries('activeQueues')"
-        id="queue-select"
-        [startIdFiresOnChange]="true"
-        (onChange)="selectedQueue=$event" i18n-placeholder
-        [required]="true"
-        [allowFreeText]="true">
-      </eg-combobox>
-    </div>
-  </div>
-  <div class="row" *ngIf="!importSelection()">
-    <div class="col-lg-3">
-      <label for="upload-file" i18n>File to Upload:</label>
-    </div>
-    <div class="col-lg-3">
-      <input #fileSelector (change)="fileSelected($event)" 
-        id="upload-file" required class="form-control" type="file"/>
-    </div>
-  </div>
-  <div class="row" *ngIf="importSelection()">
-    <div class="col-lg-3">
-      <label>Import Selected</label>
-    </div>
-    <div class="col-lg-3">
-      <span *ngIf="!importSelection().importQueue" i18n>
-        Importing {{importSelection().recordIds.length}} Record(s)</span>
-      <span *ngIf="importSelection().importQueue" i18n>
-        Importing Queue {{importSelection().queue.name()}}</span>
-    </div>
-    <div class="col-lg-3">
-      <button class="btn btn-outline-info ml-2" (click)="clearSelection()" i18n>
-        Clear Selection
-      </button>
-    </div>
-  </div>
-  <div class="row">
-    <div class="col-lg-6 offset-lg-3">
-      <button class="btn btn-success btn-lg btn-block font-weight-bold"
-        [disabled]="isUploading || !hasNeededData()" 
-        (click)="upload()" i18n>Upload</button>
-    </div>
-  </div>
-  <div class="row" [hidden]="!showProgress || uploadComplete">
-    <div class="col-lg-3">
-      <label i18n>Upload File to Server</label>
-    </div>
-    <div class="col-lg-6">
-      <eg-progress-inline #uploadProgress></eg-progress-inline>
-    </div>
-  </div>
-
-  <div class="col-lg-6 offset-lg-3" [hidden]="!uploadProcessing || uploadComplete">
-    <h2><label i18n><i>Processing...</i></label></h2>
-  </div>
-
-  <div class="row" [hidden]="!uploadComplete">
-    <div class="col-lg-3 offset-lg-3">
-      <h2><label i18n>Upload Complete!</label></h2>
-    </div>
-    </div>
-    <div class="row" [hidden]="!uploadComplete">
-      <div class="col-sm-1 offset-lg-3">
-        <label i18n>Go to:</label>
-    </div>
-    <div><a routerLink="/staff/cat/vandelay/queue/{{recordType}}/{{activeQueueId}}" target="_blank" i18n>Queue</a></div>
-    <div class="col-sm-1" [hidden]="!selectedSelectionList"><a href="/eg/staff/acq/legacy/picklist/view/{{activeSelectionListId}}" target="_blank">Selection List</a></div>
-    <div class="col-sm-2" [hidden]="!createPurchaseOrder"><a href="/eg/staff/acq/legacy/po/view/{{newPO}}" target="_blank">Purchase Order</a></div>
-    </div>
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.component.ts b/Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.component.ts
deleted file mode 100644 (file)
index 86b6918..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-import {Component, OnInit, AfterViewInit, Input,
-    ViewChild, OnDestroy} from '@angular/core';
-import {Subject} from 'rxjs';
-import {tap} from 'rxjs/operators';
-import {IdlObject} from '@eg/core/idl.service';
-import {NetService} from '@eg/core/net.service';
-import {EventService} from '@eg/core/event.service';
-import {OrgService} from '@eg/core/org.service';
-import {AuthService} from '@eg/core/auth.service';
-import {ToastService} from '@eg/share/toast/toast.service';
-import {ComboboxComponent,
-    ComboboxEntry} from '@eg/share/combobox/combobox.component';
-import {VandelayImportSelection,
-  VANDELAY_UPLOAD_PATH} from '@eg/staff/cat/vandelay/vandelay.service';
-import {HttpClient, HttpRequest, HttpEventType} from '@angular/common/http';
-import {HttpResponse, HttpErrorResponse} from '@angular/common/http';
-import {ProgressInlineComponent} from '@eg/share/dialog/progress-inline.component';
-import {AlertDialogComponent} from '@eg/share/dialog/alert.component';
-import {ServerStoreService} from '@eg/core/server-store.service';
-import {PicklistUploadService} from './upload.service';
-import {OrgSelectComponent} from '@eg/share/org-select/org-select.component'
-
-
-const TEMPLATE_SETTING_NAME = 'eg.acq.picklist.upload.templates';
-
-const TEMPLATE_ATTRS = [
-    'createPurchaseOrder',
-    'activatePurchaseOrder',
-    'selectedProvider',
-    'orderingAgency',
-    'selectedFiscalYear',
-    'loadItems',
-    'selectedBibSource',
-    'selectedMatchSet',
-    'mergeOnExact',
-    'importNonMatching',
-    'mergeOnBestMatch',
-    'mergeOnSingleMatch',
-    'selectedMergeProfile',
-    'selectedFallThruMergeProfile',
-    'minQualityRatio'
-];
-
-const ORG_SETTINGS = [
-    'acq.upload.default.activate_po',
-    'acq.upload.default.create_po',
-    'acq.upload.default.provider',
-    'acq.upload.default.vandelay.import_non_matching',
-    'acq.upload.default.vandelay.load_item_for_imported',
-    'acq.upload.default.vandelay.low_quality_fall_thru_profile',
-    'acq.upload.default.vandelay.match_set',
-    'acq.upload.default.vandelay.merge_on_best',
-    'acq.upload.default.vandelay.merge_on_exact',
-    'acq.upload.default.vandelay.merge_on_single',
-    'acq.upload.default.vandelay.merge_profile',
-    'acq.upload.default.vandelay.quality_ratio'
-];
-
-
-@Component({
-  templateUrl: './upload.component.html'
-})
-export class UploadComponent implements OnInit, AfterViewInit, OnDestroy {
-
-    settings: Object = {};
-    recordType: string;
-    selectedQueue: ComboboxEntry; 
-
-
-    activeSelectionListId: number;
-    activeQueueId: number;
-    orderingAgency: number;
-    selectedFiscalYear: number;
-    selectedSelectionList: ComboboxEntry;
-    selectedBibSource: number;
-    selectedProvider: number;
-    selectedMatchSet: number;
-    importDefId: number;
-    selectedMergeProfile: number;
-    selectedFallThruMergeProfile: number;
-    selectedFile: File;
-    newPO: number;
-
-    defaultMatchSet: string;
-
-    createPurchaseOrder: boolean;
-    activatePurchaseOrder: boolean;
-    loadItems: boolean;
-
-    importNonMatching: boolean;
-    mergeOnExact: boolean;
-    mergeOnSingleMatch: boolean;
-    mergeOnBestMatch: boolean;
-    minQualityRatio: number;
-
-    isUploading: boolean;
-    uploadProcessing: boolean;
-    uploadComplete: boolean;
-
-    // Generated by the server
-    sessionKey: string;
-
-    selectedTemplate: string;
-    formTemplates: {[name: string]: any};
-    newTemplateName: string;
-
-    @ViewChild('fileSelector', { static: false }) private fileSelector;
-    @ViewChild('uploadProgress', { static: true })
-        private uploadProgress: ProgressInlineComponent;
-
-    @ViewChild('formTemplateSelector', { static: true })
-        private formTemplateSelector: ComboboxComponent;
-    @ViewChild('bibSourceSelector', { static: true })
-        private bibSourceSelector: ComboboxComponent;
-    @ViewChild('providerSelector', {static: true})
-        private providerSelector: ComboboxComponent;
-    @ViewChild('fiscalYearSelector', { static: true })
-        private fiscalYearSelector: ComboboxComponent;
-    @ViewChild('selectionListSelector', { static: true })
-        private selectionListSelector: ComboboxComponent;    
-    @ViewChild('matchSetSelector', { static: true })
-        private matchSetSelector: ComboboxComponent;
-    @ViewChild('mergeProfileSelector', { static: true })
-        private mergeProfileSelector: ComboboxComponent;
-    @ViewChild('fallThruMergeProfileSelector', { static: true })
-        private fallThruMergeProfileSelector: ComboboxComponent;
-    @ViewChild('dupeQueueAlert', { static: true })
-        private dupeQueueAlert: AlertDialogComponent;
-
-    constructor(
-        private http: HttpClient,
-        private toast: ToastService,
-        private evt: EventService,
-        private net: NetService,
-        private auth: AuthService,
-        private org: OrgService,
-        private store: ServerStoreService,
-        private vlagent: PicklistUploadService
-    ) {
-        this.applyDefaults();
-        this.applySettings();
-    }
-
-    applySettings(): Promise<any> {
-        return this.store.getItemBatch(ORG_SETTINGS)
-        .then(settings => {
-            this.createPurchaseOrder = settings['acq.upload.default.create_po'];
-            this.activatePurchaseOrder = settings['acq.upload.default.activate_po'];
-            this.selectedProvider = Number(settings['acq.upload.default.provider']);
-            this.importNonMatching = settings['acq.upload.default.vandelay.import_non_matching'];
-            this.loadItems = settings['acq.upload.default.vandelay.load_item_for_imported'];
-            this.selectedFallThruMergeProfile = Number(settings['acq.upload.default.vandelay.low_quality_fall_thru_profile']);
-            this.selectedMatchSet = Number(settings['acq.upload.default.vandelay.match_set']);
-            this.mergeOnBestMatch = settings['acq.upload.default.vandelay.merge_on_best'];
-            this.mergeOnExact = settings['acq.upload.default.vandelay.merge_on_exact'];
-            this.mergeOnSingleMatch = settings['acq.upload.default.vandelay.merge_on_single'];
-            this.selectedMergeProfile = Number(settings['acq.upload.default.vandelay.merge_profile']);
-            this.minQualityRatio = Number(settings['acq.upload.default.vandelay.quality_ratio']);
-        });
-    }
-    applyDefaults() {
-        this.minQualityRatio = 0;
-        this.recordType = 'bib';
-        this.formTemplates = {};
-        if (this.vlagent.importSelection) {
-
-            if (!this.vlagent.importSelection.queue) {
-                // Incomplete import selection, clear it.
-                this.vlagent.importSelection = null;
-                return;
-            }
-
-            const queue = this.vlagent.importSelection.queue;
-            this.selectedMatchSet = queue.match_set();
-
-        }
-    }
-
-    ngOnInit() {}
-
-    ngAfterViewInit() {
-        this.loadStartupData();
-    }
-
-    ngOnDestroy() {
-        this.clearSelection();
-    }
-
-    importSelection(): VandelayImportSelection {
-        return this.vlagent.importSelection;
-    }
-
-    loadStartupData(): Promise<any> {
-
-
-        const promises = [
-            this.vlagent.getMergeProfiles(),
-            this.vlagent.getAllQueues('bib'),
-            this.vlagent.getMatchSets('bib'),
-            this.vlagent.getBibSources(),
-            this.vlagent.getFiscalYears(),
-            this.vlagent.getProvidersList(),
-            this.vlagent.getSelectionLists(),
-            this.vlagent.getItemImportDefs(),
-           this.org.settings(['vandelay.default_match_set']).then(
-               s => this.defaultMatchSet = s['vandelay.default_match_set']),
-            this.loadTemplates()
-        ];
-
-        return Promise.all(promises);
-    }
-
-
-    orgOnChange(org: IdlObject) {
-        this.orderingAgency = org.id()
-    }
-
-    loadTemplates() {
-        this.store.getItem(TEMPLATE_SETTING_NAME).then(
-            templates => {
-                this.formTemplates = templates || {};
-
-                Object.keys(this.formTemplates).forEach(name => {
-                    if (this.formTemplates[name].default) {
-                        this.selectedTemplate = name;
-                    }
-                });
-            }
-        );
-    }
-
-    formatTemplateEntries(): ComboboxEntry[] {
-        const entries = [];
-
-        Object.keys(this.formTemplates || {}).forEach(
-            name => entries.push({id: name, label: name}));
-
-        return entries;
-    }
-
-    formatEntries(etype: string): ComboboxEntry[] {
-        const rtype = this.recordType;
-        let list;
-
-        switch (etype) {
-            case 'bibSources':
-                return (this.vlagent.bibSources || []).map(
-                    s => {
-                        return {id: s.id(), label: s.source()};
-                    });
-            
-            case 'providersList':
-                return (this.vlagent.providersList || []).map(
-                    p => {
-                        return {id: p.id(), label: p.code()};
-                    });
-                    
-            case 'fiscalYears':
-                return (this.vlagent.fiscalYears || []).map(
-                    fy => {
-                        return {id: fy.id(), label: fy.year()};
-                       });
-                break;
-
-            case 'selectionLists':
-                 list = this.vlagent.selectionLists;
-                 break;
-
-            case 'activeQueues':
-                list = (this.vlagent.allQueues[rtype] || []);
-                break;
-
-            case 'matchSets':
-                list = this.vlagent.matchSets['bib'];
-                break;
-            
-
-            case 'importItemDefs':
-                list = this.vlagent.importItemAttrDefs;
-                break;
-
-            case 'mergeProfiles':
-                list = this.vlagent.mergeProfiles;
-                break;
-        }
-
-        return (list || []).map(item => {
-            return {id: item.id(), label: item.name()};
-        });
-    }
-
-    selectEntry($event: ComboboxEntry, etype: string) {
-        const id = $event ? $event.id : null;
-
-        switch (etype) {
-            case 'recordType':
-                this.recordType = id;
-                break;
-
-            case 'providersList':
-                this.selectedProvider = id;
-                break;
-
-            case 'bibSources':
-                this.selectedBibSource = id;
-                break;
-
-            case 'fiscalYears':
-                this.selectedFiscalYear = id;
-                break;
-
-            case 'selectionLists':
-                this.selectedSelectionList = id;
-                break;
-
-            case 'matchSets':
-                this.selectedMatchSet = id;
-                break;
-
-
-            case 'mergeProfiles':
-                this.selectedMergeProfile = id;
-                break;
-
-            case 'FallThruMergeProfile':
-                this.selectedFallThruMergeProfile = id;
-                break;
-        }
-    }
-            
-    fileSelected($event) {
-       this.selectedFile = $event.target.files[0];
-    }
-
-    hasNeededData(): boolean {
-        return this.selectedQueue &&
-        Boolean(this.selectedFile) &&
-        Boolean(this.selectedFiscalYear) &&
-        Boolean(this.selectedProvider) &&
-        Boolean(this.orderingAgency);
-    }
-    
-    upload() {
-        this.sessionKey = null;
-        this.isUploading = true;
-        this.uploadComplete = false;
-        this.resetProgressBars();
-
-        this.resolveSelectionList(),
-        this.resolveQueue()
-        .then(
-            queueId => {
-                this.activeQueueId = queueId;
-                return this.uploadFile();
-            },
-            err => Promise.reject('queue create failed')
-        ).then(
-            ok => this.processUpload(),
-            err => Promise.reject('process spool failed')
-        ).then(
-            ok => {
-                this.isUploading = false;
-                this.uploadComplete = true;
-            },
-            err => {
-                console.log('file upload failed: ', err);
-                this.isUploading = false;
-                this.resetProgressBars();
-
-            }
-        );
-    }
-
-    resetProgressBars() {
-        this.uploadProgress.update({value: 0, max: 1});
-    }
-
-    resolveQueue(): Promise<number> {
-
-        if (this.selectedQueue.freetext) {
-            return this.vlagent.createQueue(
-                this.selectedQueue.label,
-                this.recordType,
-                this.importDefId,
-                this.selectedMatchSet,
-            ).then(
-                id => id,
-                err => {
-                    const evt = this.evt.parse(err);
-                    if (evt) {
-                        if (evt.textcode.match(/QUEUE_EXISTS/)) {
-                            this.dupeQueueAlert.open();
-                        } else {
-                            alert(evt); // server error
-                        }
-                    }
-
-                    return Promise.reject('Queue Create Failed');
-                }
-            );
-        } else {
-            return Promise.resolve(this.selectedQueue.id);
-        }
-    }
-
-    resolveSelectionList(): Promise<any> {
-        if (!this.selectedSelectionList) {
-            return Promise.resolve()
-        }
-        if (this.selectedSelectionList.id) {
-            this.activeSelectionListId = this.selectedSelectionList.id
-        }
-        if (this.selectedSelectionList.freetext) {
-
-            return this.vlagent.createSelectionList(
-                this.selectedSelectionList.label,
-                this.orderingAgency
-            ).then(
-                value => this.activeSelectionListId = value
-            );
-        }
-        return Promise.resolve(this.activeSelectionListId); 
-    }
-
-    uploadFile(): Promise<any> {
-
-        if (this.vlagent.importSelection) {
-            return Promise.resolve();
-        }
-
-        const formData: FormData = new FormData();
-
-        formData.append('ses', this.auth.token());
-        formData.append('marc_upload',
-            this.selectedFile, this.selectedFile.name);
-
-        if (this.selectedBibSource) {
-            formData.append('bib_source', '' + this.selectedBibSource);
-        }
-
-        const req = new HttpRequest('POST', VANDELAY_UPLOAD_PATH, formData,
-            {reportProgress: true, responseType: 'text'});
-
-        return this.http.request(req).pipe(tap(
-            evt => {
-                if (evt.type === HttpEventType.UploadProgress) {
-                    this.uploadProgress.update(
-                        {value: evt.loaded, max: evt.total});
-
-                } else if (evt instanceof HttpResponse) {
-                    this.sessionKey = evt.body as string;
-                    console.log(
-                        'vlagent file uploaded OK with key ' + this.sessionKey);
-                }
-            },
-
-            (err: HttpErrorResponse) => {
-                console.error(err);
-                this.toast.danger(err.error);
-            }
-        )).toPromise();
-    }
-
-    processUpload():  Promise<any> {
-
-        this.uploadProcessing = true;
-
-        if (this.vlagent.importSelection) {
-            return Promise.resolve();
-        }
-        
-        let spoolType = this.recordType;
-
-        const vandelayOptions = {
-            import_no_match: this.importNonMatching,
-            auto_overlay_exact: this.mergeOnExact,
-            auto_overlay_best_match: this.mergeOnBestMatch,
-            auto_overlay_1match: this.mergeOnSingleMatch,
-            merge_profile: this.selectedMergeProfile,
-            fall_through_merge_profile: this.selectedFallThruMergeProfile,
-            match_quality_ratio: this.minQualityRatio,
-            bib_source: this.selectedBibSource,
-            create_assets: this.loadItems,
-            queue_name: this.selectedQueue.label
-        }
-
-        const args = {
-            
-            provider: this.selectedProvider,
-            ordering_agency: this.orderingAgency,
-            create_po: this.createPurchaseOrder,
-            activate_po: this.activatePurchaseOrder,
-            fiscal_year: this.selectedFiscalYear,
-            picklist: this.activeSelectionListId,
-            vandelay: vandelayOptions
-        }
-
-
-        const method = `open-ils.acq.process_upload_records`;
-
-        return new Promise((resolve, reject) => {
-            this.net.request(
-                'open-ils.acq', method,
-                this.auth.token(), this.sessionKey, args
-            ).subscribe(
-                progress => {
-                    const resp = this.evt.parse(progress);
-                    console.log(progress);
-                    if (resp) { console.error(resp); return reject();}
-                    if (progress.complete) {
-                        this.uploadProcessing = false;
-                        this.uploadComplete = true;
-                    }
-                    if (progress.purchase_order) {this.newPO = progress.purchase_order.id();}
-                }
-            );
-        });
-    }
-
-    clearSelection() {
-        this.vlagent.importSelection = null;
-        this.activeSelectionListId = null;
-    }
-
-
-    saveTemplate() {
-
-        const template = {};
-        TEMPLATE_ATTRS.forEach(key => template[key] = this[key]);
-
-        console.debug('Saving import profile', template);
-
-        this.formTemplates[this.selectedTemplate] = template;
-        return this.store.setItem(TEMPLATE_SETTING_NAME, this.formTemplates);
-    }
-
-    markTemplateDefault() {
-
-        Object.keys(this.formTemplates).forEach(
-            name => delete this.formTemplates.default
-        );
-
-        this.formTemplates[this.selectedTemplate].default = true;
-
-        return this.store.setItem(TEMPLATE_SETTING_NAME, this.formTemplates);
-    }
-
-    templateSelectorChange(entry: ComboboxEntry) {
-
-        if (!entry) {
-            this.selectedTemplate = '';
-            return;
-        }
-
-        this.selectedTemplate = entry.label; // label == name
-
-        if (entry.freetext) {
-            return;
-        }
-
-        const template = this.formTemplates[entry.id];
-
-        TEMPLATE_ATTRS.forEach(key => this[key] = template[key]);
-
-        this.bibSourceSelector.applyEntryId(this.selectedBibSource);
-        this.matchSetSelector.applyEntryId(this.selectedMatchSet);
-        this.providerSelector.applyEntryId(this.selectedProvider);
-        this.fiscalYearSelector.applyEntryId(this.selectedFiscalYear);
-        this.mergeProfileSelector.applyEntryId(this.selectedMergeProfile);
-        this.fallThruMergeProfileSelector.applyEntryId(this.selectedFallThruMergeProfile);
-    }
-
-    deleteTemplate() {
-        delete this.formTemplates[this.selectedTemplate];
-        this.formTemplateSelector.selected = null;
-        return this.store.setItem(TEMPLATE_SETTING_NAME, this.formTemplates);
-    }
-}
-
diff --git a/Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.service.ts b/Open-ILS/src/eg2/src/app/staff/acq/picklist/upload.service.ts
deleted file mode 100644 (file)
index 0cf0718..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-import {Injectable} from '@angular/core';
-import {Observable} from 'rxjs';
-import {tap, map} from 'rxjs/operators';
-import {HttpClient} from '@angular/common/http';
-import {saveAs} from 'file-saver';
-import {IdlService, IdlObject} from '@eg/core/idl.service';
-import {OrgService} from '@eg/core/org.service';
-import {NetService} from '@eg/core/net.service';
-import {AuthService} from '@eg/core/auth.service';
-import {PcrudService} from '@eg/core/pcrud.service';
-import {PermService} from '@eg/core/perm.service';
-import {EventService} from '@eg/core/event.service';
-import {ProgressDialogComponent} from '@eg/share/dialog/progress.component';
-import {VandelayImportSelection} from '@eg/staff/cat/vandelay/vandelay.service'
-
-
-@Injectable()
-export class PicklistUploadService {
-
-    allQueues: {[qtype: string]: IdlObject[]};
-    attrDefs: {[atype: string]: IdlObject[]};
-    bibSources: IdlObject[];
-    matchSets: {[stype: string]: IdlObject[]};
-    importItemAttrDefs: IdlObject[];
-    mergeProfiles: IdlObject[];
-    providersList: IdlObject[];
-    fiscalYears: IdlObject[];
-    selectionLists: IdlObject[];
-    queueType: string;
-    recordType: string;
-
-
-    importSelection: VandelayImportSelection;
-
-    constructor(
-        private http: HttpClient,
-        private idl: IdlService,
-        private org: OrgService,
-        private evt: EventService,
-        private net: NetService,
-        private auth: AuthService,
-        private pcrud: PcrudService,
-        private perm: PermService
-    ) {
-        this.attrDefs = {};
-        this.allQueues = {};
-        this.matchSets = {};
-        this.importSelection = null;
-        this.queueType = 'acq';
-        this.recordType = 'bib';
-    }
-
-    getAttrDefs(dtype: string): Promise<IdlObject[]> {
-        if (this.attrDefs[dtype]) {
-            return Promise.resolve(this.attrDefs[dtype]);
-        }
-        const cls = (dtype === 'bib') ? 'vqbrad' : 'vqarad';
-        const orderBy = {};
-        orderBy[cls] = 'id';
-        return this.pcrud.retrieveAll(cls,
-            {order_by: orderBy}, {atomic: true}).toPromise()
-        .then(list => {
-            this.attrDefs[dtype] = list;
-            return list;
-        });
-    }
-
-    getMergeProfiles(): Promise<IdlObject[]> {
-        if (this.mergeProfiles) {
-            return Promise.resolve(this.mergeProfiles);
-        }
-
-        const owners = this.org.ancestors(this.auth.user().ws_ou(), true);
-        return this.pcrud.search('vmp',
-            {owner: owners}, {order_by: {vmp: ['name']}}, {atomic: true})
-        .toPromise().then(profiles => {
-            this.mergeProfiles = profiles;
-            return profiles;
-        });
-    }
-
-    getProvidersList(): Promise<IdlObject[]> {
-        if (this.providersList) {
-            return Promise.resolve(this.providersList);
-        }
-
-        const owners = this.org.ancestors(this.auth.user().ws_ou(), true);
-        return this.pcrud.search('acqpro',
-            {owner: owners}, {order_by: {acqpro: ['code']}}, {atomic: true})
-        .toPromise().then(providers => {
-            this.providersList = providers;
-            return providers;
-        });
-    }
-
-    getSelectionLists(): Promise<IdlObject[]> {
-        if (this.selectionLists) {
-            return Promise.resolve(this.selectionLists);
-        }
-
-        const owners = this.auth.user().id();
-        return this.pcrud.search('acqpl',
-            {owner: owners}, {order_by: {acqpl: ['name']}}, {atomic: true})
-        .toPromise().then(lists => {
-            this.selectionLists = lists;
-            return lists;
-        });
-    }
-
-    getAllQueues(qtype: string): Promise<IdlObject[]> {
-        if (this.allQueues[qtype]) {
-            return Promise.resolve(this.allQueues[qtype]);
-        } else {
-            this.allQueues[qtype] = [];
-        }
-
-        return this.net.request(
-            'open-ils.vandelay',
-            `open-ils.vandelay.bib_queue.owner.retrieve`,
-            this.auth.token()
-        ).pipe(tap(
-            queue => this.allQueues[qtype].push(queue)
-        )).toPromise().then(() => this.allQueues[qtype]);
-    }
-
-    getBibSources(): Promise<IdlObject[]> {
-        if (this.bibSources) {
-            return Promise.resolve(this.bibSources);
-        }
-
-        return this.pcrud.retrieveAll('cbs',
-          {order_by: {cbs: 'id'}},
-          {atomic: true}
-        ).toPromise().then(sources => {
-            this.bibSources = sources;
-            return sources;
-        });
-    }
-
-    getFiscalYears(): Promise<IdlObject[]> {
-        if (this.fiscalYears) {
-            return Promise.resolve(this.fiscalYears);
-        }
-
-        return this.pcrud.retrieveAll('acqfy',
-          {order_by: {acqfy: 'year'}},
-          {atomic: true}
-        ).toPromise().then(years => {
-            this.fiscalYears = years;
-            return years;
-        });
-    }
-
-    getItemImportDefs(): Promise<IdlObject[]> {
-        if (this.importItemAttrDefs) {
-            return Promise.resolve(this.importItemAttrDefs);
-        }
-
-        const owners = this.org.ancestors(this.auth.user().ws_ou(), true);
-        return this.pcrud.search('viiad', {owner: owners}, {}, {atomic: true})
-        .toPromise().then(defs => {
-            this.importItemAttrDefs = defs;
-            return defs;
-        });
-    }
-
-    getMatchSets(mtype: string): Promise<IdlObject[]> {
-
-        const mstype = 'biblio'
-
-        if (this.matchSets[mtype]) {
-            return Promise.resolve(this.matchSets[mtype]);
-        } else {
-            this.matchSets[mtype] = [];
-        }
-
-        const owners = this.org.ancestors(this.auth.user().ws_ou(), true);
-
-        return this.pcrud.search('vms',
-            {owner: owners, mtype: mstype}, {}, {atomic: true})
-        .toPromise().then(sets => {
-            this.matchSets[mtype] = sets;
-            return sets;
-        });
-    }
-
-
-    createQueue(
-        queueName: string,
-        queueType: string,
-        importDefId: number,
-        matchSet: number): Promise<number> {
-
-        const method = `open-ils.vandelay.bib_queue.create`;
-        queueType = 'acq';
-
-
-        return new Promise((resolve, reject) => {
-            this.net.request(
-                'open-ils.vandelay', method,
-                this.auth.token(), queueName, null, queueType,
-                matchSet, importDefId
-            ).subscribe(queue => {
-                const e = this.evt.parse(queue);
-                if (e) {
-                    reject(e);
-                } else {
-                    this.allQueues['bib'].push(queue);
-                    resolve(queue.id());
-                }
-            });
-        });
-    }
-
-    createSelectionList(
-        picklistName: string,
-        picklistOrg: number
-    ): Promise<number> {
-
-        const newpicklist = this.idl.create('acqpl');
-        newpicklist.owner(this.auth.user().id());
-        newpicklist.name(picklistName);
-        newpicklist.org_unit(picklistOrg)
-        
-        return new Promise((resolve, reject) => {
-            this.net.request(
-                'open-ils.acq', 'open-ils.acq.picklist.create',
-                this.auth.token(), newpicklist
-            ).subscribe((picklist) => {
-                if (this.evt.parse(picklist)) {
-                    console.error(picklist);
-                } else {
-                    console.log(picklist);
-                    resolve(picklist);
-                }
-            });
-        });
-    }
-    
-}
-
index 5c118ce..8cde151 100644 (file)
@@ -9,10 +9,6 @@ const routes: Routes = [
   { path: 'provider',
     loadChildren: () =>
       import('./provider/acq-provider.module').then(m => m.AcqProviderModule)
-  },
-  { path: 'picklist',
-    loadChildren: () =>
-      import('./picklist/acq-picklist.module').then(m => m.AcqPicklistModule)
   }
 ];
 
index da2d052..d7c9e7e 100644 (file)
           </a>
           <div class="dropdown-divider"></div>
           <a class="dropdown-item" 
-          routerLink="/staff/acq/picklist/upload">
-          <span class="material-icons" aria-hidden="true">cloud_upload</span>
-          <span i18n>Load MARC Order Records</span>
-        </a>
+            href="/eg/staff/acq/legacy/picklist/upload">
+            <span class="material-icons" aria-hidden="true">cloud_upload</span>
+            <span i18n>Load MARC Order Records</span>
+          </a>
           <a class="dropdown-item"
             routerLink="/staff/acq/search/purchaseorders">
             <span class="material-icons" aria-hidden="true">shopping_cart</span>
index 348733a..b953f80 100644 (file)
@@ -22081,13 +22081,3 @@ VALUES
     (2,'usrname'),
     (3,'fullname')
 ;
-
-INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
-VALUES (
-    'eg.acq.picklist.upload.templates', 'acq', 'object',
-    oils_i18n_gettext(
-        'eg.acq.picklist.upload.templates',
-        'Picklist Upload Form Templates',
-        'cwst', 'label'
-    )
-);
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.picklist_uploader_templates.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.picklist_uploader_templates.sql
deleted file mode 100644 (file)
index 7b1e98d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-BEGIN;
-
-SELECT evergreen.upgrade_deps_block_check('TODO', :eg_version);
-
-INSERT INTO config.workstation_setting_type (name, grp, datatype, label)
-VALUES (
-    'eg.acq.picklist.upload.templates','acq','object',
-    oils_i18n_gettext(
-        'eg.acq.picklist.upload.templates',
-        'Acq Picklist Uploader Templates',
-        'cwst','label'
-    )
-);
-
-COMMIT;
\ No newline at end of file
index 477ceb3..8351ead 100644 (file)
           </li>
           <li class="divider"></li>
           <li>
-            <a href="/eg2/staff/acq/picklist/upload" target="_self">
+            <a href="./acq/legacy/picklist/upload" target="_self">
               <span class="glyphicon glyphicon-cloud-upload" aria-hidden="true"></span>
               [% l('Load MARC Order Records') %]
             </a>