View | Details | Raw Unified | Return to bug 8132
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-del.tt (-3 / +20 lines)
Lines 120-126 Link Here
120
                        [% CASE "not_same_branch" %][% SET cannot_delete_reason = t("Item does not belongs to your library") %]
120
                        [% CASE "not_same_branch" %][% SET cannot_delete_reason = t("Item does not belongs to your library") %]
121
                        [% CASE "book_reserved" %][% SET cannot_delete_reason = t("Item has a waiting hold") %]
121
                        [% CASE "book_reserved" %][% SET cannot_delete_reason = t("Item has a waiting hold") %]
122
                        [% CASE "linked_analytics" %][% SET cannot_delete_reason = t("Item has linked analytics") %]
122
                        [% CASE "linked_analytics" %][% SET cannot_delete_reason = t("Item has linked analytics") %]
123
                        [% CASE %][% SET cannot_delete_reason = t("Unknown reason") %]
123
                        [% CASE "last_item_for_hold" %][% SET cannot_delete_reason = t("Last item for bibliographic record wich biblio-level hold on it") %]
124
                        [% CASE %][% SET cannot_delete_reason = t("Unknown reason") _ '(' _ can_be_deleted _ ')' %]
124
                        [% END %]
125
                        [% END %]
125
126
126
                        <td><input type="checkbox" name="itemnumber" value="[% item_loo.itemnumber | html %]" id="row[% item_loo.itemnumber | html %]" disabled="disabled" title="[% cannot_delete_reason %]"/></td>
127
                        <td><input type="checkbox" name="itemnumber" value="[% item_loo.itemnumber | html %]" id="row[% item_loo.itemnumber | html %]" disabled="disabled" title="[% cannot_delete_reason %]"/></td>
Lines 210-216 Link Here
210
    [% END %]
211
    [% END %]
211
212
212
[% IF ( action ) %]
213
[% IF ( action ) %]
213
    <div class="dialog message">
214
    [% IF deletion_failed %]
215
        <div class="dialog alert">
216
            At least one item blocked the deletion. The operation rolled back and nothing happened!
217
        </div>
218
    [% ELSE %]
219
        <div class="dialog message">
214
            <p>[% deleted_items | html %] item(s) deleted.</p>
220
            <p>[% deleted_items | html %] item(s) deleted.</p>
215
            [% IF delete_records %] <p>[% deleted_records | html %] record(s) deleted.</p> [% END %]
221
            [% IF delete_records %] <p>[% deleted_records | html %] record(s) deleted.</p> [% END %]
216
            [% IF src == 'CATALOGUING' # from catalogue/detail.pl > Delete items in a batch%]
222
            [% IF src == 'CATALOGUING' # from catalogue/detail.pl > Delete items in a batch%]
Lines 225-230 Link Here
225
                <a href="/cgi-bin/koha/tools/batchMod.pl?del=1">Return to batch item deletion</a>
231
                <a href="/cgi-bin/koha/tools/batchMod.pl?del=1">Return to batch item deletion</a>
226
            [% END %]
232
            [% END %]
227
        </div>
233
        </div>
234
    [% END %]
228
    [% IF ( not_deleted_items ) %]
235
    [% IF ( not_deleted_items ) %]
229
    <div style="width:55%;margin:auto;">
236
    <div style="width:55%;margin:auto;">
230
        <p>[% not_deleted_items | html %] item(s) could not be deleted: [% FOREACH not_deleted_itemnumber IN not_deleted_itemnumbers %][% not_deleted_itemnumber.itemnumber | html %][% END %]</p>
237
        <p>[% not_deleted_items | html %] item(s) could not be deleted: [% FOREACH not_deleted_itemnumber IN not_deleted_itemnumbers %][% not_deleted_itemnumber.itemnumber | html %][% END %]</p>
Lines 242-248 Link Here
242
            <tr>
249
            <tr>
243
                <td>[% not_deleted_loo.itemnumber | html %]</td>
250
                <td>[% not_deleted_loo.itemnumber | html %]</td>
244
                <td>[% IF ( CAN_user_editcatalogue_edit_items ) %]<a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&amp;biblionumber=[% not_deleted_loo.biblionumber | uri %]&amp;itemnumber=[% not_deleted_loo.itemnumber | uri %]">[% not_deleted_loo.barcode | html %]</a>[% ELSE %][% not_deleted_loo.barcode | html %][% END %]</td>
251
                <td>[% IF ( CAN_user_editcatalogue_edit_items ) %]<a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&amp;biblionumber=[% not_deleted_loo.biblionumber | uri %]&amp;itemnumber=[% not_deleted_loo.itemnumber | uri %]">[% not_deleted_loo.barcode | html %]</a>[% ELSE %][% not_deleted_loo.barcode | html %][% END %]</td>
245
                <td>[% IF ( not_deleted_loo.book_on_loan ) %]Item is checked out[% ELSIF ( not_deleted_loo.book_reserved ) %]Item has a waiting hold[% END %]</td>
252
                <td>
253
                    [% SWITCH not_deleted_loo.reason %]
254
                    [% CASE "book_on_loan" %][% SET cannot_delete_reason = t("Item is checked out") %]
255
                    [% CASE "not_same_branch" %][% SET cannot_delete_reason = t("Item does not belongs to your library") %]
256
                    [% CASE "book_reserved" %][% SET cannot_delete_reason = t("Item has a waiting hold") %]
257
                    [% CASE "linked_analytics" %][% SET cannot_delete_reason = t("Item has linked analytics") %]
258
                    [% CASE "last_item_for_hold" %][% SET cannot_delete_reason = t("Last item for bibliographic record wich biblio-level hold on it") %]
259
                    [% CASE %][% SET cannot_delete_reason = t("Unknown reason") _ '(' _ can_be_deleted _ ')' %]
260
                    [% END %]
261
                    [% cannot_delete_reason %]
262
                </td>
246
            </tr>
263
            </tr>
247
            [% END %]
264
            [% END %]
248
        </tbody>
265
        </tbody>
(-)a/tools/batchMod.pl (-57 / +94 lines)
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
- 

Return to bug 8132