Bug 11338: prevent deletion of items that are captured for holds
authorFridolyn SOMERS <fridolyn.somers@biblibre.com>
Wed, 4 Dec 2013 16:05:32 +0000 (17:05 +0100)
committerGalen Charlton <gmc@esilibrary.com>
Wed, 25 Dec 2013 17:15:08 +0000 (17:15 +0000)
commitd000a716352fb61dc0dae7715eda15896b53b4e7
tree4d89eeb8e9be046c3e8ae1cd8678c2ec2d9d95e3
parent18888359b6744a1e65e34649c927e7c146f628f8
Bug 11338: prevent deletion of items that are captured for holds

In C4::Items::DelItemCheck, there are two SQL queries: one to check
if item is on loan, the other if item is reserved.

Those two queries use "SELECT * FROM table", fetch the data with
"$var = $sth->fetchrow", and use "$var" as a boolean condition.

This is not correct, SQL query should be "SELECT COUNT(*) FROM table".

As a consequence, it was possible to delete an item without warning to
the operator even if it was waiting on the hold shelf or in transit to
fill a hold.

This patch corrects the SQL queries and sets my ($var) to show that
fetchrow returns an array.

Test plan :
- Set an item A onloan
- Set an item B reserved and the reserve waiting
- Go to items cataloguing : cgi-bin/koha/cataloguing/additem.pl?biblionumber=XXX
- Try to delete item A
=> You get an alert and item is not deleted
- Try to delete item B
=> You get an alert and item is not deleted

Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Works, and has the added bonus of being a tiny bit faster.

Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes t, xt and QA script tests.
Also tried deleting via batch delete - correct warnings are displayed.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
C4/Items.pm