From 338614c8573c39d05321b30a8dfd14d67579d371 Mon Sep 17 00:00:00 2001
From: Julian Maurice <julian.maurice@biblibre.com>
Date: Fri, 17 May 2019 14:40:12 +0200
Subject: [PATCH] Bug 22922: Allow reservedate changes only if
 AllowHoldDateInFuture is on

Signed-off-by: Maryse Simard <maryse.simard@inlibro.com>
---
 C4/Reserves.pm                                     | 28 ++++++++++++----------
 .../intranet-tmpl/prog/en/includes/holds_table.inc |  8 ++++++-
 reserve/modrequest.pl                              | 10 +++++---
 3 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/C4/Reserves.pm b/C4/Reserves.pm
index 1a1a543..15f7131 100644
--- a/C4/Reserves.pm
+++ b/C4/Reserves.pm
@@ -908,8 +908,6 @@ sub ModReserve {
 
     my $rank = $params->{'rank'};
     my $reserve_id = $params->{'reserve_id'};
-    my $reservedate = $params->{reservedate} || undef;
-    my $expirationdate = $params->{expirationdate} || undef;
     my $branchcode = $params->{'branchcode'};
     my $itemnumber = $params->{'itemnumber'};
     my $suspend_until = $params->{'suspend_until'};
@@ -938,17 +936,21 @@ sub ModReserve {
         logaction( 'HOLDS', 'MODIFY', $hold->reserve_id, Dumper($hold->unblessed) )
             if C4::Context->preference('HoldsLog');
 
-        $hold->set(
-            {
-                priority    => $rank,
-                reservedate => $reservedate,
-                expirationdate => $expirationdate,
-                branchcode  => $branchcode,
-                itemnumber  => $itemnumber,
-                found       => undef,
-                waitingdate => undef
-            }
-        )->store();
+        my $properties = {
+            priority    => $rank,
+            branchcode  => $branchcode,
+            itemnumber  => $itemnumber,
+            found       => undef,
+            waitingdate => undef
+        };
+        if (exists $params->{reservedate}) {
+            $properties->{reservedate} = $params->{reservedate} || undef;
+        }
+        if (exists $params->{expirationdate}) {
+            $properties->{expirationdate} = $params->{expirationdate} || undef;
+        }
+
+        $hold->set($properties)->store();
 
         if ( defined( $suspend_until ) ) {
             if ( $suspend_until ) {
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc
index bb4d534..dbb9ccf 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc
@@ -106,7 +106,13 @@
             </td>
 
             <td>[% hold.notes | html %]</td>
-            <td><input type="date" value="[% hold.date | html %]" required name="reservedate"></td>
+            <td>
+                [% IF Koha.Preference('AllowHoldDateInFuture') %]
+                    <input type="date" value="[% hold.date | html %]" required name="reservedate">
+                [% ELSE %]
+                    [% hold.date | $KohaDates %]
+                [% END %]
+            </td>
             <td><input type="date" value="[% hold.expirationdate | html %]" name="expirationdate"></td>
 
             <td>
diff --git a/reserve/modrequest.pl b/reserve/modrequest.pl
index 7e2c189..04c1b7d 100755
--- a/reserve/modrequest.pl
+++ b/reserve/modrequest.pl
@@ -69,15 +69,19 @@ if ($CancelBorrowerNumber) {
 else {
     for (my $i=0;$i<$count;$i++){
         undef $itemnumber[$i] if !$itemnumber[$i];
-        ModReserve({
+        my $params = {
             rank => $rank[$i],
             reserve_id => $reserve_id[$i],
-            reservedate => $reservedates[$i],
             expirationdate => $expirationdates[$i],
             branchcode => $branch[$i],
             itemnumber => $itemnumber[$i],
             suspend_until => $suspend_until[$i]
-        });
+        };
+        if (C4::Context->preference('AllowHoldDateInFuture')) {
+            $params->{reservedate} = $reservedates[$i];
+        }
+
+        ModReserve($params);
     }
 }
 
-- 
2.7.4