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

(-)a/C4/Acquisition.pm (-1 / +1 lines)
Lines 1800-1806 sub DelOrder { Link Here
1800
1800
1801
    my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
1801
    my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
1802
    foreach my $itemnumber (@itemnumbers){
1802
    foreach my $itemnumber (@itemnumbers){
1803
        my $delcheck = C4::Items::DelItemCheck( $dbh, $bibnum, $itemnumber );
1803
        my $delcheck = C4::Items::DelItemCheck( $bibnum, $itemnumber );
1804
1804
1805
        if($delcheck != 1) {
1805
        if($delcheck != 1) {
1806
            $error->{'delitem'} = 1;
1806
            $error->{'delitem'} = 1;
(-)a/C4/ImportBatch.pm (-1 / +1 lines)
Lines 924-930 sub BatchRevertItems { Link Here
924
    $sth->bind_param(1, $import_record_id);
924
    $sth->bind_param(1, $import_record_id);
925
    $sth->execute();
925
    $sth->execute();
926
    while (my $row = $sth->fetchrow_hashref()) {
926
    while (my $row = $sth->fetchrow_hashref()) {
927
        my $error = DelItemCheck($dbh, $biblionumber, $row->{'itemnumber'});
927
        my $error = DelItemCheck( $biblionumber, $row->{'itemnumber'});
928
        if ($error == 1){
928
        if ($error == 1){
929
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ? WHERE import_items_id = ?");
929
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ? WHERE import_items_id = ?");
930
            $updsth->bind_param(1, 'reverted');
930
            $updsth->bind_param(1, 'reverted');
(-)a/C4/Items.pm (-10 / +6 lines)
Lines 2220-2226 sub MoveItemFromBiblio { Link Here
2220
2220
2221
=head2 ItemSafeToDelete
2221
=head2 ItemSafeToDelete
2222
2222
2223
   ItemSafeToDelete($dbh, $biblionumber, $itemnumber);
2223
   ItemSafeToDelete( $biblionumber, $itemnumber);
2224
2224
2225
Exported function (core API) for checking whether an item record is safe to delete.
2225
Exported function (core API) for checking whether an item record is safe to delete.
2226
2226
Lines 2237-2245 returns 1 if the item is safe to delete, Link Here
2237
=cut
2237
=cut
2238
2238
2239
sub ItemSafeToDelete {
2239
sub ItemSafeToDelete {
2240
    my ( $dbh, $biblionumber, $itemnumber ) = @_;
2240
    my ( $biblionumber, $itemnumber ) = @_;
2241
    my $status;
2241
    my $status;
2242
    $dbh ||= C4::Context->dbh;
2242
    my $dbh = C4::Context->dbh;
2243
2243
2244
    my $error;
2244
    my $error;
2245
2245
Lines 2293-2313 sub ItemSafeToDelete { Link Here
2293
2293
2294
=head2 DelItemCheck
2294
=head2 DelItemCheck
2295
2295
2296
   DelItemCheck($dbh, $biblionumber, $itemnumber);
2296
   DelItemCheck( $biblionumber, $itemnumber);
2297
2297
2298
Exported function (core API) for deleting an item record in Koha if there no current issue.
2298
Exported function (core API) for deleting an item record in Koha if there no current issue.
2299
2299
2300
DelItemCheck wraps ItemSafeToDelete around DelItem.
2300
DelItemCheck wraps ItemSafeToDelete around DelItem.
2301
2301
2302
It takes a database handle, biblionumber and itemnumber as arguments:
2303
2304
    DelItemCheck(  $dbh, $biblionumber, $itemnumber );
2305
2306
=cut
2302
=cut
2307
2303
2308
sub DelItemCheck {
2304
sub DelItemCheck {
2309
    my ( $dbh, $biblionumber, $itemnumber ) = @_;
2305
    my ( $biblionumber, $itemnumber ) = @_;
2310
    my $status = ItemSafeToDelete( $dbh, $biblionumber, $itemnumber );
2306
    my $status = ItemSafeToDelete( $biblionumber, $itemnumber );
2311
2307
2312
    if ( $status == 1 ) {
2308
    if ( $status == 1 ) {
2313
        DelItem(
2309
        DelItem(
(-)a/cataloguing/additem.pl (-2 / +2 lines)
Lines 628-634 if ($op eq "additem") { Link Here
628
} elsif ($op eq "delitem") {
628
} elsif ($op eq "delitem") {
629
#-------------------------------------------------------------------------------
629
#-------------------------------------------------------------------------------
630
    # check that there is no issue on this item before deletion.
630
    # check that there is no issue on this item before deletion.
631
    $error = &DelItemCheck($dbh,$biblionumber,$itemnumber);
631
    $error = &DelItemCheck( $biblionumber,$itemnumber);
632
    if($error == 1){
632
    if($error == 1){
633
        print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid");
633
        print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid");
634
    }else{
634
    }else{
Lines 645-651 if ($op eq "additem") { Link Here
645
        my $items = &GetItemsByBiblioitemnumber( $biblioitem->{biblioitemnumber} );
645
        my $items = &GetItemsByBiblioitemnumber( $biblioitem->{biblioitemnumber} );
646
646
647
        foreach my $item (@$items) {
647
        foreach my $item (@$items) {
648
            $error =&DelItemCheck( $dbh, $biblionumber, $item->{itemnumber} );
648
            $error =&DelItemCheck( $biblionumber, $item->{itemnumber} );
649
            $itemfail =$item;
649
            $itemfail =$item;
650
        if($error == 1){
650
        if($error == 1){
651
            next
651
            next
(-)a/misc/cronjobs/delete_items.pl (-2 / +2 lines)
Lines 57-65 $GLOBAL->{sth}->{target_items}->execute(); Link Here
57
57
58
DELITEM: while ( my $item = $GLOBAL->{sth}->{target_items}->fetchrow_hashref() ) {
58
DELITEM: while ( my $item = $GLOBAL->{sth}->{target_items}->fetchrow_hashref() ) {
59
59
60
    my $status = C4::Items::ItemSafeToDelete( $dbh, $item->{itemnumber}, $item->{biblionumber} );
60
    my $status = C4::Items::ItemSafeToDelete( $item->{itemnumber}, $item->{biblionumber} );
61
    if( $status == 1 )  {
61
    if( $status == 1 )  {
62
        C4::Items::DelItemCheck( $dbh, $item->{itemnumber}, $item->{biblionumber} );
62
        C4::Items::DelItemCheck( $item->{itemnumber}, $item->{biblionumber} );
63
        verbose "Deleting '$item->{itemnumber}'";
63
        verbose "Deleting '$item->{itemnumber}'";
64
    } else {
64
    } else {
65
        verbose "Item '$item->{itemnumber}' not deletd: $status";
65
        verbose "Item '$item->{itemnumber}' not deletd: $status";
(-)a/t/db_dependent/Circulation/IsItemIssued.t (-2 / +2 lines)
Lines 44-50 AddIssue($borrower, 'i_dont_exist'); Link Here
44
is ( IsItemIssued( $item->{itemnumber} ), 1, "item is now on loan" );
44
is ( IsItemIssued( $item->{itemnumber} ), 1, "item is now on loan" );
45
45
46
is(
46
is(
47
    DelItemCheck($dbh, $biblionumber, $itemnumber),
47
    DelItemCheck( $biblionumber, $itemnumber),
48
    'book_on_loan',
48
    'book_on_loan',
49
    'item that is on loan cannot be deleted',
49
    'item that is on loan cannot be deleted',
50
);
50
);
Lines 53-59 AddReturn('i_dont_exist', $library->{branchcode}); Link Here
53
is ( IsItemIssued( $item->{itemnumber} ), 0, "item has been returned" );
53
is ( IsItemIssued( $item->{itemnumber} ), 0, "item has been returned" );
54
54
55
is(
55
is(
56
    DelItemCheck($dbh, $biblionumber, $itemnumber),
56
    DelItemCheck( $biblionumber, $itemnumber),
57
    1,
57
    1,
58
    'item that is not on loan can be deleted',
58
    'item that is not on loan can be deleted',
59
);
59
);
(-)a/t/db_dependent/Items_DelItemCheck.t (-9 / +9 lines)
Lines 72-84 my $item = $builder->build( Link Here
72
AddIssue( $patron, $item->{barcode} );
72
AddIssue( $patron, $item->{barcode} );
73
73
74
is(
74
is(
75
    ItemSafeToDelete($dbh, $biblio->{biblionumber}, $item->{itemnumber} ),
75
    ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
76
    'book_on_loan',
76
    'book_on_loan',
77
    'ItemSafeToDelete reports item on loan',
77
    'ItemSafeToDelete reports item on loan',
78
);
78
);
79
79
80
is(
80
is(
81
    DelItemCheck($dbh, $biblio->{biblionumber}, $item->{itemnumber} ),
81
    DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} ),
82
    'book_on_loan',
82
    'book_on_loan',
83
    'item that is on loan cannot be deleted',
83
    'item that is on loan cannot be deleted',
84
);
84
);
Lines 92-104 t::lib::Mocks::mock_preference('IndependentBranches', 1); Link Here
92
ModItem( { homebranch => $branch2->{branchcode}, holdingbranch => $branch2->{branchcode} }, $biblio->{biblionumber}, $item->{itemnumber} );
92
ModItem( { homebranch => $branch2->{branchcode}, holdingbranch => $branch2->{branchcode} }, $biblio->{biblionumber}, $item->{itemnumber} );
93
93
94
is(
94
is(
95
    ItemSafeToDelete($dbh, $biblio->{biblionumber}, $item->{itemnumber} ),
95
    ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
96
    'not_same_branch',
96
    'not_same_branch',
97
    'ItemSafeToDelete reports IndependentBranches restriction',
97
    'ItemSafeToDelete reports IndependentBranches restriction',
98
);
98
);
99
99
100
is(
100
is(
101
    DelItemCheck($dbh, $biblio->{biblionumber}, $item->{itemnumber} ),
101
    DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} ),
102
    'not_same_branch',
102
    'not_same_branch',
103
    'IndependentBranches prevents deletion at another branch',
103
    'IndependentBranches prevents deletion at another branch',
104
);
104
);
Lines 113-125 ModItem( { homebranch => $branch->{branchcode}, holdingbranch => $branch->{branc Link Here
113
    $module->mock( GetAnalyticsCount => sub { return 1 } );
113
    $module->mock( GetAnalyticsCount => sub { return 1 } );
114
114
115
    is(
115
    is(
116
        ItemSafeToDelete($dbh, $biblio->{biblionumber}, $item->{itemnumber} ),
116
        ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
117
        'linked_analytics',
117
        'linked_analytics',
118
        'ItemSafeToDelete reports linked analytics',
118
        'ItemSafeToDelete reports linked analytics',
119
    );
119
    );
120
120
121
    is(
121
    is(
122
        DelItemCheck($dbh, $biblio->{biblionumber}, $item->{itemnumber} ),
122
        DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} ),
123
        'linked_analytics',
123
        'linked_analytics',
124
        'Linked analytics prevents deletion of item',
124
        'Linked analytics prevents deletion of item',
125
    );
125
    );
Lines 127-143 ModItem( { homebranch => $branch->{branchcode}, holdingbranch => $branch->{branc Link Here
127
}
127
}
128
128
129
is(
129
is(
130
    ItemSafeToDelete($dbh, $biblio->{biblionumber}, $item->{itemnumber} ),
130
    ItemSafeToDelete( $biblio->{biblionumber}, $item->{itemnumber} ),
131
    1,
131
    1,
132
    'ItemSafeToDelete shows item safe to delete'
132
    'ItemSafeToDelete shows item safe to delete'
133
);
133
);
134
134
135
DelItemCheck( $dbh, $biblio->{biblionumber}, $item->{itemnumber} );
135
DelItemCheck( $biblio->{biblionumber}, $item->{itemnumber} );
136
136
137
my $test_item = GetItem( $item->{itemnumber} );
137
my $test_item = GetItem( $item->{itemnumber} );
138
138
139
is( $test_item->{itemnumber}, undef,
139
is( $test_item->{itemnumber}, undef,
140
    "DelItemCheck should delete item if 'do_not_commit' not set"
140
    "DelItemCheck should delete item if ItemSafeToDelete returns true"
141
);
141
);
142
142
143
# End of testing
143
# End of testing
(-)a/t/db_dependent/Reserves.t (-1 / +1 lines)
Lines 371-377 is($new_count, $hold_notice_count + 1, 'patron not notified a second time (bug 1 Link Here
371
# avoiding the not_same_branch error
371
# avoiding the not_same_branch error
372
t::lib::Mocks::mock_preference('IndependentBranches', 0);
372
t::lib::Mocks::mock_preference('IndependentBranches', 0);
373
is(
373
is(
374
    DelItemCheck($dbh, $bibnum, $itemnumber),
374
    DelItemCheck( $bibnum, $itemnumber),
375
    'book_reserved',
375
    'book_reserved',
376
    'item that is captured to fill a hold cannot be deleted',
376
    'item that is captured to fill a hold cannot be deleted',
377
);
377
);
(-)a/tools/batchMod.pl (-1 / +1 lines)
Lines 166-172 if ($op eq "action") { Link Here
166
		$job->progress($i) if $runinbackground;
166
		$job->progress($i) if $runinbackground;
167
		my $itemdata = GetItem($itemnumber);
167
		my $itemdata = GetItem($itemnumber);
168
        if ( $del ){
168
        if ( $del ){
169
			my $return = DelItemCheck(C4::Context->dbh, $itemdata->{'biblionumber'}, $itemdata->{'itemnumber'});
169
            my $return = DelItemCheck( $itemdata->{'biblionumber'}, $itemdata->{'itemnumber'});
170
			if ($return == 1) {
170
			if ($return == 1) {
171
			    $deleted_items++;
171
			    $deleted_items++;
172
			} else {
172
			} else {
(-)a/tools/batch_delete_records.pl (-2 / +1 lines)
Lines 159-165 if ( $op eq 'form' ) { Link Here
159
            # Delete items
159
            # Delete items
160
            my @itemnumbers = @{ C4::Items::GetItemnumbersForBiblio( $biblionumber ) };
160
            my @itemnumbers = @{ C4::Items::GetItemnumbersForBiblio( $biblionumber ) };
161
            ITEMNUMBER: for my $itemnumber ( @itemnumbers ) {
161
            ITEMNUMBER: for my $itemnumber ( @itemnumbers ) {
162
                my $error = eval { C4::Items::DelItemCheck( $dbh, $biblionumber, $itemnumber ) };
162
                my $error = eval { C4::Items::DelItemCheck( $biblionumber, $itemnumber ) };
163
                if ( $error != 1 or $@ ) {
163
                if ( $error != 1 or $@ ) {
164
                    push @messages, {
164
                    push @messages, {
165
                        type => 'error',
165
                        type => 'error',
166
- 

Return to bug 14504