]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/staff/admin/local/course-reserves/course-associate-material.component.html
9acbe99c431f61c3684edc5f2c21ec7699e6449b
[Evergreen.git] / Open-ILS / src / eg2 / src / app / staff / admin / local / course-reserves / course-associate-material.component.html
1 <eg-string #materialDeleteFailedString i18n-text text="Disassociation of Course Material failed or was not allowed">
2 </eg-string>
3 <eg-string #materialDeleteSuccessString i18n-text text="Disassociation of Course Material succeeded"></eg-string>
4 <eg-string #materialAddSuccessString i18n-text text="Association of Course Material succeeded"></eg-string>
5 <eg-string #materialAddFailedString i18n-text text="Association of Course Material failed or was not allowed">
6 </eg-string>
7 <eg-string #materialEditSuccessString i18n-text text="Update of Course Material succeeded"></eg-string>
8 <eg-string #materialEditFailedString i18n-text text="Update of Course Material failed or was not allowed"></eg-string>
9 <eg-string #MaterialAddDifferentLibraryString i18n-text text="Material exists at a different library"></eg-string>
10
11 <ng-template #dialogContent>
12   <div class="modal-header bg-info" [ngClass]="isDialog() ? 'modal-header' : 'alert mt-3'">
13     <h4 class="modal-title" i18n>Course Materials</h4>
14     <ng-container *ngIf="isDialog()">
15       <button type="button" class="close" i18n-aria-label aria-label="Close" (click)="close()">
16         <span aria-hidden="true">&times;</span>
17       </button>
18     </ng-container>
19   </div>
20   <div [ngClass]="isDialog() ? 'modal-body' : ''">
21     <div class="row">
22       <div [ngClass]="isDialog() ? 'col-md-12' : 'col-md-4'">
23         <ul ngbNav #associateNav="ngbNav" class="nav-tabs">
24           <li ngbNavItem>
25             <a ngbNavLink i18n>Associate item</a>
26             <ng-template ngbNavContent>
27               <div class="row" [ngClass]="isDialog() ? '' : 'mt-3'">
28                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12'">
29                   <div class="input-group">
30                     <div class="input-group-prepend">
31                       <span class="input-group-text" i18n>Barcode</span>
32                     </div>
33                     <input type="text" class="flex-grow-1" [(ngModel)]="barcodeInput" (click)="$event.target.select()"
34                       [disabled]="currentCourse && currentCourse.is_archived() == 't'"
35                       (keyup.enter)="associateItem(barcodeInput, relationshipInput)" />
36                   </div>
37                 </div>
38                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12 mt-3'">
39                   <div class="input-group">
40                     <div class="input-group-prepend">
41                       <span class="input-group-text" i18n>Relationship</span>
42                     </div>
43                     <input type="text" [(ngModel)]="relationshipInput"
44                       [disabled]="currentCourse && currentCourse.is_archived() == 't'" placeholder-i18n
45                       placeholder="e.g. Required" class="flex-grow-1" />
46                   </div>
47                 </div>
48               </div>
49               <div class="row mt-3">
50                 <div class="col-lg-12 text-right">
51                   <button class="btn btn-primary" [disabled]="currentCourse && currentCourse.is_archived() == 't'"
52                     (click)="associateItem(barcodeInput, relationshipInput)" i18n [disabled]="!barcodeInput">
53                     Add Material
54                   </button>
55                 </div>
56               </div>
57               <div class="row justify-content-center mt-3">
58                 <div class="col">
59                   <h5 i18n>The following fields will be applied to the material
60                     added, and reverted once the course is no longer associated
61                     with the material.</h5>
62                 </div>
63               </div>
64               <div class="row mt-3">
65                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12'">
66                   <div class="input-group">
67                     <div class="input-group-prepend">
68                       <div class="input-group-text">
69                         <span i18n>Call Number</span>
70                       </div>
71                     </div>
72                     <input type="text" [(ngModel)]="tempCallNumber"
73                       [disabled]="currentCourse && currentCourse.is_archived() == 't'"
74                       (input)="isModifyingCallNumber = true" class="flex-grow-1" />
75                     <div class="input-group-append">
76                       <div class="input-group-text">
77                         <input type="checkbox" [(ngModel)]="isModifyingCallNumber"
78                           [disabled]="currentCourse && currentCourse.is_archived() == 't'"
79                           aria-label="Checkbox for setting a temporary Call Number" />
80                       </div>
81                     </div>
82                   </div>
83                 </div>
84                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12 mt-3'">
85                   <div class="input-group">
86                     <div class="input-group-prepend">
87                       <div class="input-group-text">
88                         <span i18n>Circulation Modifier</span>
89                       </div>
90                     </div>
91                     <eg-combobox i18n-placeholder placeholder="Circulation Modifier..." idlClass="ccm" idlField="name"
92                       [displayTemplate]="idlClassLabel" [disabled]="currentCourse && currentCourse.is_archived() == 't'"
93                       [asyncSupportsEmptyTermClick]="true" class="flex-grow-1"
94                       (onChange)="tempCircMod = $event.id; isModifyingCircMod = true">
95                     </eg-combobox>
96                     <div class="input-group-append">
97                       <div class="input-group-text">
98                         <input type="checkbox" [(ngModel)]="isModifyingCircMod"
99                           [disabled]="currentCourse && currentCourse.is_archived() == 't'"
100                           aria-label="Checkbox for setting a temporary Circulation Modifier" />
101                       </div>
102                     </div>
103                   </div>
104                 </div>
105               </div>
106               <div class="row mt-3">
107                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12'">
108                   <div class="input-group">
109                     <div class="input-group-prepend">
110                       <div class="input-group-text">
111                         <span i18n>Item Status</span>
112                       </div>
113                     </div>
114                     <eg-combobox i18n-placeholder placeholder="Item Status..." idlClass="ccs" idlField="name"
115                       [displayTemplate]="idlClassLabel" [disabled]="currentCourse && currentCourse.is_archived() == 't'"
116                       [asyncSupportsEmptyTermClick]="true" class="flex-grow-1"
117                       (onChange)="tempStatus = $event.id; isModifyingStatus = true">
118                     </eg-combobox>
119                     <div class="input-group-append">
120                       <div class="input-group-text">
121                         <input type="checkbox" [(ngModel)]="isModifyingStatus"
122                           [disabled]="currentCourse && currentCourse.is_archived() == 't'"
123                           aria-label="Checkbox for setting a temporary Item Status" />
124                       </div>
125                     </div>
126                   </div>
127                 </div>
128                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12 mt-3'">
129                   <div class="input-group">
130                     <div class="input-group-prepend">
131                       <div class="input-group-text">
132                         <span i18n>Shelving Location</span>
133                       </div>
134                     </div>
135                     <eg-item-location-select permFilter="MANAGE_RESERVES" class="flex-grow-1"
136                       [disabled]="currentCourse && currentCourse.is_archived() == 't'" [(ngModel)]="tempLocation"
137                       (valueChange)="isModifyingLocation = true">
138                     </eg-item-location-select>
139                     <div class="input-group-append">
140                       <div class="input-group-text">
141                         <input type="checkbox" [(ngModel)]="isModifyingLocation"
142                           [disabled]="currentCourse && currentCourse.is_archived() == 't'"
143                           aria-label="Checkbox for setting a temporary Shelving Location" />
144                       </div>
145                     </div>
146                   </div>
147                 </div>
148               </div>
149             </ng-template>
150           </li>
151           <li ngbNavItem>
152             <a ngbNavLink i18n>Associate brief record</a>
153             <ng-template ngbNavContent>
154               <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12 mt-3'">
155                 <div class="input-group">
156                   <div class="input-group-prepend">
157                     <span class="input-group-text" i18n>Relationship</span>
158                   </div>
159                   <input type="text" [(ngModel)]="relationshipInput"
160                     [disabled]="currentCourse && currentCourse.is_archived() == 't'" placeholder-i18n
161                     placeholder="e.g. Required" class="flex-grow-1" />
162                 </div>
163               </div>
164               <eg-marc-simplified-editor (xmlRecordEvent)="associateBriefRecord($event)" buttonLabel="Add material" i18n-buttonLabel>
165                 <eg-marc-simplified-editor-field tag="245" subfield="a"></eg-marc-simplified-editor-field>
166                 <eg-marc-simplified-editor-field tag="856" subfield="u"></eg-marc-simplified-editor-field>
167                 <eg-marc-simplified-editor-field tag="856" subfield="9" defaultValue="CONS"></eg-marc-simplified-editor-field>
168                 <eg-marc-simplified-editor-field tag="990" subfield="a" i18n-defaultValue
169                   defaultValue="This record was created using the Course Materials Module -- please edit it there">
170                   </eg-marc-simplified-editor-field>
171               </eg-marc-simplified-editor>
172             </ng-template>
173           </li>
174           <li ngbNavItem>
175             <a ngbNavLink>Associate electronic resource from catalog</a>
176             <ng-template ngbNavContent>
177               <div class="row" [ngClass]="isDialog() ? '' : 'mt-3'">
178                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12 mt-3'">
179                   <div class="input-group">
180                     <div class="input-group-prepend">
181                       <label for="bib-id" class="input-group-text" i18n>Bibliographic Record ID</label>
182                     </div>
183                     <input type="text" [(ngModel)]="bibId" id="bib-id"
184                       [disabled]="currentCourse && currentCourse.is_archived() == 't'" class="flex-grow-1" />
185                   </div>
186                 </div>
187                 <div class="d-flex" [ngClass]="isDialog() ? 'col-md-6' : 'col-md-12 mt-3'">
188                   <div class="input-group">
189                     <div class="input-group-prepend">
190                       <span class="input-group-text" i18n>Relationship</span>
191                     </div>
192                     <input type="text" [(ngModel)]="relationshipInput"
193                       [disabled]="currentCourse && currentCourse.is_archived() == 't'" class="flex-grow-1" />
194                   </div>
195                 </div>
196               </div>
197               <div class="row mt-3">
198                 <div class="col-lg-12 text-right">
199                   <button class="btn btn-primary" i18n (click)="associateElectronicBibRecord()"
200                     [disabled]="currentCourse && currentCourse.is_archived() == 't'">
201                     Add Material
202                   </button>
203                 </div>
204               </div>
205             </ng-template>
206           </li>
207         </ul>
208         <div [ngbNavOutlet]="associateNav"></div>
209       </div>
210
211       <div class="mt-3" [ngClass]="isDialog() ? 'col-md-12' : 'col-md-8'">
212         <eg-grid #materialsGrid [dataSource]="materialsDataSource" [useLocalSort]="true">
213           <eg-grid-toolbar-action label="Remove Selected" i18n-label (onClick)="deleteSelectedMaterials($event)">
214           </eg-grid-toolbar-action>
215           <eg-grid-toolbar-action label="Edit Selected" i18n-label (onClick)="editSelectedMaterials($event)">
216           </eg-grid-toolbar-action>
217           <eg-grid-column path="id" [index]=true [hidden]="true" label="ID" i18n-label></eg-grid-column>
218           <eg-grid-column label="Barcode" i18n-label name="barcode" [cellTemplate]="barcodeCellTemplate"></eg-grid-column>
219           <eg-grid-column label="Title" i18n-label name="title" flex="3" [cellTemplate]="titleCellTemplate"></eg-grid-column>
220           <eg-grid-column path="call_number.label" label="Call Number" i18n-label></eg-grid-column>
221           <eg-grid-column path="call_number.prefix.label" [hidden]="true" label="Call Number Prefix" i18n-label hidden>
222           </eg-grid-column>
223           <eg-grid-column path="call_number.suffix.label" [hidden]="true" label="Call Number Suffix" i18n-label hidden>
224           </eg-grid-column>
225           <eg-grid-column path="circ_modifier" [hidden]="true" label="Circulation Modifier" i18n-label></eg-grid-column>
226           <eg-grid-column path="circ_lib.shortname" label="Circulation Library" i18n-label></eg-grid-column>
227           <eg-grid-column path="location.name" [hidden]="true" label="Shelving Location" i18n-label></eg-grid-column>
228           <eg-grid-column path="status.name" [hidden]="true" label="Copy Status" i18n-label></eg-grid-column>
229           <eg-grid-column path="relationship" label="Relationship" i18n-label></eg-grid-column>
230         </eg-grid>
231       </div>
232     </div>
233   </div>
234 </ng-template>
235 <ng-template #barcodeCellTemplate let-entry="row">
236   <span *ngIf="entry.item()">
237     <a class="pl-1" href="/eg/staff/cat/item/{{entry.item().id()}}">
238       {{entry.item().barcode()}}
239     </a>
240   </span>
241 </ng-template>
242 <ng-template #titleCellTemplate let-entry="row">
243   <a class="pl-1" routerLink="/staff/catalog/record/{{entry.record().id()}}">
244     {{entry.record().wide_display_entry().title()}}
245   </a>
246 </ng-template>
247 <ng-template #idlClassLabel let-r="result" i18n>
248   {{r.label}}
249 </ng-template>
250
251 <ng-container *ngIf="!isDialog()">
252   <!-- in "inline" mode, render the grid pane right here -->
253   <ng-container *ngTemplateOutlet="dialogContent">
254   </ng-container>
255 </ng-container>
256
257 <eg-fm-record-editor #editDialog idlClass='acmcm' [fieldOptions]="{course: {linkedSearchField: 'course_number'}}"
258   [preloadLinkedValues]="true"
259   hiddenFields="id,item,original_callnumber,original_status,original_location,original_circ_modifier,record">
260 </eg-fm-record-editor>