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

(-)a/misc/cronjobs/delete_items.pl (-46 / +49 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;
61
    my $error;
74
    if ($safe_to_delete) {
62
    if ($safe_to_delete) {
75
        $item_object->safe_delete
63
        my $holdings_count = $item->biblio->items->count - 1;
76
            if $OPTIONS->{flags}->{commit};
64
        $item->safe_delete
77
        verbose "Deleting '$item->{itemnumber}'";
65
            if $commit;
66
        $verbose && say "$deleted_string item " . $item->itemnumber . " ($holdings_count items remain on record)";
67
68
        if ( $delete_biblios && $holdings_count == 0 ) {    # aka DO-EET for empty bibs!
69
            $error = &DelBiblio( $item->biblionumber ) if $commit;
70
            if ($error) {
71
                $verbose && say "Could not delete bib " . $item->biblionumber . ": $error";
72
            } else {
73
                $verbose && say "No items remaining. $deleted_string bibliographic record " . $item->biblionumber;
74
            }
75
        }
78
    } else {
76
    } else {
79
        verbose sprintf "Item '%s' (Barcode: '%s', Title: '%s') not deleted: %s",
77
        say sprintf(
80
            $item->{itemnumber},
78
            "Item '%s' (Barcode: '%s', Title: '%s') cannot deleted: %s",
81
            $item_object->barcode,
79
            $item->itemnumber,
82
            $item_object->biblio->title,
80
            $item->barcode,
83
            @{ $safe_to_delete->messages }[0]->message;
81
            $item->biblio->title,
82
            @{ $safe_to_delete->messages }[0]->message
83
        ) if $verbose;
84
    }
84
    }
85
}
85
}
86
86
Lines 123-128 clause querying the items table. These are joined by C<AND>. Link Here
123
123
124
No items will be deleted unless the C<--commit> flag is present.
124
No items will be deleted unless the C<--commit> flag is present.
125
125
126
=item B<--del_bibs>
127
128
Deletes the bibliographic record if the last item is deleted.
129
126
=back
130
=back
127
131
128
=cut
132
=cut
129
- 

Return to bug 35654