From 5814594a4cab8b89c8aabe0a3c24889b75e7a9b3 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Thu, 19 Mar 2015 09:14:30 -0400 Subject: [PATCH] Bug 9805 [QA Followup] - Control renewing and finding of lost items via circ rules Test Plan: 1) Apply this patch 2) Run updatedatabase.pl 3) Browse to the circ rules 4) Note the "Renew lost?" and "Renewal marks lost found" rules 5) Set and test each of the rules both ways for the rules for all libraries 6) Repeat but for a specific branch this time --- C4/Circulation.pm | 24 +++++++++-- admin/smart-rules.pl | 38 ++++++++++-------- installer/data/mysql/updatedatabase.pl | 18 +++++++++ .../intranet-tmpl/prog/en/includes/strings.inc | 1 + .../prog/en/modules/admin/smart-rules.tt | 42 +++++++++++++++++++- .../intranet-tmpl/prog/en/modules/circ/renew.tt | 4 ++ .../opac-tmpl/bootstrap/en/modules/opac-user.tt | 2 + 7 files changed, 108 insertions(+), 21 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index a190c0a..7812541 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2847,6 +2847,13 @@ sub CanBookBeRenewed { return ( 0, "auto_too_soon" ); } + if ( $item->{itemlost} ) { + my $schema = Koha::Database->new()->schema(); + my $rule = $schema->resultset('DefaultBranchCircRule')->single( { branchcode => $branchcode } ); + $rule ||= $schema->resultset('DefaultCircRule')->single(); + return ( 0, "item_lost" ) unless $rule->{renew_lost_allowed}; + } + return ( 1, undef ); } @@ -2928,10 +2935,19 @@ sub AddRenewal { # Update the renewal count on the item, and tell zebra to reindex $renews = $biblio->{'renewals'} + 1; + my $schema = Koha::Database->new()->schema(); + my $rule = $schema->resultset('DefaultBranchCircRule')->single( { branchcode => _GetCircControlBranch( $item, $borrower ) } ); + $rule ||= $schema->resultset('DefaultCircRule')->single(); + # If item was lost, it has now been found, reverse any list item charges if neccessary. - if ( $item->{'itemlost'} ) { - if ( C4::Context->preference('RefundLostItemFeeOnReturn') ) { - _FixAccountForLostAndReturned( $item->{'itemnumber'}, undef, $item->{'barcode'} ); + my $itemlost = 0; + if ( $item->{itemlost} ) { + $itemlost = 1; + if ( $rule->renew_lost_found ) { + $itemlost = 0; + if ( C4::Context->preference('RefundLostItemFeeOnReturn') ) { + _FixAccountForLostAndReturned( $item->{itemnumber}, undef, $item->{barcode} ); + } } } @@ -2939,7 +2955,7 @@ sub AddRenewal { { renewals => $renews, onloan => $datedue->strftime('%Y-%m-%d %H:%M'), - itemlost => 0, + itemlost => $itemlost, }, $biblio->{'biblionumber'}, $itemnumber diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl index 253b08a..d77def0 100755 --- a/admin/smart-rules.pl +++ b/admin/smart-rules.pl @@ -170,11 +170,14 @@ elsif ($op eq 'add') { } elsif ($op eq "set-branch-defaults") { - my $categorycode = $input->param('categorycode'); - my $maxissueqty = $input->param('maxissueqty'); - my $maxonsiteissueqty = $input->param('maxonsiteissueqty'); - my $holdallowed = $input->param('holdallowed'); - my $returnbranch = $input->param('returnbranch'); + my $categorycode = $input->param('categorycode'); + my $maxissueqty = $input->param('maxissueqty'); + my $maxonsiteissueqty = $input->param('maxonsiteissueqty'); + my $holdallowed = $input->param('holdallowed'); + my $returnbranch = $input->param('returnbranch'); + my $renew_lost_allowed = $input->param('renew_lost_allowed'); + my $renew_lost_found = $input->param('renew_lost_found'); + $maxissueqty =~ s/\s//g; $maxissueqty = undef if $maxissueqty !~ /^\d+/; $maxonsiteissueqty =~ s/\s//g; @@ -186,17 +189,17 @@ elsif ($op eq "set-branch-defaults") { my $sth_search = $dbh->prepare("SELECT count(*) AS total FROM default_circ_rules"); my $sth_insert = $dbh->prepare("INSERT INTO default_circ_rules - (maxissueqty, maxonsiteissueqty, holdallowed, returnbranch) - VALUES (?, ?, ?, ?)"); + (maxissueqty, maxonsiteissueqty, holdallowed, returnbranch, renew_lost_allowed, renew_lost_found) + VALUES (?, ?, ?, ?, ?, ?)"); my $sth_update = $dbh->prepare("UPDATE default_circ_rules - SET maxissueqty = ?, maxonsiteissueqty = ?, holdallowed = ?, returnbranch = ?"); + SET maxissueqty = ?, maxonsiteissueqty = ?, holdallowed = ?, returnbranch = ?, renew_lost_allowed = ?, renew_lost_found = ?"); $sth_search->execute(); my $res = $sth_search->fetchrow_hashref(); if ($res->{total}) { - $sth_update->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $returnbranch); + $sth_update->execute( $maxissueqty, $maxonsiteissueqty, $holdallowed, $returnbranch, $renew_lost_allowed, $renew_lost_found ); } else { - $sth_insert->execute($maxissueqty, $maxonsiteissueqty, $holdallowed, $returnbranch); + $sth_insert->execute( $maxissueqty, $maxonsiteissueqty, $holdallowed, $returnbranch, $renew_lost_allowed, $renew_lost_found ); } } else { my $sth_search = $dbh->prepare("SELECT count(*) AS total @@ -548,12 +551,15 @@ if ($branch eq "*") { my $defaults = $sth_defaults->fetchrow_hashref; if ($defaults) { - $template->param(default_holdallowed_none => 1) if($defaults->{holdallowed} == 0); - $template->param(default_holdallowed_same => 1) if($defaults->{holdallowed} == 1); - $template->param(default_holdallowed_any => 1) if($defaults->{holdallowed} == 2); - $template->param(default_maxissueqty => $defaults->{maxissueqty}); - $template->param(default_maxonsiteissueqty => $defaults->{maxonsiteissueqty}); - $template->param(default_returnbranch => $defaults->{returnbranch}); + $template->param( default_holdallowed_none => 1 ) if ( $defaults->{holdallowed} == 0 ); + $template->param( default_holdallowed_same => 1 ) if ( $defaults->{holdallowed} == 1 ); + $template->param( default_holdallowed_any => 1 ) if ( $defaults->{holdallowed} == 2 ); + + $template->param( default_maxissueqty => $defaults->{maxissueqty} ); + $template->param( default_maxonsiteissueqty => $defaults->{maxonsiteissueqty} ); + $template->param( default_returnbranch => $defaults->{returnbranch} ); + $template->param( default_renew_lost_allowed => $defaults->{renew_lost_allowed} ); + $template->param( default_renew_lost_found => $defaults->{renew_lost_found} ); } $template->param(default_rules => ($defaults ? 1 : 0)); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index f8ab41e..0c240eb 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -11390,6 +11390,24 @@ if ( CheckVersion($DBversion) ) { SetVersion ($DBversion); } +$DBversion = "XXX"; +if ( CheckVersion($DBversion) ) { + $dbh->do(q| + ALTER TABLE default_circ_rules + ADD renew_lost_allowed BOOLEAN NOT NULL DEFAULT '1', + ADD renew_lost_found BOOLEAN NOT NULL DEFAULT '0' + |); + + $dbh->do(q| + ALTER TABLE default_branch_circ_rules + ADD renew_lost_allowed BOOLEAN NOT NULL DEFAULT '1', + ADD renew_lost_found BOOLEAN NOT NULL DEFAULT '0' + |); + + print "Upgrade to $DBversion done (Bug 9805 - Lost items are un-lost if returned, but not if renewed.)\n"; + SetVersion($DBversion); +} + # DEVELOPER PROCESS, search for anything to execute in the db_update directory # SEE bug 13068 # if there is anything in the atomicupdate, read and execute it. diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc index 3226ad3..50aff41 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc @@ -18,6 +18,7 @@ var NOT_RENEWABLE_TOO_SOON = _("No renewal before %s"); var NOT_RENEWABLE_AUTO_TOO_SOON = _("Scheduled for automatic renewal"); var NOT_RENEWABLE_AUTO_RENEW = _("Scheduled for automatic renewal"); + var ITEM_LOST = _("Item lost"); var RENEWALS_REMAINING = _("%s of %s renewals remaining"); var HOLD_IS_SUSPENDED = _("Hold is suspended"); var UNTIL = _("until %s"); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt index b871463..2be3769 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt @@ -347,7 +347,7 @@ for="tobranch">Clone these rules to: -

Default checkout, hold and return policy[% IF ( humanbranch ) %] for [% humanbranch %][% END %]

+

Default checkout, hold, renewal and return policy[% IF ( humanbranch ) %] for [% humanbranch %][% END %]

You can set a default maximum number of checkouts, hold policy and return policy that will be used if none is defined below for a particular item type or category.

@@ -359,6 +359,8 @@ for="tobranch">Clone these rules to: Clone these rules to: + [% IF ( default_renew_lost_allowed == '1' ) %] + + + [% IF ( default_renew_lost_allowed == '0' ) %] + + + + + + Unset diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt index 930bb06..0f03878 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt @@ -104,6 +104,10 @@

[% borrower.firstname %] [% borrower.surname %] ( [% borrower.cardnumber %] ) is currently restricted.

+ [% ELSIF error == "item_lost" %] + +

This item is lost.

+ [% ELSE %] [% error %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt index 4bb2632..41897a5 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt @@ -248,6 +248,8 @@ ([% ISSUE.renewsleft %] of [% ISSUE.renewsallowed %] renewals remaining) [% ELSIF ( ISSUE.on_reserve ) %] (On hold) + [% ELSIF ( ISSUE.item_lost ) %] + (Item is lost) [% END %] [% END %] -- 1.7.10.4