Bug 23681: Clean up on delete
authorAndrew Isherwood <andrew.isherwood@ptfs-europe.com>
Thu, 3 Oct 2019 14:14:12 +0000 (15:14 +0100)
committerTomas Cohen Arazi <tomascohen@theke.io>
Thu, 25 Aug 2022 11:41:02 +0000 (08:41 -0300)
When a patron restriction type is deleted, any debarments that use that
type need to revert to the default type, this patch implements this
behaviour

Sponsored-by: Loughborough University
Signed-off-by: Benjamin Veasey <B.T.Veasey@lboro.ac.uk>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Koha/RestrictionType.pm
Koha/RestrictionTypes.pm

index 1121c9e..7966ff1 100644 (file)
@@ -19,6 +19,9 @@ use Modern::Perl;
 
 use base qw(Koha::Object);
 
+use Koha::RestrictionTypes;
+use C4::Context;
+
 =head1 NAME
 
 Koha::RestrictionType - Koha RestrictionType Object class
@@ -27,8 +30,39 @@ Koha::RestrictionType - Koha RestrictionType Object class
 
 =head2 Class Methods
 
+=head3 delete
+
+Overloaded delete method that does extra clean up:
+- Reset all restrictions using the restriction type about to be deleted
+  back to whichever restriction is marked as default
+
 =cut
 
+sub delete {
+    my ( $self ) = @_;
+
+    # Find out what the default is
+    my $default = Koha::RestrictionTypes->find({ dflt => 1 })->code;
+    # Ensure we're not trying to delete a readonly type (this includes
+    # the default type)
+    return 0 if $self->ronly == 1;
+    # We can't use Koha objects here because Koha::Patron::Debarments
+    # is not a Koha object. So we'll do it old skool
+    my $rows = C4::Context->dbh->do(
+        "UPDATE borrower_debarments SET type = ? WHERE type = ?",
+        undef,
+        ($default, $self->code)
+    );
+
+    # Now do the delete if the update was successful
+    if ($rows) {
+        my $deleted = $self->SUPER::delete($self);
+        return $deleted
+    }
+
+    return 0;
+}
+
 =head2 Internal methods
 
 =head3 type
index 560e5fd..d553853 100644 (file)
@@ -36,7 +36,7 @@ Koha::RestrictionTypes - Koha Restriction Types Object set class
 
 =cut
 
-=head3 type
+=head3 keyed_on_code
 
 Return all restriction types as a hashref keyed on the code
 
@@ -54,7 +54,7 @@ sub keyed_on_code {
     return $out;
 }
 
-=head3 type
+=head3 _type
 
 =cut
 
@@ -62,9 +62,7 @@ sub _type {
     return 'DebarmentType';
 }
 
-=head3 type
-
-Object class
+=head3 object_class
 
 =cut