View | Details | Raw Unified | Return to bug 23463
Collapse All | Expand All

(-)a/C4/Items.pm (-78 / +3 lines)
Lines 32-38 BEGIN { Link Here
32
        Item2Marc
32
        Item2Marc
33
        ModDateLastSeen
33
        ModDateLastSeen
34
        ModItemTransfer
34
        ModItemTransfer
35
        DelItem
36
        CheckItemPreSave
35
        CheckItemPreSave
37
        GetItemsForInventory
36
        GetItemsForInventory
38
        GetItemsInfo
37
        GetItemsInfo
Lines 425-464 sub ModDateLastSeen { Link Here
425
    $item->store({ log_action => 0 });
424
    $item->store({ log_action => 0 });
426
}
425
}
427
426
428
=head2 DelItem
429
430
  DelItem({ itemnumber => $itemnumber, [ biblionumber => $biblionumber ] } );
431
432
Exported function (core API) for deleting an item record in Koha.
433
434
=cut
435
436
sub DelItem {
437
    my ( $params ) = @_;
438
439
    my $itemnumber   = $params->{itemnumber};
440
    my $biblionumber = $params->{biblionumber};
441
442
    unless ($biblionumber) {
443
        my $item = Koha::Items->find( $itemnumber );
444
        $biblionumber = $item ? $item->biblio->biblionumber : undef;
445
    }
446
447
    # If there is no biblionumber for the given itemnumber, there is nothing to delete
448
    return 0 unless $biblionumber;
449
450
    # FIXME check the item has no current issues
451
    my $deleted = _koha_delete_item( $itemnumber );
452
453
    ModZebra( $biblionumber, "specialUpdate", "biblioserver" );
454
455
    _after_item_action_hooks({ action => 'delete', item_id => $itemnumber });
456
457
    #search item field code
458
    logaction("CATALOGUING", "DELETE", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
459
    return $deleted;
460
}
461
462
=head2 CheckItemPreSave
427
=head2 CheckItemPreSave
463
428
464
    my $item_ref = TransformMarcToKoha($marc, 'items');
429
    my $item_ref = TransformMarcToKoha($marc, 'items');
Lines 1480-1491 sub DelItemCheck { Link Here
1480
    my $status = ItemSafeToDelete( $biblionumber, $itemnumber );
1445
    my $status = ItemSafeToDelete( $biblionumber, $itemnumber );
1481
1446
1482
    if ( $status == 1 ) {
1447
    if ( $status == 1 ) {
1483
        DelItem(
1448
        my $item = Koha::Items->find($itemnumber);
1484
            {
1449
        $item->move_to_deleted;
1485
                biblionumber => $biblionumber,
1450
        $item->delete;
1486
                itemnumber   => $itemnumber
1487
            }
1488
        );
1489
    }
1451
    }
1490
    return $status;
1452
    return $status;
1491
}
1453
}
Lines 1518-1560 sub _mod_item_dates { # date formatting for date fields in item hash Link Here
1518
    }
1480
    }
1519
}
1481
}
1520
1482
1521
=head2 _koha_delete_item
1522
1523
  _koha_delete_item( $itemnum );
1524
1525
Internal function to delete an item record from the koha tables
1526
1527
=cut
1528
1529
sub _koha_delete_item {
1530
    my ( $itemnum ) = @_;
1531
1532
    my $dbh = C4::Context->dbh;
1533
    # save the deleted item to deleteditems table
1534
    my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
1535
    $sth->execute($itemnum);
1536
    my $data = $sth->fetchrow_hashref();
1537
1538
    # There is no item to delete
1539
    return 0 unless $data;
1540
1541
    my $query = "INSERT INTO deleteditems SET ";
1542
    my @bind  = ();
1543
    foreach my $key ( keys %$data ) {
1544
        next if ( $key eq 'timestamp' ); # timestamp will be set by db
1545
        $query .= "$key = ?,";
1546
        push( @bind, $data->{$key} );
1547
    }
1548
    $query =~ s/\,$//;
1549
    $sth = $dbh->prepare($query);
1550
    $sth->execute(@bind);
1551
1552
    # delete from items table
1553
    $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
1554
    my $deleted = $sth->execute($itemnum);
1555
    return ( $deleted == 1 ) ? 1 : 0;
1556
}
1557
1558
=head2 _marc_from_item_hash
1483
=head2 _marc_from_item_hash
1559
1484
1560
  my $item_marc = _marc_from_item_hash($item, $frameworkcode[, $unlinked_item_subfields]);
1485
  my $item_marc = _marc_from_item_hash($item, $frameworkcode[, $unlinked_item_subfields]);
