]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/templates/staff/cat/volcopy/t_attr_edit.tt2
LP1615805 No inputs after submit in patron search (AngularJS)
[Evergreen.git] / Open-ILS / src / templates / staff / cat / volcopy / t_attr_edit.tt2
1 <style type="text/css">
2   .css-form input.ng-invalid {
3     background-color: #FA787E;
4   }
5   .css-form select.ng-invalid {
6     background-color: #FA787E;
7   }
8
9   ul.copy-attributes-grid {
10     list-style: none;
11     display: flex;
12     flex-wrap: wrap;
13     padding-inline-start: 0px;
14   }
15
16   ul.copy-attributes-grid > li {
17     padding: 5px;
18     margin: 5px;
19     /* Force the grid to overflow to the next line every 4 entries
20       while leaving some wiggle space for padding/margins */
21     flex-basis: 24%;
22     display: flex;
23     flex-direction: column;
24   }
25
26   ul.copy-attributes-grid > li > div {
27     flex: 1;
28     /* padding here is required to allow the "item modified" bg
29         color to appear around some widgets (mainly selectors) */
30     padding: 6px;
31   }
32
33   ul.copy-attributes-grid > li > div:nth-child(1) {
34     border-radius: 6px 6px 0px 0px;
35   }
36
37   ul.copy-attributes-grid > li > div:nth-child(2) {
38     border: 1px solid #d9edf7;
39   }
40
41   ul.copy-attributes-grid li label {
42     font-weight: bold;
43     padding-left: 5px;
44   }
45   .field-changed {
46     border: 3px solid #004D00 !important;
47   }
48 </style>
49
50 <div>
51   <form novalidate class="css-form" name="forms.myForm">
52   <div class="row bg-info">
53     <div class="col-md-1">
54       <h5>[% l('Template') %]</h5>
55     </div>
56     <div ng-class="template_controls ? 'col-md-2' : 'col-md-5'">
57       <eg-basic-combo-box list="template_name_list" selected="template_name"></eg-basic-combo-box>
58     </div>
59     <div class="col-md-1">
60       <button class="btn btn-default " ng-click="applyTemplate(template_name)" type="button">[% l('Apply') %]</button>
61     </div>
62     <div class="col-md-6" ng-show="template_controls">
63       <div class="row">
64         <div class="col-md-4">
65           <div class="btn-group">
66             <label class="btn btn-default" ng-click="saveTemplate(template_name)">[% l('Save') %]</label>
67             <label class="btn btn-default" ng-click="deleteTemplate(template_name)">[% l('Delete') %]</label>
68           </div>
69         </div>
70         <div class="col-md-8">
71           <div class="btn-group pull-right">
72             <span class="btn btn-default btn-file">
73               [% l('Import') %]
74               <input type="file" eg-file-reader container="imported_templates.data">
75             </span>
76             <label class="btn btn-default"
77               eg-json-exporter container="templates"
78               default-file-name="'[% l('exported_copy_templates.json') %]'">
79               [% l('Export') %]
80             </label>
81           </div>
82         </div>
83       </div>
84     </div>
85     <div class="col-md-2" ng-class="{'col-md-offset-3' : !template_controls}">
86       <button class="btn btn-default pull-right" ng-click="clearWorking()" type="button">[% l('Clear') %]</button>
87     </div>
88   </div>
89
90   <div class="row pad-vert" ng-if="template_controls && defaults.show_vol_template_controls">
91     <div class="row">
92       <div class="col-xs-12">
93         <h4 class="center-block">[% l('Call Number Attributes') %]</h4>
94       </div>
95     </div>
96   </div>
97
98   <div class="row pad-vert" ng-if="template_controls && defaults.show_vol_template_controls">
99     <div class="col-md-1 bg-info">
100       <b>[% l('Classification') %]</b>
101     </div>
102     <div class="nullable col-md-2" ng-class="{'bg-success': working.callnumber.classification !== undefined}">
103       <select class="form-control" ng-model="working.callnumber.classification" ng-options="cl.id() as cl.name() for cl in classification_list">
104         <option value="">[% l('&lt;NONE&gt;') %]</option>
105       </select>
106     </div>
107     <div class="col-md-1 bg-info">
108       <b>[% l('Prefix') %]</b>
109     </div>
110     <div class="nullable col-xs-2" ng-class="{'bg-success': working.callnumber.prefix !== undefined}">
111       <select class="form-control" ng-model="working.callnumber.prefix" ng-options="p.id() as p.label() for p in prefix_list">
112         <option value="">[% l('&lt;NONE&gt;') %]</option>
113       </select>
114     </div>
115     <div class="col-md-1 bg-info">
116       <b>[% l('Suffix') %]</b>
117     </div>
118     <div class="nullable col-md-2" ng-class="{'bg-success': working.callnumber.suffix !== undefined}">
119       <select class="form-control" ng-model="working.callnumber.suffix" ng-options="s.id() as s.label() for s in suffix_list">
120         <option value="">[% l('&lt;NONE&gt;') %]</option>
121       </select>
122     </div>
123   </div>
124
125   <div class="row pad-vert" ng-if="template_controls && defaults.show_vol_template_controls">
126     <div class="row">
127       <div class="col-xs-12">
128         <h4 class="center-block">[% l('Item Attributes') %]</h4>
129       </div>
130     </div>
131   </div>
132
133   <ul class="copy-attributes-grid">
134     <li ng-if="defaults.attributes.circulate">
135       <div class="bg-info"><label>[% l('Circulate?') %]</label></div>
136       <div ng-class="{'bg-success': working.circulate !== undefined, 'field-changed': field_changed('circulate')}">
137         <div class="col-lg-6">
138           <label>
139             <input type="radio" ng-model="working.circulate" value="t"/>
140             [% l('Yes') %]
141           </label>
142         </div>
143         <div class="col-lg-6">
144           <label>
145             <input type="radio" ng-model="working.circulate" value="f"/>
146             [% l('No') %]
147           </label>
148         </div>
149       </div>
150       <!-- this dummy div ensures each <li> has exactly 3 vertical 
151           flex divs, ensuring consistent widget/label height -->
152       <div ng-if="hasMulti()"> </div>
153     </li>
154     <li ng-if="defaults.attributes.status">
155       <div class="bg-info"><label>[% l('Status') %]</label></div>
156       <div ng-class="{'bg-success': working.status !== undefined, 'field-changed': field_changed('status')}">
157         <select class="form-control" ng-model="working.status"
158           ng-options="s.id() as s.name() disable when magic_status_list.indexOf(s.id(),0) > -1 for s in status_list">
159         </select>
160       </div>
161       <div ng-if="hasMulti()">
162         <div ng-if="working.MultiMap.status.length > 1 && working.status === undefined">
163           <eg-list-counts label="[% l('Multiple statuses') %]"
164             list="working.MultiMap.status" render="statusName"
165             on-select="select_by_status">
166           </eg-list-counts>
167         </div>
168       </div>
169     </li>
170     <li ng-if="defaults.attributes.circ_lib">
171       <div class="bg-info"><label>[% l('Circulating Library') %]</label></div>
172       <div ng-class="{'bg-success': working.circ_lib !== undefined, 'field-changed': field_changed('circ_lib')}">
173         <eg-org-selector
174           alldisabled="{{!defaults.attributes.circ_lib}}"
175           selected="working.circ_lib"
176           noDefault
177           label="[% l('(Unset)') %]"
178           disable-test="cant_have_vols">
179         </eg-org-selector>
180       </div>
181       <div ng-if="hasMulti()">
182         <div 
183           ng-if="working.MultiMap.circ_lib.length > 1 && working.circ_lib === undefined">
184           <eg-list-counts label="[% l('Multiple values') %]"
185             list="working.MultiMap.circ_lib" render="orgShortname"
186             on-select="select_by_circ_lib">
187           </eg-list-counts>
188         </div>
189       </div>
190     </li>
191     <li ng-if="defaults.attributes.ref">
192       <div class="bg-info"><label>[% l('Reference?') %]</label></div>
193       <div ng-class="{'bg-success': working.ref !== undefined, 'field-changed': field_changed('ref')}">
194         <div class="col-lg-6">
195           <label>
196             <input type="radio" ng-model="working.ref" value="t"/>
197             [% l('Yes') %]
198           </label>
199         </div>
200         <div class="col-lg-6">
201           <label>
202           <input type="radio" ng-model="working.ref" value="f"/>
203             [% l('No') %]
204           </label>
205         </div>
206       </div>
207       <div ng-if="hasMulti()">
208         <div 
209           ng-if="working.MultiMap.ref.length > 1 && working.ref === undefined">
210           <eg-list-counts label="[% l('Multiple values') %]"
211             list="working.MultiMap.ref" render="labelYesNo" on-select="select_by_ref">
212           </eg-list-counts>
213         </div>
214       </div>
215     </li>
216     <li ng-if="defaults.attributes.location">
217       <div class="bg-info"><label>[% l('Shelving Location') %]</label></div>
218       <div ng-class="{'bg-success': working.location !== undefined, 'field-changed': field_changed('location')}">
219         <select class="form-control" ng-model="working.location"
220           ng-options="l.id() as i18n.ou_qualified_location_name(l) for l in location_list">
221         </select>
222       </div>
223       <div ng-if="hasMulti()">
224         <div 
225           ng-if="working.MultiMap.location.length > 1 && working.location === undefined">
226           <eg-list-counts label="[% l('Multiple locations') %]"
227             list="working.MultiMap.location" render="locationName"
228             on-select="select_by_location"></eg-list-counts>
229         </div>
230       </div>
231     </li>
232     <li ng-if="defaults.attributes.opac_visible">
233       <div class="bg-info"><label>[% l('OPAC Visible?') %]</label></div>
234       <div ng-class="{'bg-success': working.opac_visible !== undefined, 'field-changed': field_changed('opac_visible')}">
235         <div class="col-lg-6">
236           <label>
237             <input type="radio" ng-model="working.opac_visible" value="t"/>
238             [% l('Yes') %]
239           </label>
240         </div>
241         <div class="col-lg-6">
242           <label>
243             <input type="radio" ng-model="working.opac_visible" value="f"/>
244             [% l('No') %]
245           </label>
246         </div>
247       </div>
248       <div ng-if="hasMulti()">
249         <div
250           ng-if="working.MultiMap.opac_visible.length > 1 && working.opac_visible === undefined">
251           <eg-list-counts label="[% l('Multiple values') %]" 
252             list="working.MultiMap.opac_visible" render="labelYesNo" 
253             on-select="select_by_opac_visible"></eg-list-counts>
254         </div>
255       </div>
256     </li>
257     <li ng-if="defaults.attributes.circ_modifier">
258       <div class="bg-info"><label>[% l('Circulation Modifier') %]</label></div>
259       <div ng-class="{'bg-success': working.circ_modifier !== undefined, 'field-changed': field_changed('circ_modifier')}">
260         <select class="form-control"
261           ng-model="working.circ_modifier"
262           ng-options="m.code() as m.name() for m in circ_modifier_list | orderBy: 'name()'">
263           <option value="">[% l('&lt;NONE&gt;') %]</option>
264         </select>
265       </div>
266       <div ng-if="hasMulti()">
267         <div ng-if="working.MultiMap.circ_modifier.length > 1 && working.circ_modifier === undefined">
268           <eg-list-counts label="[% l('Multiple values') %]" 
269             list="working.MultiMap.circ_modifier" render="circmodName" 
270             on-select="select_by_circ_modifier"></eg-list-counts>
271         </div>
272       </div>
273     </li>
274     <li ng-if="defaults.attributes.price">
275       <div class="bg-info"><label>[% l('Price') %]</label></div>
276       <div ng-class="{'bg-success': working.price !== undefined, 'field-changed': field_changed('price')}">
277         <input class="form-control" str-to-float ng-model="working.price" 
278           type="number" step="0.01"/>
279       </div>
280       <div ng-if="hasMulti()">
281         <div ng-if="working.MultiMap.price.length > 1 && working.price === undefined">
282           <eg-list-counts label="[% l('Multiple prices') %]" 
283             list="working.MultiMap.price" on-select="select_by_price">
284           </eg-list-counts>
285         </div>
286       </div>
287     </li>
288     <li ng-if="defaults.attributes.loan_duration">
289       <div class="bg-info"><label>[% l('Loan Duration') %]</label></div>
290       <div ng-class="{'bg-success': working.loan_duration !== undefined, 'field-changed': field_changed('loan_duration')}">
291         <select class="form-control" int-to-str ng-model="working.loan_duration">
292           <option value="1">[% l('Short') %]</option>
293           <option value="2" selected>[% l('Normal') %]</option>
294           <option value="3">[% l('Extended') %]</option>
295         </select>
296       </div>
297       <div ng-if="hasMulti()">
298         <div ng-show="working.MultiMap.loan_duration.length > 1 && working.loan_duration === undefined">
299           <eg-list-counts label="[% l('Multiple durations') %]" 
300             list="working.MultiMap.loan_duration" render="durationLabel" 
301             on-select="select_by_loan_duration"></eg-list-counts>
302         </div>
303       </div>
304     </li>
305     <li ng-if="defaults.attributes.cost">
306       <div class="bg-info"><label>[% l('Acquisitions Cost') %]</label></div>
307       <div ng-class="{'bg-success': working.cost !== undefined, 'field-changed': field_changed('cost')}">
308         <input class="form-control" str-to-float ng-model="working.cost" 
309           type="number" step="0.01"/>
310       </div>
311       <div ng-if="hasMulti()">
312         <div ng-if="working.MultiMap.cost.length > 1 && working.cost === undefined">
313           <eg-list-counts label="[% l('Multiple costs') %]" 
314             list="working.MultiMap.cost" on-select="select_by_cost">
315           </eg-list-counts>
316         </div>
317       </div>
318     </li>
319     <li ng-if="defaults.attributes.circ_as_type">
320       <div class="bg-info"><label>[% l('Circulate as Type') %]</label></div>
321       <div ng-class="{'bg-success': working.circ_as_type !== undefined, 'field-changed': field_changed('circ_as_type')}">
322         <select class="form-control" ng-model="working.circ_as_type"
323           ng-options="t.code() as t.value() for t in circ_type_list">
324           <option value="">[% l('&lt;NONE&gt;') %]</option>
325         </select>
326       </div>
327       <div ng-if="hasMulti()">
328         <div ng-if="working.MultiMap.circ_as_type.length > 1 && working.circ_as_type === undefined">
329           <eg-list-counts label="[% l('Multiple types') %]" 
330             list="working.MultiMap.circ_as_type" render="circTypeValue" 
331             on-select="select_by_circ_as_type">
332           </eg-list-counts>
333         </div>
334       </div>
335     </li>
336     <li ng-if="defaults.attributes.holdable">
337       <div class="bg-info"><label>[% l('Holdable?') %]</label></div>
338       <div ng-class="{'bg-success': working.holdable !== undefined, 'field-changed': field_changed('holdable')}">
339         <div class="col-lg-6">
340           <label>
341             <input type="radio" ng-model="working.holdable" value="t"/>
342             [% l('Yes') %]
343           </label>
344         </div>
345         <div class="col-lg-6">
346           <label>
347             <input type="radio" ng-model="working.holdable" value="f"/>
348             [% l('No') %]
349           </label>
350         </div>
351       </div>
352       <div ng-if="hasMulti()">
353         <div ng-show="working.MultiMap.holdable.length > 1 && working.holdable === undefined">
354           <eg-list-counts label="[% l('Multiple values') %]" 
355             list="working.MultiMap.holdable" render="labelYesNo" 
356             on-select="select_by_holdable"></eg-list-counts>
357         </div>
358       </div>
359     </li>
360     <li ng-if="defaults.attributes.deposit">
361       <div class="bg-info"><label>[% l('Deposit?') %]</label></div>
362       <div ng-class="{'bg-success': working.deposit !== undefined, 'field-changed': field_changed('deposit')}">
363         <div class="col-lg-6">
364           <label>
365             <input type="radio" ng-model="working.deposit" value="t"/>
366             [% l('Yes') %]
367           </label>
368         </div>
369         <div class="col-lg-6">
370           <label>
371             <input type="radio" ng-model="working.deposit" value="f"/>
372             [% l('No') %]
373           </label>
374         </div>
375       </div>
376       <div ng-if="hasMulti()">
377         <div ng-if="working.MultiMap.deposit.length > 1 && working.deposit === undefined">
378           <eg-list-counts label="[% l('Multiple values') %]" 
379             list="working.MultiMap.deposit" render="labelYesNo" 
380             on-select="select_by_deposit"></eg-list-counts>
381         </div>
382       </div>
383     </li>
384     <li ng-if="defaults.attributes.deposit_amount">
385       <div class="bg-info"><label>[% l('Deposit Amount') %]</label></div>
386       <div ng-class="{'bg-success': working.deposit_amount !== undefined, 'field-changed': field_changed('deposit_amount')}">
387         <input class="form-control" str-to-float 
388           ng-model="working.deposit_amount" type="number" step="0.01"/>
389       </div>
390       <div ng-if="hasMulti()">
391         <div ng-if="working.MultiMap.deposit_amount.length > 1 && working.deposit_amount === undefined">
392           <eg-list-counts label="[% l('Multiple amounts') %]" 
393             list="working.MultiMap.deposit_amount" 
394             on-select="select_by_deposit_amount"></eg-list-counts>
395         </div>
396       </div>
397     </li>
398     <li ng-if="defaults.attributes.age_protect">
399       <div class="bg-info"><label>[% l('Age-based Hold Protection') %]</label></div>
400       <div ng-class="{'bg-success': working.age_protect !== undefined, 'field-changed': field_changed('age_protect')}">
401         <select class="form-control"
402           ng-model="working.age_protect"
403           ng-options="a.id() as a.name() for a in age_protect_list">
404           <option value="">[% l('&lt;NONE&gt;') %]</option>
405         </select>
406       </div>
407       <div ng-if="hasMulti()">
408         <div ng-if="working.MultiMap.age_protect.length > 1 && working.age_protect === undefined">
409           <eg-list-counts label="[% l('Multiple values') %]" 
410             list="working.MultiMap.age_protect" render="ageprotectName" 
411             on-select="select_by_age_protect"></eg-list-counts>
412         </div>
413       </div>
414     </li>
415     <li ng-if="defaults.attributes.mint_condition">
416       <div class="bg-info"><label>[% l('Quality') %]</label></div>
417       <div ng-class="{'bg-success': working.mint_condition !== undefined, 'field-changed': field_changed('mint_condition')}">
418         <div class="col-lg-6">
419           <label>
420             <input type="radio" ng-model="working.mint_condition" value="t"/>
421             [% l('Good') %]
422           </label>
423         </div>
424         <div class="col-lg-6">
425           <label>
426             <input type="radio"ng-model="working.mint_condition" value="f"/>
427             [% l('Damaged') %]
428           </label>
429         </div>
430       </div>
431       <div ng-if="hasMulti()">
432         <div ng-if="working.MultiMap.mint_condition.length > 1 && working.mint_condition === undefined">
433           <eg-list-counts label="[% l('Multiple values') %]" 
434             list="working.MultiMap.mint_condition" render="labelYesNo" 
435             on-select="select_by_mint_condition"></eg-list-counts>
436         </div>
437       </div>
438     </li>
439     <li ng-if="defaults.attributes.fine_level">
440       <div class="bg-info"><label>[% l('Fine Level') %]</label></div>
441       <div ng-class="{'bg-success': working.fine_level !== undefined, 'field-changed': field_changed('fine_level')}">
442         <select class="form-control" int-to-str ng-model="working.fine_level">
443           <option value="1">[% l('Low') %]</option>
444           <option value="2" selected>[% l('Normal') %]</option>
445           <option value="3">[% l('High') %]</option>
446         </select>
447       </div>
448       <div ng-if="hasMulti()">
449         <div ng-if="working.MultiMap.fine_level.length > 1 && working.fine_level === undefined">
450           <eg-list-counts label="[% l('Multiple levels') %]" 
451             list="working.MultiMap.fine_level" render="fineLabel" 
452             on-select="select_by_fine_level"></eg-list-counts>
453         </div>
454       </div>
455     </li>
456     <li ng-if="defaults.copy_notes">
457       <div class="bg-info"><label>[% l('Item Notes') %]</label></div>
458       <div ng-class="{'bg-success': working.copy_notes !== undefined}">
459         <button class="btn btn-default" type="button"
460           ng-click="copy_notes_dialog(workingGridControls.selectedItems())">
461           [% l('Item Notes') %]
462         </button>
463       </div>
464       <div ng-if="hasMulti()"> </div>
465     </li>
466     <li ng-if="defaults.attributes.alerts">
467       <div class="bg-info"><label>[% l('Item Alerts') %]</label></div>
468       <div ng-class="{'bg-success': working.alerts !== undefined}">
469         <button class="btn btn-default" type="button"
470           ng-click="copy_alerts_dialog(workingGridControls.selectedItems())">
471           [% l('Item Alerts') %]
472         </button>
473       </div>
474       <div ng-if="hasMulti()"> </div>
475     </li>
476     <li ng-if="defaults.attributes.floating">
477       <div class="bg-info"><label>[% l('Floating') %]</label></div>
478       <div ng-class="{'bg-success': working.floating !== undefined, 'field-changed': field_changed('floating')}">
479         <select class="form-control" ng-model="working.floating"
480           ng-options="a.id() as a.name() for a in floating_list">
481           <option value="">[% l('&lt;NONE&gt;') %]</option>
482         </select>
483       </div>
484       <div ng-if="hasMulti()">
485         <div ng-if="working.MultiMap.floating.length > 1 && working.floating === undefined">
486           <eg-list-counts label="[% l('Multiple values') %]" 
487             list="working.MultiMap.floating" render="floatingName" 
488             on-select="select_by_floating"></eg-list-counts>
489         </div>
490       </div>
491     </li>
492     <li ng-if="defaults.copy_tags">
493       <div class="bg-info"><label>[% l('Item Tags') %]</label></div>
494       <div ng-class="{'bg-success': working.copy_tags !== undefined}">
495         <button
496           class="btn btn-default"
497           ng-click="copy_tags_dialog(workingGridControls.selectedItems())"
498           type="button">
499           [% l('View/Edit Item Tags') %]
500         </button>
501       </div>
502       <div ng-if="hasMulti()"> </div>
503     </li>
504     <li ng-if="defaults.statcats">
505       <div class="bg-info"><label>[% l('Statistical Categories') %]</label></div>
506       <div>
507         <select class="form-control" ng-disabled="!defaults.statcats"
508           ng-model="working.statcat_filter"
509           ng-options="o.id() as o.shortname() for o in statcat_filter_list">
510           <option value="">[% l('Filter by Library') %]</option>
511         </select>
512       </div>
513       <div ng-if="hasMulti()"> </div>
514     </li>
515
516     <li ng-repeat="sc in statcats | orderBy:['owner().name()','name()']" ng-if="statcat_visible(sc.owner().id())">
517       <div class="bg-info"><label>{{sc.owner().name() }} : {{ sc.name()}}</label></div>
518       <div ng-class="{'bg-success': working.statcats[sc.id()] !== undefined}">
519         <select class="form-control" ng-disabled="!defaults.statcats"
520           ng-change="statcatUpdate(sc.id())"
521           ng-model="working.statcats[sc.id()]"
522           ng-options="e.id() as e.value() for e in sc.entries()"
523           ng-required="sc.required() == 't' && !working.statcats_multi[sc.id()]">
524           <option value="">
525             {{ !working.statcats_multi[sc.id()] ? '[% l('&lt;NONE&gt;') %]' : '[% l('&lt;MULTIPLE&gt;') %]' }}
526           </option>
527         </select>
528       </div>
529       <div ng-if="hasMulti()"> </div>
530     </li>
531   </ul>
532 </div>
533 </form></div>