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