(-)a/Koha/Item.pm (+37 lines)
Lines 156-161 sub store { Link Here
156
    return $self->SUPER::store;
156
    return $self->SUPER::store;
157
}
157
}
158
158
159
=head3 delete
160
161
=cut
162
163
sub delete {
164
    my ( $self ) = @_;
165
166
    # FIXME check the item has no current issues
167
    # i.e. raise the appropriate exception
168
169
    C4::Biblio::ModZebra( $self->biblionumber, "specialUpdate", "biblioserver" );
170
171
    $self->_after_item_action_hooks({ action => 'delete' });
172
173
    logaction( "CATALOGUING", "DELETE", $self->itemnumber, "item" )
174
      if C4::Context->preference("CataloguingLog");
175
176
    return $self->SUPER::delete;
177
}
178
179
=head3 move_to_deleted
180
181
my $is_moved = $item->move_to_deleted;
182
183
Move an item to the deleteditems table.
184
This can be done before deleting an item, to make sure the data are not completely deleted.
185
186
=cut
187
188
sub move_to_deleted {
189
    my ($self) = @_;
190
    my $item_infos = $self->unblessed;
191
    delete $item_infos->{timestamp}; #This ensures the timestamp date in deleteditems will be set to the current timestamp
192
    return Koha::Database->new->schema->resultset('Deleteditem')->create($item_infos);
193
}
194
195
159
=head3 effective_itemtype
196
=head3 effective_itemtype
160
197
161
Returns the itemtype for the item based on whether item level itemtypes are set or not.
198
Returns the itemtype for the item based on whether item level itemtypes are set or not.
(-)a/t/db_dependent/Items.t (-1 / +1 lines)
Lines 90-96 subtest 'General Add, Get and Del tests' => sub { Link Here
90
    cmp_ok($moditem->barcode, '==', '987654321', 'Modified item barcode successfully to: '.$moditem->barcode . '.');
90
    cmp_ok($moditem->barcode, '==', '987654321', 'Modified item barcode successfully to: '.$moditem->barcode . '.');
91
91
92
    # Delete item.
92
    # Delete item.
93
    DelItem({ biblionumber => $biblio->biblionumber, itemnumber => $itemnumber });
93
    $moditem->delete;
94
    my $getdeleted = Koha::Items->find($itemnumber);
94
    my $getdeleted = Koha::Items->find($itemnumber);
95
    is($getdeleted, undef, "Item deleted as expected.");
95
    is($getdeleted, undef, "Item deleted as expected.");
96
96
(-)a/t/db_dependent/Items/DelItem.t (-23 / +7 lines)
Lines 1-5 Link Here
1
use Modern::Perl;
1
use Modern::Perl;
2
2
3
# FIXME This file must be removed and the test moved to Koha::Item->delete
4
3
use MARC::Record;
5
use MARC::Record;
4
use C4::Items;
6
use C4::Items;
5
use C4::Biblio;
7
use C4::Biblio;
Lines 8-14 use Koha::Items; Link Here
8
10
9
use t::lib::TestBuilder;
11
use t::lib::TestBuilder;
10
12
11
use Test::More tests => 6;
13
use Test::More tests => 2;
12
14
13
my $schema = Koha::Database->schema;
15
my $schema = Koha::Database->schema;
14
$schema->storage->txn_begin;
16
$schema->storage->txn_begin;
Lines 20-50 my $library = $builder->build({ Link Here
20
22
21
my $biblio = $builder->build_sample_biblio();
23
my $biblio = $builder->build_sample_biblio();
22
24
23
my $itemnumber = $builder->build_sample_item(
25
my $item = $builder->build_sample_item(
24
    {
26
    {
25
        biblionumber => $biblio->biblionumber,
27
        biblionumber => $biblio->biblionumber,
26
        library      => $library->{branchcode}
28
        library      => $library->{branchcode}
27
    }
29
    }
28
)->itemnumber;
30
);
29
31
30
my $deleted = DelItem( { biblionumber => $biblio->biblionumber, itemnumber => $itemnumber } );
32
my $deleted = $item->delete;
31
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
33
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
32
my $deleted_item = Koha::Items->find($itemnumber);
34
my $deleted_item = Koha::Items->find($item->itemnumber);
33
is( $deleted_item, undef, "DelItem with biblionumber parameter - the item should be deleted." );
35
is( $deleted_item, undef, "DelItem with biblionumber parameter - the item should be deleted." );
34
35
$itemnumber = $builder->build_sample_item(
36
    {
37
        biblionumber => $biblio->biblionumber,
38
        library      => $library->{branchcode}
39
    }
40
)->itemnumber;
41
$deleted = DelItem( { biblionumber => $biblio->biblionumber, itemnumber => $itemnumber } );
42
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
43
$deleted_item = Koha::Items->find($itemnumber);
44
is( $deleted_item, undef, "DelItem without biblionumber parameter - the item should be deleted." );
45
46
$deleted = DelItem( { itemnumber => $itemnumber + 1} );
47
is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
48
49
$deleted = DelItem( { itemnumber => $itemnumber + 1, biblionumber => $biblio->biblionumber } );
50
is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
51
- 

Return to bug 23463