Bug 10599: add option to unselect on loan items on the batch item modification tool

Sometimes when using the batch item modification tool, we would like to
automatically uncheck on loan items.

This patch also adds a new routine in C4::Circulation, IsItemIssued(),
which, when passed an itemnumber, returns whether the item is
currently on loan.

Test plan:
1/ Go to tools/batchMod.pl.
2/ Enter some barcode (at least 1 should be on loan).
3/ Click on the Continue button.
4/ Click on the "Clear on loan" link.
5/ Check that on loan items are unchecked.

Launch the unit test file:
prove t/db_dependent/Circulation/IsItemIssued.t

http://bugs.koha-community.org/show_bug.cgi?id=10572
Signed-off-by: Liz Rea <liz@catalyst.net.nz>
Works as expected, only modifies items that are checked (still). No regression noted.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Passes koha-qa.pl, works as advertised.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
This commit is contained in:
Jonathan Druart 2013-07-16 16:43:30 +02:00 committed by Galen Charlton
parent 990eebf132
commit 5ed940b18e
5 changed files with 87 additions and 13 deletions

View File

@ -88,6 +88,7 @@ BEGIN {
&GetOpenIssue
&AnonymiseIssueHistory
&CheckIfIssuedToPatron
&IsItemIssued
);
# subs to deal with returns
@ -3495,6 +3496,25 @@ sub CheckIfIssuedToPatron {
return;
}
=head2 IsItemIssued
IsItemIssued( $itemnumber )
Return 1 if the item is on loan, otherwise return 0
=cut
sub IsItemIssued {
my $itemnumber = shift;
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare(q{
SELECT COUNT(*)
FROM issues
WHERE itemnumber = ?
});
$sth->execute($itemnumber);
return $sth->fetchrow;
}
1;

View File

@ -102,7 +102,7 @@ function hideAllColumns(){
"aoColumnDefs": [
{ "aTargets": [ 0 ], "bSortable": false, "bSearchable": false }
],
"bPaginate": false
"bPaginate": false,
}));
$("#selectallbutton").click(function(){
$("#itemst").checkCheckboxes();
@ -112,6 +112,12 @@ function hideAllColumns(){
$("#itemst").unCheckCheckboxes();
return false;
});
$("#clearonloanbutton").click(function(){
$("#itemst input[name='itemnumber'][data-is-onloan='1']").each(function(){
$(this).attr('checked', false);
});
return false;
});
$("#selections input").change(function(e){
var num = $(this).attr("id");
if(num == 'showall'){

View File

@ -19,16 +19,7 @@ for( x=0; x<allColumns.length; x++ ){
allColumns[x] = Number(allColumns[x]) + 2;
}
$(document).ready(function(){
$("#selectallbutton").click(function() {
$("#itemst").find("input:checkbox").each(function() {
$(this).attr("checked", "checked");
});
});
$("#clearallbutton").click(function() {
$("#itemst").find("input:checkbox").each(function() {
$(this).removeAttr("checked");
});
});
$("input[name='disable_input']").click(function() {
var row = $(this).attr("id");
row = row.replace("row","hint");
@ -42,6 +33,7 @@ $(document).ready(function(){
$("#"+row).html("");
}
});
});
//]]>
</script>
@ -97,7 +89,11 @@ $(document).ready(function(){
<input type="hidden" name="src" id="src" value="[% src %]" />
[% IF ( item_loop ) %]
[% IF ( show ) %]<div id="toolbar"><a id="selectallbutton" href="#">Select All</a> | <a id="clearallbutton" href="#">Clear All</a></div>[% ELSE %][% END %]
[% IF show %]
<div id="toolbar">
<a id="selectallbutton" href="#">Select all</a> | <a id="clearallbutton" href="#">Clear all</a> | <a id="clearonloanbutton" href="#">Clear on loan</a>
</div>
[% END %]
<div id="cataloguing_additem_itemlist">
<p id="selections"><strong>Show/hide columns:</strong> <span class="selected"><input type="checkbox" checked="checked" id="showall"/><label for="showall">Show all columns</label></span> <span><input type="checkbox" id="hideall"/><label for="hideall">Hide all columns</label></span>
@ -116,7 +112,17 @@ $(document).ready(function(){
</tr>
</thead>
<tbody>
[% FOREACH item_loo IN item_loop %] <tr> [% IF ( show ) %][% IF ( item_loo.nomod ) %] <td class="error">Cannot Edit</td>[% ELSE %]<td><input type="checkbox" name="itemnumber" value="[% item_loo.itemnumber %]" id="row[% item_loo.itemnumber %]" checked="checked" /></td>[% END %][% ELSE %]<td>&nbsp;</td>[% END %]
[% FOREACH item_loo IN item_loop %]
<tr>
[% IF show %]
[% IF item_loo.nomod %]
<td class="error">Cannot Edit</td>
[% ELSE %]
<td><input type="checkbox" name="itemnumber" value="[% item_loo.itemnumber %]" id="row[% item_loo.itemnumber %]" checked="checked" data-is-onloan="[% item_loo.onloan %]" /></td>
[% END %]
[% ELSE %]
<td>&nbsp;</td>
[% END %]
<td><label for="row[% item_loo.itemnumber %]"><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% item_loo.biblionumber %]">[% item_loo.title %]</a>[% IF ( item_loo.author ) %], by [% item_loo.author %][% END %]</label></td>
[% FOREACH item_valu IN item_loo.item_value %] <td>[% item_valu.field |html %]</td>
[% END %] </tr>

View File

@ -0,0 +1,40 @@
use Modern::Perl;
use Test::More tests => 1;
use C4::Biblio;
use C4::Circulation;
use C4::Items;
use C4::Members;
use Koha::DateUtils;
use MARC::Record;
*C4::Context::userenv = \&Mock_userenv;
my $dbh = C4::Context->dbh;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
my $borrowernumber = AddMember(
firstname => 'my firstname',
surname => 'my surname',
categorycode => 'S',
branchcode => 'CPL',
);
my $borrower = GetMember( borrowernumber => $borrowernumber );
my $record = MARC::Record->new();
my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $record, '' );
my ( undef, undef, $itemnumber ) = AddItem( { homebranch => 'CPL', holdingbranch => 'CPL', barcode => 'i_dont_exist' }, $biblionumber );
my $item = GetItem( $itemnumber );
is ( IsItemIssued( $item->{itemnumber} ), 1, "Item is issued" );
$dbh->rollback;
# C4::Context->userenv
sub Mock_userenv {
return { branch => 'CPL' };
}

View File

@ -545,6 +545,8 @@ sub BuildItemsData{
$row_data{title} = $row->{title};
$row_data{isbn} = $row->{isbn};
$row_data{biblionumber} = $row->{biblionumber};
my $is_on_loan = C4::Circulation::IsItemIssued( $row->{itemnumber} );
$row_data{onloan} = $is_on_loan ? 1 : 0;
push(@item_value_loop,\%row_data);
}
my @header_loop=map { { header_value=> $witness{$_}} } @witnesscodessorted;