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

(-)a/C4/Members.pm (-24 lines)
Lines 108-114 BEGIN { Link Here
108
    push @EXPORT, qw(
108
    push @EXPORT, qw(
109
        &AddMember
109
        &AddMember
110
        &AddMember_Opac
110
        &AddMember_Opac
111
        &MoveMemberToDeleted
112
    );
111
    );
113
112
114
    #Check data
113
    #Check data
Lines 1353-1381 sub SetAge{ Link Here
1353
    return $borrower;
1352
    return $borrower;
1354
}    # sub SetAge
1353
}    # sub SetAge
1355
1354
1356
=head2 MoveMemberToDeleted
1357
1358
  $result = &MoveMemberToDeleted($borrowernumber);
1359
1360
Copy the record from borrowers to deletedborrowers table.
1361
The routine returns 1 for success, undef for failure.
1362
1363
=cut
1364
1365
sub MoveMemberToDeleted {
1366
    my ($member) = shift or return;
1367
1368
    my $schema       = Koha::Database->new()->schema();
1369
    my $borrowers_rs = $schema->resultset('Borrower');
1370
    $borrowers_rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
1371
    my $borrower = $borrowers_rs->find($member);
1372
    return unless $borrower;
1373
1374
    my $deleted = $schema->resultset('Deletedborrower')->create($borrower);
1375
1376
    return $deleted ? 1 : undef;
1377
}
1378
1379
=head2 DelMember
1355
=head2 DelMember
1380
1356
1381
    DelMember($borrowernumber);
1357
    DelMember($borrowernumber);
(-)a/Koha/Patron.pm (+15 lines)
Lines 267-272 sub track_login { Link Here
267
    $self->lastseen( dt_from_string() )->store;
267
    $self->lastseen( dt_from_string() )->store;
268
}
268
}
269
269
270
=head2 move_to_deleted
271
272
my $is_moved = $patron->move_to_deleted;
273
274
Move a patron to the deletedborrowers table.
275
This can be done before deleting a patron, to make sure the data are not completely deleted.
276
277
=cut
278
279
sub move_to_deleted {
280
    my ($self) = @_;
281
    my $patron_infos = $self->unblessed;
282
    return Koha::Database->new->schema->resultset('Deletedborrower')->create($patron_infos);
283
}
284
270
=head3 type
285
=head3 type
271
286
272
=cut
287
=cut
(-)a/members/deletemem.pl (-1 / +3 lines)
Lines 31-36 use C4::Output; Link Here
31
use C4::Auth;
31
use C4::Auth;
32
use C4::Members;
32
use C4::Members;
33
use Module::Load;
33
use Module::Load;
34
use Koha::Patrons;
34
use Koha::Patron::Images;
35
use Koha::Patron::Images;
35
use Koha::Token;
36
use Koha::Token;
36
37
Lines 160-166 if ( $op eq 'delete_confirm' or $countissues > 0 or $flags->{'CHARGES'} or $is_ Link Here
160
            secret => md5_base64( C4::Context->config('pass') ),
161
            secret => md5_base64( C4::Context->config('pass') ),
161
            token  => scalar $input->param('csrf_token'),
162
            token  => scalar $input->param('csrf_token'),
162
        });
163
        });
163
    MoveMemberToDeleted($member);
164
    my $patron = Koha::Patrons->find( $member );
165
    $patron->move_to_deleted;
164
    C4::Members::HandleDelBorrower($member);
166
    C4::Members::HandleDelBorrower($member);
165
    DelMember($member);
167
    DelMember($member);
166
    # TODO Tell the user everything went ok
168
    # TODO Tell the user everything went ok
