@@ -, +, @@ list items via circ rules --- 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(-) --- a/C4/Circulation.pm +++ a/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 --- a/admin/smart-rules.pl +++ a/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)); --- a/installer/data/mysql/updatedatabase.pl +++ a/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. --- a/koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc +++ a/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"); --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ a/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 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/renew.tt +++ a/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 %] --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt +++ a/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 %] --