515bd92e4bba823c7b38dc2990ce52a06dde65f5
[evergreen-equinox.git] / Open-ILS / src / eg2 / src / app / staff / acq / picklist / upload.component.html
1 <eg-staff-banner bannerText="Load MARC Order Records" i18n-bannerText *ngIf="mode !== 'getImportParams'">
2 </eg-staff-banner>
3
4 <div class="row" *ngIf="mode !== 'getImportParams'">
5   <div class="ms-auto me-3"><a i18n href="/eg/staff/acq/legacy/picklist/upload">Legacy Upload Interface</a></div>
6   <div class="ms-auto me-3"><a i18n href="/eg/staff/acq/legacy/picklist/upload">Legacy Upload Interface</a></div>
7 </div>
8
9 <eg-string #loadMarcOrderTemplateSavedString i18n-text text="Load MARC Order Record Template Saved"></eg-string>
10 <eg-string #loadMarcOrderTemplateDeletedString i18n-text text="Load MARC Order Record Template Deleted"></eg-string>
11 <eg-string #loadMarcOrderTemplateSetAsDefaultString i18n-text text="Load MARC Order Record Template Set As Default"></eg-string>
12
13 <eg-alert-dialog #dupeQueueAlert i18n-dialogBody 
14   dialogBody="A queue with the requested name already exists.">
15 </eg-alert-dialog>
16
17 <div class="common-form striped-odd form-validated ms-3 me-3">
18   <div class="row">
19     <div class="col-lg-3">
20       <label class="form-label" for="template-select" i18n *ngIf="mode !== 'getImportParams'">Apply/Create Form Template</label>
21       <label class="form-label" for="template-select" i18n *ngIf="mode === 'getImportParams'">Apply Form Template</label>
22     </div>
23     <div class="col-lg-3">
24       <eg-combobox #formTemplateSelector
25         id="template-select"
26         (onChange)="templateSelectorChange($event)"
27         [allowFreeText]="true"
28         [startId]="selectedTemplate"
29         [startIdFiresOnChange]="true"
30         [entries]="formatTemplateEntries()">
31       </eg-combobox>
32     </div>
33     <div class="col-lg-6" *ngIf="mode !== 'getImportParams'">
34       <button class="btn btn-success"
35         [disabled]="!selectedTemplate"
36         (click)="saveTemplate()" i18n>Save Template</button>
37       <button class="btn btn-outline-primary ms-3"
38         [disabled]="!selectedTemplate"
39         (click)="markTemplateDefault()" i18n>Mark Template as Default</button>
40       <button class="btn btn-danger ms-3"
41         [disabled]="!selectedTemplate"
42         (click)="deleteTemplate()" i18n>Delete Template</button>
43     </div>
44   </div>
45
46   <ng-container *ngIf="mode !== 'getImportParams'">
47   <h2>Purchase Order</h2>
48   <div class="row">
49     <div class="col-lg-3">
50       <label class="form-label" for="provider-select" i18n>Provider</label>
51     </div>
52   
53     <div class="col-lg-3">
54       <eg-combobox #providerSelector
55         domId="provider-select"
56         [selectedId]="selectedProvider" (onChange)="selectedProvider = $event.id"
57         style="border-left-width: 0px"
58         [required]="true"
59         [asyncSupportsEmptyTermClick]="true"
60         idlIncludeLibraryInLabel="owner"
61         [idlQueryAnd]="{active: 't'}" idlClass="acqpro">
62       </eg-combobox>
63     </div>
64
65     <div class="col-lg-3">
66       <label class="form-label" for="create-po" i18n>Create Purchase Order</label>
67   </div>
68   <div class="col-lg-3">
69     <input class="form-check-input" type="checkbox" 
70       id="create-po"
71       [(ngModel)]="createPurchaseOrder">
72   </div>
73 </div>
74   <div class="row">
75     <div class="col-lg-3">
76       <label class="form-label" for="type-select" i18n>Ordering Agency</label>
77     </div>
78       <div class="col-lg-3">
79         <eg-org-select
80           [applyOrgId]="orderingAgency"
81           (onChange)="orgOnChange($event)"
82           [limitPerms]="['CREATE_PICKLIST','CREATE_PURCHASE_ORDER']">
83         </eg-org-select>
84       </div>
85
86       <div class="col-lg-3">
87         <label class="form-label" for="activate-po" i18n>Activate Purchase Order</label>
88     </div>
89     
90     <div class="col-lg-3">
91       <input class="form-check-input" type="checkbox" 
92         id="activate-po"
93         [(ngModel)]="activatePurchaseOrder">
94     </div>
95     </div>
96
97   <div class="row">
98     <div class="col-lg-3">
99       <label class="form-label" for="year-select" i18n>Fiscal Year</label>
100     </div>
101     <div class="col-lg-3">
102       <eg-combobox #fiscalYearSelector
103         id="year-select"
104         [startId]="selectedFiscalYear"
105         [entries]="formatEntries('fiscalYears')"
106         [required]="true"
107         (onChange)="selectEntry($event, 'fiscalYears')">
108       </eg-combobox>
109     </div>
110   </div>
111
112   <div class="row">
113     <div class="col-lg-3">
114       <label class="form-label" for="sl-select" i18n>Add to Selection List?</label>
115     </div>
116     <div class="col-lg-3">
117       <eg-combobox #selectionListSelector
118         id="sl-select"
119         [startId]="selectedSelectionList"
120         [entries]="formatEntries('selectionLists')"
121         (onChange)="selectedSelectionList=$event" i18n-placeholder
122         [allowFreeText]="true">
123       </eg-combobox>
124     </div>
125   </div>
126   </ng-container> <!-- purchase order section -->
127
128   <h2 *ngIf="mode !== 'getImportParams'">Upload Settings</h2>
129
130   <div class="row">
131     <div class="col-lg-3">
132       <label class="form-label" for="source-select" i18n>Record Source</label>
133     </div>
134     <div class="col-lg-3">
135       <eg-combobox #bibSourceSelector
136         id="source-select"
137         [entries]="formatEntries('bibSources')" 
138         (onChange)="selectEntry($event, 'bibSources')"
139         [startId]="selectedBibSource">
140       </eg-combobox>
141     </div>
142     <div class="col-lg-3">
143       <label class="form-label" for="import-non-matching" i18n>Import Non-Matching Records</label>
144   </div>
145   <div class="col-lg-3">
146     <input class="form-check-input" type="checkbox" 
147       id="import-non-matching"
148       [(ngModel)]="importNonMatching">
149   </div>
150   </div>
151  
152   <div class="row">
153     <div class="col-lg-3">
154       <label class="form-label" for="match-set-select" i18n>Record Match Set</label>
155     </div>
156     <div class="col-lg-3">
157       <eg-combobox #matchSetSelector
158         id="match-set-select"
159         [entries]="formatEntries('matchSets')" 
160         [disabled]="(selectedQueue && !selectedQueue.freetext) || importSelection()"
161         [startId]="selectedMatchSet || defaultMatchSet"
162         (onChange)="selectEntry($event, 'matchSets')">
163       </eg-combobox>
164     </div>
165     <div class="col-lg-3">
166       <label class="form-label" for="merge-on-exact" i18n>Merge On Exact Match (901c)</label>
167   </div>
168   <div class="col-lg-3">
169     <input class="form-check-input" type="checkbox" 
170       id="merge-on-exact" [(ngModel)]="mergeOnExact">
171   </div>
172  </div>
173
174   <div class="row">
175     <div class="col-lg-3">
176       <label class="form-label" for="merge-profiles" i18n>Merge Profile</label>
177     </div>
178     <div class="col-lg-3">
179       <eg-combobox #mergeProfileSelector
180         id="merge-profiles"
181         [entries]="formatEntries('mergeProfiles')"
182         (onChange)="selectEntry($event, 'mergeProfiles')"
183         [startId]="selectedMergeProfile">
184       </eg-combobox>
185     </div>
186     <div class="col-lg-3">
187         <label class="form-label" for="merge-on-single" i18n>Merge On Single Match</label>
188     </div>
189     <div class="col-lg-3">
190       <input class="form-check-input" type="checkbox" 
191         id="merge-on-single" [(ngModel)]="mergeOnSingleMatch">
192     </div>
193   </div>
194   <div class="row">
195     <div class="col-lg-3">
196       <label class="form-label" for="insuff-merge-profiles" i18n>
197         Insufficient Quality Fall-Through Profile
198     </label>
199     </div>
200     <div class="col-lg-3">
201       <eg-combobox #fallThruMergeProfileSelector
202         id="insuff-merge-profiles"
203         [entries]="formatEntries('mergeProfiles')"
204         (onChange)="selectEntry($event, 'FallThruMergeProfile')"
205         [startId]="selectedFallThruMergeProfile">
206       </eg-combobox>
207     </div>
208     <div class="col-lg-3">
209       <label class="form-label" for="merge-on-best" i18n>Merge On Best Match</label>
210     </div>
211     <div class="col-lg-3">
212       <input class="form-check-input" type="checkbox" 
213         id="merge-on-best" [(ngModel)]="mergeOnBestMatch">
214     </div>
215   </div>
216   <div class="row">
217     <div class="col-lg-3">
218       <label class="form-label" for="min-quality-ratio" i18n>
219         Best/Single Match Minimum Quality Ratio
220       </label>
221     </div>
222     <div class="col-lg-3">
223       <input type="number" step="0.1" id="min-quality-ratio" 
224         class="form-control" [(ngModel)]="minQualityRatio">
225     </div>
226     <ng-container *ngIf="mode !== 'getImportParams'">
227     <div class="col-lg-3">
228       <label class="form-label" for="load-items" i18n>Load Items for Imported Records</label>
229     </div>
230     <div class="col-lg-3">
231       <input class="form-check-input" type="checkbox" 
232         id="load-items"
233         [(ngModel)]="loadItems">
234     </div>
235     </ng-container>
236   </div>
237
238   <h2 *ngIf="mode !== 'getImportParams'">This Upload</h2>
239   <div class="row">
240     <div class="col-lg-3">
241       <label class="form-label" for="queue-select" i18n>Select or Create a Queue</label>
242     </div>
243     <div class="col-lg-3">
244       <eg-combobox [entries]="formatEntries('activeQueues')"
245         id="queue-select"
246         [startIdFiresOnChange]="true"
247         (onChange)="selectedQueue=$event" i18n-placeholder
248         [required]="true"
249         [allowFreeText]="true">
250       </eg-combobox>
251     </div>
252   </div>
253   <div class="row" *ngIf="!importSelection() && mode !== 'getImportParams'">
254     <div class="col-lg-3">
255       <label class="form-label" for="upload-file" i18n>File to Upload:</label>
256     </div>
257     <div class="col-lg-3">
258       <input #fileSelector (change)="fileSelected($event)" 
259         id="upload-file" required class="form-control" type="file"/>
260     </div>
261   </div>
262   <div class="row" *ngIf="importSelection()">
263     <div class="col-lg-3">
264       <label class="form-label">Import Selected</label>
265     </div>
266     <div class="col-lg-3">
267       <span *ngIf="!importSelection().importQueue" i18n>
268         Importing {{importSelection().recordIds.length}} Record(s)</span>
269       <span *ngIf="importSelection().importQueue" i18n>
270         Importing Queue {{importSelection().queue.name()}}</span>
271     </div>
272     <div class="col-lg-3">
273       <button class="btn btn-outline-info ms-2" (click)="clearSelection()" i18n>
274         Clear Selection
275       </button>
276     </div>
277   </div>
278   <div class="row" *ngIf="mode !== 'getImportParams'">
279     <div class="d-grid gap-2 col-6 mx-auto">
280       <button class="btn btn-success btn-lg fw-bold"
281         [disabled]="isUploading || !hasNeededData()" 
282         (click)="upload()" i18n>Upload</button>
283     </div>
284   </div>
285   <div class="row" *ngIf="mode === 'getImportParams'">
286     <div class="d-grid gap-2 col-6 mx-auto">
287       <button class="btn btn-success btn-lg fw-bold"
288         [disabled]="customActionProcessing || !hasNeededData()" 
289         (click)="performCustomAction()" i18n>Submit</button>
290     </div>
291   </div>
292   <div class="row" [hidden]="!isUploading || uploadComplete">
293     <div class="col-lg-3">
294       <label class="form-label" i18n>Upload File to Server</label>
295     </div>
296     <div class="col-lg-6">
297       <eg-progress-inline #uploadProgress></eg-progress-inline>
298     </div>
299   </div>
300  
301
302   <div class="col-lg-6 offset-lg-3" [hidden]="!uploadProcessing || uploadComplete">
303     <h2><label class="form-label" i18n><i>Processing...</i></label></h2>
304   </div>
305
306   <div class="row" [hidden]="!uploadComplete">
307     <ng-container *ngIf="uploadError">
308       <div class="col-lg-6 offset-lg-3">
309         <h2><label class="form-label" i18n>Upload Error!</label></h2>
310         <div class="row">
311           <div class="col alert-danger" i18n>Error {{uploadErrorCode}} ({{uploadErrorText}})</div>
312         </div>
313       </div>
314     </ng-container>
315     <ng-container *ngIf="!uploadError">
316       <div class="col-lg-6 offset-lg-3">
317         <h2><label class="form-label" i18n>Upload Complete!</label></h2>
318         <div class="row" [hidden]="!uploadComplete">
319           <div class="col-2">
320             <label class="form-label" i18n>Go to:</label>
321           </div>
322           <div class="col-2"><a routerLink="/staff/cat/vandelay/queue/{{recordType}}/{{activeQueueId}}" target="_blank" i18n>Queue</a></div>
323           <div class="col-2" [hidden]="!selectedSelectionList"><a routerLink="/staff/acq/picklist/{{activeSelectionListId}}" target="_blank">Selection List</a></div>
324           <div class="col-2" [hidden]="!createPurchaseOrder"><a routerLink="/staff/acq/po/{{newPO}}" target="_blank">Purchase Order</a></div>
325         </div>
326       </div>
327     </ng-container>
328   </div>