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 1174-1180 sub GetMarcBiblio { Link Here
1174
    }
1174
    }
1175
1175
1176
    my $dbh          = C4::Context->dbh;
1176
    my $dbh          = C4::Context->dbh;
1177
    my $sth          = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? ");
1177
    my $sth          = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? AND deleted_at IS NULL");
1178
    $sth->execute($biblionumber);
1178
    $sth->execute($biblionumber);
1179
    my $row     = $sth->fetchrow_hashref;
1179
    my $row     = $sth->fetchrow_hashref;
1180
    my $biblioitemnumber = $row->{'biblioitemnumber'};
1180
    my $biblioitemnumber = $row->{'biblioitemnumber'};
Lines 2797-2803 sub EmbedItemsInMarcBiblio { Link Here
2797
2797
2798
    # ... and embed the current items
2798
    # ... and embed the current items
2799
    my $dbh = C4::Context->dbh;
2799
    my $dbh = C4::Context->dbh;
2800
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2800
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ? and deleted_at IS NULL");
2801
    $sth->execute($biblionumber);
2801
    $sth->execute($biblionumber);
2802
    my @item_fields;
2802
    my @item_fields;
2803
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
2803
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
Lines 3127-3167 C<$biblionumber> - the biblionumber of the biblio to be deleted Link Here
3127
sub _koha_delete_biblio {
3127
sub _koha_delete_biblio {
3128
    my ( $dbh, $biblionumber ) = @_;
3128
    my ( $dbh, $biblionumber ) = @_;
3129
3129
3130
    # get all the data for this biblio
3130
    my $sth = $dbh->prepare("UPDATE biblio SET deleted_at = NOW() WHERE biblionumber=?");
3131
    my $sth = $dbh->prepare("SELECT * FROM biblio WHERE biblionumber=?");
3131
    return $sth->execute($biblionumber) ? undef : ($DBI::errstr || "unknown error");
3132
    $sth->execute($biblionumber);
3133
3134
    # FIXME There is a transaction in _koha_delete_biblio_metadata
3135
    # But actually all the following should be done inside a single transaction
3136
    if ( my $data = $sth->fetchrow_hashref ) {
3137
3138
        # save the record in deletedbiblio
3139
        # find the fields to save
3140
        my $query = "INSERT INTO deletedbiblio SET ";
3141
        my @bind  = ();
3142
        foreach my $temp ( keys %$data ) {
3143
            $query .= "$temp = ?,";
3144
            push( @bind, $data->{$temp} );
3145
        }
3146
3147
        # replace the last , by ",?)"
3148
        $query =~ s/\,$//;
3149
        my $bkup_sth = $dbh->prepare($query);
3150
        $bkup_sth->execute(@bind);
3151
        $bkup_sth->finish;
3152
3153
        _koha_delete_biblio_metadata( $biblionumber );
3154
3155
        # delete the biblio
3156
        my $sth2 = $dbh->prepare("DELETE FROM biblio WHERE biblionumber=?");
3157
        $sth2->execute($biblionumber);
3158
        # update the timestamp (Bugzilla 7146)
3159
        $sth2= $dbh->prepare("UPDATE deletedbiblio SET timestamp=NOW() WHERE biblionumber=?");
3160
        $sth2->execute($biblionumber);
3161
        $sth2->finish;
3162
    }
3163
    $sth->finish;
3164
    return;
3165
}
3132
}
3166
3133
3167
=head2 _koha_delete_biblioitems
3134
=head2 _koha_delete_biblioitems
Lines 3179-3216 C<$biblionumber> - the biblioitemnumber of the biblioitem to be deleted Link Here
3179
3146
3180
sub _koha_delete_biblioitems {
3147
sub _koha_delete_biblioitems {
3181
    my ( $dbh, $biblioitemnumber ) = @_;
3148
    my ( $dbh, $biblioitemnumber ) = @_;
3182
3149
    my $sth = $dbh->prepare("UPDATE biblioitems SET deleted_at = NOW() WHERE biblioitemnumber=?");
3183
    # get all the data for this biblioitem
3150
    return $sth->execute($biblioitemnumber) ? undef : ($DBI::errstr || 'unknown error');
3184
    my $sth = $dbh->prepare("SELECT * FROM biblioitems WHERE biblioitemnumber=?");
3185
    $sth->execute($biblioitemnumber);
3186
3187
    if ( my $data = $sth->fetchrow_hashref ) {
3188
3189
        # save the record in deletedbiblioitems
3190
        # find the fields to save
3191
        my $query = "INSERT INTO deletedbiblioitems SET ";
3192
        my @bind  = ();
3193
        foreach my $temp ( keys %$data ) {
3194
            $query .= "$temp = ?,";
3195
            push( @bind, $data->{$temp} );
3196
        }
3197
3198
        # replace the last , by ",?)"
3199
        $query =~ s/\,$//;
3200
        my $bkup_sth = $dbh->prepare($query);
3201
        $bkup_sth->execute(@bind);
3202
        $bkup_sth->finish;
3203
3204
        # delete the biblioitem
3205
        my $sth2 = $dbh->prepare("DELETE FROM biblioitems WHERE biblioitemnumber=?");
3206
        $sth2->execute($biblioitemnumber);
3207
        # update the timestamp (Bugzilla 7146)
3208
        $sth2= $dbh->prepare("UPDATE deletedbiblioitems SET timestamp=NOW() WHERE biblioitemnumber=?");
3209
        $sth2->execute($biblioitemnumber);
3210
        $sth2->finish;
3211
    }
3212
    $sth->finish;
3213
    return;
3214
}
3151
}
3215
3152
3216
=head2 _koha_delete_biblio_metadata
3153
=head2 _koha_delete_biblio_metadata
Lines 3223-3241 C<$biblionumber> - the biblionumber of the biblio metadata to be deleted Link Here
3223
3160
3224
sub _koha_delete_biblio_metadata {
3161
sub _koha_delete_biblio_metadata {
3225
    my ($biblionumber) = @_;
3162
    my ($biblionumber) = @_;
3226
3163
    my $dbh = C4::Context->dbh;
3227
    my $dbh    = C4::Context->dbh;
3164
    my $sth = $dbh->prepare("UPDATE biblio_metadata SET deleted_at = NOW() WHERE biblionumber=?");
3228
    my $schema = Koha::Database->new->schema;
3165
    return $sth->execute($biblionumber);
3229
    $schema->txn_do(
3230
        sub {
3231
            $dbh->do( q|
3232
                INSERT INTO deletedbiblio_metadata (biblionumber, format, marcflavour, metadata)
3233
                SELECT biblionumber, format, marcflavour, metadata FROM biblio_metadata WHERE biblionumber=?
3234
            |,  undef, $biblionumber );
3235
            $dbh->do( q|DELETE FROM biblio_metadata WHERE biblionumber=?|,
3236
                undef, $biblionumber );
3237
        }
3238
    );
3239
}
3166
}
3240
3167
3241
=head1 UNEXPORTED FUNCTIONS
3168
=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 1257-1263 sub GetLastAcquisitions { Link Here
1257
	my $number_of_itemtypes   = @{$data->{itemtypes}};
1258
	my $number_of_itemtypes   = @{$data->{itemtypes}};
1258
	
1259
	
1259
	
1260
	
1260
	my @where = ('WHERE 1 '); 
1261
	my @where = ('WHERE (items.deleted_at IS NULL AND biblio.deleted_at IS NULL AND biblioitems.deleted_at IS NULL) ');
1261
	$number_of_branches and push @where
1262
	$number_of_branches and push @where
1262
	   , 'AND holdingbranch IN (' 
1263
	   , 'AND holdingbranch IN (' 
1263
	   , join(',', ('?') x $number_of_branches )
1264
	   , join(',', ('?') x $number_of_branches )
Lines 1304-1310 sub GetItemnumbersForBiblio { Link Here
1304
    my $biblionumber = shift;
1305
    my $biblionumber = shift;
1305
    my @items;
1306
    my @items;
1306
    my $dbh = C4::Context->dbh;
1307
    my $dbh = C4::Context->dbh;
1307
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
1308
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ? AND deleted_at IS NULL");
1308
    $sth->execute($biblionumber);
1309
    $sth->execute($biblionumber);
1309
    while (my $result = $sth->fetchrow_hashref) {
1310
    while (my $result = $sth->fetchrow_hashref) {
1310
        push @items, $result->{'itemnumber'};
1311
        push @items, $result->{'itemnumber'};
Lines 2079-2105 sub _koha_delete_item { Link Here
2079
    my ( $itemnum ) = @_;
2080
    my ( $itemnum ) = @_;
2080
2081
2081
    my $dbh = C4::Context->dbh;
2082
    my $dbh = C4::Context->dbh;
2082
    # save the deleted item to deleteditems table
2083
    my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
2084
    $sth->execute($itemnum);
2085
    my $data = $sth->fetchrow_hashref();
2086
2087
    # There is no item to delete
2088
    return 0 unless $data;
2089
2090
    my $query = "INSERT INTO deleteditems SET ";
2091
    my @bind  = ();
2092
    foreach my $key ( keys %$data ) {
2093
        next if ( $key eq 'timestamp' ); # timestamp will be set by db
2094
        $query .= "$key = ?,";
2095
        push( @bind, $data->{$key} );
2096
    }
2097
    $query =~ s/\,$//;
2098
    $sth = $dbh->prepare($query);
2099
    $sth->execute(@bind);
2100
2083
2101
    # delete from items table
2084
    my $sth = $dbh->prepare("UPDATE items SET deleted_at = NOW() WHERE itemnumber = ?");
2102
    $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
2103
    my $deleted = $sth->execute($itemnum);
2085
    my $deleted = $sth->execute($itemnum);
2104
    return ( $deleted == 1 ) ? 1 : 0;
2086
    return ( $deleted == 1 ) ? 1 : 0;
2105
}
2087
}
Lines 2464-2470 sub SearchItems { Link Here
2464
          LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
2446
          LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
2465
          LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
2447
          LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
2466
          LEFT JOIN biblio_metadata ON biblio_metadata.biblionumber = biblio.biblionumber
2448
          LEFT JOIN biblio_metadata ON biblio_metadata.biblionumber = biblio.biblionumber
2467
          WHERE 1
2449
          WHERE items.deleted_at IS NULL
2468
    };
2450
    };
2469
    if (defined $where_str and $where_str ne '') {
2451
    if (defined $where_str and $where_str ne '') {
2470
        $query .= qq{ AND $where_str };
2452
        $query .= qq{ AND $where_str };
Lines 2815-2821 sub ToggleNewStatus { Link Here
2815
            SELECT items.biblionumber, items.itemnumber
2797
            SELECT items.biblionumber, items.itemnumber
2816
            FROM items
2798
            FROM items
2817
            LEFT JOIN biblioitems ON biblioitems.biblionumber = items.biblionumber
2799
            LEFT JOIN biblioitems ON biblioitems.biblionumber = items.biblionumber
2818
            WHERE 1
2800
            WHERE items.deleted_at IS NULL
2819
        |;
2801
        |;
2820
        for my $condition ( @$conditions ) {
2802
        for my $condition ( @$conditions ) {
2821
            if (
2803
            if (
(-)a/C4/Reserves.pm (-2 / +2 lines)
Lines 1132-1138 sub IsAvailableForItemLevelRequest { Link Here
1132
        return 1;
1132
        return 1;
1133
    } elsif ( $on_shelf_holds == 2 ) {
1133
    } elsif ( $on_shelf_holds == 2 ) {
1134
        my @items =
1134
        my @items =
1135
          Koha::Items->search( { biblionumber => $item->{biblionumber} } );
1135
          Koha::Items->search( { biblionumber => $item->{biblionumber}, deleted_at => undef } );
1136
1136
1137
        my $any_available = 0;
1137
        my $any_available = 0;
1138
1138
Lines 2054-2060 sub GetMaxPatronHoldsForRecord { Link Here
2054
    my ( $borrowernumber, $biblionumber ) = @_;
2054
    my ( $borrowernumber, $biblionumber ) = @_;
2055
2055
2056
    my $patron = Koha::Patrons->find($borrowernumber);
2056
    my $patron = Koha::Patrons->find($borrowernumber);
2057
    my @items = Koha::Items->search( { biblionumber => $biblionumber } );
2057
    my @items = Koha::Items->search( { biblionumber => $biblionumber, deleted_at => undef } );
2058
2058
2059
    my $controlbranch = C4::Context->preference('ReservesControlBranch');
2059
    my $controlbranch = C4::Context->preference('ReservesControlBranch');
2060
2060
(-)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 326-332 sub do_check_for_previous_checkout { Link Here
326
    my ( $self, $item ) = @_;
326
    my ( $self, $item ) = @_;
327
327
328
    # Find all items for bib and extract item numbers.
328
    # Find all items for bib and extract item numbers.
329
    my @items = Koha::Items->search({biblionumber => $item->{biblionumber}});
329
    my @items = Koha::Items->search({biblionumber => $item->{biblionumber}, deleted_at => undef });
330
    my @item_nos;
330
    my @item_nos;
331
    foreach my $item (@items) {
331
    foreach my $item (@items) {
332
        push @item_nos, $item->itemnumber;
332
        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 286-292 if ( $query->param('place_reserve') ) { Link Here
286
        }
286
        }
287
287
288
        unless ( $can_place_hold_if_available_at_pickup ) {
288
        unless ( $can_place_hold_if_available_at_pickup ) {
289
            my $items_in_this_library = Koha::Items->search({ biblionumber => $biblioNum, holdingbranch => $branch });
289
            my $items_in_this_library = Koha::Items->search({ biblionumber => $biblioNum, holdingbranch => $branch, deleted_at => undef });
290
            my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
290
            my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
291
            my $nb_of_items_unavailable = $items_in_this_library->search({ -or => { lost => { '!=' => 0 }, damaged => { '!=' => 0 }, } });
291
            my $nb_of_items_unavailable = $items_in_this_library->search({ -or => { lost => { '!=' => 0 }, damaged => { '!=' => 0 }, } });
292
            if ( $items_in_this_library->count > $nb_of_items_issued + $nb_of_items_unavailable ) {
292
            if ( $items_in_this_library->count > $nb_of_items_issued + $nb_of_items_unavailable ) {
Lines 537-543 foreach my $biblioNum (@biblionumbers) { Link Here
537
            $numCopiesAvailable++;
537
            $numCopiesAvailable++;
538
538
539
            unless ( $can_place_hold_if_available_at_pickup ) {
539
            unless ( $can_place_hold_if_available_at_pickup ) {
540
                my $items_in_this_library = Koha::Items->search({ biblionumber => $itemInfo->{biblionumber}, holdingbranch => $itemInfo->{holdingbranch} });
540
                my $items_in_this_library = Koha::Items->search({ biblionumber => $itemInfo->{biblionumber}, holdingbranch => $itemInfo->{holdingbranch}, deleted_at => undef });
541
                my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
541
                my $nb_of_items_issued = $items_in_this_library->search({ 'issue.itemnumber' => { not => undef }}, { join => 'issue' })->count;
542
                if ( $items_in_this_library->count > $nb_of_items_issued ) {
542
                if ( $items_in_this_library->count > $nb_of_items_issued ) {
543
                    push @not_available_at, $itemInfo->{holdingbranch};
543
                    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