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 221-226 Link Here
221
                <a href="/cgi-bin/koha/tools/batchMod.pl?del=1">Return to batch item deletion</a>
227
                <a href="/cgi-bin/koha/tools/batchMod.pl?del=1">Return to batch item deletion</a>
222
            [% END %]
228
            [% END %]
223
        </div>
229
        </div>
230
    [% END %]
224
    [% IF ( not_deleted_items ) %]
231
    [% IF ( not_deleted_items ) %]
225
    <div style="width:55%;margin:auto;">
232
    <div style="width:55%;margin:auto;">
226
        <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>
233
        <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 238-244 Link Here
238
            <tr>
245
            <tr>
239
                <td>[% not_deleted_loo.itemnumber | html %]</td>
246
                <td>[% not_deleted_loo.itemnumber | html %]</td>
240
                <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>
247
                <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>
241
                <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>
248
                <td>
249
                    [% SWITCH not_deleted_loo.reason %]
250
                    [% CASE "book_on_loan" %][% SET cannot_delete_reason = t("Item is checked out") %]
251
                    [% CASE "not_same_branch" %][% SET cannot_delete_reason = t("Item does not belongs to your library") %]
252
                    [% CASE "book_reserved" %][% SET cannot_delete_reason = t("Item has a waiting hold") %]
253
                    [% CASE "linked_analytics" %][% SET cannot_delete_reason = t("Item has linked analytics") %]
254
                    [% CASE "last_item_for_hold" %][% SET cannot_delete_reason = t("Last item for bibliographic record wich biblio-level hold on it") %]
255
                    [% CASE %][% SET cannot_delete_reason = t("Unknown reason") _ '(' _ can_be_deleted _ ')' %]
256
                    [% END %]
257
                    [% cannot_delete_reason %]
258
                </td>
242
            </tr>
259
            </tr>
243
            [% END %]
260
            [% END %]
244
        </tbody>
261
        </tbody>
(-)a/tools/batchMod.pl (-51 / +91 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-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
- 

Return to bug 8132