Bug 29018: Make DELETE /patrons/:patron_id check things

When the route was implemented, the checks were overlooked. This patch
adds checks for:
- Guarantees
- Debts
- Current checkouts

Any of those will block deletion, as it should.

To test:
1. Apply the regression tests patch
2. Run:
   $ kshell
  k$ prove t/db_dependent/api/v1/patrons.t
=> FAIL: Tests fail, the route misses checks
3. Apply this patch
4. Repeat 2
=> SUCCESS: Tests pass! The three conditions prevent deletion!
5. Sign off :-D

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
(cherry picked from commit 4948faacc0)
Signed-off-by: Victor Grousset/tuxayo <victor@tuxayo.net>
This commit is contained in:
Tomas Cohen Arazi 2021-12-20 12:05:59 -03:00 committed by Victor Grousset/tuxayo
parent c16e8c8174
commit df22d207f2
2 changed files with 45 additions and 4 deletions

View File

@ -315,10 +315,39 @@ sub delete {
return try {
$patron->delete;
return $c->render(
status => 204,
openapi => q{}
if ( $patron->checkouts->count > 0 ) {
return $c->render(
status => 409,
openapi => { error => 'Pending checkouts prevent deletion' }
);
}
my $account = $patron->account;
if ( $account->outstanding_debits->total_outstanding > 0 ) {
return $c->render(
status => 409,
openapi => { error => 'Pending debts prevent deletion' }
);
}
if ( $patron->guarantee_relationships->count > 0 ) {
return $c->render(
status => 409,
openapi => { error => 'Patron is a guarantor and it prevents deletion' }
);
}
$patron->_result->result_source->schema->txn_do(
sub {
$patron->move_to_deleted;
$patron->delete;
return $c->render(
status => 204,
openapi => q{}
);
}
);
} catch {
if ( blessed $_ && $_->isa('Koha::Exceptions::Patron::FailedDeleteAnonymousPatron') ) {

View File

@ -695,6 +695,18 @@
"schema": {
"$ref": "../definitions.json#/error"
}
},
"409": {
"description": "Conflict in updating resource",
"schema": {
"$ref": "../definitions.json#/error"
}
},
"500": {
"description": "Internal server error",
"schema": {
"$ref": "../definitions.json#/error"
}
}
},
"x-koha-authorization": {