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 |
- |
|
|