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

(-)a/C4/Acquisition.pm (-6 / +4 lines)
Lines 2307-2316 sub GetHistory { Link Here
2307
    my $dbh   = C4::Context->dbh;
2307
    my $dbh   = C4::Context->dbh;
2308
    my $query ="
2308
    my $query ="
2309
        SELECT
2309
        SELECT
2310
            COALESCE(biblio.title,     deletedbiblio.title)     AS title,
2310
            biblio.title,
2311
            COALESCE(biblio.author,    deletedbiblio.author)    AS author,
2311
            biblio.author,
2312
            COALESCE(biblioitems.isbn, deletedbiblioitems.isbn) AS isbn,
2312
            biblioitems.isbn,
2313
            COALESCE(biblioitems.ean,  deletedbiblioitems.ean)  AS ean,
2313
            biblioitems.ean,
2314
            aqorders.basketno,
2314
            aqorders.basketno,
2315
            aqbasket.basketname,
2315
            aqbasket.basketname,
2316
            aqbasket.basketgroupid,
2316
            aqbasket.basketgroupid,
Lines 2342-2349 sub GetHistory { Link Here
2342
        LEFT JOIN biblio ON biblio.biblionumber=aqorders.biblionumber
2342
        LEFT JOIN biblio ON biblio.biblionumber=aqorders.biblionumber
2343
        LEFT JOIN aqbudgets ON aqorders.budget_id=aqbudgets.budget_id
2343
        LEFT JOIN aqbudgets ON aqorders.budget_id=aqbudgets.budget_id
2344
        LEFT JOIN aqinvoices ON aqorders.invoiceid = aqinvoices.invoiceid
2344
        LEFT JOIN aqinvoices ON aqorders.invoiceid = aqinvoices.invoiceid
2345
        LEFT JOIN deletedbiblio ON deletedbiblio.biblionumber=aqorders.biblionumber
2346
        LEFT JOIN deletedbiblioitems ON deletedbiblioitems.biblionumber=aqorders.biblionumber
2347
        LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber
2345
        LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber
2348
        ";
2346
        ";
2349
2347
(-)a/C4/Biblio.pm (-85 / +12 lines)
Lines 315-321 sub ModBiblio { Link Here
315
    # update biblionumber and biblioitemnumber in MARC
315
    # update biblionumber and biblioitemnumber in MARC
316
    # FIXME - this is assuming a 1 to 1 relationship between
316
    # FIXME - this is assuming a 1 to 1 relationship between
317
    # biblios and biblioitems
317
    # biblios and biblioitems
318
    my $sth = $dbh->prepare("select biblioitemnumber from biblioitems where biblionumber=?");
318
    my $sth = $dbh->prepare("select biblioitemnumber from biblioitems where biblionumber=? AND deleted_at IS NULL");
319
    $sth->execute($biblionumber);
319
    $sth->execute($biblionumber);
320
    my ($biblioitemnumber) = $sth->fetchrow;
320
    my ($biblioitemnumber) = $sth->fetchrow;
321
    $sth->finish();
321
    $sth->finish();
Lines 384-390 sub DelBiblio { Link Here
384
    my $error;    # for error handling
384
    my $error;    # for error handling
385
385
386
    # First make sure this biblio has no items attached
386
    # First make sure this biblio has no items attached
387
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber=?");
387
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber=? AND deleted_at IS NULL");
388
    $sth->execute($biblionumber);
388
    $sth->execute($biblionumber);
389
    if ( my $itemnumber = $sth->fetchrow ) {
389
    if ( my $itemnumber = $sth->fetchrow ) {
390
390
Lines 415-421 sub DelBiblio { Link Here
415
    ModZebra( $biblionumber, "recordDelete", "biblioserver" );
415
    ModZebra( $biblionumber, "recordDelete", "biblioserver" );
416
416
417
    # delete biblioitems and items from Koha tables and save in deletedbiblioitems,deleteditems
417
    # delete biblioitems and items from Koha tables and save in deletedbiblioitems,deleteditems
418
    $sth = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=?");
418
    $sth = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? AND deleted_at IS NULL");
419
    $sth->execute($biblionumber);
419
    $sth->execute($biblionumber);
420
    while ( my $biblioitemnumber = $sth->fetchrow ) {
420
    while ( my $biblioitemnumber = $sth->fetchrow ) {
421
421
Lines 1138-1144 sub GetMarcBiblio { Link Here
1138
    }
1138
    }
1139
1139
1140
    my $dbh          = C4::Context->dbh;
1140
    my $dbh          = C4::Context->dbh;
1141
    my $sth          = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? ");
1141
    my $sth          = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? AND deleted_at IS NULL");
1142
    $sth->execute($biblionumber);
1142
    $sth->execute($biblionumber);
1143
    my $row     = $sth->fetchrow_hashref;
1143
    my $row     = $sth->fetchrow_hashref;
1144
    my $biblioitemnumber = $row->{'biblioitemnumber'};
1144
    my $biblioitemnumber = $row->{'biblioitemnumber'};
Lines 2761-2767 sub EmbedItemsInMarcBiblio { Link Here
2761
2761
2762
    # ... and embed the current items
2762
    # ... and embed the current items
2763
    my $dbh = C4::Context->dbh;
2763
    my $dbh = C4::Context->dbh;
2764
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2764
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ? and deleted_at IS NULL");
2765
    $sth->execute($biblionumber);
2765
    $sth->execute($biblionumber);
2766
    my @item_fields;
2766
    my @item_fields;
2767
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
2767
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
Lines 3091-3131 C<$biblionumber> - the biblionumber of the biblio to be deleted Link Here
3091
sub _koha_delete_biblio {
3091
sub _koha_delete_biblio {
3092
    my ( $dbh, $biblionumber ) = @_;
3092
    my ( $dbh, $biblionumber ) = @_;
3093
3093
3094
    # get all the data for this biblio
3094
    my $sth = $dbh->prepare("UPDATE biblio SET deleted_at = NOW() WHERE biblionumber=?");
3095
    my $sth = $dbh->prepare("SELECT * FROM biblio WHERE biblionumber=?");
3095
    return $sth->execute($biblionumber) ? undef : ($DBI::errstr || "unknown error");
3096
    $sth->execute($biblionumber);
3097
3098
    # FIXME There is a transaction in _koha_delete_biblio_metadata
3099
    # But actually all the following should be done inside a single transaction
3100
    if ( my $data = $sth->fetchrow_hashref ) {
3101
3102
        # save the record in deletedbiblio
3103
        # find the fields to save
3104
        my $query = "INSERT INTO deletedbiblio SET ";
3105
        my @bind  = ();
3106
        foreach my $temp ( keys %$data ) {
3107
            $query .= "$temp = ?,";
3108
            push( @bind, $data->{$temp} );
3109
        }
3110
3111
        # replace the last , by ",?)"
3112
        $query =~ s/\,$//;
3113
        my $bkup_sth = $dbh->prepare($query);
3114
        $bkup_sth->execute(@bind);
3115
        $bkup_sth->finish;
3116
3117
        _koha_delete_biblio_metadata( $biblionumber );
3118
3119
        # delete the biblio
3120
        my $sth2 = $dbh->prepare("DELETE FROM biblio WHERE biblionumber=?");
3121
        $sth2->execute($biblionumber);
3122
        # update the timestamp (Bugzilla 7146)
3123
        $sth2= $dbh->prepare("UPDATE deletedbiblio SET timestamp=NOW() WHERE biblionumber=?");
3124
        $sth2->execute($biblionumber);
3125
        $sth2->finish;
3126
    }
3127
    $sth->finish;
3128
    return;
3129
}
3096
}
3130
3097
3131
=head2 _koha_delete_biblioitems
3098
=head2 _koha_delete_biblioitems
Lines 3143-3180 C<$biblionumber> - the biblioitemnumber of the biblioitem to be deleted Link Here
3143
3110
3144
sub _koha_delete_biblioitems {
3111
sub _koha_delete_biblioitems {
3145
    my ( $dbh, $biblioitemnumber ) = @_;
3112
    my ( $dbh, $biblioitemnumber ) = @_;
3146
3113
    my $sth = $dbh->prepare("UPDATE biblioitems SET deleted_at = NOW() WHERE biblioitemnumber=?");
3147
    # get all the data for this biblioitem
3114
    return $sth->execute($biblioitemnumber) ? undef : ($DBI::errstr || 'unknown error');
3148
    my $sth = $dbh->prepare("SELECT * FROM biblioitems WHERE biblioitemnumber=?");
3149
    $sth->execute($biblioitemnumber);
3150
3151
    if ( my $data = $sth->fetchrow_hashref ) {
3152
3153
        # save the record in deletedbiblioitems
3154
        # find the fields to save
3155
        my $query = "INSERT INTO deletedbiblioitems SET ";
3156
        my @bind  = ();
3157
        foreach my $temp ( keys %$data ) {
3158
            $query .= "$temp = ?,";
3159
            push( @bind, $data->{$temp} );
3160
        }
3161
3162
        # replace the last , by ",?)"
3163
        $query =~ s/\,$//;
3164
        my $bkup_sth = $dbh->prepare($query);
3165
        $bkup_sth->execute(@bind);
3166
        $bkup_sth->finish;
3167
3168
        # delete the biblioitem
3169
        my $sth2 = $dbh->prepare("DELETE FROM biblioitems WHERE biblioitemnumber=?");
3170
        $sth2->execute($biblioitemnumber);
3171
        # update the timestamp (Bugzilla 7146)
3172
        $sth2= $dbh->prepare("UPDATE deletedbiblioitems SET timestamp=NOW() WHERE biblioitemnumber=?");
3173
        $sth2->execute($biblioitemnumber);
3174
        $sth2->finish;
3175
    }
3176
    $sth->finish;
3177
    return;
3178
}
3115
}
3179
3116
3180
=head2 _koha_delete_biblio_metadata
3117
=head2 _koha_delete_biblio_metadata
Lines 3187-3205 C<$biblionumber> - the biblionumber of the biblio metadata to be deleted Link Here
3187
3124
3188
sub _koha_delete_biblio_metadata {
3125
sub _koha_delete_biblio_metadata {
3189
    my ($biblionumber) = @_;
3126
    my ($biblionumber) = @_;
3190
3127
    my $dbh = C4::Context->dbh;
3191
    my $dbh    = C4::Context->dbh;
3128
    my $sth = $dbh->prepare("UPDATE biblio_metadata SET deleted_at = NOW() WHERE biblionumber=?");
3192
    my $schema = Koha::Database->new->schema;
3129
    return $sth->execute($biblionumber);
3193
    $schema->txn_do(
3194
        sub {
3195
            $dbh->do( q|
3196
                INSERT INTO deletedbiblio_metadata (biblionumber, format, marcflavour, metadata)
3197
                SELECT biblionumber, format, marcflavour, metadata FROM biblio_metadata WHERE biblionumber=?
3198
            |,  undef, $biblionumber );
3199
            $dbh->do( q|DELETE FROM biblio_metadata WHERE biblionumber=?|,
3200
                undef, $biblionumber );
3201
        }
3202
    );
3203
}
3130
}
3204
3131
3205
=head1 UNEXPORTED FUNCTIONS
3132
=head1 UNEXPORTED FUNCTIONS
(-)a/C4/Items.pm (-28 / +10 lines)
Lines 838-843 sub GetItemsForInventory { Link Here
838
        FROM items
838
        FROM items
839
        LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber
839
        LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber
840
        LEFT JOIN biblioitems on items.biblionumber = biblioitems.biblionumber
840
        LEFT JOIN biblioitems on items.biblionumber = biblioitems.biblionumber
841
        WHERE (items.deleted_at IS NULL AND biblio.deleted_at IS NULL AND biblioitems.deleted_at IS NULL)
841
    };
842
    };
842
    if ($statushash){
843
    if ($statushash){
843
        for my $authvfield (keys %$statushash){
844
        for my $authvfield (keys %$statushash){
Lines 944-950 Called by C<C4::XISBN> Link Here
944
sub GetItemsByBiblioitemnumber {
945
sub GetItemsByBiblioitemnumber {
945
    my ( $bibitem ) = @_;
946
    my ( $bibitem ) = @_;
946
    my $dbh = C4::Context->dbh;
947
    my $dbh = C4::Context->dbh;
947
    my $sth = $dbh->prepare("SELECT * FROM items WHERE items.biblioitemnumber = ?") || die $dbh->errstr;
948
    my $sth = $dbh->prepare("SELECT * FROM items WHERE items.biblioitemnumber = ? AND items.deleted_at IS NULL") || die $dbh->errstr;
948
    # Get all items attached to a biblioitem
949
    # Get all items attached to a biblioitem
949
    my $i = 0;
950
    my $i = 0;
950
    my @results; 
951
    my @results; 
Lines 1068-1074 sub GetItemsInfo { Link Here
1068
     FROM items
1069
     FROM items
1069
     LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode
1070
     LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode
1070
     LEFT JOIN branches AS home ON items.homebranch=home.branchcode
1071
     LEFT JOIN branches AS home ON items.homebranch=home.branchcode
1071
     LEFT JOIN biblio      ON      biblio.biblionumber     = items.biblionumber
1072
     LEFT JOIN biblio      ON      biblio.biblionumber     = items.biblionumber AND biblio.deleted_at IS NULL
1072
     LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
1073
     LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
1073
     LEFT JOIN issues USING (itemnumber)
1074
     LEFT JOIN issues USING (itemnumber)
1074
     LEFT JOIN borrowers USING (borrowernumber)
1075
     LEFT JOIN borrowers USING (borrowernumber)
Lines 1082-1088 sub GetItemsInfo { Link Here
1082
        AND localization.lang = ?
1083
        AND localization.lang = ?
1083
    |;
1084
    |;
1084
1085
1085
    $query .= " WHERE items.biblionumber = ? ORDER BY home.branchname, items.enumchron, LPAD( items.copynumber, 8, '0' ), items.dateaccessioned DESC" ;
1086
    $query .= " WHERE items.biblionumber = ? AND items.deleted_at IS NULL ORDER BY home.branchname, items.enumchron, LPAD( items.copynumber, 8, '0' ), items.dateaccessioned DESC" ;
1086
    my $sth = $dbh->prepare($query);
1087
    my $sth = $dbh->prepare($query);
1087
    $sth->execute($language, $biblionumber);
1088
    $sth->execute($language, $biblionumber);
1088
    my $i = 0;
1089
    my $i = 0;
Lines 1189-1195 sub GetItemsLocationInfo { Link Here
1189
			    location, itemcallnumber, cn_sort
1190
			    location, itemcallnumber, cn_sort
1190
		     FROM items, branches as a, branches as b
1191
		     FROM items, branches as a, branches as b
1191
		     WHERE homebranch = a.branchcode AND holdingbranch = b.branchcode 
1192
		     WHERE homebranch = a.branchcode AND holdingbranch = b.branchcode 
1192
		     AND biblionumber = ?
1193
		     AND biblionumber = ? AND deleted_at IS NULL
1193
		     ORDER BY cn_sort ASC";
1194
		     ORDER BY cn_sort ASC";
1194
	my $sth = $dbh->prepare($query);
1195
	my $sth = $dbh->prepare($query);
1195
        $sth->execute($biblionumber);
1196
        $sth->execute($biblionumber);
Lines 1261-1267 sub GetLastAcquisitions { Link Here
1261
	my $number_of_itemtypes   = @{$data->{itemtypes}};
1262
	my $number_of_itemtypes   = @{$data->{itemtypes}};
1262
	
1263
	
1263
	
1264
	
1264
	my @where = ('WHERE 1 '); 
1265
	my @where = ('WHERE (items.deleted_at IS NULL AND biblio.deleted_at IS NULL AND biblioitems.deleted_at IS NULL) ');
1265
	$number_of_branches and push @where
1266
	$number_of_branches and push @where
1266
	   , 'AND holdingbranch IN (' 
1267
	   , 'AND holdingbranch IN (' 
1267
	   , join(',', ('?') x $number_of_branches )
1268
	   , join(',', ('?') x $number_of_branches )
Lines 1308-1314 sub GetItemnumbersForBiblio { Link Here
1308
    my $biblionumber = shift;
1309
    my $biblionumber = shift;
1309
    my @items;
1310
    my @items;
1310
    my $dbh = C4::Context->dbh;
1311
    my $dbh = C4::Context->dbh;
1311
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
1312
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ? AND deleted_at IS NULL");
1312
    $sth->execute($biblionumber);
1313
    $sth->execute($biblionumber);
1313
    while (my $result = $sth->fetchrow_hashref) {
1314
    while (my $result = $sth->fetchrow_hashref) {
1314
        push @items, $result->{'itemnumber'};
1315
        push @items, $result->{'itemnumber'};
Lines 2083-2109 sub _koha_delete_item { Link Here
2083
    my ( $itemnum ) = @_;
2084
    my ( $itemnum ) = @_;
2084
2085
2085
    my $dbh = C4::Context->dbh;
2086
    my $dbh = C4::Context->dbh;
2086
    # save the deleted item to deleteditems table
2087
    my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
2088
    $sth->execute($itemnum);
2089
    my $data = $sth->fetchrow_hashref();
2090
2091
    # There is no item to delete
2092
    return 0 unless $data;
2093
2094
    my $query = "INSERT INTO deleteditems SET ";
2095
    my @bind  = ();
2096
    foreach my $key ( keys %$data ) {
2097
        next if ( $key eq 'timestamp' ); # timestamp will be set by db
2098
        $query .= "$key = ?,";
2099
        push( @bind, $data->{$key} );
2100
    }
2101
    $query =~ s/\,$//;
2102
    $sth = $dbh->prepare($query);
2103
    $sth->execute(@bind);
2104
2087
2105
    # delete from items table
2088
    my $sth = $dbh->prepare("UPDATE items SET deleted_at = NOW() WHERE itemnumber = ?");
2106
    $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
2107
    my $deleted = $sth->execute($itemnum);
2089
    my $deleted = $sth->execute($itemnum);
2108
    return ( $deleted == 1 ) ? 1 : 0;
2090
    return ( $deleted == 1 ) ? 1 : 0;
2109
}
2091
}
Lines 2468-2474 sub SearchItems { Link Here
2468
          LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
2450
          LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
2469
          LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
2451
          LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
2470
          LEFT JOIN biblio_metadata ON biblio_metadata.biblionumber = biblio.biblionumber
2452
          LEFT JOIN biblio_metadata ON biblio_metadata.biblionumber = biblio.biblionumber
2471
          WHERE 1
2453
          WHERE items.deleted_at IS NULL
2472
    };
2454
    };
2473
    if (defined $where_str and $where_str ne '') {
2455
    if (defined $where_str and $where_str ne '') {
2474
        $query .= qq{ AND $where_str };
2456
        $query .= qq{ AND $where_str };
Lines 2819-2825 sub ToggleNewStatus { Link Here
2819
            SELECT items.biblionumber, items.itemnumber
2801
            SELECT items.biblionumber, items.itemnumber
2820
            FROM items
2802
            FROM items
2821
            LEFT JOIN biblioitems ON biblioitems.biblionumber = items.biblionumber
2803
            LEFT JOIN biblioitems ON biblioitems.biblionumber = items.biblionumber
2822
            WHERE 1
2804
            WHERE items.deleted_at IS NULL
2823
        |;
2805
        |;
2824
        for my $condition ( @$conditions ) {
2806
        for my $condition ( @$conditions ) {
2825
            if (
2807
            if (
(-)a/C4/Reserves.pm (-2 / +2 lines)
Lines 1121-1127 sub IsAvailableForItemLevelRequest { Link Here
1121
        return 1;
1121
        return 1;
1122
    } elsif ( $on_shelf_holds == 2 ) {
1122
    } elsif ( $on_shelf_holds == 2 ) {
1123
        my @items =
1123
        my @items =
1124
          Koha::Items->search( { biblionumber => $item->{biblionumber} } );
1124
          Koha::Items->search( { biblionumber => $item->{biblionumber}, deleted_at => undef } );
1125
1125
1126
        my $any_available = 0;
1126
        my $any_available = 0;
1127
1127
Lines 2010-2016 sub GetMaxPatronHoldsForRecord { Link Here
2010
    my ( $borrowernumber, $biblionumber ) = @_;
2010
    my ( $borrowernumber, $biblionumber ) = @_;
2011
2011
2012
    my $patron = Koha::Patrons->find($borrowernumber);
2012
    my $patron = Koha::Patrons->find($borrowernumber);
2013
    my @items = Koha::Items->search( { biblionumber => $biblionumber } );
2013
    my @items = Koha::Items->search( { biblionumber => $biblionumber, deleted_at => undef } );
2014
2014
2015
    my $controlbranch = C4::Context->preference('ReservesControlBranch');
2015
    my $controlbranch = C4::Context->preference('ReservesControlBranch');
2016
2016
(-)a/Koha/Biblio.pm (-1 / +1 lines)
Lines 250-256 or list of Koha::Item objects in list context. Link Here
250
sub items {
250
sub items {
251
    my ($self) = @_;
251
    my ($self) = @_;
252
252
253
    $self->{_items} ||= Koha::Items->search( { biblionumber => $self->biblionumber() } );
253
    $self->{_items} ||= Koha::Items->search( { biblionumber => $self->biblionumber(), deleted_at => undef } );
254
254
255
    return wantarray ? $self->{_items}->as_list : $self->{_items};
255
    return wantarray ? $self->{_items}->as_list : $self->{_items};
256
}
256
}
(-)a/Koha/Filter/MARC/EmbedItemsAvailability.pm (+1 lines)
Lines 79-84 sub _processrecord { Link Here
79
    my $not_onloan_items = Koha::Items->search({
79
    my $not_onloan_items = Koha::Items->search({
80
        biblionumber => $biblionumber,
80
        biblionumber => $biblionumber,
81
        onloan => undef,
81
        onloan => undef,
82
        deleted_at => undef,
82
    })->count;
83
    })->count;
83
84
84
    # check for field 999
85
    # check for field 999
(-)a/Koha/ItemType.pm (-1 / +1 lines)
Lines 101-107 Counts up the number of biblioitems and items with itemtype (code) and hands bac Link Here
101
101
102
sub can_be_deleted {
102
sub can_be_deleted {
103
    my ($self) = @_;
103
    my ($self) = @_;
104
    my $nb_items = Koha::Items->search( { itype => $self->itemtype } )->count;
104
    my $nb_items = Koha::Items->search( { itype => $self->itemtype, deleted_at => undef } )->count;
105
    my $nb_biblioitems = Koha::Biblioitems->search( { itemtype => $self->itemtype } )->count;
105
    my $nb_biblioitems = Koha::Biblioitems->search( { itemtype => $self->itemtype } )->count;
106
    return $nb_items + $nb_biblioitems == 0 ? 1 : 0;
106
    return $nb_items + $nb_biblioitems == 0 ? 1 : 0;
107
}
107
}
(-)a/Koha/OAI/Server/GetRecord.pm (-9 / +5 lines)
Lines 39-59 sub new { Link Here
39
    my $sql = "
39
    my $sql = "
40
        SELECT timestamp
40
        SELECT timestamp
41
        FROM   biblioitems
41
        FROM   biblioitems
42
        WHERE  biblionumber=?
42
        WHERE  biblionumber=? AND deleted_at IS NULL
43
    ";
43
    ";
44
    my @bind_params = ($biblionumber);
44
    my @bind_params = ($biblionumber);
45
    if ( $items_included ) {
45
    if ( $items_included ) {
46
        # Take latest timestamp of biblio and any items
46
        # Take latest timestamp of biblio and any items
47
        $sql .= "
47
        $sql .= "
48
            UNION
48
            UNION
49
            SELECT timestamp from deleteditems
50
            WHERE biblionumber=?
51
            UNION
52
            SELECT timestamp from items
49
            SELECT timestamp from items
53
            WHERE biblionumber=?
50
            WHERE biblionumber=?
54
        ";
51
        ";
55
        push @bind_params, $biblionumber;
52
        push @bind_params, $biblionumber;
56
        push @bind_params, $biblionumber;
57
        $sql = "
53
        $sql = "
58
            SELECT max(timestamp)
54
            SELECT max(timestamp)
59
            FROM ($sql) bib
55
            FROM ($sql) bib
Lines 66-73 sub new { Link Here
66
    unless ( ($timestamp = $sth->fetchrow) ) {
62
    unless ( ($timestamp = $sth->fetchrow) ) {
67
        $sql = "
63
        $sql = "
68
            SELECT timestamp
64
            SELECT timestamp
69
            FROM deletedbiblio
65
            FROM biblio
70
            WHERE biblionumber=?
66
            WHERE biblionumber=? AND deleted_at IS NOT NULL
71
        ";
67
        ";
72
        @bind_params = ($biblionumber);
68
        @bind_params = ($biblionumber);
73
69
Lines 75-82 sub new { Link Here
75
            # Take latest timestamp among biblio and items
71
            # Take latest timestamp among biblio and items
76
            $sql .= "
72
            $sql .= "
77
                UNION
73
                UNION
78
                SELECT timestamp from deleteditems
74
                SELECT timestamp from items
79
                WHERE biblionumber=?
75
                WHERE biblionumber=? AND deleted_at IS NULL
80
            ";
76
            ";
81
            push @bind_params, $biblionumber;
77
            push @bind_params, $biblionumber;
82
            $sql = "
78
            $sql = "
(-)a/Koha/OAI/Server/ListBase.pm (-5 / +5 lines)
Lines 68-79 sub GetRecords { Link Here
68
68
69
        if ($include_items) {
69
        if ($include_items) {
70
            $sql .= "
70
            $sql .= "
71
                OR biblionumber IN (SELECT biblionumber from deleteditems WHERE timestamp >= ? AND timestamp <= ?)
71
                OR biblionumber IN (SELECT biblionumber from items WHERE timestamp >= ? AND timestamp <= ? AND deleted_at IS NOT NULL)
72
            ";
72
            ";
73
            push @bind_params, ($token->{'from_arg'}, $token->{'until_arg'});
73
            push @bind_params, ($token->{'from_arg'}, $token->{'until_arg'});
74
            if (!$deleted) {
74
            if (!$deleted) {
75
                $sql .= "
75
                $sql .= "
76
                    OR biblionumber IN (SELECT biblionumber from items WHERE timestamp >= ? AND timestamp <= ?)
76
                    OR biblionumber IN (SELECT biblionumber from items WHERE timestamp >= ? AND timestamp <= ? AND deleted_at IS NULL)
77
                ";
77
                ";
78
                push @bind_params, ($token->{'from_arg'}, $token->{'until_arg'});
78
                push @bind_params, ($token->{'from_arg'}, $token->{'until_arg'});
79
            }
79
            }
Lines 105-111 sub GetRecords { Link Here
105
                FROM (
105
                FROM (
106
                    SELECT timestamp FROM deletedbiblio_metadata WHERE biblionumber = ?
106
                    SELECT timestamp FROM deletedbiblio_metadata WHERE biblionumber = ?
107
                    UNION
107
                    UNION
108
                    SELECT timestamp FROM deleteditems WHERE biblionumber = ?
108
                    SELECT timestamp FROM items WHERE biblionumber = ? AND deleted_at IS NOT NULL
109
                ) bis
109
                ) bis
110
            ";
110
            ";
111
        } else {
111
        } else {
Lines 114-122 sub GetRecords { Link Here
114
                FROM (
114
                FROM (
115
                    SELECT timestamp FROM biblio_metadata WHERE biblionumber = ?
115
                    SELECT timestamp FROM biblio_metadata WHERE biblionumber = ?
116
                    UNION
116
                    UNION
117
                    SELECT timestamp FROM deleteditems WHERE biblionumber = ?
117
                    SELECT timestamp FROM items WHERE biblionumber = ? AND deleted_at IS NULL
118
                    UNION
118
                    UNION
119
                    SELECT timestamp FROM items WHERE biblionumber = ?
119
                    SELECT timestamp FROM items WHERE biblionumber = ? AND deleted_at IS NOT NULL
120
                ) bi
120
                ) bi
121
            ";
121
            ";
122
        }
122
        }
(-)a/Koha/Patron.pm (-1 / +1 lines)
Lines 247-253 sub do_check_for_previous_checkout { Link Here
247
    my ( $self, $item ) = @_;
247
    my ( $self, $item ) = @_;
248
248
249
    # Find all items for bib and extract item numbers.
249
    # Find all items for bib and extract item numbers.
250
    my @items = Koha::Items->search({biblionumber => $item->{biblionumber}});
250
    my @items = Koha::Items->search({biblionumber => $item->{biblionumber}, deleted_at => undef });
251
    my @item_nos;
251
    my @item_nos;
252
    foreach my $item (@items) {
252
    foreach my $item (@items) {
253
        push @item_nos, $item->itemnumber;
253
        push @item_nos, $item->itemnumber;
(-)a/admin/branches.pl (-1 / +2 lines)
Lines 108-114 if ( $op eq 'add_form' ) { Link Here
108
    my $items_count = Koha::Items->search(
108
    my $items_count = Koha::Items->search(
109
        {   -or => {
109
        {   -or => {
110
                holdingbranch => $branchcode,
110
                holdingbranch => $branchcode,
111
                homebranch    => $branchcode
111
                homebranch    => $branchcode,
112
                deleted_at    => undef,
112
            },
113
            },
113
        }
114
        }
114
    )->count;
115
    )->count;
(-)a/cataloguing/merge.pl (-1 / +1 lines)
Lines 88-94 if ($merge) { Link Here
88
88
89
    # Moving items from the other record to the reference record
89
    # Moving items from the other record to the reference record
90
    foreach my $biblionumber (@biblionumbers) {
90
    foreach my $biblionumber (@biblionumbers) {
91
        my $items = Koha::Items->search({ biblionumber => $biblionumber });
91
        my $items = Koha::Items->search({ biblionumber => $biblionumber, deleted_at => undef });
92
        while ( my $item = $items->next) {
92
        while ( my $item = $items->next) {
93
            my $res = MoveItemFromBiblio( $item->itemnumber, $biblionumber, $ref_biblionumber );
93
            my $res = MoveItemFromBiblio( $item->itemnumber, $biblionumber, $ref_biblionumber );
94
            if ( not defined $res ) {
94
            if ( not defined $res ) {
(-)a/labels/label-item-search.pl (-1 / +1 lines)
Lines 137-143 if ($show_results) { Link Here
137
        push (@results_set, $biblio);
137
        push (@results_set, $biblio);
138
        my $biblionumber = $biblio->{'biblionumber'};
138
        my $biblionumber = $biblio->{'biblionumber'};
139
        #DEBUG Notes: Grab the item numbers associated with this MARC record...
139
        #DEBUG Notes: Grab the item numbers associated with this MARC record...
140
        my $items = Koha::Items->search({ biblionumber => $biblionumber }, { order_by => { -desc => 'itemnumber' }});
140
        my $items = Koha::Items->search({ biblionumber => $biblionumber, deleted_at => undef }, { order_by => { -desc => 'itemnumber' }});
141
        #DEBUG Notes: Retrieve the item data for each number...
141
        #DEBUG Notes: Retrieve the item data for each number...
142
        while ( my $item = $items->next ) {
142
        while ( my $item = $items->next ) {
143
            #DEBUG Notes: Build an array element 'item' of the correct bib (results) hash which contains item-specific data...
143
            #DEBUG Notes: Build an array element 'item' of the correct bib (results) hash which contains item-specific data...
(-)a/misc/cronjobs/delete_patrons.pl (-1 / +1 lines)
Lines 45-51 cronlogaction(); Link Here
45
45
46
my $members = GetBorrowersToExpunge(
46
my $members = GetBorrowersToExpunge(
47
    {
47
    {
48
        not_borrowed_since => $not_borrowed_since,
48
        not_borrowed_since   => $not_borrowed_since,
49
        expired_before       => $expired_before,
49
        expired_before       => $expired_before,
50
        last_seen            => $last_seen,
50
        last_seen            => $last_seen,
51
        category_code        => $category_code,
51
        category_code        => $category_code,
(-)a/misc/export_records.pl (-15 / +7 lines)
Lines 103-124 $timestamp = ($timestamp) ? output_pref({ dt => dt_from_string($timestamp), date Link Here
103
if ( $record_type eq 'bibs' ) {
103
if ( $record_type eq 'bibs' ) {
104
    if ( $timestamp ) {
104
    if ( $timestamp ) {
105
        push @record_ids, $_->{biblionumber} for @{
105
        push @record_ids, $_->{biblionumber} for @{
106
            $dbh->selectall_arrayref(q| (
106
            $dbh->selectall_arrayref(q|
107
                SELECT biblio_metadata.biblionumber
107
                SELECT biblionumber
108
                FROM biblio_metadata
108
                FROM biblioitems
109
                  LEFT JOIN items USING(biblionumber)
109
             |, { Slice => {} }, ( $timestamp ) x 4 );
110
                WHERE biblio_metadata.timestamp >= ?
111
                  OR items.timestamp >= ?
112
            ) UNION (
113
                SELECT biblio_metadata.biblionumber
114
                FROM biblio_metadata
115
                  LEFT JOIN deleteditems USING(biblionumber)
116
                WHERE biblio_metadata.timestamp >= ?
117
                  OR deleteditems.timestamp >= ?
118
            ) |, { Slice => {} }, ( $timestamp ) x 4 );
119
        };
110
        };
120
    } else {
111
    } else {
121
        my $conditions = {
112
        my $conditions = {
113
            deleted_at => undef,
122
            ( $starting_biblionumber or $ending_biblionumber )
114
            ( $starting_biblionumber or $ending_biblionumber )
123
                ? (
115
                ? (
124
                    "me.biblionumber" => {
116
                    "me.biblionumber" => {
Lines 189-196 if ($deleted_barcodes) { Link Here
189
    for my $record_id ( @record_ids ) {
181
    for my $record_id ( @record_ids ) {
190
        my $barcode = $dbh->selectall_arrayref(q|
182
        my $barcode = $dbh->selectall_arrayref(q|
191
            SELECT DISTINCT barcode
183
            SELECT DISTINCT barcode
192
            FROM deleteditems
184
            FROM items
193
            WHERE deleteditems.biblionumber = ?
185
            WHERE deleteditems.biblionumber = ? AND deleted_at IS NOT NULL
194
        |, { Slice => {} }, $record_id );
186
        |, { Slice => {} }, $record_id );
195
        say $_->{barcode} for @$barcode;
187
        say $_->{barcode} for @$barcode;
196
    }
188
    }
(-)a/opac/opac-reserve.pl (-2 / +2 lines)
Lines 294-300 if ( $query->param('place_reserve') ) { Link Here
294
        }
294
        }
295
295
296
        unless ( $can_place_hold_if_available_at_pickup ) {
296
        unless ( $can_place_hold_if_available_at_pickup ) {
297
            my $items_in_this_library = Koha::Items->search({ biblionumber => $biblioNum, holdingbranch => $branch });
297
            my $items_in_this_library = Koha::Items->search({ biblionumber => $biblioNum, holdingbranch => $branch, deleted_at => undef });
298
            my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
298
            my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
299
            my $nb_of_items_unavailable = $items_in_this_library->search({ -or => { lost => { '!=' => 0 }, damaged => { '!=' => 0 }, } });
299
            my $nb_of_items_unavailable = $items_in_this_library->search({ -or => { lost => { '!=' => 0 }, damaged => { '!=' => 0 }, } });
300
            if ( $items_in_this_library->count > $nb_of_items_issued + $nb_of_items_unavailable ) {
300
            if ( $items_in_this_library->count > $nb_of_items_issued + $nb_of_items_unavailable ) {
Lines 545-551 foreach my $biblioNum (@biblionumbers) { Link Here
545
            $numCopiesAvailable++;
545
            $numCopiesAvailable++;
546
546
547
            unless ( $can_place_hold_if_available_at_pickup ) {
547
            unless ( $can_place_hold_if_available_at_pickup ) {
548
                my $items_in_this_library = Koha::Items->search({ biblionumber => $itemInfo->{biblionumber}, holdingbranch => $itemInfo->{holdingbranch} });
548
                my $items_in_this_library = Koha::Items->search({ biblionumber => $itemInfo->{biblionumber}, holdingbranch => $itemInfo->{holdingbranch}, deleted_at => undef });
549
                my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
549
                my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
550
                if ( $items_in_this_library->count > $nb_of_items_issued ) {
550
                if ( $items_in_this_library->count > $nb_of_items_issued ) {
551
                    push @not_available_at, $itemInfo->{holdingbranch};
551
                    push @not_available_at, $itemInfo->{holdingbranch};
(-)a/reports/catalogue_stats.pl (-10 / +9 lines)
Lines 172-178 sub calculate { Link Here
172
    my $barcodelike   = @$filters[16];
172
    my $barcodelike   = @$filters[16];
173
    my $barcodefilter = @$filters[17];
173
    my $barcodefilter = @$filters[17];
174
    my $not;
174
    my $not;
175
    my $itemstable = ($cellvalue eq 'deleteditems') ? 'deleteditems' : 'items';
175
    my $itemstable = 'items';
176
    my $deleted_where = "items.deleted_at IS NULL";
177
    $deleted_where = "1" if $cellvalue eq 'allitems';
178
    $deleted_where = "items.deleted_at IS NOT NULL" if $cellvalue eq 'deleteditems';
176
179
177
    my $dbh = C4::Context->dbh;
180
    my $dbh = C4::Context->dbh;
178
181
Lines 273-284 sub calculate { Link Here
273
276
274
    # 1st, loop rows.
277
    # 1st, loop rows.
275
    my $origline = $line;
278
    my $origline = $line;
276
    $line =~ s/^items\./deleteditems./ if($cellvalue eq "deleteditems");
277
    my $linefield;
279
    my $linefield;
278
    if ( ( $line =~ /itemcallnumber/ ) and ($cotedigits) ) {
280
    if ( ( $line =~ /itemcallnumber/ ) and ($cotedigits) ) {
279
        $linefield = "left($line,$cotedigits)";
281
        $linefield = "left($line,$cotedigits)";
280
    } elsif ( $line =~ /^deleteditems\.timestamp$/ ) {
281
        $linefield = "DATE($line)";
282
    } else {
282
    } else {
283
        $linefield = $line;
283
        $linefield = $line;
284
    }
284
    }
Lines 286-292 sub calculate { Link Here
286
    my $strsth = "SELECT DISTINCTROW $linefield FROM $itemstable
286
    my $strsth = "SELECT DISTINCTROW $linefield FROM $itemstable
287
                    LEFT JOIN biblioitems USING (biblioitemnumber)
287
                    LEFT JOIN biblioitems USING (biblioitemnumber)
288
                    LEFT JOIN biblio ON (biblioitems.biblionumber = biblio.biblionumber)
288
                    LEFT JOIN biblio ON (biblioitems.biblionumber = biblio.biblionumber)
289
                  WHERE 1 ";
289
                  WHERE $deleted_where ";
290
    $strsth .= " AND barcode $not LIKE ? " if ($barcodefilter);
290
    $strsth .= " AND barcode $not LIKE ? " if ($barcodefilter);
291
    if (@linefilter) {
291
    if (@linefilter) {
292
        if ( $linefilter[1] ) {
292
        if ( $linefilter[1] ) {
Lines 335-341 sub calculate { Link Here
335
335
336
    # 2nd, loop cols.
336
    # 2nd, loop cols.
337
    my $origcolumn = $column;
337
    my $origcolumn = $column;
338
    $column =~ s/^items\./deleteditems./ if($cellvalue eq "deleteditems");
339
    my $colfield;
338
    my $colfield;
340
    if ( ( $column =~ /itemcallnumber/ ) and ($cotedigits) ) {
339
    if ( ( $column =~ /itemcallnumber/ ) and ($cotedigits) ) {
341
        $colfield = "left($column,$cotedigits)";
340
        $colfield = "left($column,$cotedigits)";
Lines 352-358 sub calculate { Link Here
352
            USING (biblioitemnumber)
351
            USING (biblioitemnumber)
353
        LEFT JOIN biblio
352
        LEFT JOIN biblio
354
            ON (biblioitems.biblionumber = biblio.biblionumber)
353
            ON (biblioitems.biblionumber = biblio.biblionumber)
355
        WHERE 1 ";
354
        WHERE $deleted_where ";
356
    $strsth2 .= " AND barcode $not LIKE ?" if $barcodefilter;
355
    $strsth2 .= " AND barcode $not LIKE ?" if $barcodefilter;
357
356
358
    if ( (@colfilter) and ( $colfilter[1] ) ) {
357
    if ( (@colfilter) and ( $colfilter[1] ) ) {
Lines 418-424 sub calculate { Link Here
418
        FROM $itemstable
417
        FROM $itemstable
419
        LEFT JOIN biblioitems ON ($itemstable.biblioitemnumber = biblioitems.biblioitemnumber)
418
        LEFT JOIN biblioitems ON ($itemstable.biblioitemnumber = biblioitems.biblioitemnumber)
420
        LEFT JOIN biblio ON (biblioitems.biblionumber = biblio.biblionumber)
419
        LEFT JOIN biblio ON (biblioitems.biblionumber = biblio.biblionumber)
421
        WHERE 1 ";
420
        WHERE $deleted_where ";
422
421
423
    my @sqlargs;
422
    my @sqlargs;
424
423
Lines 501-513 sub calculate { Link Here
501
        push @sqlargs, @$filters[14];
500
        push @sqlargs, @$filters[14];
502
    }
501
    }
503
    if ( $cellvalue eq 'deleteditems' and @$filters[15] ) {
502
    if ( $cellvalue eq 'deleteditems' and @$filters[15] ) {
504
        $strcalc .= " AND DATE(deleteditems.timestamp) >= ? ";
503
        $strcalc .= " AND DATE(deleted_at) >= ? ";
505
        @$filters[15] =~ s/\*/%/g;
504
        @$filters[15] =~ s/\*/%/g;
506
        push @sqlargs, @$filters[15];
505
        push @sqlargs, @$filters[15];
507
    }
506
    }
508
    if ( $cellvalue eq 'deleteditems' and @$filters[16] ) {
507
    if ( $cellvalue eq 'deleteditems' and @$filters[16] ) {
509
        @$filters[16] =~ s/\*/%/g;
508
        @$filters[16] =~ s/\*/%/g;
510
        $strcalc .= " AND DATE(deleteditems.timestamp) <= ?";
509
        $strcalc .= " AND DATE(deleted_at) <= ?";
511
        push @sqlargs, @$filters[16];
510
        push @sqlargs, @$filters[16];
512
    }
511
    }
513
    $strcalc .= " group by $linefield, $colfield order by $linefield,$colfield";
512
    $strcalc .= " group by $linefield, $colfield order by $linefield,$colfield";
(-)a/reports/itemslost.pl (+1 lines)
Lines 115-120 if ( $op eq 'export' ) { Link Here
115
    my $notforloanfilter = $params->{'notforloanfilter'} || undef;
115
    my $notforloanfilter = $params->{'notforloanfilter'} || undef;
116
116
117
    my $params = {
117
    my $params = {
118
        deleted_at => undef,
118
        ( $branchfilter ? ( homebranch => $branchfilter ) : () ),
119
        ( $branchfilter ? ( homebranch => $branchfilter ) : () ),
119
        (
120
        (
120
            $loststatusfilter
121
            $loststatusfilter
(-)a/t/db_dependent/Biblio.t (-6 / +5 lines)
Lines 443-458 subtest 'IsMarcStructureInternal' => sub { Link Here
443
    is( grep( /^ind2_defaultvalue$/, @internals ), 1, 'check indicator 2 default value' );
443
    is( grep( /^ind2_defaultvalue$/, @internals ), 1, 'check indicator 2 default value' );
444
};
444
};
445
445
446
subtest 'deletedbiblio_metadata' => sub {
446
subtest 'delete biblio' => sub {
447
    plan tests => 2;
447
    plan tests => 2;
448
448
449
    my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
449
    my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
450
    my $biblio_metadata = C4::Biblio::GetXmlBiblio( $biblionumber );
450
    my $biblio_metadata = C4::Biblio::GetXmlBiblio( $biblionumber );
451
    C4::Biblio::DelBiblio( $biblionumber );
451
    my $err = C4::Biblio::DelBiblio( $biblionumber );
452
    my ( $moved ) = $dbh->selectrow_array(q|SELECT biblionumber FROM deletedbiblio WHERE biblionumber=?|, undef, $biblionumber);
452
    is($err, undef, 'Biblio deleted without error');
453
    is( $moved, $biblionumber, 'Found in deletedbiblio' );
453
    my $data = GetBiblioData( $biblionumber );
454
    ( $moved ) = $dbh->selectrow_array(q|SELECT biblionumber FROM deletedbiblio_metadata WHERE biblionumber=?|, undef, $biblionumber);
454
    isnt( $data->{deleted_at}, undef, 'Biblio deleted with timestamp' );
455
    is( $moved, $biblionumber, 'Found in deletedbiblio_metadata' );
456
};
455
};
457
456
458
# Cleanup
457
# Cleanup
(-)a/t/db_dependent/Items.t (-1 / +1 lines)
Lines 81-87 subtest 'General Add, Get and Del tests' => sub { Link Here
81
    # Delete item.
81
    # Delete item.
82
    DelItem({ biblionumber => $bibnum, itemnumber => $itemnumber });
82
    DelItem({ biblionumber => $bibnum, itemnumber => $itemnumber });
83
    my $getdeleted = GetItem($itemnumber);
83
    my $getdeleted = GetItem($itemnumber);
84
    is($getdeleted->{'itemnumber'}, undef, "Item deleted as expected.");
84
    isnt($getdeleted->{'deleted_at'}, undef, "Item deleted as expected.");
85
85
86
    ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $library->{branchcode}, holdingbranch => $library->{branchcode}, location => $location, permanent_location => 'my permanent location', itype => $itemtype->{itemtype} } , $bibnum);
86
    ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $library->{branchcode}, holdingbranch => $library->{branchcode}, location => $location, permanent_location => 'my permanent location', itype => $itemtype->{itemtype} } , $bibnum);
87
    $getitem = GetItem($itemnumber);
87
    $getitem = GetItem($itemnumber);
(-)a/t/db_dependent/Items/DelItem.t (-5 / +4 lines)
Lines 28-47 my ( $item_bibnum, $item_bibitemnum, $itemnumber ); Link Here
28
my $deleted = DelItem( { biblionumber => $biblionumber, itemnumber => $itemnumber } );
28
my $deleted = DelItem( { biblionumber => $biblionumber, itemnumber => $itemnumber } );
29
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
29
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
30
my $deleted_item = GetItem($itemnumber);
30
my $deleted_item = GetItem($itemnumber);
31
is( $deleted_item->{itemnumber}, undef, "DelItem with biblionumber parameter - the item should be deleted." );
31
isnt( $deleted_item->{deleted_at}, undef, "DelItem with biblionumber parameter - the item should be deleted." );
32
32
33
( $item_bibnum, $item_bibitemnum, $itemnumber ) =
33
( $item_bibnum, $item_bibitemnum, $itemnumber ) =
34
  AddItem( { homebranch => $library->{branchcode}, holdingbranch => $library->{branchcode} }, $biblionumber );
34
  AddItem( { homebranch => $library->{branchcode}, holdingbranch => $library->{branchcode} }, $biblionumber );
35
$deleted = DelItem( { biblionumber => $biblionumber, itemnumber => $itemnumber } );
35
$deleted = DelItem( { biblionumber => $biblionumber, itemnumber => $itemnumber } );
36
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
36
is( $deleted, 1, "DelItem should return 1 if the item has been deleted" );
37
$deleted_item = GetItem($itemnumber);
37
$deleted_item = GetItem($itemnumber);
38
is( $deleted_item->{itemnumber}, undef, "DelItem without biblionumber parameter - the item should be deleted." );
38
isnt( $deleted_item->{deleted_at}, undef, "DelItem without biblionumber parameter - the item should be deleted." );
39
39
40
$deleted = DelItem( { itemnumber => $itemnumber + 1} );
40
$deleted = DelItem( { itemnumber => $itemnumber + 1} );
41
is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
41
is( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
42
42
43
$deleted = DelItem( { itemnumber => $itemnumber + 1, biblionumber => $biblionumber } );
43
$deleted = DelItem( { itemnumber => $itemnumber + 1, biblionumber => $biblionumber } );
44
is ( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
44
is( $deleted, 0, "DelItem should return 0 if no item has been deleted" );
45
45
46
# Helper method to set up a Biblio.
46
# Helper method to set up a Biblio.
47
sub get_biblio {
47
sub get_biblio {
48
- 

Return to bug 20271