Bug 29525: Make Koha::Hold->cancel anonymize if required
This patch makes cancelling a hold anonymize it on the same call, if settings require it (i.e. if borrowers.privacy is set to 2). To test: 1. Apply this patch 2. Run: $ kshell k$ prove t/db_dependent/Koha/Hold.t => SUCCESS: The code actually does what it is meant to 3. Try on the UI, cancelling a hold, noticing it gets anonymized if the patron has privacy == always/2. 4. Sign off :-D Note: AnonymousPatron should be set. Otherwise it would set NULL. But that's fine, that's what Koha does already. Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
parent
c96977ede2
commit
2f3926965f
2 changed files with 79 additions and 1 deletions
|
@ -517,6 +517,8 @@ sub cancel {
|
|||
my ( $self, $params ) = @_;
|
||||
$self->_result->result_source->schema->txn_do(
|
||||
sub {
|
||||
my $patron = $self->patron;
|
||||
|
||||
$self->cancellationdate( dt_from_string->strftime( '%Y-%m-%d %H:%M:%S' ) );
|
||||
$self->priority(0);
|
||||
$self->cancellation_reason( $params->{cancellation_reason} );
|
||||
|
@ -550,7 +552,11 @@ sub cancel {
|
|||
}
|
||||
}
|
||||
|
||||
$self->_move_to_old;
|
||||
my $old_me = $self->_move_to_old;
|
||||
# anonymize if required
|
||||
$old_me->anonymize
|
||||
if $patron->privacy == 2;
|
||||
|
||||
$self->SUPER::delete(); # Do not add a DELETE log
|
||||
|
||||
# now fix the priority on the others....
|
||||
|
|
|
@ -24,12 +24,14 @@ use Test::More tests => 5;
|
|||
use Test::Exception;
|
||||
use Test::MockModule;
|
||||
|
||||
use t::lib::Mocks;
|
||||
use t::lib::TestBuilder;
|
||||
use t::lib::Mocks;
|
||||
|
||||
use Koha::ActionLogs;
|
||||
use Koha::Holds;
|
||||
use Koha::Libraries;
|
||||
use Koha::Old::Holds;
|
||||
|
||||
my $schema = Koha::Database->new->schema;
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
|
@ -382,3 +384,73 @@ subtest 'is_pickup_location_valid() tests' => sub {
|
|||
|
||||
$schema->storage->txn_rollback;
|
||||
};
|
||||
|
||||
subtest 'cancel() tests' => sub {
|
||||
|
||||
plan tests => 4;
|
||||
|
||||
$schema->storage->txn_begin;
|
||||
|
||||
my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
|
||||
|
||||
# reduce the tests noise
|
||||
t::lib::Mocks::mock_preference( 'HoldsLog', 0 );
|
||||
t::lib::Mocks::mock_preference( 'ExpireReservesMaxPickUpDelayCharge',
|
||||
undef );
|
||||
|
||||
t::lib::Mocks::mock_preference( 'AnonymousPatron', undef );
|
||||
|
||||
# 0 == keep forever
|
||||
$patron->privacy(0)->store;
|
||||
my $hold = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Holds',
|
||||
value => { borrowernumber => $patron->id, status => undef }
|
||||
}
|
||||
);
|
||||
$hold->cancel();
|
||||
is( Koha::Old::Holds->find( $hold->id )->borrowernumber,
|
||||
$patron->borrowernumber, 'Patron link is kept' );
|
||||
|
||||
# 1 == "default", meaning it is not protected from removal
|
||||
$patron->privacy(1)->store;
|
||||
$hold = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Holds',
|
||||
value => { borrowernumber => $patron->id, status => undef }
|
||||
}
|
||||
);
|
||||
$hold->cancel();
|
||||
is( Koha::Old::Holds->find( $hold->id )->borrowernumber,
|
||||
$patron->borrowernumber, 'Patron link is kept' );
|
||||
|
||||
# 2 == delete immediately
|
||||
$patron->privacy(2)->store;
|
||||
$hold = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Holds',
|
||||
value => { borrowernumber => $patron->id, status => undef }
|
||||
}
|
||||
);
|
||||
$hold->cancel();
|
||||
is( Koha::Old::Holds->find( $hold->id )->borrowernumber,
|
||||
undef, 'Patron link is deleted immediately' );
|
||||
|
||||
my $anonymous_patron = $builder->build_object({ class => 'Koha::Patrons' });
|
||||
t::lib::Mocks::mock_preference( 'AnonymousPatron', $anonymous_patron->id );
|
||||
|
||||
$hold = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Holds',
|
||||
value => { borrowernumber => $patron->id, status => undef }
|
||||
}
|
||||
);
|
||||
$hold->cancel();
|
||||
is(
|
||||
Koha::Old::Holds->find( $hold->id )->borrowernumber,
|
||||
$anonymous_patron->id,
|
||||
'Patron link is set to the configured anonymous patron immediately'
|
||||
);
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue