+[% USE KohaDates %]
+[% USE Branches %]
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha › Tools › Inventory</title>
[% INCLUDE 'doc-head-close.inc' %]
+<link rel="stylesheet" type="text/css" href="[% interface %]/[% theme %]/css/datatables.css" />
+[% INCLUDE 'datatables.inc' %]
[% INCLUDE 'calendar.inc' %]
-<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
+<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
<script type="text/javascript">
//<![CDATA[
+function checkForm() {
+ if ( $('#uploadbarcodes').val() ) {
+ if ( !(
+ $('#branchloop').val() ||
+ $('#locationloop').val() ||
+ $('#minlocation').val() ||
+ $('#maxlocation').val() ||
+ $('#statuses input:checked').length
+ ) ) {
+ return confirm(
+ _("You have not selected any catalog filters and are about to compare a file of barcodes to your entire catalog.") + "\n\n" +
+ _("For large catalogs this can result in unexpected behavior") + "\n\n" +
+ _("Are you sure you want to do this?")
+ );
+ }
+ }
+
+ return true;
+}
+
$(document).ready(function(){
- $(".checkall").click(function(){
- $(".checkboxed").checkCheckboxes();
- return false;
- });
- $(".clearall").click(function(){
- $(".checkboxed").unCheckCheckboxes();
- return false;
- });
-[% IF ( offset ) %]$("#markseen").before("<input type=\"submit\" value=\"<< Mark Seen and Continue\" id=\"markback\" />");[% END %]
-[% IF ( nextoffset ) %]$("#markseen").after("<input type=\"submit\" id=\"marknext\" value=\"Mark Seen and Continue >>\" />");[% END %]
- $("#markback").click(function(){
- $(".checkboxed").find("input").filter("[name=offset]").attr("value","[% prevoffset %]");
- return true;
- });
- $("#marknext").click(function(){
- $(".checkboxed").find("input").filter("[name=offset]").attr("value","[% nextoffset %]");
- return true;
- });
- });
+ inventorydt = $('#inventoryt').dataTable($.extend(true, {}, dataTablesDefaults, {
+ 'sPaginationType': 'full_numbers',
+ [% IF compareinv2barcd %]
+ "aoColumnDefs": [ { "bSortable": false, "aTargets": [ 1 ] } ],
+ [% ELSE %]
+ "aoColumnDefs": [ { "bSortable": false, "aTargets": [ 0 ] } ],
+ [% END %]
+ 'fnDrawCallback': function() {
+ //bind the click handler script to the newly created elements held in the table
+ $('.openWin').bind('click',function(e){
+ e.preventDefault();
+ openWindow(this.href,'marcview',800,600);
+ });
+ }
+ } ));
+
+
+ $("#continuewithoutmarkingbutton").click(function(){
+ inventorydt.fnPageChange( 'next' );
+ return false;
+ });
+
+ $("#markseenandcontinuebutton").click(function(){
+ var param = '';
+ $("input:checked").each(function() {
+ param += "|" + $(this).attr('name');
+ });
+ $.post('/cgi-bin/koha/tools/ajax-inventory.pl', { seen: param });
+ inventorydt.fnPageChange( 'next' );
+ return false;
+ });
+
+ $("#markseenandquit").click(function(){
+ var param = '';
+ $("input:checked").each(function() {
+ param += "|" + $(this).attr('name');
+ });
+ $.ajax({
+ type: 'POST',
+ url: '/cgi-bin/koha/tools/ajax-inventory.pl',
+ data: { seen: param},
+ async: false
+ });
+ document.location.href = '/cgi-bin/koha/tools/inventory.pl';
+ return false;
+ });
+
+
+ $(".checkall").click(function(){
+ $(".checkboxed").checkCheckboxes();
+ return false;
+ });
+ $(".clearall").click(function(){
+ $(".checkboxed").unCheckCheckboxes();
+ return false;
+ });
+ $("#inventory_form").on("submit",function(){
+ return checkForm();
+ });
+});
//]]>
</script>
</head>
[% INCLUDE 'header.inc' %]
[% INCLUDE 'cat-search.inc' %]
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › [% IF ( loop ) %]<a href="/cgi-bin/koha/tools/inventory.pl">Inventory</a> › Results[% ELSE %]Inventory[% END %]</div>
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> › [% IF (loop) %]<a href="/cgi-bin/koha/tools/inventory.pl">Inventory</a> › Results[% ELSE %]Inventory[% END %]</div>
<div id="doc3" class="yui-t2">
-
+
<div id="bd">
- <div id="yui-main">
- <div class="yui-b">
- <h1>Inventory/Stocktaking</h1>
- [% IF ( Number ) %]<div class="dialog message">[% Number %] items modified : datelastseen set to [% date %]</div>[% END %]
- [% IF ( errorfile ) %]<div class="dialog alert">[% errorfile %] can't be opened</div>[% END %]
- [% FOREACH errorloo IN errorloop %]
+ <div id="yui-main">
+ <div class="yui-b">
+ <h1>Inventory</h1>
+ [% IF (moddatecount) %]<div class="dialog message">[% moddatecount %] items modified : datelastseen set to [% date | $KohaDates %]</div>
+ <div class="dialog alert">Number of potential barcodes read: [% LinesRead %]</div>[% END %]
+ [% IF (errorfile) %]<div class="dialog alert">[% errorfile %] can't be opened</div>[% END %]
+ [% IF (err_length && err_length==1) %]<div class="dialog alert">There was 1 barcode that was too long.</div>[% END %]
+ [% IF (err_length && err_length>1) %]<div class="dialog alert">There were [% err_length %] barcodes that were too long.</div>[% END %]
+ [% IF (err_data && err_data==1) %]<div class="dialog alert">There was 1 barcode that contained at least one unprintable character.</div>[% END %]
+ [% IF (err_data && err_data>1) %]<div class="dialog alert">There were [% err_data %] barcodes that contained at least one unprintable character.</div>[% END %]
+ [% FOREACH error IN errorloop %]
<div class="dialog alert">
- [% errorloo.barcode %]
- [% IF ( errorloo.ERR_BARCODE ) %]: barcode not found[% END %]
- [% IF ( errorloo.ERR_WTHDRAWN ) %]: item withdrawn[% END %]
- [% IF ( errorloo.ERR_ONLOAN_RET ) %]: item was on loan. It was returned before marked as seen[% END %]
- [% IF ( errorloo.ERR_ONLOAN_NOT_RET ) %]: item was on loan. couldn't be returned.[% END %]
+ [% error.barcode %]
+ [% IF (error.ERR_BARCODE) %]: barcode not found[% END %]
+ [% IF (error.ERR_WTHDRAWN) %]: item withdrawn[% END %]
+ [% IF (error.ERR_ONLOAN_RET) %]: item was on loan. It was returned before marked as seen[% END %]
+ [% IF (error.ERR_ONLOAN_NOT_RET) %]: item was on loan. couldn't be returned.[% END %]
</div>
[% END %]
- [% UNLESS ( loop ) %]
- <div class="yui-g">
- <form method="post" action="/cgi-bin/koha/tools/inventory.pl" enctype="multipart/form-data">
+ [% UNLESS op %]
+ <div class="yui-g">
+ <form method="post" id="inventory_form" action="/cgi-bin/koha/tools/inventory.pl" enctype="multipart/form-data">
<fieldset class="rows">
<legend>Use a barcode file</legend>
- <ol>
+ <ol>
<li><label for="uploadbarcodes">Barcode file: </label> <input type="file" id="uploadbarcodes" name="uploadbarcodes" /></li>
- <li><label for="setdate">Set inventory date to:</label> <input type="text" id="setdate" name="setdate" value="[% today %]" />
- <img src="[% themelang %]/lib/calendar/cal.gif" id="setdate_button" alt="Show Calendar" />
- <script type="text/javascript">
- Calendar.setup(
- {
- inputField : "setdate",
- ifFormat : "[% DHTMLcalendar_dateformat %]",
- button : "setdate_button"
- }
- );
- </script>
- <div class="hint">[% INCLUDE 'date-format.inc' %]</div>
+ <li><label for="setdate">Set inventory date to:</label> <input type="text" id="setdate" name="setdate" value="[% today | $KohaDates %]" class="datepickerfrom" />
</li>
</ol>
</fieldset>
+
<fieldset class="rows">
<legend>Select items you want to check</legend>
<ol><li>
- <label for="branch">Library</label>
- <input type="radio" name="branch" value="homebranch">Home library</input>
- <input type="radio" name="branch" value="holdingbranch">Current location</input>
+ <label for="branch">Library: </label>
+ <input type="radio" name="branch" value="homebranch"> Home library</input>
+ <input type="radio" name="branch" value="holdingbranch"> Current library</input>
</li><li>
- <label for="branchloop">Library</label><select id="branchloop" name="branchcode" style="width:12em;">
- <option value="">All Locations</option>
- [% FOREACH branchloo IN branchloop %]
- [% IF ( branchloo.selected ) %]
- <option value="[% branchloo.value %]" selected="selected">[% branchloo.branchname %]</option>
- [% ELSE %]
- <option value="[% branchloo.value %]">[% branchloo.branchname %]</option>
- [% END %]
- [% END %]
+ <label for="branchloop">Library: </label><select id="branchloop" name="branchcode" style="width:12em;">
+ <option value="">All libraries</option>
+ [% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode, unfiltered => 1, ) %]
</select>
</li>
- [% IF ( authorised_values ) %]
+ [% IF (authorised_values) %]
<li>
- <label for="locationloop">Item Location (items.location) is</label>
+ <label for="locationloop">Shelving location (items.location) is: </label>
<select id="locationloop" name="location">
<option value="">Filter location</option>
- [% FOREACH authorised_value IN authorised_values %]
- [% IF ( authorised_value.selected ) %]
- <option value="[% authorised_value.authorised_value %]" selected="selected">[% authorised_value.lib %]</option>
+ [% FOREACH value IN authorised_values %]
+ [% IF (value.selected) %]
+ <option value="[% value.authorised_value %]" selected="selected">[% value.lib %]</option>
[% ELSE %]
- <option value="[% authorised_value.authorised_value %]">[% authorised_value.lib %]</option>
+ <option value="[% value.authorised_value %]">[% value.lib %]</option>
[% END %]
[% END %]
</select> </li>
<li><label for="maxlocation">...and: </label>
<input type="text" name="maxlocation" id="maxlocation" value="[% maxlocation %]" />
</li>
- [% IF ( statuses ) %]
- </ol>
- </fieldset>
+ [% IF (statuses) %]
+ </ol>
+ </fieldset>
<fieldset class="rows">
- <legend>Item statuses:</legend>
- <div name="statuses" style="display: block;">
- [% FOREACH statuse IN statuses %]
- [% IF ( statuse.values ) %]
+ <legend>Item statuses</legend>
+ <div id="statuses" style="display: block;">
+ [% FOREACH status IN statuses %]
+ [% IF (status.values) %]
<fieldset style="float: left; padding: 5px; margin: 5px;text-align:right">
- <legend>[% statuse.fieldname %]</legend>
- <ul id="statuses-[% statuse.fieldname %]" style="display: inline;">
- [% FOREACH value IN statuse.values %]
- [% IF ( value.lib ) %]<li>
+ <legend>[% status.fieldname %]</legend>
+ <ul id="statuses-[% fieldname %]" style="display: inline;">
+ [% FOREACH value IN status.values %]
+ [% IF (value.lib) %]<li>
<label for="[% value.id %]">
[% value.lib %]
</label>
- <input type="checkbox" name="status-[% value.fieldname %]-[% value.id %]" id="[% value.id %]" />
+ <input type="checkbox" name="status-[% status.fieldname %]-[% value.authorised_value %]" id="[% value.authorised_value %]" />
</li>[% END %]
[% END %]
</ul>
[% END %]
</div>
</fieldset>
- <fieldset class="rows">
+ <fieldset class="rows">
<ol>
[% END %]
<li><label for="datelastseen">Inventory date:</label>
- <input type="text" id="datelastseen" name="datelastseen" value="[% datelastseen %]" />
- <img src="[% themelang %]/lib/calendar/cal.gif" id="datelastseen_button" alt="Show Calendar" />
- <script type="text/javascript">
- Calendar.setup(
- {
- inputField : "datelastseen",
- ifFormat : "[% DHTMLcalendar_dateformat %]",
- button : "datelastseen_button"
- }
- );
- </script>
- <div class="hint">[% INCLUDE 'date-format.inc' %]</div>
+ <input type="text" id="datelastseen" name="datelastseen" value="[% datelastseen | $KohaDates %]" class="datepickerfrom" />
</li>
- <li><label for="ignoreissued">Skip copies on loan: </label>
- [% IF ( ignoreissued ) %]
+ <li><label for="ignoreissued">Skip items on loan: </label>
+ [% IF (ignoreissued) %]
<input type="checkbox" id="ignoreissued" name="ignoreissued" checked="checked" /></li>
[% ELSE %]
<input type="checkbox" id="ignoreissued" name="ignoreissued" /></li>
[% END %]
- <li><label for="pagesize">Show: </label>
- <input type="text" id="pagesize" name="pagesize" value="[% pagesize %]" maxlength="5" size="5" /> items</li>
- <li><label for="offset">Beginning at offset: </label>
- <input type="text" id="offset" name="offset" value="[% offset %]" size="5" maxlength="5" />
- </li>
<li>
- <label for="CSVexport">Export to csv file</label>
+ <label for="CSVexport">Export to CSV file: </label>
<input type="checkbox" name="CSVexport" id="CSVexport" />
</li>
<li>
- <label for="compareinv2barcd">Compare barcodes list to results</label>
+ <label for="compareinv2barcd">Compare barcodes list to results: </label>
<input type="checkbox" name="compareinv2barcd" id="compareinv2barcd" />
</li>
+ <li>
+ <label for="dont_checkin">Do not check in items scanned during inventory: </label>
+ <input type="checkbox" name="dont_checkin" id="dont_checkin" />
+ </li>
</ol>
</fieldset>
<input type="hidden" name="op" value="do_it" />
+
<fieldset class="action"><input type="submit" value="Submit" class="button" /></fieldset>
</form>
- </div>
- </div>
- [% END %]
- [% IF ( loop ) %]
+ </div>
+ </div>
+ [% END %]
+ [% IF (op) %]
<form method="post" action="/cgi-bin/koha/tools/inventory.pl" class="checkboxed">
<input type="hidden" name="markseen" value="1" />
<input type="hidden" name="minlocation" value="[% minlocation %]" />
<input type="hidden" name="location" value="[% location %]" />
<input type="hidden" name="branchcode" value="[% branchcode %]" />
<input type="hidden" name="datelastseen" value="[% datelastseen %]" />
- <input type="hidden" name="pagesize" value="[% pagesize %]" />
- <input type="hidden" name="offset" value="[% offset %]" />
- <div style="padding : .3em 0"><a href="#" class="checkall">[Select All]</a> <a href="#" class="clearall">[Clear All]</a></div>
- <table>
+
+ [% UNLESS compareinv2barcd %]
+ <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>
+ [% END %]
+
+ <table id="inventoryt">
+ <thead>
<tr>
- <th>Seen</th>
+ [% UNLESS compareinv2barcd %]<th>Seen</th>[% END %]
<th>Barcode</th>
+ <th>Library</th>
<th>Title</th>
- <th>Unseen since</th>
+ <th>Status</th>
+ <th>Lost</th>
+ <th>Damaged</th>
+ <th>Withdrawn</th>
+ <th>Last seen</th>
<th>Problems</th>
</tr>
- [% FOREACH loo IN loop %]
+ </thead>
+ <tbody>
+ [% FOREACH result IN loop %]
<tr>
+ [% UNLESS compareinv2barcd %]
+ <td>
+ <input type="checkbox" name="SEEN-[% result.itemnumber %]" value="1" />
+ </td>
+ [% END %]
<td>
- <input type="checkbox" name="SEEN-[% loo.itemnumber %]" value="1" />
+ [% result.barcode | html %]
</td>
<td>
- [% loo.barcode %]
+ [% Branches.GetName( result.homebranch ) %]
+ [% result.location | html %] [% IF ( result.itemcallnumber ) %][[% result.itemcallnumber | html %]][% ELSE %][% END %]
</td>
<td>
- <p><b>[% loo.itemcallnumber %]</b> - <a href="#" onclick="window.open('/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% loo.biblionumber %]','marcview','width=800,height=600,toolbar=0,scrollbars=1');">[% loo.title |html %]</a></p>
- <p>[% loo.author %]</p>
+ <p><a href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% result.biblionumber %]" class="openWin">[% result.title | html %]</a></p><p>[% result.author | html %]</p>
</td>
<td>
- <p>[% loo.datelastseen %]</p>
+ [% result.notforloan | html %]
</td>
<td>
- [% IF ( loo.notfoundbarcode ) %]
- <p style="background: red;">Not found among barcodes in barcodes file.</p>
- [% ELSIF ( loo.notfoundkoha ) %]
- <p style="background: red;">Not found in koha.</p>
- [% ELSE %]
- <p style="background: green;">None</p>
- [% END %]
+ [% result.itemlost | html %]
+ </td>
+ <td>
+ [% result.damaged | html %]
+ </td>
+ <td>
+ [% result.withdrawn | html %]
+ </td>
+ <td>
+ [% result.datelastseen | $KohaDates | html %]
+ </td>
+ <td>
+ [% IF result.problem == 'wrongplace' %]
+ <p>Item should not have been scanned</p>
+ [% ELSIF result.problem == 'missingitem' %]
+ <p>Item missing</p>
+ [% ELSIF result.problem == 'changestatus' %]
+ <p>Change item status</p>
+ [% ELSIF result.problem == 'not_scanned' %]
+ <p>Item should have been scanned</p>
+ [% END %]
</td>
</tr>
[% END %]
+ </tbody>
</table>
- <div style="padding : .3em 0"><a href="#" class="checkall">[Select All]</a> <a href="#" class="clearall">[Clear All]</a></div>
- <input type="submit" id="markseen" value="Mark seen" />
- </form>
- [% IF ( offset ) %]
- <form method="post" action="/cgi-bin/koha/tools/inventory.pl">
- <input type="hidden" name="branch" value="[% branch %]" />
- <input type="hidden" name="minlocation" value="[% minlocation %]" />
- <input type="hidden" name="maxlocation" value="[% maxlocation %]" />
- <input type="hidden" name="location" value="[% location %]" />
- <input type="hidden" name="branchcode" value="[% branchcode %]" />
- <input type="hidden" name="datelastseen" value="[% datelastseen %]" />
- <input type="hidden" name="pagesize" value="[% pagesize %]" />
- <input type="hidden" name="offset" value="[% prevoffset %]" />
- <input type="hidden" name="op" value="do_it" />
- <input type="submit" value="<< Continue without Marking" class="submit" />
- </form>
+ <div class="spacer"></div>
+ [% UNLESS compareinv2barcd %]
+ <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>
+ <input type="submit" id="markseenandquit" value="Mark seen and quit" />
+ <input type="submit" value="Mark seen and continue >>" id="markseenandcontinuebutton" />
+ <input type="submit" value="Continue without marking >>" id="continuewithoutmarkingbutton" class="submit" />
[% END %]
- [% IF ( nextoffset ) %]
- <form method="post">
- <input type="hidden" name="branch" value="[% branch %]" />
- <input type="hidden" name="location" value="[% location %]" />
- <input type="hidden" name="branchcode" value="[% branchcode %]" />
- <input type="hidden" name="minlocation" value="[% minlocation %]" />
- <input type="hidden" name="maxlocation" value="[% maxlocation %]" />
- <input type="hidden" name="datelastseen" value="[% datelastseen %]" />
- <input type="hidden" name="pagesize" value="[% pagesize %]" />
- <input type="hidden" name="offset" value="[% nextoffset %]" />
- <input type="hidden" name="op" value="do_it" />
- <input type="submit" value="Continue without Marking >>" class="submit" />
</form>
+
</div>
- [% END %]
+
[% END %]
</div>
<div class="yui-b">