Lp 1843079: Add renewals remaining to AutoRenew reactor's user data
authorJason Stephenson <jason@sigio.com>
Fri, 6 Sep 2019 14:38:25 +0000 (10:38 -0400)
committerJason Boyer <JBoyer@equinoxinitiative.org>
Thu, 13 Aug 2020 00:00:43 +0000 (20:00 -0400)
Add auto_renewal_remaining and total_renewal_remaining fields to the
autorenew event's user data so that we can report the number of
renewals remaining to the patron without doing (possibly erroneous)
math in the template.  When the circulation is renewed, we use the
renewal remaining counts from the new circulation.  When the renewal
fails, we use the counts from the original circulation.

The current template is not modified to add these fields.  That is left
as an exercise for sites that want to add this information for the
convenience of their patrons.

Signed-off-by: Jason Stephenson <jason@sigio.com>
Signed-off-by: Jason Boyer <JBoyer@equinoxinitiative.org>
Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/Circ/AutoRenew.pm
docs/RELEASE_NOTES_NEXT/Circulation/autorenewnotify-renewal-field.adoc [new file with mode: 0644]

index a64d19c..7274c40 100644 (file)
@@ -66,6 +66,11 @@ sub handler {
         my $is_renewed = $evt->{textcode} eq 'SUCCESS' ? 1 : 0;
 
         my $new_circ_due = $is_renewed ? $evt->{payload}->{circ}->due_date : '';
         my $is_renewed = $evt->{textcode} eq 'SUCCESS' ? 1 : 0;
 
         my $new_circ_due = $is_renewed ? $evt->{payload}->{circ}->due_date : '';
+        my $total_remaining = $is_renewed ? $evt->{payload}->{circ}->renewal_remaining : $_->renewal_remaining;
+        my $auto_remaining = $is_renewed ? $evt->{payload}->{circ}->auto_renewal_remaining : $_->auto_renewal_remaining;
+        # Check for negative renewal remaining. It can happen with an override renewal:
+        $total_remaining = ($total_remaining < 0) ? 0 : $total_remaining;
+        $auto_remaining = ($auto_remaining < 0) ? 0 : $auto_remaining; # Just making sure....
 
         my %user_data = (
             copy => $_->target_copy(),
 
         my %user_data = (
             copy => $_->target_copy(),
@@ -74,6 +79,8 @@ sub handler {
             new_due_date => $is_renewed ? $evt->{payload}->{circ}->due_date : '',
             old_due_date => !$is_renewed ? $_->due_date() : '',
             textcode => $evt->{textcode},
             new_due_date => $is_renewed ? $evt->{payload}->{circ}->due_date : '',
             old_due_date => !$is_renewed ? $_->due_date() : '',
             textcode => $evt->{textcode},
+            total_renewal_remaining => $total_remaining,
+            auto_renewal_remaining => ($auto_remaining < $total_remaining) ? $auto_remaining : $total_remaining,
         );
 
         # Create the event from the source circ instead of the
         );
 
         # Create the event from the source circ instead of the
diff --git a/docs/RELEASE_NOTES_NEXT/Circulation/autorenewnotify-renewal-field.adoc b/docs/RELEASE_NOTES_NEXT/Circulation/autorenewnotify-renewal-field.adoc
new file mode 100644 (file)
index 0000000..df3431e
--- /dev/null
@@ -0,0 +1,16 @@
+New Fields for AutorenewNotify Event Template
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Two new fields, `auto_renewal_remaining`, and `total_renewal_remaining` have
+been added to the AutorenewNotify action/trigger event code.  They will
+report the number of autorenewals and regular renewals, respectively,
+remaining on the new circulation if renewed, or on the old circulation
+if not renewed.  This is provided as a convenience to avoid possibly
+inaccurate math in the template.  You may access them in the template via
+the `udata`:
+
+.................................................
+Automatic Renewals Remaining: [% udata.auto_renewal_remaining %]
+Total Renewals Remaining: [% udata.total_renewal_remaining %]
+.................................................
+