Bug 9762: (Alternative) Handle renewals

Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 255c0897f2)
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
This commit is contained in:
Martin Renvoize 2025-04-25 17:21:13 +01:00 committed by Paul Derscheid
parent 3cb8cccf7e
commit 4921bb669a
No known key found for this signature in database
GPG Key ID: C25F9FD44CED595B
3 changed files with 38 additions and 14 deletions

View File

@ -3488,6 +3488,8 @@ sub AddRenewal {
my $seen = $params->{seen}; my $seen = $params->{seen};
my $automatic = $params->{automatic}; my $automatic = $params->{automatic};
my $skip_record_index = $params->{skip_record_index}; my $skip_record_index = $params->{skip_record_index};
my $confirmations = $params->{confirmations};
my $forced = $params->{forced};
# Fallback on a 'seen' renewal # Fallback on a 'seen' renewal
$seen = defined $seen && $seen == 0 ? 0 : 1; $seen = defined $seen && $seen == 0 ? 0 : 1;
@ -3561,10 +3563,12 @@ sub AddRenewal {
); );
if ( !$seen && $rule && looks_like_number( $rule->rule_value ) ) { if ( !$seen && $rule && looks_like_number( $rule->rule_value ) ) {
$unseen_renewals++; $unseen_renewals++;
push @{$confirmations}, 'UNSEEN';
} else { } else {
# If the renewal is seen, unseen should revert to 0 # If the renewal is seen, unseen should revert to 0
$unseen_renewals = 0; $unseen_renewals = 0;
push @{$confirmations}, 'SEEN';
} }
} }
@ -3677,8 +3681,24 @@ sub AddRenewal {
}; };
#Log the renewal #Log the renewal
logaction( "CIRCULATION", "RENEWAL", $borrowernumber, $itemnumber ) if ( C4::Context->preference("RenewalLog") ) {
if C4::Context->preference("RenewalLog"); my $info = $itemnumber;
if ( defined($confirmations) || defined($forced) ) {
$info = to_json(
{
issue => $issue->issue_id,
itemnumber => $itemnumber,
confirmations => $confirmations,
forced => $forced
},
{
pretty => 1,
cononical => 1
}
);
}
logaction( "CIRCULATION", "RENEWAL", $borrowernumber, $info );
}
Koha::Plugins->call( Koha::Plugins->call(
'after_circ_action', 'after_circ_action',

View File

@ -71,9 +71,11 @@ if ( $op eq 'cud-renew' && $barcode ) {
my @message; my @message;
if ( ( $patron->is_debarred || q{} ) lt dt_from_string()->ymd() ) { if ( ( $patron->is_debarred || q{} ) lt dt_from_string()->ymd() ) {
my $confirmations;
my $can_renew; my $can_renew;
my $info; my $info;
( $can_renew, $error, $info ) = CanBookBeRenewed( $patron, $checkout, $override_limit ); ( $can_renew, $error, $info ) = CanBookBeRenewed( $patron, $checkout, $override_limit );
push @{$confirmations}, $override_limit if $override_limit;
if ( $error && ( $error eq 'on_reserve' ) ) { if ( $error && ( $error eq 'on_reserve' ) ) {
if ($override_holds) { if ($override_holds) {
@ -123,10 +125,11 @@ if ( $op eq 'cud-renew' && $barcode ) {
$date_due = AddRenewal( $date_due = AddRenewal(
{ {
itemnumber => $item->itemnumber(), itemnumber => $item->itemnumber(),
branch => $branchcode, branch => $branchcode,
datedue => $date_due, datedue => $date_due,
seen => !$unseen seen => !$unseen,
confirmations => $confirmations
} }
); );
$template->param( date_due => $date_due ); $template->param( date_due => $date_due );

View File

@ -59,7 +59,7 @@
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="RENEWAL_LIMIT" />
<input type="hidden" name="op" value="cud-renew" /> <input type="hidden" name="op" value="cud-renew" />
<input type="hidden" name="hard_due_date" value="[% hard_due_date | html %]" /> <input type="hidden" name="hard_due_date" value="[% hard_due_date | html %]" />
<button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override limit and renew</button> <button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override limit and renew</button>
@ -72,7 +72,7 @@
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="UNSEEN_LIMIT" />
<input type="hidden" name="op" value="cud-renew" /> <input type="hidden" name="op" value="cud-renew" />
<button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override limit and renew</button> <button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override limit and renew</button>
</form> </form>
@ -84,7 +84,7 @@
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="TOO_SOON" />
<input type="hidden" name="op" value="cud-renew" /> <input type="hidden" name="op" value="cud-renew" />
<button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override and renew</button> <button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override and renew</button>
</form> </form>
@ -96,7 +96,7 @@
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="AUTO_TOO_SOON" />
<input type="hidden" name="op" value="cud-renew" /> <input type="hidden" name="op" value="cud-renew" />
<button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override and renew</button> <button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override and renew</button>
</form> </form>
@ -108,7 +108,7 @@
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="AUTO_TOO_LATE" />
<input type="hidden" name="op" value="cud-renew" /> <input type="hidden" name="op" value="cud-renew" />
<input type="submit" class="btn btn-default approve" value="Override and renew" /> <input type="submit" class="btn btn-default approve" value="Override and renew" />
</form> </form>
@ -120,19 +120,20 @@
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="ACCOUNT_EXPIRED" />
<input type="hidden" name="op" value="cud-renew" /> <input type="hidden" name="op" value="cud-renew" />
<input type="submit" class="btn btn-default approve" value="Override and renew" /> <input type="submit" class="btn btn-default approve" value="Override and renew" />
</form> </form>
[% END %] [% END %]
[% ELSIF error == "auto_renew" or error == "auto_too_much_oweing" %] [% ELSIF error == "auto_renew" or error == "auto_too_much_oweing" %]
<p>[% INCLUDE 'biblio-title.inc' biblio=item.biblio link = 1 %] ( [% item.barcode | html %] ) has been scheduled for automatic renewal. </p> <p>[% INCLUDE 'biblio-title.inc' biblio=item.biblio link = 1 %] ( [% item.barcode | html %] ) has been scheduled for automatic renewal. </p>
[% SET override_limit = error == "auto_renew" ? "AUTO_RENEW" : "TOO_MUCH" %]
[% IF Koha.Preference('AllowRenewalLimitOverride') %] [% IF Koha.Preference('AllowRenewalLimitOverride') %]
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="[% override_limit | html %]" />
<input type="hidden" name="op" value="cud-renew" /> <input type="hidden" name="op" value="cud-renew" />
<button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override limit and renew</button> <button type="submit" class="btn btn-default approve"><i class="fa fa-check"></i> Override limit and renew</button>
</form> </form>
@ -143,7 +144,7 @@
<form method="post" action="/cgi-bin/koha/circ/renew.pl"> <form method="post" action="/cgi-bin/koha/circ/renew.pl">
[% INCLUDE 'csrf-token.inc' %] [% INCLUDE 'csrf-token.inc' %]
<input type="hidden" name="barcode" value="[% item.barcode | html %]" /> <input type="hidden" name="barcode" value="[% item.barcode | html %]" />
<input type="hidden" name="override_limit" value="1" /> <input type="hidden" name="override_limit" value="ON_RESERVE" />
<input type="hidden" name="override_holds" value="1" /> <input type="hidden" name="override_holds" value="1" />
<div> <div>
<label for="renewonholdduedate">Renewal due date:</label> <label for="renewonholdduedate">Renewal due date:</label>