Browse Source

Bug 23463: Remove DelItem

Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
20.05.x
Jonathan Druart 5 years ago
committed by Martin Renvoize
parent
commit
b844b19dfc
Signed by: martin.renvoize GPG Key ID: 422B469130441A0F
  1. 81
      C4/Items.pm
  2. 37
      Koha/Item.pm
  3. 2
      t/db_dependent/Items.t
  4. 29
      t/db_dependent/Items/DelItem.t

81
C4/Items.pm

@ -32,7 +32,6 @@ BEGIN {
Item2Marc
ModDateLastSeen
ModItemTransfer
DelItem
CheckItemPreSave
GetItemsForInventory
GetItemsInfo
@ -425,40 +424,6 @@ sub ModDateLastSeen {
$item->store({ log_action => 0 });
}
=head2 DelItem
DelItem({ itemnumber => $itemnumber, [ biblionumber => $biblionumber ] } );
Exported function (core API) for deleting an item record in Koha.
=cut
sub DelItem {
my ( $params ) = @_;
my $itemnumber = $params->{itemnumber};
my $biblionumber = $params->{biblionumber};
unless ($biblionumber) {
my $item = Koha::Items->find( $itemnumber );
$biblionumber = $item ? $item->biblio->biblionumber : undef;
}
# If there is no biblionumber for the given itemnumber, there is nothing to delete
return 0 unless $biblionumber;
# FIXME check the item has no current issues
my $deleted = _koha_delete_item( $itemnumber );
ModZebra( $biblionumber, "specialUpdate", "biblioserver" );
_after_item_action_hooks({ action => 'delete', item_id => $itemnumber });
#search item field code
logaction("CATALOGUING", "DELETE", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
return $deleted;
}
=head2 CheckItemPreSave
my $item_ref = TransformMarcToKoha($marc, 'items');
@ -1480,12 +1445,9 @@ sub DelItemCheck {
my $status = ItemSafeToDelete( $biblionumber, $itemnumber );
if ( $status == 1 ) {
DelItem(
{
biblionumber => $biblionumber,
itemnumber => $itemnumber
}
);
my $item = Koha::Items->find($itemnumber);
$item->move_to_deleted;
$item->delete;
}
return $status;
}
@ -1518,43 +1480,6 @@ sub _mod_item_dates { # date formatting for date fields in item hash
}
}
=head2 _koha_delete_item
_koha_delete_item( $itemnum );
Internal function to delete an item record from the koha tables
=cut
sub _koha_delete_item {
my ( $itemnum ) = @_;
my $dbh = C4::Context->dbh;
# save the deleted item to deleteditems table
my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
$sth->execute($itemnum);
my $data = $sth->fetchrow_hashref();
# There is no item to delete
return 0 unless $data;
my $query = "INSERT INTO deleteditems SET ";
my @bind = ();
foreach my $key ( keys %$data ) {
next if ( $key eq 'timestamp' ); # timestamp will be set by db
$query .= "$key = ?,";
push( @bind, $data->{$key} );
}
$query =~ s/\,$//;
$sth = $dbh->prepare($query);
$sth->execute(@bind);
# delete from items table
$sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
my $deleted = $sth->execute($itemnum);
return ( $deleted == 1 ) ? 1 : 0;
}
=head2 _marc_from_item_hash
my $item_marc = _marc_from_item_hash($item, $frameworkcode[, $unlinked_item_subfields]);

37
Koha/Item.pm

@ -156,6 +156,43 @@ sub store {
return $self->SUPER::store;
}
=head3 delete
=cut
sub delete {
my ( $self ) = @_;
# FIXME check the item has no current issues
# i.e. raise the appropriate exception
C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" );
$self->_after_item_action_hooks({ action => 'delete' });
logaction( "CATALOGUING", "DELETE", $self->itemnumber, "item" )
if C4::Context->preference("CataloguingLog");
return $self->SUPER::delete;
}
=head3 move_to_deleted
my $is_moved = $item->move_to_deleted;
Move an item to the deleteditems table.
This can be done before deleting an item, to make sure the data are not completely deleted.
=cut
sub move_to_deleted {
my ($self) = @_;
my $item_infos = $self->unblessed;
delete $item_infos->{timestamp}; #This ensures the timestamp date in deleteditems will be set to the current timestamp
return Koha::Database->new->schema->resultset('Deleteditem')->create($item_infos);
}
=head3 effective_itemtype
Returns the itemtype for the item based on whether item level itemtypes are set or not.

2
t/db_dependent/Items.t

@ -90,7 +90,7 @@ subtest 'General Add, Get and Del tests' => sub {
cmp_ok($moditem->barcode, '==', '987654321', 'Modified item barcode successfully to: '.$moditem->barcode . '.');
# Delete item.
DelItem({ biblionumber => $biblio->biblionumber, itemnumber => $itemnumber });
$moditem->delete;
my $getdeleted = Koha::Items->find($itemnumber);
is($getdeleted, undef, "Item deleted as expected.");

29
t/db_dependent/Items/DelItem.t

@ -1,5 +1,7 @@
use Modern::Perl;
# FIXME This file must be removed and the test moved to Koha::Item->delete
use MARC::Record;
use C4::Items;
use C4::Biblio;
@ -8,7 +10,7 @@ use Koha::Items;
use t::lib::TestBuilder;
use Test::More tests => 6;
use Test::More tests => 2;
my $schema = Koha::Database->schema;
$schema->storage->txn_begin;
@ -20,31 +22,14 @@ my $library = $builder->build({
my $biblio = $builder->build_sample_biblio();
my $itemnumber = $builder->build_sample_item(
my $item = $builder->build_sample_item(
{
biblionumber => $biblio->biblionumber,
library => $library->{branchcode}
}
)->itemnumber;
);
my $deleted = DelItem( { biblionumber => $biblio->biblionumber, itemnumber => $itemnumber } );
my $deleted = $item->delete;
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
my $deleted_item = Koha::Items->find($itemnumber);
my $deleted_item = Koha::Items->find($item->itemnumber);
is( $deleted_item, undef, "DelItem with biblionumber parameter - the item should be deleted." );
$itemnumber = $builder->build_sample_item(
{
biblionumber => $biblio->biblionumber,
library => $library->{branchcode}
}
)->itemnumber;
$deleted = DelItem( { biblionumber => $biblio->biblionumber, itemnumber => $itemnumber } );
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
$deleted_item = Koha::Items->find($itemnumber);
is( $deleted_item, undef, "DelItem without biblionumber parameter - the item should be deleted." );
$deleted = DelItem( { itemnumber => $itemnumber + 1} );
is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
$deleted = DelItem( { itemnumber => $itemnumber + 1, biblionumber => $biblio->biblionumber } );
is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );

Loading…
Cancel
Save