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 1136-1142 sub GetMarcBiblio { Link Here
1136
    }
1136
    }
1137
1137
1138
    my $dbh          = C4::Context->dbh;
1138
    my $dbh          = C4::Context->dbh;
1139
    my $sth          = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? ");
1139
    my $sth          = $dbh->prepare("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? AND deleted_at IS NULL");
1140
    $sth->execute($biblionumber);
1140
    $sth->execute($biblionumber);
1141
    my $row     = $sth->fetchrow_hashref;
1141
    my $row     = $sth->fetchrow_hashref;
1142
    my $biblioitemnumber = $row->{'biblioitemnumber'};
1142
    my $biblioitemnumber = $row->{'biblioitemnumber'};
Lines 2754-2760 sub EmbedItemsInMarcBiblio { Link Here
2754
2754
2755
    # ... and embed the current items
2755
    # ... and embed the current items
2756
    my $dbh = C4::Context->dbh;
2756
    my $dbh = C4::Context->dbh;
2757
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
2757
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ? and deleted_at IS NULL");
2758
    $sth->execute($biblionumber);
2758
    $sth->execute($biblionumber);
2759
    my @item_fields;
2759
    my @item_fields;
2760
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
2760
    my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField( "items.itemnumber", $frameworkcode );
Lines 3084-3124 C<$biblionumber> - the biblionumber of the biblio to be deleted Link Here
3084
sub _koha_delete_biblio {
3084
sub _koha_delete_biblio {
3085
    my ( $dbh, $biblionumber ) = @_;
3085
    my ( $dbh, $biblionumber ) = @_;
3086
3086
3087
    # get all the data for this biblio
3087
    my $sth = $dbh->prepare("UPDATE biblio SET deleted_at = NOW() WHERE biblionumber=?");
3088
    my $sth = $dbh->prepare("SELECT * FROM biblio WHERE biblionumber=?");
3088
    return $sth->execute($biblionumber) ? undef : ($DBI::errstr || "unknown error");
3089
    $sth->execute($biblionumber);
3090
3091
    # FIXME There is a transaction in _koha_delete_biblio_metadata
3092
    # But actually all the following should be done inside a single transaction
3093
    if ( my $data = $sth->fetchrow_hashref ) {
3094
3095
        # save the record in deletedbiblio
3096
        # find the fields to save
3097
        my $query = "INSERT INTO deletedbiblio SET ";
3098
        my @bind  = ();
3099
        foreach my $temp ( keys %$data ) {
3100
            $query .= "$temp = ?,";
3101
            push( @bind, $data->{$temp} );
3102
        }
3103
3104
        # replace the last , by ",?)"
3105
        $query =~ s/\,$//;
3106
        my $bkup_sth = $dbh->prepare($query);
3107
        $bkup_sth->execute(@bind);
3108
        $bkup_sth->finish;
3109
3110
        _koha_delete_biblio_metadata( $biblionumber );
3111
3112
        # delete the biblio
3113
        my $sth2 = $dbh->prepare("DELETE FROM biblio WHERE biblionumber=?");
3114
        $sth2->execute($biblionumber);
3115
        # update the timestamp (Bugzilla 7146)
3116
        $sth2= $dbh->prepare("UPDATE deletedbiblio SET timestamp=NOW() WHERE biblionumber=?");
3117
        $sth2->execute($biblionumber);
3118
        $sth2->finish;
3119
    }
3120
    $sth->finish;
3121
    return;
3122
}
3089
}
3123
3090
3124
=head2 _koha_delete_biblioitems
3091
=head2 _koha_delete_biblioitems
Lines 3136-3173 C<$biblionumber> - the biblioitemnumber of the biblioitem to be deleted Link Here
3136
3103
3137
sub _koha_delete_biblioitems {
3104
sub _koha_delete_biblioitems {
3138
    my ( $dbh, $biblioitemnumber ) = @_;
3105
    my ( $dbh, $biblioitemnumber ) = @_;
3139
3106
    my $sth = $dbh->prepare("UPDATE biblioitems SET deleted_at = NOW() WHERE biblioitemnumber=?");
3140
    # get all the data for this biblioitem
3107
    return $sth->execute($biblioitemnumber) ? undef : ($DBI::errstr || 'unknown error');
3141
    my $sth = $dbh->prepare("SELECT * FROM biblioitems WHERE biblioitemnumber=?");
3142
    $sth->execute($biblioitemnumber);
3143
3144
    if ( my $data = $sth->fetchrow_hashref ) {
3145
3146
        # save the record in deletedbiblioitems
3147
        # find the fields to save
3148
        my $query = "INSERT INTO deletedbiblioitems SET ";
3149
        my @bind  = ();
3150
        foreach my $temp ( keys %$data ) {
3151
            $query .= "$temp = ?,";
3152
            push( @bind, $data->{$temp} );
3153
        }
3154
3155
        # replace the last , by ",?)"
3156
        $query =~ s/\,$//;
3157
        my $bkup_sth = $dbh->prepare($query);
3158
        $bkup_sth->execute(@bind);
3159
        $bkup_sth->finish;
3160
3161
        # delete the biblioitem
3162
        my $sth2 = $dbh->prepare("DELETE FROM biblioitems WHERE biblioitemnumber=?");
3163
        $sth2->execute($biblioitemnumber);
3164
        # update the timestamp (Bugzilla 7146)
3165
        $sth2= $dbh->prepare("UPDATE deletedbiblioitems SET timestamp=NOW() WHERE biblioitemnumber=?");
3166
        $sth2->execute($biblioitemnumber);
3167
        $sth2->finish;
3168
    }
3169
    $sth->finish;
3170
    return;
3171
}
3108
}
3172
3109
3173
=head2 _koha_delete_biblio_metadata
3110
=head2 _koha_delete_biblio_metadata
Lines 3180-3198 C<$biblionumber> - the biblionumber of the biblio metadata to be deleted Link Here
3180
3117
3181
sub _koha_delete_biblio_metadata {
3118
sub _koha_delete_biblio_metadata {
3182
    my ($biblionumber) = @_;
3119
    my ($biblionumber) = @_;
3183
3120
    my $dbh = C4::Context->dbh;
3184
    my $dbh    = C4::Context->dbh;
3121
    my $sth = $dbh->prepare("UPDATE biblio_metadata SET deleted_at = NOW() WHERE biblionumber=?");
3185
    my $schema = Koha::Database->new->schema;
3122
    return $sth->execute($biblionumber);
3186
    $schema->txn_do(
3187
        sub {
3188
            $dbh->do( q|
3189
                INSERT INTO deletedbiblio_metadata (biblionumber, format, marcflavour, metadata)
3190
                SELECT biblionumber, format, marcflavour, metadata FROM biblio_metadata WHERE biblionumber=?
3191
            |,  undef, $biblionumber );
3192
            $dbh->do( q|DELETE FROM biblio_metadata WHERE biblionumber=?|,
3193
                undef, $biblionumber );
3194
        }
3195
    );
3196
}
3123
}
3197
3124
3198
=head1 UNEXPORTED FUNCTIONS
3125
=head1 UNEXPORTED FUNCTIONS
(-)a/C4/Items.pm (-28 / +10 lines)
Lines 830-835 sub GetItemsForInventory { Link Here
830
        FROM items
830
        FROM items
831
        LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber
831
        LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber
832
        LEFT JOIN biblioitems on items.biblionumber = biblioitems.biblionumber
832
        LEFT JOIN biblioitems on items.biblionumber = biblioitems.biblionumber
833
        WHERE (items.deleted_at IS NULL AND biblio.deleted_at IS NULL AND biblioitems.deleted_at IS NULL)
833
    };
834
    };
