Bug 4162 The inventory tool lacks validation for barcodes
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / tools / inventory.tt
1 [% USE KohaDates %]
2 [% USE Branches %]
3 [% INCLUDE 'doc-head-open.inc' %]
4 <title>Koha &rsaquo; Tools &rsaquo; Inventory</title>
5 [% INCLUDE 'doc-head-close.inc' %]
6 <link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
7 [% INCLUDE 'datatables.inc' %]
8 [% INCLUDE 'calendar.inc' %]
9 <script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
10 <script type="text/javascript">
11 //<![CDATA[
12 function checkForm() {
13     if ( $('#uploadbarcodes').val() ) {
14         if ( !(
15             $('#branchloop').val()   ||
16             $('#locationloop').val() ||
17             $('#minlocation').val()  ||
18             $('#maxlocation').val()  ||
19             $('#statuses input:checked').length
20         ) ) {
21             return confirm(
22                 _("You have not selected any catalog filters and are about to compare a file of barcodes to your entire catalog.") + "\n\n" +
23                 _("For large catalogs this can result in unexpected behavior") + "\n\n" +
24                 _("Are you sure you want to do this?")
25             );
26         }
27     }
28
29     return true;
30 }
31
32 $(document).ready(function(){
33         inventorydt = $('#inventoryt').dataTable($.extend(true, {}, dataTablesDefaults, {
34             'sPaginationType': 'full_numbers',
35             [% IF compareinv2barcd %]
36                 "aoColumnDefs": [ { "bSortable": false, "aTargets": [ 1 ] } ],
37             [% ELSE %]
38                 "aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] } ],
39             [% END %]
40             'fnDrawCallback': function() {
41                 //bind the click handler script to the newly created elements held in the table
42                 $('.openWin').bind('click',function(e){
43                     e.preventDefault();
44                     openWindow(this.href,'marcview',800,600);
45                 });
46             }
47         } ));
48
49
50         $("#continuewithoutmarkingbutton").click(function(){
51             inventorydt.fnPageChange( 'next' );
52             return false;
53         });
54
55         $("#markseenandcontinuebutton").click(function(){
56             var param = '';
57             $("input:checked").each(function() {
58                 param += "|" + $(this).attr('name');
59             });
60             $.post('/cgi-bin/koha/tools/ajax-inventory.pl', { seen: param });
61             inventorydt.fnPageChange( 'next' );
62             return false;
63         });
64
65         $("#markseenandquit").click(function(){
66             var param = '';
67             $("input:checked").each(function() {
68                 param += "|" + $(this).attr('name');
69             });
70             $.ajax({
71               type: 'POST',
72               url: '/cgi-bin/koha/tools/ajax-inventory.pl',
73               data: { seen: param},
74               async: false
75             });
76             document.location.href = '/cgi-bin/koha/tools/inventory.pl';
77             return false;
78         });
79
80
81     $(".checkall").click(function(){
82             $(".checkboxed").checkCheckboxes();
83             return false;
84         });
85     $(".clearall").click(function(){
86             $(".checkboxed").unCheckCheckboxes();
87             return false;
88         });
89 });
90 //]]>
91 </script>
92 </head>
93 <body id="tools_inventory" class="tools">
94 [% INCLUDE 'header.inc' %]
95 [% INCLUDE 'cat-search.inc' %]
96
97 <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>
98
99 <div id="doc3" class="yui-t2">
100
101    <div id="bd">
102     <div id="yui-main">
103     <div class="yui-b">
104     <h1>Inventory/Stocktaking</h1>
105     [% IF (moddatecount) %]<div class="dialog message">[% moddatecount %] items modified : datelastseen set to [% date | $KohaDates %]</div>
106     <div class="dialog alert">Number of potential barcodes read: [% LinesRead %]</div>[% END %]
107     [% IF (errorfile) %]<div class="dialog alert">[% errorfile %] can't be opened</div>[% END %]
108     [% IF (err_length && err_length==1) %]<div class="dialog alert">There was 1 barcode that was too long.</div>[% END %]
109     [% IF (err_length && err_length>1) %]<div class="dialog alert">There were [% err_length %] barcodes that were too long.</div>[% END %]
110     [% IF (err_data && err_data==1) %]<div class="dialog alert">There was 1 barcode that contained at least one unprintable character.</div>[% END %]
111     [% IF (err_data && err_data>1) %]<div class="dialog alert">There were [% err_data %] barcodes that contained at least one unprintable character.</div>[% END %]
112     [% FOREACH error IN errorloop %]
113         <div class="dialog alert">
114             [% error.barcode %]
115             [% IF (error.ERR_BARCODE) %]: barcode not found[% END %]
116             [% IF (error.ERR_WTHDRAWN) %]: item withdrawn[% END %]
117             [% IF (error.ERR_ONLOAN_RET) %]: item was on loan. It was returned before marked as seen[% END %]
118             [% IF (error.ERR_ONLOAN_NOT_RET) %]: item was on loan. couldn't be returned.[% END %]
119         </div>
120     [% END %]
121        [% UNLESS op %]
122     <div class="yui-g">
123     <form method="post" action="/cgi-bin/koha/tools/inventory.pl" enctype="multipart/form-data" onsubmit="return checkForm()">
124         <fieldset class="rows">
125             <legend>Use a barcode file</legend>
126      <ol>
127             <li><label for="uploadbarcodes">Barcode file: </label> <input type="file" id="uploadbarcodes" name="uploadbarcodes" /></li>
128             <li><label for="setdate">Set inventory date to:</label> <input type="text" id="setdate" name="setdate" value="[% today | $KohaDates %]" class="datepickerfrom" />
129             </li>
130           </ol>
131         </fieldset>
132
133         <fieldset class="rows">
134         <legend>Select items you want to check</legend>
135         <ol><li>
136         <label for="branch">Library: </label>
137             <input type="radio" name="branch" value="homebranch"> Home library</input>
138             <input type="radio" name="branch" value="holdingbranch"> Current library</input>
139         </li><li>
140         <label for="branchloop">Library: </label><select id="branchloop" name="branchcode" style="width:12em;">
141             <option value="">All libraries</option>
142         [% FOREACH branchloo IN branchloop %]
143             [% IF ( branchloo.selected ) %]
144                 <option value="[% branchloo.value %]" selected="selected">[% branchloo.branchname %]</option>
145             [% ELSE %]
146                 <option value="[% branchloo.value %]">[% branchloo.branchname %]</option>
147             [% END %]
148         [% END %]
149         </select>
150         </li>
151         [% IF (authorised_values) %]
152         <li>
153             <label for="locationloop">Shelving location (items.location) is: </label>
154         <select id="locationloop" name="location">
155                 <option value="">Filter location</option>
156         [% FOREACH value IN authorised_values %]
157             [% IF (value.selected) %]
158                 <option value="[% value.authorised_value %]" selected="selected">[% value.lib %]</option>
159             [% ELSE %]
160                 <option value="[% value.authorised_value %]">[% value.lib %]</option>
161             [% END %]
162         [% END %]
163         </select>        </li>
164         [% END %]
165         <li>
166             <label for="minlocation">Item callnumber between: </label>
167                 <input type="text" name="minlocation" id="minlocation" value="[% minlocation %]" /> (items.itemcallnumber)  </li>
168            <li><label for="maxlocation">...and: </label>
169                 <input type="text" name="maxlocation" id="maxlocation" value="[% maxlocation %]" />
170         </li>
171         [% IF (statuses) %]
172     </ol>
173     </fieldset>
174             <fieldset class="rows">
175             <legend>Item statuses</legend>
176             <div id="statuses" style="display: block;">
177                   [% FOREACH status IN statuses %]
178                       [% IF (status.values) %]
179                           <fieldset style="float: left; padding: 5px; margin: 5px;text-align:right">
180                               <legend>[% status.fieldname %]</legend>
181                               <ul id="statuses-[% fieldname %]" style="display: inline;">
182                               [% FOREACH value IN status.values %]
183                                   [% IF (value.lib) %]<li>
184                                     <label for="[% value.id %]">
185                                       [% value.lib %]
186                                     </label>
187                                     <input type="checkbox" name="status-[% status.fieldname %]-[% value.authorised_value %]" id="[% value.authorised_value %]" />
188                                   </li>[% END %]
189                               [% END %]
190                               </ul>
191                           </fieldset>
192                       [% END %]
193                   [% END %]
194                 </div>
195             </fieldset>
196         <fieldset class="rows">
197           <ol>
198         [% END %]
199
200         <li><label for="datelastseen">Inventory date:</label>
201             <input type="text" id="datelastseen" name="datelastseen" value="[% datelastseen | $KohaDates %]" class="datepickerfrom" />
202         </li>
203         <li><label for="ignoreissued">Skip items on loan: </label>
204             [% IF (ignoreissued) %]
205             <input type="checkbox" id="ignoreissued" name="ignoreissued" checked="checked" /></li>
206             [% ELSE %]
207             <input type="checkbox" id="ignoreissued" name="ignoreissued" /></li>
208             [% END %]
209         <li>
210            <label for="CSVexport">Export to CSV file: </label>
211            <input type="checkbox" name="CSVexport" id="CSVexport" />
212         </li>
213         <li>
214             <label for="compareinv2barcd">Compare barcodes list to results: </label>
215             <input type="checkbox" name="compareinv2barcd" id="compareinv2barcd" />
216         </li>
217         </ol>
218   </fieldset>
219             <input type="hidden" name="op" value="do_it" />
220
221             <fieldset class="action"><input type="submit" value="Submit" class="button" /></fieldset>
222     </form>
223     </div>
224     </div>
225     [% END %]
226     [% IF (op) %]
227     <form method="post" action="/cgi-bin/koha/tools/inventory.pl" class="checkboxed">
228     <input type="hidden" name="markseen" value="1" />
229     <input type="hidden" name="minlocation" value="[% minlocation %]" />
230     <input type="hidden" name="maxlocation" value="[% maxlocation %]" />
231     <input type="hidden" name="location" value="[% location %]" />
232     <input type="hidden" name="branchcode" value="[% branchcode %]" />
233     <input type="hidden" name="datelastseen" value="[% datelastseen %]" />
234
235     [% UNLESS compareinv2barcd %]
236       <div><a href="#" class="checkall">[Select all]</a> <a href="#" class="clearall">[Clear all]</a></div>
237     [% END %]
238
239     <table id="inventoryt">
240     <thead>
241         <tr>
242             [% UNLESS compareinv2barcd %]<th>Seen</th>[% END %]
243             <th>Barcode</th>
244             <th>Library</th>
245             <th>Title</th>
246             <th>Status</th>
247             <th>Lost</th>
248             <th>Damaged</th>
249             <th>Unseen since</th>
250             <th>Problems</th>
251         </tr>
252     </thead>
253     <tbody>
254     [% FOREACH result IN loop %]
255         <tr>
256             [% UNLESS compareinv2barcd %]
257               <td>
258                 <input type="checkbox" name="SEEN-[% result.itemnumber %]" value="1" />
259               </td>
260             [% END %]
261             <td>
262             [% result.barcode | html %]
263             </td>
264             <td>
265                 [% Branches.GetName( result.homebranch ) %]
266                 [% result.location | html %] [% IF ( result.itemcallnumber ) %][[% result.itemcallnumber | html %]][% ELSE %][% END %]
267             </td>
268             <td>
269             <p><a href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% result.biblionumber %]" class="openWin">[% result.title | html %]</a></p><p>[% result.author | html %]</p>
270             </td>
271             <td>
272             [% result.notforloan | html %]
273             </td>
274             <td>
275             [% result.itemlost | html %]
276             </td>
277             <td>
278             [% result.damaged | html %]
279             </td>
280             <td>
281             [% result.datelastseen | $KohaDates | html %]
282             </td>
283             <td>
284             [% IF result.problem == 'wrongplace' %]
285                 <p>Item should not have been scanned</p>
286             [% ELSIF result.problem == 'missingitem' %]
287                 <p>Item missing</p>
288             [% ELSIF result.problem == 'changestatus' %]
289                 <p>Change item status</p>
290             [% ELSIF result.problem == 'not_scanned' %]
291                 <p>Item should have been scanned</p>
292             [% END %]
293             </td>
294         </tr>
295     [% END %]
296     </tbody>
297     </table>
298     <div class="spacer"></div>
299     [% UNLESS compareinv2barcd %]
300       <div style="padding : .3em 0"><a href="#" class="checkall">[Select all]</a> <a href="#" class="clearall">[Clear all]</a></div>
301       <input type="submit" id="markseenandquit" value="Mark seen and quit" />
302       <input type="submit" value="Mark seen and continue &gt;&gt;" id="markseenandcontinuebutton" />
303       <input type="submit" value="Continue without marking &gt;&gt;" id="continuewithoutmarkingbutton" class="submit" />
304     [% END %]
305     </form>
306
307     </div>
308
309     [% END %]
310 </div>
311 <div class="yui-b">
312 [% INCLUDE 'tools-menu.inc' %]
313 </div>
314 </div>
315 [% INCLUDE 'intranet-bottom.inc' %]