Bug 10748: Add the ability to block return of lost items
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 4 Oct 2017 23:54:24 +0000 (20:54 -0300)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 8 Nov 2017 14:07:09 +0000 (11:07 -0300)
Mimicking what does BlockReturnOfWithdrawnItems we can easily add a new
syspref to block return of lost items.
This patch adds BlockReturnOfLostItems, if set to 'Block' a item marked
as lost cannot be checked in.

Test plan:
1/ Set BlockReturnOfLostItems to 'Do not block'
2/ Check an item out to a patron
3/ Edit the item and mark it as lost (*)
4/ Check the item in
=> The item is checked in
5/ Edit the item and remove the lost status
6/ Check the item out again
7/ Edit the item and mark it as lost (*)
8/ Check the item in
=> The item is not checked in

(*) There are 2 ways to mark an item lost:
- From the item list view (/catalogue/moredetail.pl?biblionumber=42)
If you set the lost status from this form, the issue will be returned
Maybe this should be optional (?)

- From the edit items form (/cataloguing/additem.pl?biblionumber=42)
It is the form you must use to not mark the issue returned.

Sponsored-by: BULAC - http://www.bulac.fr/

Signed-off-by: Dominic Pichette <dominic@inlibro.com>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

C4/Circulation.pm
C4/UsageStats.pm
circ/returns.pl
installer/data/mysql/atomicupdate/bug_10748_BlockReturnOfLostItems.sql [new file with mode: 0644]
installer/data/mysql/sysprefs.sql
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt
t/db_dependent/UsageStats.t

index 8bd8d85..e49c168 100644 (file)
@@ -1911,6 +1911,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() );
 
@@ -1988,8 +1992,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(
                     {
@@ -2000,7 +2003,8 @@ sub AddReturn {
                 )
               )
             {
-                _FixAccountForLostAndReturned( $item->{'itemnumber'}, $borrowernumber, $barcode );
+                _FixAccountForLostAndReturned( $item->{'itemnumber'},
+                    $borrowernumber, $barcode );
                 $messages->{'LostItemFeeRefunded'} = 1;
             }
         }
index 7524e05..8c429b2 100644 (file)
@@ -128,6 +128,7 @@ sub BuildReport {
         z3950NormalizeAuthor
         SpineLabelAutoPrint
         SpineLabelShowPrintOnBibDetails
+        BlockReturnOfLostItems
         BlockReturnOfWithdrawnItems
         CalculateFinesOnReturn
         AgeRestrictionOverride
index 80f228a..e2c815b 100755 (executable)
@@ -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 );
diff --git a/installer/data/mysql/atomicupdate/bug_10748_BlockReturnOfLostItems.sql b/installer/data/mysql/atomicupdate/bug_10748_BlockReturnOfLostItems.sql
new file mode 100644 (file)
index 0000000..63a91b9
--- /dev/null
@@ -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');
index f6e666b..51203f0 100644 (file)
@@ -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'),
index b77b373..3bbd7ff 100644 (file)
@@ -473,6 +473,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
index b3b5910..9f439b2 100644 (file)
@@ -617,20 +617,21 @@ $(document).ready(function () {
             [% END %]
             [% IF ( errmsgloo.waslost ) %]
                 <p class="problem">Item was lost, now found.</p>
-                [% IF ( LostItemFeeRefunded ) %]
+                [% IF LostItemFeeRefunded and not Koha.Preference('BlockReturnOfLostItems') %]
                     <p class="problem">A refund has been applied to the borrowing patron's account.</p>
+                [% ELSIF Koha.Preference('BlockReturnOfLostItems') %]
+                   <h5>Cannot check in</h5>
+                   <p><strong>NOT CHECKED IN</strong></p>
                 [% ELSE %]
                     <p class="problem">Any lost item fees for this item will remain on the patron's account.</p>
                 [% END %]
             [% END %]
             [% IF ( errmsgloo.withdrawn ) %]
-                [% IF BlockReturnOfWithdrawnItems %]
+                [% IF Koha.Preference('BlockReturnOfWithdrawnItems') %]
                    <h5>Cannot check in</h5>
                    <p><strong>NOT CHECKED IN</strong></p>
-                   <p class="problem">Item is withdrawn.</p>
-                [% ELSE %]
-                   <p class="problem">Item is withdrawn.</p>
                 [% END %]
+               <p class="problem">Item is withdrawn.</p>
             [% END %]
             [% IF ( errmsgloo.debarred ) %]
                 <p class="problem"><a href="/cgi-bin/koha/circ/circulation.pl?borrowernumber=[% errmsgloo.debarborrowernumber %]">[% errmsgloo.debarname %]([% errmsgloo.debarcardnumber %])</a> is now debarred until [% errmsgloo.debarred | $KohaDates %].</p>
index f778255..ddb01d5 100644 (file)
@@ -380,6 +380,7 @@ sub mocking_systempreferences_to_a_set_value {
         z3950NormalizeAuthor
         SpineLabelAutoPrint
         SpineLabelShowPrintOnBibDetails
+        BlockReturnOfLostItems
         BlockReturnOfWithdrawnItems
         CalculateFinesOnReturn
         AgeRestrictionOverride