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 426-465 sub ModDateLastSeen { Link Here
426
    $item->store({ log_action => 0 });
425
    $item->store({ log_action => 0 });
427
}
426
}
428
427
429
=head2 DelItem
430
431
  DelItem({ itemnumber => $itemnumber, [ biblionumber => $biblionumber ] } );
432
433
Exported function (core API) for deleting an item record in Koha.
434
435
=cut
436
437
sub DelItem {
438
    my ( $params ) = @_;
439
440
    my $itemnumber   = $params->{itemnumber};
441
    my $biblionumber = $params->{biblionumber};
442
443
    unless ($biblionumber) {
444
        my $item = Koha::Items->find( $itemnumber );
445
        $biblionumber = $item ? $item->biblio->biblionumber : undef;
446
    }
447
448
    # If there is no biblionumber for the given itemnumber, there is nothing to delete
449
    return 0 unless $biblionumber;
450
451
    # FIXME check the item has no current issues
452
    my $deleted = _koha_delete_item( $itemnumber );
453
454
    ModZebra( $biblionumber, "specialUpdate", "biblioserver" );
455
456
    _after_item_action_hooks({ action => 'delete', item_id => $itemnumber });
457
458
    #search item field code
459
    logaction("CATALOGUING", "DELETE", $itemnumber, "item") if C4::Context->preference("CataloguingLog");
460
    return $deleted;
461
}
462
463
=head2 CheckItemPreSave
428
=head2 CheckItemPreSave
464
429
465
    my $item_ref = TransformMarcToKoha($marc, 'items');
430
    my $item_ref = TransformMarcToKoha($marc, 'items');
Lines 1477-1488 sub DelItemCheck { Link Here
1477
    my $status = ItemSafeToDelete( $biblionumber, $itemnumber );
1442
    my $status = ItemSafeToDelete( $biblionumber, $itemnumber );
1478
1443
1479
    if ( $status == 1 ) {
1444
    if ( $status == 1 ) {
1480
        DelItem(
1445
        my $item = Koha::Items->find($itemnumber);
1481
            {
1446
        $item->move_to_deleted;
1482
                biblionumber => $biblionumber,
1447
        $item->delete;
1483
                itemnumber   => $itemnumber
1484
            }
1485
        );
1486
    }
1448
    }
1487
    return $status;
1449
    return $status;
1488
}
1450
}
Lines 1515-1557 sub _mod_item_dates { # date formatting for date fields in item hash Link Here
1515
    }
1477
    }
1516
}
1478
}
1517
1479
1518
=head2 _koha_delete_item
1519
1520
  _koha_delete_item( $itemnum );
1521
1522
Internal function to delete an item record from the koha tables
1523
1524
=cut
1525
1526
sub _koha_delete_item {
1527
    my ( $itemnum ) = @_;
1528
1529
    my $dbh = C4::Context->dbh;
1530
    # save the deleted item to deleteditems table
1531
    my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
1532
    $sth->execute($itemnum);
1533
    my $data = $sth->fetchrow_hashref();
1534
1535
    # There is no item to delete
1536
    return 0 unless $data;
1537
1538
    my $query = "INSERT INTO deleteditems SET ";
1539
    my @bind  = ();
1540
    foreach my $key ( keys %$data ) {
1541
        next if ( $key eq 'timestamp' ); # timestamp will be set by db
1542
        $query .= "$key = ?,";
1543
        push( @bind, $data->{$key} );
1544
    }
1545
    $query =~ s/\,$//;
1546
    $sth = $dbh->prepare($query);
1547
    $sth->execute(@bind);
1548
1549
    # delete from items table
1550
    $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
1551
    my $deleted = $sth->execute($itemnum);
1552
    return ( $deleted == 1 ) ? 1 : 0;
1553
}
1554
1555
=head2 _marc_from_item_hash
1480
=head2 _marc_from_item_hash
1556
1481
1557
  my $item_marc = _marc_from_item_hash($item, $frameworkcode[, $unlinked_item_subfields]);
1482
  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 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