C4::Serials::DelSubscription( $subscription->{subscriptionid} );
}
+ # We delete any existing holds
+ require C4::Reserves;
+ my ($count, $reserves) = C4::Reserves::GetReservesFromBiblionumber($biblionumber);
+ foreach my $res ( @$reserves ) {
+ C4::Reserves::CancelReserve( $res->{'biblionumber'}, $res->{'itemnumber'}, $res->{'borrowernumber'} );
+ }
+
# Delete in Zebra. Be careful NOT to move this line after _koha_delete_biblio
# for at least 2 reasons :
# - we need to read the biblio if NoZebra is set (to remove it from the indexes
<div id="jobfailed"></div>
</div>
[% IF ( too_many_items ) %]<input type="submit" name="mainformsubmit" value="Delete ALL submitted items" onclick="return submitBackgroundJob(this.form);" />[% ELSE %]
+ <input type="checkbox" name="del_records" id="del_records" /> <label for="del_records">Delete records if no items remain.</label><p>
<input type="submit" name="mainformsubmit" value="Delete selected items" onclick="return submitBackgroundJob(this.form);" />[% END %]
<a href="/cgi-bin/koha/tools/batchMod.pl?del=1" class="cancel">Cancel</a>
[% END %]
[% IF ( action ) %]
- <div class="dialog message"><p>[% deleted_items %] item(s) deleted.</p></div>
+ <div class="dialog message">
+ <p>[% deleted_items %] item(s) deleted.</p>
+ [% IF delete_records %] <p>[% deleted_records %] record(s) deleted.</p> [% END %]
+ </div>
[% IF ( not_deleted_items ) %]
<div style="width:55%;margin:auto;">
<p>[% not_deleted_items %] item(s) could not be deleted: [% FOREACH not_deleted_itemnumber IN not_deleted_itemnumbers %][% not_deleted_itemnumber.itemnumber %][% END %]</p>
my @itemnumbers = $input->param('itemnumber');
my $op = $input->param('op');
my $del = $input->param('del');
+my $del_records = $input->param('del_records');
my $completedJobID = $input->param('completedJobID');
my $runinbackground = $input->param('runinbackground');
my $frameworkcode="";
my $tagslib = &GetMarcStructure(1,$frameworkcode);
-my $deleted_items = 0; # Numbers of deleted items
-my $not_deleted_items = 0; # Numbers of items that could not be deleted
+my $deleted_items = 0; # Number of deleted items
+my $deleted_records = 0; # Number of deleted records ( with no items attached )
+my $not_deleted_items = 0; # Number of items that could not be deleted
my @not_deleted; # List of the itemnumbers that could not be deleted
my %cookies = parse CGI::Cookie($cookie);
foreach my $itemnumber(@itemnumbers){
$job->progress($i) if $runinbackground;
- my $itemdata=GetItem($itemnumber);
+ my $itemdata = GetItem($itemnumber);
if ($input->param("del")){
my $return = DelItemCheck(C4::Context->dbh, $itemdata->{'biblionumber'}, $itemdata->{'itemnumber'});
if ($return == 1) {
$return => 1
};
}
+
+ # If there are no items left, delete the biblio
+ if ( $del_records ) {
+ my $itemscount = GetItemsCount($itemdata->{'biblionumber'});
+ if ( $itemscount == 0 ) {
+ my $error = DelBiblio($itemdata->{'biblionumber'});
+ $deleted_records++ unless ( $error );
+ }
+ }
} else {
if ($values_to_modify || $values_to_blank) {
my $localmarcitem = Item2Marc($itemdata);
UpdateMarcWith( $marcitem, $localmarcitem );
eval{
- if ( my $item = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) ) {
- LostItem($itemnumber, 'MARK RETURNED', 'CHARGE FEE') if $item->{itemlost};
- }
- };
+ if ( my $item = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) ) {
+ LostItem($itemnumber, 'MARK RETURNED', 'CHARGE FEE') if $item->{itemlost};
+ }
+ };
}
}
$i++;
$template->param(
not_deleted_items => $not_deleted_items,
deleted_items => $deleted_items,
+ delete_records => $del_records,
+ deleted_records => $deleted_records,
not_deleted_loop => \@not_deleted
);
}