1 <div class="row mb-3" *ngIf="importSelection()">
2 <div class="col-lg-2" *ngIf="selectedQueue">
3 <button class="btn btn-info label-with-material-icon" type="button"
4 routerLink="/staff/cat/vandelay/queue/{{recordType}}/{{selectedQueue.id}}">
5 <span class="material-icons" aria-hidden="true">arrow_back</span>
6 <span i18n>Return to Queue</span>
11 <eg-alert-dialog #dupeQueueAlert i18n-dialogBody
12 dialogBody="A queue with the requested name already exists.">
15 <h2 i18n>MARC File Upload</h2>
16 <div class="common-form striped-odd form-validated ms-3 me-3">
18 <div class="col-lg-3">
19 <label class="form-label" for="template-select" i18n>Apply/Create Form Template</label>
21 <div class="col-lg-3">
22 <eg-combobox #formTemplateSelector
23 domId="template-select"
24 (onChange)="templateSelectorChange($event)"
25 [allowFreeText]="true"
26 [startId]="selectedTemplate"
27 [startIdFiresOnChange]="true"
28 [entries]="formatTemplateEntries()"
29 placeholder="Apply or Create Form Template..." i18n-placeholder>
32 <div class="col-lg-6">
33 <button type="button" class="btn btn-success"
34 [disabled]="!selectedTemplate"
35 (click)="saveTemplate()" i18n>Save As New Template</button>
36 <button type="button" class="btn btn-outline-primary ms-3"
37 [disabled]="!selectedTemplate"
38 (click)="markTemplateDefault()" i18n>Mark Template as Default</button>
39 <button type="button" class="btn btn-danger ms-3"
40 [disabled]="!selectedTemplate"
41 (click)="deleteTemplate()" i18n>Delete Template</button>
46 <div class="col-lg-3">
47 <label class="form-label" for="type-select" i18n>Record Type</label>
49 <div class="col-lg-3">
50 <eg-combobox #recordTypeSelector
52 (onChange)="selectEntry($event, 'recordType')"
53 [disabled]="importSelection()" [required]="true"
54 [startId]="recordType" placeholder="Record Type..." i18n-placeholder>
55 <eg-combobox-entry entryId="bib" entryLabel="Bibliographic Records"
56 i18n-entryLabel></eg-combobox-entry>
57 <eg-combobox-entry entryId="authority" entryLabel="Authority Records"
58 i18n-entryLabel></eg-combobox-entry>
59 <eg-combobox-entry entryId="bib-acq" entryLabel="Acquisitions Records"
60 i18n-entryLabel></eg-combobox-entry>
63 <div class="col-lg-3">
64 <label class="form-label" for="source-select" i18n>Select a Record Source</label>
66 <div class="col-lg-3">
67 <eg-combobox #bibSourceSelector
69 [entries]="formatEntries('bibSources')"
70 (onChange)="selectEntry($event, 'bibSources')"
71 [startId]="selectedBibSource"
72 placeholder="Record Source..." i18n-placeholder>
77 <div class="col-lg-3">
78 <label class="form-label" for="queue-select" i18n>Select or Create a Queue</label>
80 <div class="col-lg-3">
81 <eg-combobox [entries]="formatEntries('activeQueues')"
84 [startId]="startQueueId"
85 [startIdFiresOnChange]="true"
86 [disabled]="startQueueId"
87 (onChange)="selectedQueue=$event" i18n-placeholder
89 [allowFreeText]="true" placeholder="Select or Create a Queue...">
92 <div class="col-lg-3">
93 <label class="form-label" for="bucket-select" i18n>Limit Matches to Bucket</label>
95 <div class="col-lg-3">
96 <eg-combobox [entries]="formatEntries('bibBuckets')"
99 [startId]="selectedBucket"
100 [disabled]="(selectedQueue && !selectedQueue.freetext) || importSelection()"
101 (onChange)="selectEntry($event, 'bibBuckets')"
102 placeholder="Buckets..." i18n-placeholder></eg-combobox>
106 <div class="col-lg-3">
107 <label class="form-label" for="match-set-select" i18n>Record Match Set</label>
109 <div class="col-lg-3">
110 <eg-combobox #matchSetSelector
111 domId="match-set-select"
112 [entries]="formatEntries('matchSets')"
113 [disabled]="(selectedQueue && !selectedQueue.freetext) || importSelection()"
114 [startId]="selectedMatchSet || defaultMatchSet"
115 (onChange)="selectEntry($event, 'matchSets')"
116 placeholder="Match Set..." i18n-placeholder></eg-combobox>
118 <div class="col-lg-3">
119 <label class="form-label" for="import-non-matching" i18n>Import Non-Matching Records</label>
121 <div class="col-lg-3">
122 <input class="form-check-input" type="checkbox"
123 id="import-non-matching"
124 [(ngModel)]="importNonMatching">
128 <div class="col-lg-3">
129 <label class="form-label" for="item-import-def" i18n>Holdings Import Profile</label>
131 <div class="col-lg-3"> <!-- TODO disable for authority -->
132 <eg-combobox #holdingsProfileSelector
133 domId="item-import-def"
134 [entries]="formatEntries('importItemDefs')"
135 [startId]="selectedHoldingsProfile"
136 [disabled]="(selectedQueue && !selectedQueue.freetext) || importSelection()"
137 (onChange)="selectEntry($event, 'importItemDefs')"
138 placeholder="Holdings Import Profile..." i18n-placeholder>
141 <div class="col-lg-3">
142 <label class="form-label" for="merge-on-exact" i18n>Merge On Exact Match (901c)</label>
144 <div class="col-lg-3">
145 <input class="form-check-input" type="checkbox"
146 id="merge-on-exact" [(ngModel)]="mergeOnExact">
150 <div class="col-lg-3">
151 <label class="form-label" for="merge-profiles" i18n>Merge Profile</label>
153 <div class="col-lg-3">
154 <eg-combobox #mergeProfileSelector
155 domId="merge-profiles"
156 [entries]="formatEntries('mergeProfiles')"
157 (onChange)="selectEntry($event, 'mergeProfiles')"
158 placeholder="Merge Profile..." i18n-placeholder>
161 <div class="col-lg-3">
162 <label class="form-label" for="merge-on-single" i18n>Merge On Single Match</label>
164 <div class="col-lg-3">
165 <input class="form-check-input" type="checkbox"
166 id="merge-on-single" [(ngModel)]="mergeOnSingleMatch">
170 <div class="col-lg-3">
171 <label class="form-label" for="insuff-merge-profiles" i18n>
172 Insufficient Quality Fall-Through Profile
175 <div class="col-lg-3">
176 <eg-combobox #fallThruMergeProfileSelector
177 domId="insuff-merge-profiles"
178 [entries]="formatEntries('mergeProfiles')"
179 (onChange)="selectEntry($event, 'FallThruMergeProfile')"
180 placeholder="Fall-Through Merge Profile..." i18n-placeholder>
183 <div class="col-lg-3">
184 <label class="form-label" for="merge-on-best" i18n>Merge On Best Match</label>
186 <div class="col-lg-3">
187 <input class="form-check-input" type="checkbox"
188 id="merge-on-best" [(ngModel)]="mergeOnBestMatch">
192 <div class="col-lg-3">
193 <label class="form-label" for="min-quality-ratio" i18n>
194 Best/Single Match Minimum Quality Ratio
197 <div class="col-lg-3">
198 <input type="number" step="0.1" id="min-quality-ratio"
199 class="form-control" [(ngModel)]="minQualityRatio">
201 <div class="col-lg-3">
202 <label class="form-label" for="auto-overlay-acq-copies" i18n>
203 Auto-overlay In-process Acquisitions Items
206 <div class="col-lg-3">
207 <input class="form-check-input" type="checkbox"
208 id="auto-overlay-acq-copies"
209 [disabled]="recordType === 'authority'"
210 [(ngModel)]="autoOverlayAcqCopies">
214 <div class="col-lg-3">
215 <label class="form-label" for="session-name" i18n>Optional Session Name:</label>
217 <div class="col-lg-3">
218 <input [(ngModel)]="sessionName" class="form-control" type="text"
219 name="session-name" i18n-placeholder placeholder="Session Name..."/>
221 <div class="col-lg-3">
222 <label class="form-label" for="auto-overlay-on-order-copies" i18n>
223 Auto-overlay On-order Cataloging Items
226 <div class="col-lg-3">
227 <input class="form-check-input" type="checkbox"
228 id="auto-overlay-on-order-copies"
229 [disabled]="recordType === 'authority'"
230 [(ngModel)]="autoOverlayOnOrderCopies">
234 <div class="col-lg-3">
235 <label class="form-label" for="marc-remove-groups" i18n>Remove MARC Field Groups</label>
237 <ng-container *ngIf="recordType !== 'authority'">
238 <div class="col-lg-3" *ngIf="bibTrashGroups.length === 0">
239 <span i18n class="fst-italic">No Groups Configured</span>
241 <div class="col-lg-3" *ngIf="bibTrashGroups.length">
242 <select multiple [(ngModel)]="selectedTrashGroups"
243 id="marc-remove-groups" class="form-control" size="3">
244 <option *ngFor="let grp of bibTrashGroups"
245 value="{{grp.id()}}">{{grp.label()}}</option>
249 <div class="col-lg-3">
250 <label class="form-label" for="auto-overlay-org-unit-copies" i18n>
251 Use Org Unit Matching in Copy to Determine Best Match
254 <div class="col-lg-3">
255 <input class="form-check-input" type="checkbox"
256 id="auto-overlay-org-unit-copies"
257 [disabled]="recordType === 'authority'"
258 [(ngModel)]="autoOverlayOrgUnitCopies">
261 <div class="row" *ngIf="!importSelection()">
262 <div class="col-lg-3">
263 <label class="form-label" for="upload-file" i18n>File to Upload:</label>
265 <div class="col-lg-3">
266 <input #fileSelector (change)="fileSelected($event)"
267 id="upload-file" required class="form-control" type="file"/>
270 <div class="row" *ngIf="importSelection()">
271 <div class="col-lg-3">
272 <label class="form-label">Import Selected</label>
274 <div class="col-lg-3">
275 <span *ngIf="!importSelection().importQueue" i18n>
276 Importing {{importSelection().recordIds.length}} Record(s)</span>
277 <span *ngIf="importSelection().importQueue" i18n>
278 Importing Queue {{importSelection().queue.name()}}</span>
280 <div class="col-lg-3">
281 <button type="button" class="btn btn-outline-info ms-2" (click)="clearSelection()" i18n>
287 <div class="d-grid gap-2 col-6 mx-auto">
288 <button type="button" class="btn btn-success btn-lg fw-bold"
289 [disabled]="isUploading || !hasNeededData()"
290 (click)="upload()" i18n>Upload</button>
293 <!-- hide instead of *ngIf so ViewChild can find the progress bars -->
294 <div class="row" [hidden]="!showProgress || importSelection()">
295 <div class="col-lg-3">
296 <label class="form-label" i18n>Upload Progress</label>
298 <div class="col-lg-6">
299 <eg-progress-inline #uploadProgress></eg-progress-inline>
302 <div class="row" [hidden]="!showProgress || importSelection()">
303 <div class="col-lg-3">
304 <label class="form-label" i18n>Enqueue Progress</label>
306 <div class="col-lg-6">
307 <eg-progress-inline #enqueueProgress></eg-progress-inline>
310 <div class="row" [hidden]="!showProgress">
311 <div class="col-lg-3">
312 <label class="form-label" i18n>Import Progress</label>
314 <div class="col-lg-6">
315 <eg-progress-inline #importProgress></eg-progress-inline>
318 <div class="row" [hidden]="!uploadComplete">
319 <div class="d-grid gap-2 col-6 mx-auto">
320 <button type="button" class="btn btn-info btn-lg fw-bold"
321 routerLink="/staff/cat/vandelay/queue/{{recordType}}/{{activeQueueId}}"
322 i18n>Go To Queue</button>