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

(-)a/misc/cronjobs/delete_items.pl (-46 / +48 lines)
Lines 21-86 use Getopt::Long qw( GetOptions ); Link Here
21
use Pod::Usage   qw( pod2usage );
21
use Pod::Usage   qw( pod2usage );
22
22
23
use Koha::Script -cron;
23
use Koha::Script -cron;
24
24
use C4::Biblio qw( DelBiblio );
25
use C4::Context;
26
use Koha::Items;
25
use Koha::Items;
27
26
28
my $dbh = C4::Context->dbh();
27
my @where          = ();
29
28
my $verbose        = 0;
30
my $query = { target_items => q|SELECT itemnumber, biblionumber from items| };
29
my $help           = 0;
31
30
my $manual         = 0;
32
my $GLOBAL = { query => $query, sth => {} };
31
my $commit         = 0;
33
32
my $delete_biblios = 0;
34
my $OPTIONS = {
35
    where => [],
36
    flags => {
37
        verbose => '', commit => ''
38
        , help    => ''
39
        , manual  => ''
40
        , version => ''
41
    }
42
};
43
33
44
GetOptions(
34
GetOptions(
45
    'where=s' => $OPTIONS->{where}, 'v|verbose' => sub { $OPTIONS->{flags}->{verbose} = 1 }
35
    'where=s'  => \@where, 'v|verbose' => \$verbose,
46
    , 'V|version' => sub { $OPTIONS->{flags}->{version} = 1 }
36
    'h|help'   => \$help,
47
    , 'h|help'    => sub { $OPTIONS->{flags}->{help}    = 1 }
37
    'm|manual' => \$manual,
48
    , 'm|manual'  => sub { $OPTIONS->{flags}->{manual}  = 1 }
38
    'c|commit' => \$commit,
49
    , 'c|commit'  => sub { $OPTIONS->{flags}->{commit}  = 1 }    # aka DO-EET!
39
    'del_bibs' => \$delete_biblios
50
);
40
);
51
41
52
my @where = @{ $OPTIONS->{where} };
42
pod2usage( -verbose => 2 )                                                            if $manual;
43
pod2usage( -verbose => 1 )                                                            if $help;
44
pod2usage( -verbose => 1, -message => 'You must supply at least one --where option' ) if scalar @where == 0;
53
45
54
pod2usage( -verbose => 2 )                                                       if $OPTIONS->{flags}->{manual};
46
my $where_clause = join( " AND ", @where );
55
pod2usage( -verbose => 1 )                                                       if $OPTIONS->{flags}->{help};
56
pod2usage( -verbose => 1 -msg => 'You must supply at least one --where option' ) if scalar @where == 0;
57
47
58
sub verbose {
48
$verbose && say "Where statement: $where_clause";
59
    say @_ if $OPTIONS->{flags}->{verbose};
49
if ($delete_biblios) {
50
    $verbose && say "Deleting bibliographic records when all items are deleted!";
60
}
51
}
61
52
62
my $where_clause = ' where ' . join( " and ", @where );
53
print "Test run only! No data will be deleted.\n" unless $commit;
63
54
my $deleted_string = $commit ? "Deleted" : "Would have deleted";
64
verbose "Where statement: $where_clause";
65
55
66
# FIXME Use Koha::Items instead
56
my $items = Koha::Items->search( \$where_clause );
67
$GLOBAL->{sth}->{target_items} = $dbh->prepare( $query->{target_items} . $where_clause );
68
$GLOBAL->{sth}->{target_items}->execute();
69
57
70
DELITEM: while ( my $item = $GLOBAL->{sth}->{target_items}->fetchrow_hashref() ) {
58
DELITEM: while ( my $item = $items->next ) {
71
59
72
    my $item_object    = Koha::Items->find( $item->{itemnumber} );
60
    my $safe_to_delete = $item->safe_to_delete;
73
    my $safe_to_delete = $item_object->safe_to_delete;
74
    if ($safe_to_delete) {
61
    if ($safe_to_delete) {
75
        $item_object->safe_delete
62
        my $holdings_count = $item->biblio->items->count - 1;
76
            if $OPTIONS->{flags}->{commit};
63
        $item->safe_delete
77
        verbose "Deleting '$item->{itemnumber}'";
64
            if $commit;
65
        $verbose && say "$deleted_string item " . $item->itemnumber . " ($holdings_count items remain on record)";
66
67
        if ( $delete_biblios && $holdings_count == 0 ) {    # aka DO-EET for empty bibs!
68
            my $error = &DelBiblio( $item->biblionumber ) if $commit;
69
            if ($error) {
70
                $verbose && say "Could not delete bib " . $item->biblionumber . ": $error";
71
            } else {
72
                $verbose && say "No items remaining. $deleted_string bibliographic record " . $item->biblionumber;
73
            }
74
        }
78
    } else {
75
    } else {
79
        verbose sprintf "Item '%s' (Barcode: '%s', Title: '%s') not deleted: %s",
76
        say sprintf(
80
            $item->{itemnumber},
77
            "Item '%s' (Barcode: '%s', Title: '%s') cannot deleted: %s",
81
            $item_object->barcode,
78
            $item->itemnumber,
82
            $item_object->biblio->title,
79
            $item->barcode,
83
            @{ $safe_to_delete->messages }[0]->message;
80
            $item->biblio->title,
81
            @{ $safe_to_delete->messages }[0]->message
82
        ) if $verbose;
84
    }
83
    }
85
}
84
}
86
85
Lines 123-128 clause querying the items table. These are joined by C<AND>. Link Here
123
122
124
No items will be deleted unless the C<--commit> flag is present.
123
No items will be deleted unless the C<--commit> flag is present.
125
124
125
=item B<--del_bibs>
126
127
Deletes the bibliographic record if the last item is deleted.
128
126
=back
129
=back
127
130
128
=cut
131
=cut
129
- 

Return to bug 35654