Bug 13618: Add html filters to all the variables
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / tools / inventory.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE KohaDates %]
4 [% USE Branches %]
5 [% SET footerjs = 1 %]
6 [% INCLUDE 'doc-head-open.inc' %]
7 <title>Koha &rsaquo; Tools &rsaquo; Inventory</title>
8 [% INCLUDE 'doc-head-close.inc' %]
9 [% Asset.css("css/datatables.css") | $raw %]
10 </head>
11
12 <body id="tools_inventory" class="tools">
13 [% INCLUDE 'header.inc' %]
14 [% INCLUDE 'cat-search.inc' %]
15
16 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> &rsaquo; [% IF (loop) %]<a href="/cgi-bin/koha/tools/inventory.pl">Inventory</a> &rsaquo; Results[% ELSE %]Inventory[% END %]</div>
17
18 <div id="doc3" class="yui-t2">
19
20    <div id="bd">
21     <div id="yui-main">
22     <div class="yui-b">
23     <h1>Inventory</h1>
24     [% IF (moddatecount) %]<div class="dialog message">[% moddatecount | html %] items modified : datelastseen set to [% date | $KohaDates %]</div>
25     <div class="dialog alert">Number of potential barcodes read: [% LinesRead | html %]</div>[% END %]
26     [% IF (errorfile) %]<div class="dialog alert">[% errorfile | html %] can't be opened</div>[% END %]
27     [% IF (err_length && err_length==1) %]<div class="dialog alert">There was 1 barcode that was too long.</div>[% END %]
28     [% IF (err_length && err_length>1) %]<div class="dialog alert">There were [% err_length | html %] barcodes that were too long.</div>[% END %]
29     [% IF (err_data && err_data==1) %]<div class="dialog alert">There was 1 barcode that contained at least one unprintable character.</div>[% END %]
30     [% IF (err_data && err_data>1) %]<div class="dialog alert">There were [% err_data | html %] barcodes that contained at least one unprintable character.</div>[% END %]
31     [% FOREACH error IN errorloop %]
32         <div class="dialog alert">
33             [% error.barcode | html %]
34             [% IF (error.ERR_BARCODE) %]: barcode not found[% END %]
35             [% IF (error.ERR_WTHDRAWN) %]: item withdrawn[% END %]
36             [% IF (error.ERR_ONLOAN_RET) %]: item was on loan. It was returned before marked as seen[% END %]
37             [% IF (error.ERR_ONLOAN_NOT_RET) %]: item was on loan. couldn't be returned.[% END %]
38         </div>
39     [% END %]
40        [% UNLESS op %]
41     <div class="yui-g">
42     <form method="post" id="inventory_form" action="/cgi-bin/koha/tools/inventory.pl" enctype="multipart/form-data">
43         <fieldset class="rows">
44           <legend>Use a barcode file</legend>
45           <ol>
46             <li><label for="uploadbarcodes">Barcode file: </label> <input type="file" id="uploadbarcodes" name="uploadbarcodes" /></li>
47             <li><label for="setdate">Set inventory date to:</label> <input type="text" id="setdate" name="setdate" value="[% today | $KohaDates %]" class="datepicker" disabled /></li>
48             <li><label for="compareinv2barcd">Compare barcodes list to results: </label><input type="checkbox" name="compareinv2barcd" id="compareinv2barcd" disabled /></li>
49             <li><label for="dont_checkin">Do not check in items scanned during inventory: </label><input type="checkbox" name="dont_checkin" id="dont_checkin" disabled /></li>
50           </ol>
51         </fieldset>
52
53         <fieldset class="rows">
54         <legend>Item location filters</legend>
55         <ol><li>
56         <label for="branch">Library: </label>
57             <input type="radio" name="branch" value="homebranch"> Home library</input>
58             <input type="radio" name="branch" value="holdingbranch"> Current library</input>
59         </li><li>
60         <label for="branchloop">Library: </label><select id="branchloop" name="branchcode" style="width:12em;">
61             <option value="">All libraries</option>
62             [% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode, unfiltered => 1, ) %]
63         </select>
64         </li>
65         [% IF (authorised_values) %]
66         <li>
67             <label for="locationloop">Shelving location (items.location) is: </label>
68         <select id="locationloop" name="location">
69                 <option value="">Filter location</option>
70         [% FOREACH value IN authorised_values %]
71             [% IF (value.selected) %]
72                 <option value="[% value.authorised_value | html %]" selected="selected">[% value.lib | html %]</option>
73             [% ELSE %]
74                 <option value="[% value.authorised_value | html %]">[% value.lib | html %]</option>
75             [% END %]
76         [% END %]
77         </select>        </li>
78         [% END %]
79         <li>
80             <label for="minlocation">Item callnumber between: </label>
81                 <input type="text" name="minlocation" id="minlocation" value="[% minlocation | html %]" /> (items.itemcallnumber)  </li>
82            <li><label for="maxlocation">...and: </label>
83                 <input type="text" name="maxlocation" id="maxlocation" value="[% maxlocation | html %]" />
84         </li>
85     </ol>
86     </fieldset>
87
88     <fieldset class="rows" id="optionalfilters">
89             <legend>Optional filters for inventory list or comparing barcodes</legend>
90             <br/>
91             <div id="statuses" style="display: block;">
92                   [% FOREACH status IN statuses %]
93                       [% IF (status.values) %]
94                           <fieldset style="float: left; padding: 5px; margin: 5px;text-align:right">
95                               <legend>[% status.fieldname | html %]</legend>
96                               <ul id="statuses-[% fieldname | html %]" style="display: inline;">
97                               [% FOREACH value IN status.values %]
98                                   [% IF (value.lib) %]
99                                     <li>
100                                     <label for="[% value.id | html %]">
101                                         [% IF value.authorised_value==0 %]
102                                             For loan
103                                         [% ELSE %]
104                                             [% value.lib | html %]
105                                         [% END %]
106                                     </label>
107                                     <input type="checkbox" name="status-[% status.fieldname | html %]-[% value.authorised_value | html %]" id="[% value.authorised_value | html %]" />
108                                     </li>
109                                   [% END %]
110                               [% END %]
111                               </ul>
112                           </fieldset>
113                       [% END %]
114                   [% END %]
115                 </div>
116         <ol>
117         <li>
118             <br/>
119             <label for="datelastseen">Last inventory date:</label>
120             <input type="text" id="datelastseen" name="datelastseen" value="[% datelastseen | $KohaDates %]" class="datepicker" />
121             (Skip records marked as seen on or after this date.)
122         </li>
123         <li>
124             <label for="ignoreissued">Skip items on loan: </label>
125             [% IF (ignoreissued) %]
126                 <input type="checkbox" id="ignoreissued" name="ignoreissued" checked="checked" />
127             [% ELSE %]
128                 <input type="checkbox" id="ignoreissued" name="ignoreissued" />
129             [% END %]
130         </li>
131         </ol>
132     </fieldset>
133
134         <fieldset class="rows">
135           <legend>Additional options</legend>
136           <ol>
137
138         <li>
139            <label for="CSVexport">Export to CSV file: </label>
140            <input type="checkbox" name="CSVexport" id="CSVexport" />
141         </li>
142         </ol>
143   </fieldset>
144             <input type="hidden" name="op" value="do_it" />
145
146             <fieldset class="action"><input type="submit" value="Submit" class="button" /></fieldset>
147     </form>
148     </div>
149     </div>
150     [% END %]
151     [% IF (op) %]
152     <form method="post" action="/cgi-bin/koha/tools/inventory.pl" class="checkboxed">
153     <input type="hidden" name="minlocation" value="[% minlocation | html %]" />
154     <input type="hidden" name="maxlocation" value="[% maxlocation | html %]" />
155     <input type="hidden" name="location" value="[% location | html %]" />
156     <input type="hidden" name="branchcode" value="[% branchcode | html %]" />
157     <input type="hidden" name="datelastseen" value="[% datelastseen | html %]" />
158
159     [% UNLESS uploadedbarcodesflag %]
160       <div><a href="#" class="checkall"><i class="fa fa-check"></i> Select all</a> <a href="#" class="clearall"><i class="fa fa-remove"></i> Clear all</a></div>
161     [% END %]
162
163     <table id="inventoryt">
164     <thead>
165         <tr>
166             [% UNLESS uploadedbarcodesflag %]<th>Seen</th>[% END %]
167             <th>Barcode</th>
168             <th>Call number</th>
169             <th>Library</th>
170             <th>Title</th>
171             <th>Not for loan</th>
172             <th>Lost</th>
173             <th>Damaged</th>
174             <th>Withdrawn</th>
175             <th>Last seen</th>
176             <th>Problems</th>
177         </tr>
178     </thead>
179     <tbody>
180     [% FOREACH result IN loop %]
181         <tr>
182             [% UNLESS uploadedbarcodesflag %]
183               <td>
184                 <input type="checkbox" name="SEEN-[% result.itemnumber | html %]" value="1" />
185               </td>
186             [% END %]
187             <td>
188             [% result.barcode | html %]
189             </td>
190             <td>[% result.itemcallnumber | html %]</td>
191             <td>
192                 [% Branches.GetName( result.homebranch ) | html %]
193                 <span class="shelvingloc">[% result.location | html %]</span>
194             </td>
195             <td>
196                 <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% result.biblionumber | html %]" class="openWin">[% result.title | html %]</a>
197                 [% IF ( result.author ) %]
198                     by <span class="author">[% result.author | html %]</span>
199                 [% END %]
200             </td>
201             <td>
202             [% result.notforloan | html %]
203             </td>
204             <td>
205             [% result.itemlost | html %]
206             </td>
207             <td>
208             [% result.damaged | html %]
209             </td>
210             <td>
211             [% result.withdrawn | html %]
212             </td>
213             <td>
214             [% result.datelastseen | $KohaDates %]
215             </td>
216             <td>
217             [% FOREACH problem IN result.problems %]
218                 [% IF problem.key == 'wrongplace' %]
219                     Found in wrong place<br/>
220                 [% ELSIF problem.key == 'changestatus' %]
221                     Unknown not-for-loan status<br/>
222                 [% ELSIF problem.key == 'not_scanned' %]
223                     Missing (not scanned)<br/>
224                 [% ELSIF problem.key == 'checkedout' %]
225                     Still checked out<br/>
226                 [% ELSIF problem.key == 'no_barcode' %]
227                     No barcode<br/>
228                 [% END %]
229             [% END %]
230             </td>
231         </tr>
232     [% END %]
233     </tbody>
234     </table>
235     <div class="spacer"></div>
236     [% UNLESS uploadedbarcodesflag %]
237       <div style="padding : .3em 0"><a href="#" class="checkall"><i class="fa fa-check"></i> Select all</a> <a href="#" class="clearall"><i class="fa fa-remove"></i> Clear all</a></div>
238       <input type="submit" id="markseenandquit" value="Mark seen and quit" />
239       <input type="submit" value="Mark seen and continue &gt;&gt;" id="markseenandcontinuebutton" />
240       <input type="submit" value="Continue without marking &gt;&gt;" id="continuewithoutmarkingbutton" class="submit" />
241     [% END %]
242     </form>
243
244     </div>
245
246     [% END %]
247 </div>
248 <div class="yui-b">
249 [% INCLUDE 'tools-menu.inc' %]
250 </div>
251 </div>
252
253 [% MACRO jsinclude BLOCK %]
254     [% Asset.js("js/tools-menu.js") | $raw %]
255     [% INCLUDE 'datatables.inc' %]
256     [% INCLUDE 'calendar.inc' %]
257     [% Asset.js("lib/jquery/plugins/jquery.checkboxes.min.js") | $raw %]
258     <script type="text/javascript">
259         function checkForm() {
260             if ( $('#uploadbarcodes').val() ) {
261                 if ( !(
262                     $('#branchloop').val()   ||
263                     $('#locationloop').val() ||
264                     $('#minlocation').val()  ||
265                     $('#maxlocation').val()  ||
266                     $('#statuses input:checked').length
267                 ) ) {
268                     return confirm(
269                         _("You have not selected any catalog filters and are about to compare a file of barcodes to your entire catalog.") + "\n\n" +
270                         _("For large catalogs this can result in unexpected behavior") + "\n\n" +
271                         _("Are you sure you want to do this?")
272                     );
273                 }
274             }
275
276             return true;
277         }
278
279         $(document).ready(function(){
280             inventorydt = $('#inventoryt').dataTable($.extend(true, {}, dataTablesDefaults, {
281                 'sPaginationType': 'full_numbers',
282                 [% IF compareinv2barcd %]
283                     // sort on callnumber
284                     "aaSorting": [[ 1, "asc" ]],
285                 [% ELSE %]
286                     // first column contains checkboxes
287                     "aoColumnDefs": [
288                         { "bSortable": false, "bSearchable": false, "aTargets": [ 0 ] },
289                     ],
290                     // 3rd column is callnumber
291                     "aaSorting": [[ 2, "asc" ]],
292                 [% END %]
293                 'fnDrawCallback': function() {
294                     //bind the click handler script to the newly created elements held in the table
295                     $('.openWin').bind('click',function(e){
296                         e.preventDefault();
297                         openWindow(this.href,'marcview',800,600);
298                     });
299                 }
300             } ));
301
302
303             $("#continuewithoutmarkingbutton").click(function(){
304                 inventorydt.fnPageChange( 'next' );
305                 return false;
306             });
307
308             $("#markseenandcontinuebutton").click(function(){
309                 var param = '';
310                 $("input:checked").each(function() {
311                     param += "|" + $(this).attr('name');
312                 });
313                 $.post('/cgi-bin/koha/tools/ajax-inventory.pl', { seen: param });
314                 inventorydt.fnPageChange( 'next' );
315                 return false;
316             });
317
318             $("#markseenandquit").click(function(){
319                 var param = '';
320                 $("input:checked").each(function() {
321                     param += "|" + $(this).attr('name');
322                 });
323                 $.ajax({
324                   type: 'POST',
325                   url: '/cgi-bin/koha/tools/ajax-inventory.pl',
326                   data: { seen: param},
327                   async: false
328                 });
329                 document.location.href = '/cgi-bin/koha/tools/inventory.pl';
330                 return false;
331             });
332
333
334             $(".checkall").click(function(){
335                     $(".checkboxed").checkCheckboxes();
336                     return false;
337                 });
338             $(".clearall").click(function(){
339                     $(".checkboxed").unCheckCheckboxes();
340                     return false;
341                 });
342             $("#inventory_form").on("submit",function(){
343                 return checkForm();
344             });
345
346             // #uploadbarcodes and #compareinv2barcd determine the behavior of
347             // the controls within the barcode fieldset and the optional filters
348             $("#uploadbarcodes").change(function() {
349                 if( $("#uploadbarcodes").val() ) {
350                     $("#setdate").prop('disabled',false);
351                     $("#compareinv2barcd").prop('disabled',false);
352                     $("#compareinv2barcd").attr('checked',true); // default
353                     $("#dont_checkin").prop('disabled',false);
354                     if( $("#compareinv2barcd").attr('checked') ) {
355                         $("fieldset#optionalfilters").show();
356                         $("#ignoreissued").attr('checked',true); // default
357                     } else {
358                         $("fieldset#optionalfilters").hide();
359                         $("#ignoreissued").attr('checked',false);
360                     }
361                 } else {
362                     $("#setdate").prop('disabled',true);
363                     $("#compareinv2barcd").prop('disabled',true);
364                     $("#compareinv2barcd").attr('checked',false);
365                     $("#dont_checkin").prop('disabled',true);
366                     $("#dont_checkin").attr('checked',false);
367                     $("fieldset#optionalfilters").show();
368                 }
369             });
370             $("#compareinv2barcd").click(function() {
371                 if( $("#compareinv2barcd").attr('checked') ) {
372                     $("fieldset#optionalfilters").show();
373                     $("#ignoreissued").attr('checked',true); // default
374                 } else {
375                     $("#ignoreissued").attr('checked',false);
376                     $("fieldset#optionalfilters").hide();
377                 }
378             });
379         });
380     </script>
381 [% END %]
382
383 [% INCLUDE 'intranet-bottom.inc' %]