@@ -, +, @@ - From the item list view (/catalogue/moredetail.pl?biblionumber=42) - From the edit items form (/cataloguing/additem.pl?biblionumber=42) --- C4/Circulation.pm | 10 +++++++--- C4/UsageStats.pm | 1 + circ/returns.pl | 2 +- .../mysql/atomicupdate/bug_10748_BlockReturnOfLostItems.sql | 3 +++ installer/data/mysql/sysprefs.sql | 1 + .../prog/en/modules/admin/preferences/circulation.pref | 6 ++++++ koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt | 11 ++++++----- t/db_dependent/UsageStats.t | 1 + 8 files changed, 26 insertions(+), 9 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_10748_BlockReturnOfLostItems.sql --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -1909,6 +1909,10 @@ sub AddReturn { $doreturn = 0 if C4::Context->preference("BlockReturnOfWithdrawnItems"); } + if ( $item->{itemlost} and C4::Context->preference("BlockReturnOfLostItems") ) { + $doreturn = 0; + } + # case of a return of document (deal with issues and holdingbranch) my $today = DateTime->now( time_zone => C4::Context->tz() ); @@ -1986,8 +1990,7 @@ sub AddReturn { # fix up the accounts..... if ( $item->{'itemlost'} ) { $messages->{'WasLost'} = 1; - - if ( $item->{'itemlost'} ) { + unless ( C4::Context->preference("BlockReturnOfLostItems") ) { if ( Koha::RefundLostItemFeeRules->should_refund( { @@ -1998,7 +2001,8 @@ sub AddReturn { ) ) { - _FixAccountForLostAndReturned( $item->{'itemnumber'}, $borrowernumber, $barcode ); + _FixAccountForLostAndReturned( $item->{'itemnumber'}, + $borrowernumber, $barcode ); $messages->{'LostItemFeeRefunded'} = 1; } } --- a/C4/UsageStats.pm +++ a/C4/UsageStats.pm @@ -128,6 +128,7 @@ sub BuildReport { z3950NormalizeAuthor SpineLabelAutoPrint SpineLabelShowPrintOnBibDetails + BlockReturnOfLostItems BlockReturnOfWithdrawnItems CalculateFinesOnReturn AgeRestrictionOverride --- a/circ/returns.pl +++ a/circ/returns.pl @@ -505,6 +505,7 @@ foreach my $code ( keys %$messages ) { } elsif ( $code eq 'WasLost' ) { $err{waslost} = 1; + $exit_required_p = 1 if C4::Context->preference("BlockReturnOfLostItems"); } elsif ( $code eq 'LostItemFeeRefunded' ) { $template->param( LostItemFeeRefunded => 1 ); @@ -643,7 +644,6 @@ $template->param( forgivemanualholdsexpire => $forgivemanualholdsexpire, overduecharges => $overduecharges, AudioAlerts => C4::Context->preference("AudioAlerts"), - BlockReturnOfWithdrawnItems => C4::Context->preference("BlockReturnOfWithdrawnItems"), ); $itemnumber = GetItemnumberFromBarcode( $barcode ); --- a/installer/data/mysql/atomicupdate/bug_10748_BlockReturnOfLostItems.sql +++ a/installer/data/mysql/atomicupdate/bug_10748_BlockReturnOfLostItems.sql @@ -0,0 +1,3 @@ + +INSERT IGNORE INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES +('BlockReturnOfLostItems','0','0','If enabled, items that are marked as lost cannot be returned.','YesNo'); --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -82,6 +82,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('BiblioDefaultView','normal','normal|marc|isbd','Choose the default detail view in the catalog; choose between normal, marc or isbd','Choice'), ('BibtexExportAdditionalFields', '', NULL , 'Define additional BibTex tags to export from MARC records in YAML format as an associative array with either a marc tag/subfield combination as the value, or a list of tag/subfield combinations.', 'textarea'), ('BlockExpiredPatronOpacActions','1',NULL,'Set whether an expired patron can perform opac actions such as placing holds or renew books, can be overridden on a per patron-type basis','YesNo'), +('BlockReturnOfLostItems','0','0','If enabled, items that are marked as lost cannot be returned.','YesNo'), ('BlockReturnOfWithdrawnItems','1','0','If enabled, items that are marked as withdrawn cannot be returned.','YesNo'), ('BorrowerMandatoryField','surname|cardnumber',NULL,'Choose the mandatory fields for a patron\'s account','free'), ('borrowerRelationship','father|mother','','Define valid relationships between a guarantor & a guarantee (separated by | or ,)','free'), --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -467,6 +467,12 @@ Circulation: no: "Don't block" - returning of items that have been withdrawn. - + - pref: BlockReturnOfLostItems + choices: + yes: Block + no: "Don't block" + - returning of items that have been lost. + - - pref: CalculateFinesOnReturn choices: yes: Do --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt @@ -617,20 +617,21 @@ $(document).ready(function () { [% END %] [% IF ( errmsgloo.waslost ) %]

Item was lost, now found.

- [% IF ( LostItemFeeRefunded ) %] + [% IF LostItemFeeRefunded and not Koha.Preference('BlockReturnOfLostItems') %]

A refund has been applied to the borrowing patron's account.

+ [% ELSIF Koha.Preference('BlockReturnOfLostItems') %] +
Cannot check in
+

NOT CHECKED IN

[% ELSE %]

Any lost item fees for this item will remain on the patron's account.

[% END %] [% END %] [% IF ( errmsgloo.withdrawn ) %] - [% IF BlockReturnOfWithdrawnItems %] + [% IF Koha.Preference('BlockReturnOfWithdrawnItems') %]
Cannot check in

NOT CHECKED IN

-

Item is withdrawn.

- [% ELSE %] -

Item is withdrawn.

[% END %] +

Item is withdrawn.

[% END %] [% IF ( errmsgloo.debarred ) %]

[% errmsgloo.debarname %]([% errmsgloo.debarcardnumber %]) is now debarred until [% errmsgloo.debarred | $KohaDates %].

--- a/t/db_dependent/UsageStats.t +++ a/t/db_dependent/UsageStats.t @@ -380,6 +380,7 @@ sub mocking_systempreferences_to_a_set_value { z3950NormalizeAuthor SpineLabelAutoPrint SpineLabelShowPrintOnBibDetails + BlockReturnOfLostItems BlockReturnOfWithdrawnItems CalculateFinesOnReturn AgeRestrictionOverride --