|
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-237
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 = |
| 206 |
if ( $itemscount == 0 ) { |
217 |
Koha::Biblios->find( |
| 207 |
my $error = DelBiblio($itemdata->{'biblionumber'}); |
218 |
$itemdata->{'biblionumber'} )->items->count; |
| 208 |
$deleted_records++ unless ( $error ); |
219 |
if ( $itemscount == 0 ) { |
|
|
220 |
my $error = |
| 221 |
DelBiblio( $itemdata->{'biblionumber'} ); |
| 222 |
$deleted_records++ unless ($error); |
| 223 |
} |
| 209 |
} |
224 |
} |
| 210 |
} |
225 |
} |
| 211 |
} else { |
226 |
else { |
| 212 |
if ($values_to_modify || $values_to_blank) { |
227 |
if ( $values_to_modify || $values_to_blank ) { |
| 213 |
my $localmarcitem = Item2Marc($itemdata); |
228 |
my $localmarcitem = Item2Marc($itemdata); |
| 214 |
|
229 |
|
| 215 |
my $modified = UpdateMarcWith( $marcitem, $localmarcitem ); |
230 |
my $modified = |
| 216 |
if ( $modified ) { |
231 |
UpdateMarcWith( $marcitem, $localmarcitem ); |
| 217 |
eval { |
232 |
if ($modified) { |
| 218 |
if ( my $item = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) ) { |
233 |
eval { |
| 219 |
LostItem($itemnumber, 'batchmod') if $item->{itemlost} and not $itemdata->{itemlost}; |
234 |
if ( |
|
|
235 |
my $item = ModItemFromMarc( |
| 236 |
$localmarcitem, |
| 237 |
$itemdata->{biblionumber}, |
| 238 |
$itemnumber |
| 239 |
) |
| 240 |
) |
| 241 |
{ |
| 242 |
LostItem( $itemnumber, 'batchmod' ) |
| 243 |
if $item->{itemlost} |
| 244 |
and not $itemdata->{itemlost}; |
| 245 |
} |
| 246 |
}; |
| 247 |
} |
| 248 |
if ($runinbackground) { |
| 249 |
$modified_items++ if $modified; |
| 250 |
$modified_fields += $modified; |
| 251 |
$job->set( |
| 252 |
{ |
| 253 |
modified_items => $modified_items, |
| 254 |
modified_fields => $modified_fields, |
| 255 |
} |
| 256 |
); |
| 257 |
} |
| 258 |
} |
| 220 |
} |
259 |
} |
| 221 |
}; |
260 |
$i++; |
| 222 |
} |
261 |
} |
| 223 |
if ( $runinbackground ) { |
262 |
if (@not_deleted) { |
| 224 |
$modified_items++ if $modified; |
263 |
Koha::Exceptions::Exception->throw( |
| 225 |
$modified_fields += $modified; |
264 |
'Some items have not been deleted, rolling back'); |
| 226 |
$job->set({ |
265 |
} |
| 227 |
modified_items => $modified_items, |
|
|
| 228 |
modified_fields => $modified_fields, |
| 229 |
}); |
| 230 |
} |
266 |
} |
| 231 |
} |
267 |
); |
| 232 |
} |
268 |
} |
| 233 |
$i++; |
269 |
catch { |
| 234 |
} |
270 |
if ( $_->isa('Koha::Exceptions::Exception') ) { |
|
|
271 |
$template->param( deletion_failed => 1 ); |
| 272 |
} |
| 273 |
die "Something terrible has happened!" |
| 274 |
if ($_ =~ /Rollback failed/); # Rollback failed |
| 275 |
} |
| 235 |
} |
276 |
} |
| 236 |
} |
277 |
} |
| 237 |
# |
278 |
# |
| 238 |
- |
|
|