Bug 25855: Add a post_renewal_action plugin hook
authorTomas Cohen Arazi <tomascohen@theke.io>
Tue, 23 Jun 2020 19:23:06 +0000 (16:23 -0300)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 30 Jul 2020 15:30:23 +0000 (17:30 +0200)
This patch adds a new hook to notify plugins about renewal actions. To
test it:

1. Apply the unit tests
2. Run:
   $ kshell
  k$ prove t/db_dependent/Koha/Plugins/Circulation_hooks.t
=> FAIL: The tests expect some warnings to show, and they don't (i.e.
        the sample plugin hook is not being called).
3. Apply this patch
4. Repeat 2
=> SUCCESS: Tests pass! The hook is being called on renewal!
5. Sign off :-D

Sponsored-by: ByWater Solutions
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

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

C4/Circulation.pm

index a96fc57..efda14c 100644 (file)
@@ -62,6 +62,7 @@ use Koha::Checkouts::ReturnClaims;
 use Carp;
 use List::MoreUtils qw( uniq any );
 use Scalar::Util qw( looks_like_number );
+use Try::Tiny;
 use Date::Calc qw(
   Today
   Today_and_Now
@@ -3095,6 +3096,20 @@ sub AddRenewal {
             DelUniqueDebarment({ borrowernumber => $borrowernumber, type => 'OVERDUES' });
         }
 
+        _post_renewal_actions(
+            {
+                renewal_library_id =>
+                  $item_object->renewal_branchcode( { branch => $branch } ),
+                charge            => $charge,
+                item_id           => $itemnumber,
+                item_type         => $itemtype,
+                shelving_location => $item_object->location // q{},
+                patron_id         => $borrowernumber,
+                collection_code   => $item_object->ccode // q{},
+                date_due          => $datedue
+            }
+        ) if C4::Context->config("enable_plugins");
+
         # Add the renewal to stats
         UpdateStats(
             {
@@ -4241,6 +4256,10 @@ sub GetTopIssues {
     return @$rows;
 }
 
+=head2 Internal methods
+
+=cut
+
 sub _CalculateAndUpdateFine {
     my ($params) = @_;
 
@@ -4317,6 +4336,29 @@ sub _item_denied_renewal {
     return 0;
 }
 
+=head3 _post_renewal_actions
+
+Internal method that calls the post_renewal_action plugin hook on configured
+plugins.
+
+=cut
+
+sub _post_renewal_actions {
+    my ($params) = @_;
+
+    my @plugins = Koha::Plugins->new->GetPlugins({
+        method => 'post_renewal_action',
+    });
+
+    foreach my $plugin ( @plugins ) {
+        try {
+            $plugin->post_renewal_action( $params );
+        }
+        catch {
+            warn "$_";
+        };
+    }
+}
 
 1;