]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/cat/vandelay/import.component.html
LP2045292 Color contrast for AngularJS patron bills
[working/Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / cat / vandelay / import.component.html
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>
7     </button>
8   </div>
9 </div>
10
11 <eg-alert-dialog #dupeQueueAlert i18n-dialogBody 
12   dialogBody="A queue with the requested name already exists.">
13 </eg-alert-dialog>
14
15 <h2 i18n>MARC File Upload</h2>
16 <div class="common-form striped-odd form-validated ms-3 me-3">
17   <div class="row">
18     <div class="col-lg-3">
19       <label class="form-label" for="template-select" i18n>Apply/Create Form Template</label>
20     </div>
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>
30       </eg-combobox>
31     </div>
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>
42     </div>
43   </div>
44
45   <div class="row">
46     <div class="col-lg-3">
47       <label class="form-label" for="type-select" i18n>Record Type</label>
48     </div>
49     <div class="col-lg-3">
50       <eg-combobox #recordTypeSelector
51         domId="type-select"
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>
61       </eg-combobox>
62     </div>
63     <div class="col-lg-3">
64       <label class="form-label" for="source-select" i18n>Select a Record Source</label>
65     </div>
66     <div class="col-lg-3">
67       <eg-combobox #bibSourceSelector
68         domId="source-select"
69         [entries]="formatEntries('bibSources')" 
70         (onChange)="selectEntry($event, 'bibSources')"
71         [startId]="selectedBibSource"
72         placeholder="Record Source..." i18n-placeholder>
73       </eg-combobox>
74     </div>
75   </div>
76   <div class="row">
77     <div class="col-lg-3">
78       <label class="form-label" for="queue-select" i18n>Select or Create a Queue</label>
79     </div>
80     <div class="col-lg-3">
81       <eg-combobox [entries]="formatEntries('activeQueues')"
82         #queueSelector
83         domId="queue-select"
84         [startId]="startQueueId"
85         [startIdFiresOnChange]="true"
86         [disabled]="startQueueId"
87         (onChange)="selectedQueue=$event" i18n-placeholder
88         [required]="true"
89         [allowFreeText]="true" placeholder="Select or Create a Queue...">
90       </eg-combobox>
91     </div>
92     <div class="col-lg-3">
93       <label class="form-label" for="bucket-select" i18n>Limit Matches to Bucket</label>
94     </div>
95     <div class="col-lg-3">
96       <eg-combobox [entries]="formatEntries('bibBuckets')" 
97         #bucketSelector
98         domId="bucket-select"
99         [startId]="selectedBucket"
100         [disabled]="(selectedQueue && !selectedQueue.freetext) || importSelection()"
101         (onChange)="selectEntry($event, 'bibBuckets')"
102         placeholder="Buckets..." i18n-placeholder></eg-combobox>
103     </div>
104   </div>
105   <div class="row">
106     <div class="col-lg-3">
107       <label class="form-label" for="match-set-select" i18n>Record Match Set</label>
108     </div>
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>
117     </div>
118     <div class="col-lg-3">
119         <label class="form-label" for="import-non-matching" i18n>Import Non-Matching Records</label>
120     </div>
121     <div class="col-lg-3">
122       <input class="form-check-input" type="checkbox" 
123         id="import-non-matching"
124         [(ngModel)]="importNonMatching">
125     </div>
126  </div>
127   <div class="row">
128     <div class="col-lg-3">
129       <label class="form-label" for="item-import-def" i18n>Holdings Import Profile</label>
130     </div>
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>
139       </eg-combobox>
140     </div>
141     <div class="col-lg-3">
142         <label class="form-label" for="merge-on-exact" i18n>Merge On Exact Match (901c)</label>
143     </div>
144     <div class="col-lg-3">
145       <input class="form-check-input" type="checkbox" 
146         id="merge-on-exact" [(ngModel)]="mergeOnExact">
147     </div>
148   </div>
149   <div class="row">
150     <div class="col-lg-3">
151       <label class="form-label" for="merge-profiles" i18n>Merge Profile</label>
152     </div>
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>
159       </eg-combobox>
160     </div>
161     <div class="col-lg-3">
162         <label class="form-label" for="merge-on-single" i18n>Merge On Single Match</label>
163     </div>
164     <div class="col-lg-3">
165       <input class="form-check-input" type="checkbox" 
166         id="merge-on-single" [(ngModel)]="mergeOnSingleMatch">
167     </div>
168   </div>
169   <div class="row">
170     <div class="col-lg-3">
171       <label class="form-label" for="insuff-merge-profiles" i18n>
172         Insufficient Quality Fall-Through Profile
173     </label>
174     </div>
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>
181       </eg-combobox>
182     </div>
183     <div class="col-lg-3">
184       <label class="form-label" for="merge-on-best" i18n>Merge On Best Match</label>
185     </div>
186     <div class="col-lg-3">
187       <input class="form-check-input" type="checkbox" 
188         id="merge-on-best" [(ngModel)]="mergeOnBestMatch">
189     </div>
190   </div>
191   <div class="row">
192     <div class="col-lg-3">
193       <label class="form-label" for="min-quality-ratio" i18n>
194         Best/Single Match Minimum Quality Ratio
195       </label>
196     </div>
197     <div class="col-lg-3">
198       <input type="number" step="0.1" id="min-quality-ratio" 
199         class="form-control" [(ngModel)]="minQualityRatio">
200     </div>
201     <div class="col-lg-3">
202       <label class="form-label" for="auto-overlay-acq-copies" i18n>
203         Auto-overlay In-process Acquisitions Items
204       </label>
205     </div>
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">
211     </div>
212   </div>
213   <div class="row">
214     <div class="col-lg-3">
215       <label class="form-label" for="session-name" i18n>Optional Session Name:</label>
216     </div>
217     <div class="col-lg-3">
218       <input [(ngModel)]="sessionName" class="form-control" type="text"
219         name="session-name" i18n-placeholder placeholder="Session Name..."/>
220     </div>
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
224       </label>
225     </div>
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">
231     </div>
232   </div>
233   <div class="row">
234     <div class="col-lg-3">
235       <label class="form-label" for="marc-remove-groups" i18n>Remove MARC Field Groups</label>
236     </div>
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>
240       </div>
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>
246         </select>
247       </div>
248     </ng-container>
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
252       </label>
253     </div>
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">
259     </div>
260   </div>
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>
264     </div>
265     <div class="col-lg-3">
266       <input #fileSelector (change)="fileSelected($event)" 
267         id="upload-file" required class="form-control" type="file"/>
268     </div>
269   </div>
270   <div class="row" *ngIf="importSelection()">
271     <div class="col-lg-3">
272       <label class="form-label">Import Selected</label>
273     </div>
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>
279     </div>
280     <div class="col-lg-3">
281       <button type="button" class="btn btn-outline-info ms-2" (click)="clearSelection()" i18n>
282         Clear Selection
283       </button>
284     </div>
285   </div>
286   <div class="row">
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>
291     </div>
292   </div>
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>
297     </div>
298     <div class="col-lg-6">
299       <eg-progress-inline #uploadProgress></eg-progress-inline>
300     </div>
301   </div>
302   <div class="row" [hidden]="!showProgress || importSelection()">
303     <div class="col-lg-3">
304       <label class="form-label" i18n>Enqueue Progress</label>
305     </div>
306     <div class="col-lg-6">
307       <eg-progress-inline #enqueueProgress></eg-progress-inline>
308     </div>
309   </div>
310   <div class="row" [hidden]="!showProgress">
311     <div class="col-lg-3">
312       <label class="form-label" i18n>Import Progress</label>
313     </div>
314     <div class="col-lg-6">
315       <eg-progress-inline #importProgress></eg-progress-inline>
316     </div>
317   </div>
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>
323     </div>
324   </div>
325 </div>
326
327