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

(-)a/C4/Circulation.pm (+3 lines)
Lines 1801-1806 sub AddReturn { Link Here
1801
    unless ($item) {
1801
    unless ($item) {
1802
        return ( 0, { BadBarcode => $barcode } );    # no barcode means no item or borrower.  bail out.
1802
        return ( 0, { BadBarcode => $barcode } );    # no barcode means no item or borrower.  bail out.
1803
    }
1803
    }
1804
    if ($item->{deleted_at}) {
1805
        return ( 0, { BadBarcode => $barcode } );
1806
    }
1804
1807
1805
    my $itemnumber = $item->{ itemnumber };
1808
    my $itemnumber = $item->{ itemnumber };
1806
    my $itemtype = $item->{itype}; # GetItem called effective_itemtype
1809
    my $itemtype = $item->{itype}; # GetItem called effective_itemtype
(-)a/installer/data/mysql/atomicupdate/bug_20271_-_merge_deletedbiblio_and_deleteitems_tables_with_their_alive_cousins.perl (-13 / +65 lines)
Lines 1-20 Link Here
1
$DBversion = 'XXX';  # will be replaced by the RM
1
$DBversion = 'XXX';  # will be replaced by the RM
2
if( CheckVersion( $DBversion ) ) {
2
if( CheckVersion( $DBversion ) ) {
3
    $dbh->do( "ALTER TABLE biblio ADD COLUMN deleted_at datetime DEFAULT NULL" );
3
    $dbh->do( "ALTER TABLE biblio ADD COLUMN deleted_at datetime DEFAULT NULL" ) or die $DBI::errstr;
4
    $dbh->do( "ALTER TABLE biblioitems ADD COLUMN deleted_at datetime DEFAULT NULL" );
4
    $dbh->do( "ALTER TABLE biblioitems ADD COLUMN deleted_at datetime DEFAULT NULL" ) or die $DBI::errstr;
5
    $dbh->do( "ALTER TABLE biblio_metadata ADD COLUMN deleted_at datetime DEFAULT NULL" );
5
    $dbh->do( "ALTER TABLE biblio_metadata ADD COLUMN deleted_at datetime DEFAULT NULL" ) or die $DBI::errstr;
6
    $dbh->do( "ALTER TABLE items ADD COLUMN deleted_at datetime DEFAULT NULL" );
6
    $dbh->do( "ALTER TABLE items ADD COLUMN deleted_at datetime DEFAULT NULL" ) or die $DBI::errstr;
7
7
8
    $dbh->do( "INSERT IGNORE INTO biblio SELECT *, timestamp AS deleted_at FROM deletedbiblio" );
8
    $dbh->do( "ALTER TABLE deletedbiblio_metadata DROP FOREIGN KEY deletedbiblio_metadata_fk_1" ) or die $DBI::errstr;
9
    $dbh->do( "INSERT IGNORE INTO biblioitems SELECT *, timestamp AS deleted_at FROM deletedbiblioitems" );
10
    $dbh->do( "INSERT IGNORE INTO biblio_metadata SELECT *, timestamp AS deleted_at FROM deletedbiblio_metadata" );
11
    $dbh->do( "INSERT IGNORE INTO items SELECT *, timestamp AS deleted_at FROM deleteditems WHERE biblionumber IN (SELECT biblionumber FROM biblio)" );
12
9
13
    my $sth = $dbh->prepare("SELECT * FROM deleteditems WHERE itemnumber NOT IN (SELECT itemnumber FROM items)");
10
    $dbh->do( "INSERT IGNORE INTO biblio SELECT *, timestamp AS deleted_at FROM deletedbiblio" ) or die $DBI::errstr;
14
    $sth->execute();
11
    $dbh->do( "INSERT IGNORE INTO biblioitems SELECT *, timestamp AS deleted_at FROM deletedbiblioitems" ) or die $DBI::errstr;
15
    while ( my $it = $sth->fetchrow_hashref ) {
12
    $dbh->do( "INSERT IGNORE INTO biblio_metadata SELECT *, timestamp AS deleted_at FROM deletedbiblio_metadata" ) or die $DBI::errstr;
16
        warn "Following item could not be moved from deleteditems, probably duplicate barcode or never moved: " .
13
    $dbh->do( "INSERT IGNORE INTO items SELECT *, timestamp AS deleted_at FROM deleteditems" ) or die $DBI::errstr;
17
             "itemnumber: " . $it->{itemnumber} . " - barcode: ". $it->{barcode} . "\n";
14
15
    # Check if any rows could not be moved, if so, rename table with underscore for checking, otherwise drop them
16
    {
17
        my $sth = $dbh->prepare("DELETE FROM deleteditems WHERE itemnumber IN (SELECT itemnumber FROM items)");
18
        $sth->execute();
19
        $sth = $dbh->prepare("SELECT COUNT(*) AS count FROM deleteditems");
20
        $sth->execute();
21
        my $row = $sth->fetchrow_hashref;
22
        if ($row->{count}) {
23
            warn "There were $row->{count} deleteditems that could not be moved, please check '_deleteditems'.";
24
            $dbh->do("RENAME TABLE deleteditems TO _deleteditems");
25
        } else {
26
            $dbh->do("DROP TABLE deleteditems");
27
        }
28
    }
29
30
    {
31
        my $sth = $dbh->prepare("DELETE FROM deletedbiblio_metadata WHERE biblionumber IN (SELECT biblionumber FROM biblio_metadata)");
32
        $sth->execute();
33
        $sth = $dbh->prepare("SELECT COUNT(*) AS count FROM deletedbiblio_metadata");
34
        $sth->execute();
35
        my $row = $sth->fetchrow_hashref;
36
        if ($row->{count}) {
37
            warn "There were $row->{count} deletedbiblio_metadata that could not be moved, please check '_deletedbiblio_metadata'.";
38
            $dbh->do("RENAME TABLE deletedbiblio_metadata TO _deletedbiblio_metadata");
39
        } else {
40
            $dbh->do("DROP TABLE deletedbiblio_metadata");
41
        }
42
    }
43
44
    {
45
        my $sth = $dbh->prepare("DELETE FROM deletedbiblioitems WHERE biblioitemnumber IN (SELECT biblioitemnumber FROM biblioitems)");
46
        $sth->execute();
47
        $sth = $dbh->prepare("SELECT COUNT(*) AS count FROM deletedbiblioitems");
48
        $sth->execute();
49
        my $row = $sth->fetchrow_hashref;
50
        if ($row->{count}) {
51
            warn "There were $row->{count} deletedbiblioitems that could not be moved, please check '_deletedbiblioitems'.";
52
            $dbh->do("RENAME TABLE deletedbiblioitems TO _deletedbiblioitems");
53
        } else {
54
            $dbh->do("DROP TABLE deletedbiblioitems");
55
        }
56
    }
57
58
    {
59
        my $sth = $dbh->prepare("DELETE FROM deletedbiblio WHERE biblionumber IN (SELECT biblionumber FROM biblio)");
60
        $sth->execute();
61
        $sth = $dbh->prepare("SELECT COUNT(*) AS count FROM deletedbiblio WHERE biblionumber NOT IN (SELECT biblionumber FROM deletedbiblioitems)");
62
        $sth->execute();
63
        my $row = $sth->fetchrow_hashref;
64
        if ($row->{count}) {
65
            warn "There were $row->{count} deletedbiblio that could not be moved, please check '_deletedbiblio'.";
66
            $dbh->do("RENAME TABLE deletedbiblio TO _deletedbiblio");
67
        } else {
68
            $dbh->do("DROP TABLE deletedbiblio");
69
        }
18
    }
70
    }
19
71
20
    SetVersion( $DBversion );
72
    SetVersion( $DBversion );
(-)a/t/db_dependent/Acquisition.t (-2 / +2 lines)
Lines 513-519 ok((not defined $error), "DelOrder does not fail"); Link Here
513
$order2 = GetOrder($order2->{ordernumber});
513
$order2 = GetOrder($order2->{ordernumber});
514
ok((defined $order2->{datecancellationprinted}), "order is cancelled");
514
ok((defined $order2->{datecancellationprinted}), "order is cancelled");
515
ok((not defined $order2->{cancellationreason}), "order has no cancellation reason");
515
ok((not defined $order2->{cancellationreason}), "order has no cancellation reason");
516
ok((not defined Koha::Biblios->find( $order2->{biblionumber} )), "biblio does not exist anymore");
516
ok(Koha::Biblios->find($order2->{biblionumber})->deleted_at , "biblio does not exist anymore");
517
517
518
my $order4 = GetOrder($ordernumbers[3]);
518
my $order4 = GetOrder($ordernumbers[3]);
519
$error = DelOrder($order4->{biblionumber}, $order4->{ordernumber}, 1, "foobar");
519
$error = DelOrder($order4->{biblionumber}, $order4->{ordernumber}, 1, "foobar");
Lines 521-527 ok((not defined $error), "DelOrder does not fail"); Link Here
521
$order4 = GetOrder($order4->{ordernumber});
521
$order4 = GetOrder($order4->{ordernumber});
522
ok((defined $order4->{datecancellationprinted}), "order is cancelled");
522
ok((defined $order4->{datecancellationprinted}), "order is cancelled");
523
ok(($order4->{cancellationreason} eq "foobar"), "order has cancellation reason \"foobar\"");
523
ok(($order4->{cancellationreason} eq "foobar"), "order has cancellation reason \"foobar\"");
524
ok((not defined Koha::Biblios->find( $order4->{biblionumber} )), "biblio does not exist anymore");
524
ok(Koha::Biblios->find($order4->{biblionumber})->deleted_at, "biblio does not exist anymore");
525
525
526
my $order5 = GetOrder($ordernumbers[4]);
526
my $order5 = GetOrder($ordernumbers[4]);
527
C4::Items::AddItem( { barcode => '0102030405' }, $order5->{biblionumber} );
527
C4::Items::AddItem( { barcode => '0102030405' }, $order5->{biblionumber} );
(-)a/t/db_dependent/Items_DelItemCheck.t (-1 / +1 lines)
Lines 161-167 DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} ); Link Here
161
161
162
my $test_item = GetItem( $item->{itemnumber} );
162
my $test_item = GetItem( $item->{itemnumber} );
163
163
164
is( $test_item->{itemnumber}, undef,
164
isnt( $test_item->{deleted_at}, undef,
165
    "DelItemCheck should delete item if ItemSafeToDelete returns true"
165
    "DelItemCheck should delete item if ItemSafeToDelete returns true"
166
);
166
);
167
167
(-)a/t/db_dependent/db_structure.t (-3 lines)
Lines 22-30 use Koha::Database; Link Here
22
22
23
my @modules = (
23
my @modules = (
24
    [ qw( Borrower Deletedborrower ) ],
24
    [ qw( Borrower Deletedborrower ) ],
25
    [ qw( Biblio Deletedbiblio ) ],
26
    [ qw( Biblioitem Deletedbiblioitem ) ],
27
    [ qw( Item Deleteditem ) ],
28
);
25
);
29
26
30
my @keys_to_check = qw( size is_nullable data_type accessor datetime_undef_if_invalid default_value );
27
my @keys_to_check = qw( size is_nullable data_type accessor datetime_undef_if_invalid default_value );
(-)a/t/lib/TestBuilder.pm (-1 / +10 lines)
Lines 470-477 sub _gen_default_values { Link Here
470
            debarred       => undef,
470
            debarred       => undef,
471
            borrowernotes  => '',
471
            borrowernotes  => '',
472
        },
472
        },
473
        Biblio => {
474
            deleted_at => undef,
475
        },
476
        Biblioitems => {
477
            deleted_at => undef,
478
        },
479
        BiblioMetadata => {
480
            deleted_at => undef,
481
        },
473
        Item => {
482
        Item => {
474
            more_subfields_xml => undef,
483
            more_subfields_xml => undef,
484
            deleted_at => undef,
475
        },
485
        },
476
        Category => {
486
        Category => {
477
            enrolmentfee => 0,
487
            enrolmentfee => 0,
478
- 

Return to bug 20271