From d8c36aa8ecbde916c9220e881616ababa4bfdc4d Mon Sep 17 00:00:00 2001
From: Eivin Giske Skaaren <eskaaren@yahoo.no>
Date: Mon, 25 May 2015 17:10:54 +0000
Subject: [PATCH] Bug 10067 - decreaseLoanHighHolds messes with specify due
 date

To test:

1. On a branch up to date with master: apply the patch.

2. Try to check out items both with and without holds.
(The decreaseLoanHighHolds function should be configured and kick in when testing an item.

3. Expected results are:
The due date date field should be cleared after checkout if "Remember for session"
is not selected. If it is selected then the chosen date should stay in the field even
if the warning about reduced loan time for an item with too many holds is displayed.
Also the correct due dates are shown in the table after a checkout.

Known limitation: Does not work too well when jumping between different parts
of the system as it relies on the values sent to the circulation.pl script.

Sponsored-by: Halland County Library

Refactored to both fix specific issue where date is changed
and still have the old behaviour with date kept intact.
---
 circ/circulation.pl                                |   89 +++++++++++---------
 .../prog/en/modules/circ/circulation.tt            |   18 ++--
 2 files changed, 59 insertions(+), 48 deletions(-)

diff --git a/circ/circulation.pl b/circ/circulation.pl
index 8b2d8d8..7087727 100755
--- a/circ/circulation.pl
+++ b/circ/circulation.pl
@@ -56,7 +56,6 @@ use Date::Calc qw(
 );
 use List::MoreUtils qw/uniq/;
 
-
 #
 # PARAMETERS READING
 #
@@ -123,7 +122,6 @@ my $borrowernumber = $query->param('borrowernumber');
 $branch  = C4::Context->userenv->{'branch'};  
 $printer = C4::Context->userenv->{'branchprinter'};
 
-
 # If AutoLocation is not activated, we show the Circulation Parameters to chage settings of librarian
 if (C4::Context->preference("AutoLocation") != 1) {
     $template->param(ManualLocation => 1);
@@ -137,13 +135,14 @@ my $barcode        = $query->param('barcode') || q{};
 $barcode =~  s/^\s*|\s*$//g; # remove leading/trailing whitespace
 
 $barcode = barcodedecode($barcode) if( $barcode && C4::Context->preference('itemBarcodeInputFilter'));
-my $stickyduedate  = $query->param('stickyduedate') || $session->param('stickyduedate');
-my $duedatespec    = $query->param('duedatespec')   || $session->param('stickyduedate');
-my $issueconfirmed = $query->param('issueconfirmed');
-my $cancelreserve  = $query->param('cancelreserve');
-my $print          = $query->param('print') || q{};
-my $debt_confirmed = $query->param('debt_confirmed') || 0; # Don't show the debt error dialog twice
-my $charges        = $query->param('charges') || q{};
+my $stickyduedate       = $query->param('stickyduedate') || $session->param('stickyduedate');
+my $duedatespec         = $query->param('duedatespec')   || $session->param('stickyduedate');
+my $restoreduedatespec  = $query->param('restoreduedatespec') || $session->param('stickyduedate');
+my $issueconfirmed      = $query->param('issueconfirmed');
+my $cancelreserve       = $query->param('cancelreserve');
+my $print               = $query->param('print') || q{};
+my $debt_confirmed      = $query->param('debt_confirmed') || 0; # Don't show the debt error dialog twice
+my $charges             = $query->param('charges') || q{};
 
 # Check if stickyduedate is turned off
 if ( $barcode ) {
@@ -519,38 +518,48 @@ my $roadtype = C4::Koha::GetAuthorisedValueByCode( 'ROADTYPE', $borrower->{stree
 
 $template->param(%$borrower);
 
+# Restore date if changed by holds
+if ($restoreduedatespec) {
+    $duedatespec = $restoreduedatespec;
+
+    if ($stickyduedate eq 'on') {
+        $session->param( 'stickyduedate', $duedatespec );
+    }
+}
+
 $template->param(
-    lib_messages_loop => $lib_messages_loop,
-    bor_messages_loop => $bor_messages_loop,
-    all_messages_del  => C4::Context->preference('AllowAllMessageDeletion'),
-    findborrower      => $findborrower,
-    borrower          => $borrower,
-    borrowernumber    => $borrowernumber,
-    branch            => $branch,
-    branchname        => GetBranchName($borrower->{'branchcode'}),
-    printer           => $printer,
-    printername       => $printer,
-    was_renewed       => $query->param('was_renewed') ? 1 : 0,
-    expiry            => format_date($borrower->{'dateexpiry'}),
-    roadtype          => $roadtype,
-    amountold         => $amountold,
-    barcode           => $barcode,
-    stickyduedate     => $stickyduedate,
-    duedatespec       => $duedatespec,
-    message           => $message,
-    totaldue          => sprintf('%.2f', $total),
-    inprocess         => $inprocess,
-    is_child          => ($borrowernumber && $borrower->{'category_type'} eq 'C'),
-    circview => 1,
-    soundon           => C4::Context->preference("SoundOn"),
-    fast_cataloging   => $fast_cataloging,
-    CircAutoPrintQuickSlip   => C4::Context->preference("CircAutoPrintQuickSlip"),
-    activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
-    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
-    AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'),
-    RoutingSerials => C4::Context->preference('RoutingSerials'),
-    relatives_issues_count => $relatives_issues_count,
-    relatives_borrowernumbers => \@relatives,
+    lib_messages_loop           => $lib_messages_loop,
+    bor_messages_loop           => $bor_messages_loop,
+    all_messages_del            => C4::Context->preference('AllowAllMessageDeletion'),
+    findborrower                => $findborrower,
+    borrower                    => $borrower,
+    borrowernumber              => $borrowernumber,
+    branch                      => $branch,
+    branchname                  => GetBranchName($borrower->{'branchcode'}),
+    printer                     => $printer,
+    printername                 => $printer,
+    was_renewed                 => $query->param('was_renewed') ? 1 : 0,
+    expiry                      => format_date($borrower->{'dateexpiry'}),
+    roadtype                    => $roadtype,
+    amountold                   => $amountold,
+    barcode                     => $barcode,
+    stickyduedate               => $stickyduedate,
+    duedatespec                 => $duedatespec,
+    restoreduedatespec          => $restoreduedatespec,
+    message                     => $message,
+    totaldue                    => sprintf('%.2f', $total),
+    inprocess                   => $inprocess,
+    is_child                    => ($borrowernumber && $borrower->{'category_type'} eq 'C'),
+    circview                    => 1,
+    soundon                     => C4::Context->preference("SoundOn"),
+    fast_cataloging             => $fast_cataloging,
+    CircAutoPrintQuickSlip      => C4::Context->preference("CircAutoPrintQuickSlip"),
+    activeBorrowerRelationship  => (C4::Context->preference('borrowerRelationship') ne ''),
+    SuspendHoldsIntranet        => C4::Context->preference('SuspendHoldsIntranet'),
+    AutoResumeSuspendedHolds    => C4::Context->preference('AutoResumeSuspendedHolds'),
+    RoutingSerials              => C4::Context->preference('RoutingSerials'),
+    relatives_issues_count      => $relatives_issues_count,
+    relatives_borrowernumbers   => \@relatives,
 );
 
 # save stickyduedate to session
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
index fd4c53c..56ae74d 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt
@@ -311,13 +311,15 @@ $(document).ready(function() {
 [% IF HIGHHOLDS %]
 	<script language="JavaScript" type="text/javascript">
 	$(document).ready(function() {
-		$("input[name=duedatespec]:hidden").val('[% HIGHHOLDS.returndate %]');
+            $("input[name=duedatespec]:hidden").val('[% HIGHHOLDS.returndate %]');
+            $("input[name=restoreduedatespec]:hidden").val('[% duedatespec %]');
 	});
 	</script>
 [% END %]
 
 [% IF CAN_user_circulate_force_checkout or HIGHHOLDS %]
 <form method="post" action="/cgi-bin/koha/circ/circulation.pl" autocomplete="off">
+    <input type="hidden" name="restoreduedatespec" />
 
 [% IF (forceallow) %]<input type="hidden" name="forceallow" value="1">[% END %]
 
@@ -362,6 +364,7 @@ $(document).ready(function() {
 
 [% IF ( RESERVED ) %]
 <form method="get" action="/cgi-bin/koha/circ/circulation.pl">
+    <input type="hidden" name="restoreduedatespec" />
     <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
     <input type="hidden" name="duedatespec" value="[% duedatespec %]" />
     <input type="hidden" name="stickyduedate" value="[% stickyduedate %]" />
@@ -371,6 +374,7 @@ $(document).ready(function() {
 
 [% IF ( RESERVE_WAITING ) %]
 <form method="get" action="/cgi-bin/koha/circ/circulation.pl">
+    <input type="hidden" name="restoreduedatespec" />
     <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
     <input type="hidden" name="duedatespec" value="[% duedatespec %]" />
     <input type="hidden" name="stickyduedate" value="[% stickyduedate %]" />
@@ -380,8 +384,10 @@ $(document).ready(function() {
 
 <form method="get" action="/cgi-bin/koha/circ/circulation.pl">
     [% IF (forceallow) %]<input type="hidden" name="forceallow" value="1">[% END %]
+    <input type="hidden" name="restoreduedatespec" />
     <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
     <input type="hidden" name="duedatespec" value="[% duedatespec %]" />
+    <input type="hidden" name="restoreduedatespec" />
     <input type="hidden" name="stickyduedate" value="[% stickyduedate %]" />
     [% IF CAN_user_circulate_force_checkout or HIGHHOLDS %]
         [% IF ( RENEW_ISSUE ) %]
@@ -430,6 +436,7 @@ $(document).ready(function() {
                     <br />
                     <form method="post" action="/cgi-bin/koha/circ/circulation.pl" autocomplete="off">
                     [% IF (forceallow) %]<input type="hidden" name="forceallow" value="1">[% END %]
+                        <input type="hidden" name="restoreduedatespec" />
                         <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
                         <input type="hidden" name="duedatespec" value="[% duedatespec %]" />
                         <input type="hidden" name="stickyduedate" value="[% stickyduedate %]" />
@@ -537,11 +544,11 @@ No patron matched <span class="ex">[% message %]</span>
 </h4>
 [% END %]
 
-
 [% IF ( borrowers ) %]
 [% INCLUDE 'patron-toolbar.inc' %]
 
 <form method="post" action="/cgi-bin/koha/circ/circulation.pl" id="mainform" name="mainform" autocomplete="off">
+    <input type="hidden" name="restoreduedatespec" />
 <fieldset id="circ_circulation_selectborrower" class="brief">
     <legend>Patron selection</legend>
 
@@ -592,8 +599,8 @@ No patron matched <span class="ex">[% message %]</span>
 
 [% END %]
 
-
 <form method="post" action="/cgi-bin/koha/circ/circulation.pl" id="mainform" name="mainform" autocomplete="off">
+    <input type="hidden" name="restoreduedatespec" />
 [% IF ( issue ) %]
     <fieldset id="circ_circulation_issue" class="lastchecked">
 [% ELSE %]
@@ -777,8 +784,6 @@ No patron matched <span class="ex">[% message %]</span>
             </li>
 			[% END %]
 
-
-
 			</ul>
         </div>
 
@@ -846,7 +851,6 @@ No patron matched <span class="ex">[% message %]</span>
      <!-- /If flagged -->[% END %]
 
 	
-
 </div>
 </div>
 
@@ -960,8 +964,6 @@ No patron matched <span class="ex">[% message %]</span>
 </div></div>
 [% END %]
 
-
-
 </div>
 </div>
 [% UNLESS ( borrowers ) %][% IF ( borrowernumber ) %]<div class="yui-b">
-- 
1.7.10.4