|
Lines 20-25
Link Here
|
| 20 |
|
20 |
|
| 21 |
use CGI qw ( -utf8 ); |
21 |
use CGI qw ( -utf8 ); |
| 22 |
use Modern::Perl; |
22 |
use Modern::Perl; |
|
|
23 |
use Try::Tiny; |
| 24 |
|
| 23 |
use C4::Auth; |
25 |
use C4::Auth; |
| 24 |
use C4::Output; |
26 |
use C4::Output; |
| 25 |
use C4::Biblio; |
27 |
use C4::Biblio; |
|
Lines 34-39
use C4::Members;
Link Here
|
| 34 |
use MARC::File::XML; |
36 |
use MARC::File::XML; |
| 35 |
use List::MoreUtils qw/uniq/; |
37 |
use List::MoreUtils qw/uniq/; |
| 36 |
|
38 |
|
|
|
39 |
use Koha::Database; |
| 40 |
use Koha::Exceptions::Exception; |
| 37 |
use Koha::AuthorisedValues; |
41 |
use Koha::AuthorisedValues; |
| 38 |
use Koha::Biblios; |
42 |
use Koha::Biblios; |
| 39 |
use Koha::DateUtils; |
43 |
use Koha::DateUtils; |
|
Lines 177-243
if ($op eq "action") {
Link Here
|
| 177 |
} |
181 |
} |
| 178 |
} |
182 |
} |
| 179 |
|
183 |
|
| 180 |
# For each item |
184 |
try { |
| 181 |
my $i = 1; |
185 |
my $schema = Koha::Database->new->schema; |
| 182 |
foreach my $itemnumber(@itemnumbers){ |
186 |
$schema->txn_do( |
| 183 |
|
187 |
sub { |
| 184 |
$job->progress($i) if $runinbackground; |
188 |
# For each item |
| 185 |
my $item = Koha::Items->find($itemnumber); |
189 |
my $i = 1; |
| 186 |
next unless $item; # Should have been tested earlier, but just in case... |
190 |
foreach my $itemnumber (@itemnumbers) { |
| 187 |
my $itemdata = $item->unblessed; |
191 |
$job->progress($i) if $runinbackground; |
| 188 |
if ( $del ){ |
192 |
my $item = Koha::Items->find($itemnumber); |
| 189 |
my $return = $item->safe_delete; |
193 |
next |
| 190 |
if ($return == 1) { |
194 |
unless $item |
| 191 |
$deleted_items++; |
195 |
; # Should have been tested earlier, but just in case... |
| 192 |
} else { |
196 |
my $itemdata = $item->unblessed; |
| 193 |
$not_deleted_items++; |
197 |
if ($del) { |
| 194 |
push @not_deleted, |
198 |
my $return = $item->safe_delete; |
| 195 |
{ biblionumber => $itemdata->{'biblionumber'}, |
199 |
if ( $return eq '1' ) { |
| 196 |
itemnumber => $itemdata->{'itemnumber'}, |
200 |
$deleted_items++; |
| 197 |
barcode => $itemdata->{'barcode'}, |
201 |
} |
| 198 |
title => $itemdata->{'title'}, |
202 |
else { |
| 199 |
$return => 1 |
203 |
$not_deleted_items++; |
| 200 |
}; |
204 |
push @not_deleted, |
| 201 |
} |
205 |
{ |
|
|
206 |
biblionumber => $itemdata->{'biblionumber'}, |
| 207 |
itemnumber => $itemdata->{'itemnumber'}, |
| 208 |
barcode => $itemdata->{'barcode'}, |
| 209 |
title => $itemdata->{'title'}, |
| 210 |
reason => $return, |
| 211 |
}; |
| 212 |
} |
| 202 |
|
213 |
|
| 203 |
# If there are no items left, delete the biblio |
214 |
# If there are no items left, delete the biblio |
| 204 |
if ($del_records) { |
215 |
if ($del_records) { |
| 205 |
my $itemscount = Koha::Biblios->find( $itemdata->{'biblionumber'} )->items->count; |
216 |
my $itemscount = Koha::Biblios->find( $itemdata->{'biblionumber'} )->items->count; |
| 206 |
if ( $itemscount == 0 ) { |
217 |
if ( $itemscount == 0 ) { |
| 207 |
my $error = DelBiblio( $itemdata->{'biblionumber'} ); |
218 |
my $error = DelBiblio( $itemdata->{'biblionumber'} ); |
| 208 |
unless ($error) { |
219 |
unless ($error) { |
| 209 |
$deleted_records++; |
220 |
$deleted_records++; |
| 210 |
if ( $src eq 'CATALOGUING' ) { |
221 |
if ( $src eq 'CATALOGUING' ) { |
| 211 |
# We are coming catalogue/detail.pl, there were items from a single bib record |
222 |
# We are coming catalogue/detail.pl, there were items from a single bib record |
| 212 |
$template->param( biblio_deleted => 1 ); |
223 |
$template->param( biblio_deleted => 1 ); |
|
|
224 |
} |
| 225 |
} |
| 226 |
} |
| 213 |
} |
227 |
} |
| 214 |
} |
228 |
} |
| 215 |
} |
229 |
else { |
| 216 |
} |
230 |
if ( $values_to_modify || $values_to_blank ) { |
| 217 |
} else { |
231 |
my $localmarcitem = Item2Marc($itemdata); |
| 218 |
if ($values_to_modify || $values_to_blank) { |
232 |
|
| 219 |
my $localmarcitem = Item2Marc($itemdata); |
233 |
my $modified = |
| 220 |
|
234 |
UpdateMarcWith( $marcitem, $localmarcitem ); |
| 221 |
my $modified = UpdateMarcWith( $marcitem, $localmarcitem ); |
235 |
if ($modified) { |
| 222 |
if ( $modified ) { |
236 |
eval { |
| 223 |
eval { |
237 |
if ( |
| 224 |
if ( my $item = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) ) { |
238 |
my $item = ModItemFromMarc( |
| 225 |
LostItem($itemnumber, 'batchmod') if $item->{itemlost} and not $itemdata->{itemlost}; |
239 |
$localmarcitem, |
|
|
240 |
$itemdata->{biblionumber}, |
| 241 |
$itemnumber |
| 242 |
) |
| 243 |
) |
| 244 |
{ |
| 245 |
LostItem( $itemnumber, 'batchmod' ) |
| 246 |
if $item->{itemlost} |
| 247 |
and not $itemdata->{itemlost}; |
| 248 |
} |
| 249 |
}; |
| 250 |
} |
| 251 |
if ($runinbackground) { |
| 252 |
$modified_items++ if $modified; |
| 253 |
$modified_fields += $modified; |
| 254 |
$job->set( |
| 255 |
{ |
| 256 |
modified_items => $modified_items, |
| 257 |
modified_fields => $modified_fields, |
| 258 |
} |
| 259 |
); |
| 260 |
} |
| 261 |
} |
| 226 |
} |
262 |
} |
| 227 |
}; |
263 |
$i++; |
| 228 |
} |
264 |
} |
| 229 |
if ( $runinbackground ) { |
265 |
if (@not_deleted) { |
| 230 |
$modified_items++ if $modified; |
266 |
Koha::Exceptions::Exception->throw( |
| 231 |
$modified_fields += $modified; |
267 |
'Some items have not been deleted, rolling back'); |
| 232 |
$job->set({ |
268 |
} |
| 233 |
modified_items => $modified_items, |
|
|
| 234 |
modified_fields => $modified_fields, |
| 235 |
}); |
| 236 |
} |
269 |
} |
| 237 |
} |
270 |
); |
| 238 |
} |
271 |
} |
| 239 |
$i++; |
272 |
catch { |
| 240 |
} |
273 |
if ( $_->isa('Koha::Exceptions::Exception') ) { |
|
|
274 |
$template->param( deletion_failed => 1 ); |
| 275 |
} |
| 276 |
die "Something terrible has happened!" |
| 277 |
if ($_ =~ /Rollback failed/); # Rollback failed |
| 278 |
} |
| 241 |
} |
279 |
} |
| 242 |
} |
280 |
} |
| 243 |
# |
281 |
# |
| 244 |
- |
|
|