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

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