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

(-)a/C4/Acquisition.pm (-1 / +1 lines)
Lines 1813-1819 sub DelOrder { Link Here
1813
1813
1814
    my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
1814
    my @itemnumbers = GetItemnumbersFromOrder( $ordernumber );
1815
    foreach my $itemnumber (@itemnumbers){
1815
    foreach my $itemnumber (@itemnumbers){
1816
        my $delcheck = C4::Items::DelItemCheck( $dbh, $bibnum, $itemnumber );
1816
        my $delcheck = C4::Items::DelItemCheck( $bibnum, $itemnumber );
1817
1817
1818
        if($delcheck != 1) {
1818
        if($delcheck != 1) {
1819
            $error->{'delitem'} = 1;
1819
            $error->{'delitem'} = 1;
(-)a/C4/ImportBatch.pm (-1 / +1 lines)
Lines 925-931 sub BatchRevertItems { Link Here
925
    $sth->bind_param(1, $import_record_id);
925
    $sth->bind_param(1, $import_record_id);
926
    $sth->execute();
926
    $sth->execute();
927
    while (my $row = $sth->fetchrow_hashref()) {
927
    while (my $row = $sth->fetchrow_hashref()) {
928
        my $error = DelItemCheck($dbh, $biblionumber, $row->{'itemnumber'});
928
        my $error = DelItemCheck( $$biblionumber, $row->{'itemnumber'});
929
        if ($error == 1){
929
        if ($error == 1){
930
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ? WHERE import_items_id = ?");
930
            my $updsth = $dbh->prepare("UPDATE import_items SET status = ? WHERE import_items_id = ?");
931
            $updsth->bind_param(1, 'reverted');
931
            $updsth->bind_param(1, 'reverted');
(-)a/C4/Items.pm (-9 / +6 lines)
Lines 2299-2305 sub MoveItemFromBiblio { Link Here
2299
2299
2300
=head2 ItemSafeToDelete
2300
=head2 ItemSafeToDelete
2301
2301
2302
   ItemSafeToDelete($dbh, $biblionumber, $itemnumber);
2302
   ItemSafeToDelete( $biblionumber, $itemnumber);
2303
2303
2304
Exported function (core API) for checking whether an item record is safe to delete.
2304
Exported function (core API) for checking whether an item record is safe to delete.
2305
2305
Lines 2316-2324 returns 1 if the item is safe to delete, Link Here
2316
=cut
2316
=cut
2317
2317
2318
sub ItemSafeToDelete {
2318
sub ItemSafeToDelete {
2319
    my ( $dbh, $biblionumber, $itemnumber ) = @_;
2319
    my ( $biblionumber, $itemnumber ) = @_;
2320
    my $status;
2320
    my $status;
2321
2321
2322
    my $dbh = C4::Context->dbh;
2322
    my $countanalytics = GetAnalyticsCount($itemnumber);
2323
    my $countanalytics = GetAnalyticsCount($itemnumber);
2323
2324
2324
    # check that there is no issue on this item before deletion.
2325
    # check that there is no issue on this item before deletion.
Lines 2368-2388 sub ItemSafeToDelete { Link Here
2368
2369
2369
=head2 DelItemCheck
2370
=head2 DelItemCheck
2370
2371
2371
   DelItemCheck($dbh, $biblionumber, $itemnumber);
2372
   DelItemCheck( $biblionumber, $itemnumber);
2372
2373
2373
Exported function (core API) for deleting an item record in Koha if there no current issue.
2374
Exported function (core API) for deleting an item record in Koha if there no current issue.
2374
2375
2375
DelItemCheck wraps ItemSafeToDelete around DelItem.
2376
DelItemCheck wraps ItemSafeToDelete around DelItem.
2376
2377
2377
It takes a database handle, biblionumber and itemnumber as arguments:
2378
2379
    DelItemCheck(  $dbh, $biblionumber, $itemnumber );
2380
2381
=cut
2378
=cut
2382
2379
2383
sub DelItemCheck {
2380
sub DelItemCheck {
2384
    my ( $dbh, $biblionumber, $itemnumber ) = @_;
2381
    my ( $biblionumber, $itemnumber ) = @_;
2385
    my $status = ItemSafeToDelete( $dbh, $biblionumber, $itemnumber );
2382
    my $status = ItemSafeToDelete( $biblionumber, $itemnumber );
2386
2383
2387
    if ( $status == 1 ) {
2384
    if ( $status == 1 ) {
2388
        DelItem(
2385
        DelItem(
(-)a/cataloguing/additem.pl (-2 / +2 lines)
Lines 589-595 if ($op eq "additem") { Link Here
589
} elsif ($op eq "delitem") {
589
} elsif ($op eq "delitem") {
590
#-------------------------------------------------------------------------------
590
#-------------------------------------------------------------------------------
591
    # check that there is no issue on this item before deletion.
591
    # check that there is no issue on this item before deletion.
592
    $error = &DelItemCheck($dbh,$biblionumber,$itemnumber);
592
    $error = &DelItemCheck( $biblionumber,$itemnumber);
593
    if($error == 1){
593
    if($error == 1){
594
        print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid");
594
        print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode&searchid=$searchid");
595
    }else{
595
    }else{
Lines 606-612 if ($op eq "additem") { Link Here
606
        my $items = &GetItemsByBiblioitemnumber( $biblioitem->{biblioitemnumber} );
606
        my $items = &GetItemsByBiblioitemnumber( $biblioitem->{biblioitemnumber} );
607
607
608
        foreach my $item (@$items) {
608
        foreach my $item (@$items) {
609
            $error =&DelItemCheck( $dbh, $biblionumber, $item->{itemnumber} );
609
            $error =&DelItemCheck( $biblionumber, $item->{itemnumber} );
610
            $itemfail =$item;
610
            $itemfail =$item;
611
        if($error == 1){
611
        if($error == 1){
612
            next
612
            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 36-42 AddIssue($borrower, 'i_dont_exist'); Link Here
36
is ( IsItemIssued( $item->{itemnumber} ), 1, "item is now on loan" );
36
is ( IsItemIssued( $item->{itemnumber} ), 1, "item is now on loan" );
37
37
38
is(
38
is(
39
    DelItemCheck($dbh, $biblionumber, $itemnumber),
39
    DelItemCheck( $biblionumber, $itemnumber),
40
    'book_on_loan',
40
    'book_on_loan',
41
    'item that is on loan cannot be deleted',
41
    'item that is on loan cannot be deleted',
42
);
42
);
Lines 45-51 AddReturn('i_dont_exist', 'CPL'); Link Here
45
is ( IsItemIssued( $item->{itemnumber} ), 0, "item has been returned" );
45
is ( IsItemIssued( $item->{itemnumber} ), 0, "item has been returned" );
46
46
47
is(
47
is(
48
    DelItemCheck($dbh, $biblionumber, $itemnumber),
48
    DelItemCheck( $biblionumber, $itemnumber),
49
    1,
49
    1,
50
    'item that is not on loan can be deleted',
50
    'item that is not on loan can be deleted',
51
);
51
);
(-)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 367-373 is($new_count, $hold_notice_count + 1, 'patron not notified a second time (bug 1 Link Here
367
# avoiding the not_same_branch error
367
# avoiding the not_same_branch error
368
t::lib::Mocks::mock_preference('IndependentBranches', 0);
368
t::lib::Mocks::mock_preference('IndependentBranches', 0);
369
is(
369
is(
370
    DelItemCheck($dbh, $bibnum, $itemnumber),
370
    DelItemCheck( $bibnum, $itemnumber),
371
    'book_reserved',
371
    'book_reserved',
372
    'item that is captured to fill a hold cannot be deleted',
372
    'item that is captured to fill a hold cannot be deleted',
373
);
373
);
(-)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