834
    if ($statushash){
835
    if ($statushash){
835
        for my $authvfield (keys %$statushash){
836
        for my $authvfield (keys %$statushash){
Lines 936-942 Called by C<C4::XISBN> Link Here
936
sub GetItemsByBiblioitemnumber {
937
sub GetItemsByBiblioitemnumber {
937
    my ( $bibitem ) = @_;
938
    my ( $bibitem ) = @_;
938
    my $dbh = C4::Context->dbh;
939
    my $dbh = C4::Context->dbh;
939
    my $sth = $dbh->prepare("SELECT * FROM items WHERE items.biblioitemnumber = ?") || die $dbh->errstr;
940
    my $sth = $dbh->prepare("SELECT * FROM items WHERE items.biblioitemnumber = ? AND items.deleted_at IS NULL") || die $dbh->errstr;
940
    # Get all items attached to a biblioitem
941
    # Get all items attached to a biblioitem
941
    my $i = 0;
942
    my $i = 0;
942
    my @results; 
943
    my @results; 
Lines 1060-1066 sub GetItemsInfo { Link Here
1060
     FROM items
1061
     FROM items
1061
     LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode
1062
     LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode
1062
     LEFT JOIN branches AS home ON items.homebranch=home.branchcode
1063
     LEFT JOIN branches AS home ON items.homebranch=home.branchcode
1063
     LEFT JOIN biblio      ON      biblio.biblionumber     = items.biblionumber
1064
     LEFT JOIN biblio      ON      biblio.biblionumber     = items.biblionumber AND biblio.deleted_at IS NULL
1064
     LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
1065
     LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
1065
     LEFT JOIN issues USING (itemnumber)
1066
     LEFT JOIN issues USING (itemnumber)
1066
     LEFT JOIN borrowers USING (borrowernumber)
1067
     LEFT JOIN borrowers USING (borrowernumber)
Lines 1074-1080 sub GetItemsInfo { Link Here
1074
        AND localization.lang = ?
1075
        AND localization.lang = ?
1075
    |;
1076
    |;
1076
1077
1077
    $query .= " WHERE items.biblionumber = ? ORDER BY home.branchname, items.enumchron, LPAD( items.copynumber, 8, '0' ), items.dateaccessioned DESC" ;
1078
    $query .= " WHERE items.biblionumber = ? AND items.deleted_at IS NULL ORDER BY home.branchname, items.enumchron, LPAD( items.copynumber, 8, '0' ), items.dateaccessioned DESC" ;
1078
    my $sth = $dbh->prepare($query);
1079
    my $sth = $dbh->prepare($query);
1079
    $sth->execute($language, $biblionumber);
1080
    $sth->execute($language, $biblionumber);
1080
    my $i = 0;
1081
    my $i = 0;
Lines 1181-1187 sub GetItemsLocationInfo { Link Here
1181
			    location, itemcallnumber, cn_sort
1182
			    location, itemcallnumber, cn_sort
1182
		     FROM items, branches as a, branches as b
1183
		     FROM items, branches as a, branches as b
1183
		     WHERE homebranch = a.branchcode AND holdingbranch = b.branchcode 
1184
		     WHERE homebranch = a.branchcode AND holdingbranch = b.branchcode 
1184
		     AND biblionumber = ?
1185
		     AND biblionumber = ? AND deleted_at IS NULL
1185
		     ORDER BY cn_sort ASC";
1186
		     ORDER BY cn_sort ASC";
1186
	my $sth = $dbh->prepare($query);
1187
	my $sth = $dbh->prepare($query);
1187
        $sth->execute($biblionumber);
1188
        $sth->execute($biblionumber);
Lines 1253-1259 sub GetLastAcquisitions { Link Here
1253
	my $number_of_itemtypes   = @{$data->{itemtypes}};
1254
	my $number_of_itemtypes   = @{$data->{itemtypes}};
1254
	
1255
	
1255
	
1256
	
1256
	my @where = ('WHERE 1 '); 
1257
	my @where = ('WHERE (items.deleted_at IS NULL AND biblio.deleted_at IS NULL AND biblioitems.deleted_at IS NULL) ');
1257
	$number_of_branches and push @where
1258
	$number_of_branches and push @where
1258
	   , 'AND holdingbranch IN (' 
1259
	   , 'AND holdingbranch IN (' 
1259
	   , join(',', ('?') x $number_of_branches )
1260
	   , join(',', ('?') x $number_of_branches )
Lines 1300-1306 sub GetItemnumbersForBiblio { Link Here
1300
    my $biblionumber = shift;
1301
    my $biblionumber = shift;
1301
    my @items;
1302
    my @items;
1302
    my $dbh = C4::Context->dbh;
1303
    my $dbh = C4::Context->dbh;
1303
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
1304
    my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ? AND deleted_at IS NULL");
1304
    $sth->execute($biblionumber);
1305
    $sth->execute($biblionumber);
1305
    while (my $result = $sth->fetchrow_hashref) {
1306
    while (my $result = $sth->fetchrow_hashref) {
1306
        push @items, $result->{'itemnumber'};
1307
        push @items, $result->{'itemnumber'};
Lines 2075-2101 sub _koha_delete_item { Link Here
2075
    my ( $itemnum ) = @_;
2076
    my ( $itemnum ) = @_;
2076
2077
2077
    my $dbh = C4::Context->dbh;
2078
    my $dbh = C4::Context->dbh;
2078
    # save the deleted item to deleteditems table
2079
    my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
2080
    $sth->execute($itemnum);
2081
    my $data = $sth->fetchrow_hashref();
2082
2083
    # There is no item to delete
2084
    return 0 unless $data;
2085
2086
    my $query = "INSERT INTO deleteditems SET ";
2087
    my @bind  = ();
2088
    foreach my $key ( keys %$data ) {
2089
        next if ( $key eq 'timestamp' ); # timestamp will be set by db
2090
        $query .= "$key = ?,";
2091
        push( @bind, $data->{$key} );
2092
    }
2093
    $query =~ s/\,$//;
2094
    $sth = $dbh->prepare($query);
2095
    $sth->execute(@bind);
2096
2079
2097
    # delete from items table
2080
    my $sth = $dbh->prepare("UPDATE items SET deleted_at = NOW() WHERE itemnumber = ?");
2098
    $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
2099
    my $deleted = $sth->execute($itemnum);
2081
    my $deleted = $sth->execute($itemnum);
2100
    return ( $deleted == 1 ) ? 1 : 0;
2082
    return ( $deleted == 1 ) ? 1 : 0;
2101
}
2083
}
Lines 2460-2466 sub SearchItems { Link Here
2460
          LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
2442
          LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
2461
          LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
2443
          LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
2462
          LEFT JOIN biblio_metadata ON biblio_metadata.biblionumber = biblio.biblionumber
2444
          LEFT JOIN biblio_metadata ON biblio_metadata.biblionumber = biblio.biblionumber
2463
          WHERE 1
2445
          WHERE items.deleted_at IS NULL
2464
    };
2446
    };
2465
    if (defined $where_str and $where_str ne '') {
2447
    if (defined $where_str and $where_str ne '') {
2466
        $query .= qq{ AND $where_str };
2448
        $query .= qq{ AND $where_str };
Lines 2811-2817 sub ToggleNewStatus { Link Here
2811
            SELECT items.biblionumber, items.itemnumber
2793
            SELECT items.biblionumber, items.itemnumber
2812
            FROM items
2794
            FROM items
2813
            LEFT JOIN biblioitems ON biblioitems.biblionumber = items.biblionumber
2795
            LEFT JOIN biblioitems ON biblioitems.biblionumber = items.biblionumber
2814
            WHERE 1
2796
            WHERE items.deleted_at IS NULL
2815
        |;
2797
        |;
2816
        for my $condition ( @$conditions ) {
2798
        for my $condition ( @$conditions ) {
2817
            if (
2799
            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 246-252 sub do_check_for_previous_checkout { Link Here
246
    my ( $self, $item ) = @_;
246
    my ( $self, $item ) = @_;
247
247
248
    # Find all items for bib and extract item numbers.
248
    # Find all items for bib and extract item numbers.
249
    my @items = Koha::Items->search({biblionumber => $item->{biblionumber}});
249
    my @items = Koha::Items->search({biblionumber => $item->{biblionumber}, deleted_at => undef });
250
    my @item_nos;
250
    my @item_nos;
251
    foreach my $item (@items) {
251
    foreach my $item (@items) {
252
        push @item_nos, $item->itemnumber;
252
        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 441-456 subtest 'IsMarcStructureInternal' => sub { Link Here
441
    is( grep( /^a$/, @internals ), 0, 'no subfield a' );
441
    is( grep( /^a$/, @internals ), 0, 'no subfield a' );
442
};
442
};
443
443
444
subtest 'deletedbiblio_metadata' => sub {
444
subtest 'delete biblio' => sub {
445
    plan tests => 2;
445
    plan tests => 2;
446
446
447
    my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
447
    my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, '');
448
    my $biblio_metadata = C4::Biblio::GetXmlBiblio( $biblionumber );
448
    my $biblio_metadata = C4::Biblio::GetXmlBiblio( $biblionumber );
449
    C4::Biblio::DelBiblio( $biblionumber );
449
    my $err = C4::Biblio::DelBiblio( $biblionumber );
450
    my ( $moved ) = $dbh->selectrow_array(q|SELECT biblionumber FROM deletedbiblio WHERE biblionumber=?|, undef, $biblionumber);
450
    is($err, undef, 'Biblio deleted without error');
451
    is( $moved, $biblionumber, 'Found in deletedbiblio' );
451
    my $data = GetBiblioData( $biblionumber );
452
    ( $moved ) = $dbh->selectrow_array(q|SELECT biblionumber FROM deletedbiblio_metadata WHERE biblionumber=?|, undef, $biblionumber);
452
    isnt( $data->{deleted_at}, undef, 'Biblio deleted with timestamp' );
453
    is( $moved, $biblionumber, 'Found in deletedbiblio_metadata' );
454
};
453
};
455
454
456
# Cleanup
455
# Cleanup
(-)a/t/db_dependent/Items.t (-1 / +1 lines)
Lines 82-88 subtest 'General Add, Get and Del tests' => sub { Link Here
82
    # Delete item.
82
    # Delete item.
83
    DelItem({ biblionumber => $bibnum, itemnumber => $itemnumber });
83
    DelItem({ biblionumber => $bibnum, itemnumber => $itemnumber });
84
    my $getdeleted = GetItem($itemnumber);
84
    my $getdeleted = GetItem($itemnumber);
85
    is($getdeleted->{'itemnumber'}, undef, "Item deleted as expected.");
85
    isnt($getdeleted->{'deleted_at'}, undef, "Item deleted as expected.");
86
86
87
    ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $library->{branchcode}, holdingbranch => $library->{branchcode}, location => $location, permanent_location => 'my permanent location', itype => $itemtype->{itemtype} } , $bibnum);
87
    ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $library->{branchcode}, holdingbranch => $library->{branchcode}, location => $location, permanent_location => 'my permanent location', itype => $itemtype->{itemtype} } , $bibnum);
88
    $getitem = GetItem($itemnumber);
88
    $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