(-)a/misc/cronjobs/delete_patrons.pl (-17 / +19 lines)
Lines 7-12 use Getopt::Long; Link Here
7
7
8
use C4::Members;
8
use C4::Members;
9
use Koha::DateUtils;
9
use Koha::DateUtils;
10
use Koha::Patrons;
10
use C4::Log;
11
use C4::Log;
11
12
12
my ( $help, $verbose, $not_borrowed_since, $expired_before, $last_seen,
13
my ( $help, $verbose, $not_borrowed_since, $expired_before, $last_seen,
Lines 76-98 for my $member (@$members) { Link Here
76
        next;
77
        next;
77
    }
78
    }
78
79
79
    eval {
80
    if ( $confirm ) {
80
        C4::Members::MoveMemberToDeleted( $borrowernumber )
81
        my $deleted = eval {
81
          if $confirm;
82
            Koha::Patrons->find( $borrowernumber )->move_to_deleted;
82
    };
83
        };
83
    if ($@) {
84
        if ($@ or not $deleted) {
84
        say "Failed to delete patron $borrowernumber, cannot move it: ($@)";
85
            say "Failed to delete patron $borrowernumber, cannot move it" . ( $@ ? ": ($@)" : "" );
85
        $dbh->rollback;
86
            $dbh->rollback;
86
        next;
87
            next;
87
    }
88
        }
88
    eval {
89
89
        C4::Members::HandleDelBorrower( $borrowernumber )
90
        eval {
90
          if $confirm;
91
            C4::Members::HandleDelBorrower( $borrowernumber );
91
    };
92
        };
92
    if ($@) {
93
        if ($@) {
93
        say "Failed to delete patron $borrowernumber, error handling its lists: ($@)";
94
            say "Failed to delete patron $borrowernumber, error handling its lists: ($@)";
94
        $dbh->rollback;
95
            $dbh->rollback;
95
        next;
96
            next;
97
        }
96
    }
98
    }
97
    eval { C4::Members::DelMember( $borrowernumber ) if $confirm; };
99
    eval { C4::Members::DelMember( $borrowernumber ) if $confirm; };
98
    if ($@) {
100
    if ($@) {
(-)a/t/db_dependent/Koha/Patrons.t (-1 / +17 lines)
Lines 19-28 Link Here
19
19
20
use Modern::Perl;
20
use Modern::Perl;
21
21
22
use Test::More tests => 8;
22
use Test::More tests => 9;
23
use Test::Warn;
23
use Test::Warn;
24
24
25
use C4::Circulation;
25
use C4::Circulation;
26
27
use C4::Members;
28
26
use Koha::Patron;
29
use Koha::Patron;
27
use Koha::Patrons;
30
use Koha::Patrons;
28
use Koha::Database;
31
use Koha::Database;
Lines 207-212 subtest 'renew_account' => sub { Link Here
207
    $retrieved_patron->delete;
210
    $retrieved_patron->delete;
208
};
211
};
209
212
213
subtest "move_to_deleted" => sub {
214
    plan tests => 2;
215
    my $patron = $builder->build( { source => 'Borrower' } );
216
    my $retrieved_patron = Koha::Patrons->find( $patron->{borrowernumber} );
217
    is( ref( $retrieved_patron->move_to_deleted ), 'Koha::Schema::Result::Deletedborrower', 'Koha::Patron->move_to_deleted should return the Deleted patron' )
218
      ;    # FIXME This should be Koha::Deleted::Patron
219
    my $deleted_patron = $schema->resultset('Deletedborrower')
220
        ->search( { borrowernumber => $patron->{borrowernumber} }, { result_class => 'DBIx::Class::ResultClass::HashRefInflator' } )
221
        ->next;
222
    is_deeply( $deleted_patron, $patron, 'Koha::Patron->move_to_deleted should have correctly moved the patron to the deleted table' );
223
    C4::Members::DelMember( $patron->{borrowernumber} );    # Cleanup
224
};
225
210
$retrieved_patron_1->delete;
226
$retrieved_patron_1->delete;
211
is( Koha::Patrons->search->count, $nb_of_patrons + 1, 'Delete should have deleted the patron' );
227
is( Koha::Patrons->search->count, $nb_of_patrons + 1, 'Delete should have deleted the patron' );
212
228
(-)a/t/db_dependent/Members.t (-15 / +1 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 84;
20
use Test::More tests => 82;
21
use Test::MockModule;
21
use Test::MockModule;
22
use Data::Dumper;
22
use Data::Dumper;
23
use C4::Context;
23
use C4::Context;
Lines 95-114 testAgeAccessors(\%data); #Age accessor tests don't touch the db so it is safe t Link Here
95
my $addmem=AddMember(%data);
95
my $addmem=AddMember(%data);
96
ok($addmem, "AddMember()");
96
ok($addmem, "AddMember()");
97
97
98
# It's not really a Move, it's a Copy.
99
my $result = MoveMemberToDeleted($addmem);
100
ok($result,"MoveMemberToDeleted()");
101
102
my $sth = $dbh->prepare("SELECT * from borrowers WHERE borrowernumber=?");
103
$sth->execute($addmem);
104
my $MemberAdded = $sth->fetchrow_hashref;
105
106
$sth = $dbh->prepare("SELECT * from deletedborrowers WHERE borrowernumber=?");
107
$sth->execute($addmem);
108
my $MemberMoved = $sth->fetchrow_hashref;
109
110
is_deeply($MemberMoved,$MemberAdded,"Confirm MoveMemberToDeleted.");
111
112
my $member=GetMemberDetails("",$CARDNUMBER)
98
my $member=GetMemberDetails("",$CARDNUMBER)
113
  or BAIL_OUT("Cannot read member with card $CARDNUMBER");
99
  or BAIL_OUT("Cannot read member with card $CARDNUMBER");
114
100
(-)a/tools/cleanborrowers.pl (-2 / +2 lines)
Lines 40-45 use C4::Members; # GetBorrowersWhoHavexxxBorrowed. Link Here
40
use C4::Circulation;    # AnonymiseIssueHistory.
40
use C4::Circulation;    # AnonymiseIssueHistory.
41
use Koha::DateUtils qw( dt_from_string output_pref );
41
use Koha::DateUtils qw( dt_from_string output_pref );
42
use Koha::Patron::Categories;
42
use Koha::Patron::Categories;
43
use Koha::Patrons;
43
use Date::Calc qw/Today Add_Delta_YM/;
44
use Date::Calc qw/Today Add_Delta_YM/;
44
use Koha::List::Patron;
45
use Koha::List::Patron;
45
46
Lines 146-152 elsif ( $step == 3 ) { Link Here
146
        for ( my $i = 0 ; $i < $totalDel ; $i++ ) {
147
        for ( my $i = 0 ; $i < $totalDel ; $i++ ) {
147
            $radio eq 'testrun' && last;
148
            $radio eq 'testrun' && last;
148
            my $borrowernumber = $patrons_to_delete->[$i]->{'borrowernumber'};
149
            my $borrowernumber = $patrons_to_delete->[$i]->{'borrowernumber'};
149
            $radio eq 'trash' && MoveMemberToDeleted($borrowernumber);
150
            $radio eq 'trash' && Koha::Patrons->find($borrowernumber)->move_to_deleted;
150
            C4::Members::HandleDelBorrower($borrowernumber);
151
            C4::Members::HandleDelBorrower($borrowernumber);
151
            DelMember($borrowernumber);
152
            DelMember($borrowernumber);
152
        }
153
        }
153
- 

Return to bug 16891