From: Bill Erickson Date: Wed, 11 Jul 2018 18:57:12 +0000 (-0400) Subject: LP#1779158 Queue download option; add file-saver dep X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=3d30b1153b91da9e765c32ab510fd6d80226cfa2;p=working%2FEvergreen.git LP#1779158 Queue download option; add file-saver dep Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.html b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.html index 4f544b4722..079fe59f2d 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.html +++ b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.html @@ -1,3 +1,12 @@ +
+
+ +
+

MARC File Upload

diff --git a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.ts b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.ts index 4909974564..ad25acb9ee 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.ts @@ -7,14 +7,13 @@ import {OrgService} from '@eg/core/org.service'; import {AuthService} from '@eg/core/auth.service'; import {ToastService} from '@eg/share/toast/toast.service'; import {ComboboxEntry} from '@eg/share/combobox/combobox.component'; -import {VandelayService, VandelayImportSelection} from './vandelay.service'; +import {VandelayService, VandelayImportSelection, + VANDELAY_UPLOAD_PATH} from './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 {Subject} from 'rxjs/Subject'; -const VAND_UPLOAD_URL = '/vandelay-upload'; - interface ImportOptions { overlay_map?: any; import_no_match?: boolean; @@ -92,7 +91,6 @@ export class ImportComponent implements OnInit, AfterViewInit { } applyDefaults() { - this.minQualityRatio = 0; this.selectedBibSource = 1; // default to system local this.recordType = 'bib'; @@ -104,6 +102,9 @@ export class ImportComponent implements OnInit, AfterViewInit { const queue = this.vandelay.importSelection.queue; this.recordType = queue.queue_type(); this.selectedMatchSet = queue.match_set(); + + // This will be propagated to selectedQueue as a combobox + // entry via the combobox this.startQueueId = queue.id(); if (this.recordType === 'bib') { @@ -163,7 +164,6 @@ export class ImportComponent implements OnInit, AfterViewInit { case 'matchSets': list = this.vandelay.matchSets[rtype]; - console.log('match sets = ', list); break; case 'importItemDefs': @@ -315,7 +315,7 @@ export class ImportComponent implements OnInit, AfterViewInit { formData.append('bib_source', ''+this.selectedBibSource); } - const req = new HttpRequest('POST', VAND_UPLOAD_URL, formData, + const req = new HttpRequest('POST', VANDELAY_UPLOAD_PATH, formData, {reportProgress: true, responseType: 'text'}); return this.http.request(req).pipe(tap( diff --git a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.html b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.html index 3b901925ad..5414c854dc 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.html +++ b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.html @@ -65,7 +65,8 @@ View Import Items
diff --git a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.ts b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.ts index 224be6d285..07fb4a538f 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queue.component.ts @@ -4,6 +4,7 @@ import 'rxjs/add/observable/of'; import {map} from 'rxjs/operators/map'; import {filter} from 'rxjs/operators/filter'; import {Router, ActivatedRoute, ParamMap} from '@angular/router'; +import {HttpClient} from '@angular/common/http'; import {Pager} from '@eg/share/util/pager'; import {IdlObject} from '@eg/core/idl.service'; import {EventService} from '@eg/core/event.service'; @@ -13,12 +14,13 @@ import {ConfirmDialogComponent} from '@eg/share/dialog/confirm.component'; import {ProgressDialogComponent} from '@eg/share/dialog/progress.component'; import {GridComponent} from '@eg/share/grid/grid.component'; import {GridDataSource, GridColumn} from '@eg/share/grid/grid'; -import {VandelayService, VandelayImportSelection} from './vandelay.service'; +import {VandelayService, VandelayImportSelection, + VANDELAY_EXPORT_PATH} from './vandelay.service'; @Component({ templateUrl: 'queue.component.html' }) -export class QueueComponent implements AfterViewInit { +export class QueueComponent implements OnInit, AfterViewInit { queueId: number; queueType: string; // bib / authority @@ -46,6 +48,7 @@ export class QueueComponent implements AfterViewInit { constructor( private router: Router, private route: ActivatedRoute, + private http: HttpClient, private evt: EventService, private net: NetService, private auth: AuthService, @@ -77,6 +80,11 @@ export class QueueComponent implements AfterViewInit { }; } + ngOnInit() { + // Clear previous selection + this.vandelay.importSelection = null; + } + ngAfterViewInit() { if (this.queueType) { this.applyQueueType(); @@ -217,5 +225,9 @@ export class QueueComponent implements AfterViewInit { } ); } + + exportNonImported() { + this.vandelay.exportQueue(this.queueSummary.queue, true); + } } diff --git a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queued-record.component.html b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queued-record.component.html index 31d88b105c..47173ce0ae 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queued-record.component.html +++ b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/queued-record.component.html @@ -10,7 +10,7 @@ - + diff --git a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.service.ts b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.service.ts index 533b6c75b9..840b47eea3 100644 --- a/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.service.ts +++ b/Open-ILS/src/eg2/src/app/staff/cat/vandelay/vandelay.service.ts @@ -2,6 +2,8 @@ import {Injectable, EventEmitter} from '@angular/core'; import {Observable} from 'rxjs/Observable'; import {tap} from 'rxjs/operators/tap'; import {map} from 'rxjs/operators/map'; +import {HttpClient} from '@angular/common/http'; +import {saveAs} from 'file-saver/FileSaver'; import {IdlService, IdlObject} from '@eg/core/idl.service'; import {OrgService} from '@eg/core/org.service'; import {NetService} from '@eg/core/net.service'; @@ -11,6 +13,9 @@ import {PermService} from '@eg/core/perm.service'; import {EventService} from '@eg/core/event.service'; import {ProgressDialogComponent} from '@eg/share/dialog/progress.component'; +export const VANDELAY_EXPORT_PATH = '/exporter'; +export const VANDELAY_UPLOAD_PATH = '/vandelay-upload'; + export class VandelayImportSelection { recordIds: number[]; queue: IdlObject; @@ -36,6 +41,7 @@ export class VandelayService { importSelection: VandelayImportSelection; constructor( + private http: HttpClient, private idl: IdlService, private org: OrgService, private evt: EventService, @@ -48,6 +54,7 @@ export class VandelayService { this.activeQueues = {}; this.allQueues = {}; this.matchSets = {}; + this.importSelection = null; } getAttrDefs(dtype: string): Promise { @@ -262,5 +269,35 @@ export class VandelayService { return this.net.request('open-ils.vandelay', method, this.auth.token(), queueId, options); } + + exportQueue(queue: IdlObject, nonImported?: boolean) { + + const etype = queue.queue_type().match(/auth/) ? 'auth' : 'bib'; + + let url = + `${VANDELAY_EXPORT_PATH}?type=${etype}&queueid=${queue.id()}` + + let saveName = queue.name(); + + if (nonImported) { + url += '&nonimported=1'; + saveName += '_nonimported'; + } + + saveName += '.mrc'; + + this.http.get(url, {responseType: 'text'}).subscribe( + data => { + saveAs( + new Blob([data], {type: 'application/octet-stream'}), + saveName + ); + }, + err => { + console.error(err); + } + ); + } + }