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