my $results;
- foreach my $borrowernumber (@borrowernumbers) {
- my $patron = Koha::Patrons->find( $borrowernumber );
+ $self->_resultset->result_source->schema->txn_do( sub {
+ foreach my $borrowernumber (@borrowernumbers) {
+ my $patron = Koha::Patrons->find( $borrowernumber );
- next unless $patron;
+ next unless $patron;
- # Unbless for safety, the patron will end up being deleted
- $results->{merged}->{$borrowernumber}->{patron} = $patron->unblessed;
+ # Unbless for safety, the patron will end up being deleted
+ $results->{merged}->{$borrowernumber}->{patron} = $patron->unblessed;
- while (my ($r, $field) = each(%$RESULTSET_PATRON_ID_MAPPING)) {
- my $rs = $schema->resultset($r)->search({ $field => $borrowernumber} );
- $results->{merged}->{ $borrowernumber }->{updated}->{$r} = $rs->count();
- $rs->update( { $field => $keeper });
- }
+ while (my ($r, $field) = each(%$RESULTSET_PATRON_ID_MAPPING)) {
+ my $rs = $schema->resultset($r)->search({ $field => $borrowernumber} );
+ $results->{merged}->{ $borrowernumber }->{updated}->{$r} = $rs->count();
+ $rs->update( { $field => $keeper });
+ }
- $patron->move_to_deleted();
- $patron->delete();
- }
+ $patron->move_to_deleted();
+ $patron->delete();
+ }
+ });
$results->{keeper} = $patron_to_keep;
[% ELSIF action == 'merge' %]
<h4>Results</h4>
- <p>
- Patron records merged into <a href="moremember.pl?borrowernumber=[% results.keeper.id %]">[% results.keeper.firstname %] [% results.keeper.surname %] ([% results.keeper.cardnumber | html %])</a>
- </p>
+ [% IF error %]
+ <div class="dialog alert">Merge failed! The following error was reported: [% error %].</div>
+ [% ELSE %]
+ <p>
+ Patron records merged into <a href="moremember.pl?borrowernumber=[% results.keeper.id %]">[% results.keeper.firstname %] [% results.keeper.surname %] ([% results.keeper.cardnumber | html %])</a>
+ </p>
- [% FOREACH pair IN results.merged.pairs %]
- [% SET patron = pair.value.patron %]
+ [% FOREACH pair IN results.merged.pairs %]
+ [% SET patron = pair.value.patron %]
- <h5>[% patron.firstname %] [% patron.surname %] ([% patron.cardnumber %])</h5>
+ <h5>[% patron.firstname %] [% patron.surname %] ([% patron.cardnumber %])</h5>
- [% USE Dumper %]
- [% FOREACH r IN pair.value.updated.pairs %]
- [% SET name = r.key %]
- [% SET count = r.value %]
- [% IF count %]
- <p>
- [% count %] [% PROCESS display_names rs = name %] transferred.
- [% IF name == 'Reserve' %]
- <strong>It is advisable to check for and resolve duplicate holds due to merging.</strong>
- [% END %]
- </p>
+ [% USE Dumper %]
+ [% FOREACH r IN pair.value.updated.pairs %]
+ [% SET name = r.key %]
+ [% SET count = r.value %]
+ [% IF count %]
+ <p>
+ [% count %] [% PROCESS display_names rs = name %] transferred.
+ [% IF name == 'Reserve' %]
+ <strong>It is advisable to check for and resolve duplicate holds due to merging.</strong>
+ [% END %]
+ </p>
+ [% END %]
[% END %]
[% END %]
[% END %]
$template->param( patrons => $patrons );
} elsif ( $action eq 'merge' ) {
my $keeper = $cgi->param('keeper');
- my $results = Koha::Patrons->merge( { keeper => $keeper, patrons => \@ids } );
- $template->param( results => $results );
+ my $results;
+ eval { $results = Koha::Patrons->merge( { keeper => $keeper, patrons => \@ids } ); };
+ if ($@) {
+ $template->param( results => $results );
+ } else {
+ $template->param( error => $@ );
+ }
}
$template->param( action => $action );