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

(-)a/Koha/Patrons.pm (-2 / +24 lines)
Lines 165-173 sub search_patrons_to_anonymise { Link Here
165
165
166
    Koha::Patrons->search->anonymise_issue_history( { [ before => $older_than_date ] } );
166
    Koha::Patrons->search->anonymise_issue_history( { [ before => $older_than_date ] } );
167
167
168
Anonymise issue history (old_issues) for all patrons older than the given date (optional).
168
Anonymise issue history (old_issues and items_last_borrowers) for all issues older
169
than the given date (optional).
170
169
To make sure all the conditions are met, the caller has the responsibility to
171
To make sure all the conditions are met, the caller has the responsibility to
170
call search_patrons_to_anonymise to filter the Koha::Patrons set
172
call search_patrons_to_anonymise to filter the Koha::Patrons set.
171
173
172
=cut
174
=cut
173
175
Lines 194-201 sub anonymise_issue_history { Link Here
194
            )
196
            )
195
        }
197
        }
196
        );
198
        );
199
200
        my $last_borrowers_to_anonymise =
201
          $patron->_result->items_last_borrowers->search(
202
            {
203
                (
204
                    $older_than_date
205
                    ? ( created_on =>
206
                          { '<' => $dtf->format_datetime($older_than_date) } )
207
                    : (),
208
                    "itemnumber.damaged" => 0,
209
                    "itemnumber.itemlost" => 0,
210
                    "itemnumber.withdrawn" => 0,
211
                )
212
            },
213
            {
214
                join => ['itemnumber']
215
            }
216
          );
217
197
        my $anonymous_patron = C4::Context->preference('AnonymousPatron') || undef;
218
        my $anonymous_patron = C4::Context->preference('AnonymousPatron') || undef;
198
        $nb_rows += $old_issues_to_anonymise->update( { 'old_issues.borrowernumber' => $anonymous_patron } );
219
        $nb_rows += $old_issues_to_anonymise->update( { 'old_issues.borrowernumber' => $anonymous_patron } );
220
        $nb_rows += $last_borrowers_to_anonymise->update( { 'items_last_borrower.borrowernumber' => $anonymous_patron } );
199
    }
221
    }
200
    return $nb_rows;
222
    return $nb_rows;
201
}
223
}
(-)a/t/db_dependent/Koha/Patrons.t (-1 / +116 lines)
Lines 1210-1215 subtest 'search_patrons_to_anonymise & anonymise_issue_history' => sub { Link Here
1210
    t::lib::Mocks::mock_preference('IndependentBranches', 0);
1210
    t::lib::Mocks::mock_preference('IndependentBranches', 0);
1211
};
1211
};
1212
1212
1213
subtest 'anonymise items_last_borrower' => sub {
1214
    plan tests => 1;
1215
1216
    # TODO create a subroutine in t::lib::Mocks
1217
    my $anonymous = $builder->build( { source => 'Borrower', }, );
1218
1219
    t::lib::Mocks::mock_preference( 'AnonymousPatron', $anonymous->{borrowernumber} );
1220
    t::lib::Mocks::mock_preference('StoreLastBorrower', 1);
1221
1222
    subtest 'withrawn, lost and damaged items' => sub {
1223
        plan tests => 5;
1224
1225
        my $patron = $builder->build(
1226
            {   source => 'Borrower',
1227
                value  => { privacy => 1, }
1228
            }
1229
        );
1230
        my $item_1 = $builder->build_object(
1231
            {   class => 'Koha::Items',
1232
                value  => {
1233
                    itemlost  => 0,
1234
                    withdrawn => 0,
1235
                    damaged => 0,
1236
                },
1237
            }
1238
        );
1239
        my $issue_1 = $builder->build(
1240
            {   source => 'Issue',
1241
                value  => {
1242
                    borrowernumber => $patron->{borrowernumber},
1243
                    itemnumber     => $item_1->itemnumber,
1244
                },
1245
            }
1246
        );
1247
        my $item_2 = $builder->build_object(
1248
            {   class => 'Koha::Items',
1249
                value  => {
1250
                    itemlost  => 0,
1251
                    withdrawn => 0,
1252
                    damaged => 0,
1253
                },
1254
            }
1255
        );
1256
        my $issue_2 = $builder->build(
1257
            {   source => 'Issue',
1258
                value  => {
1259
                    borrowernumber => $patron->{borrowernumber},
1260
                    itemnumber     => $item_2->itemnumber,
1261
                },
1262
            }
1263
        );
1264
        my $item_3 = $builder->build_object(
1265
            {   class => 'Koha::Items',
1266
                value  => {
1267
                    itemlost  => 0,
1268
                    withdrawn => 0,
1269
                    damaged => 0,
1270
                },
1271
            }
1272
        );
1273
        my $issue_3 = $builder->build(
1274
            {   source => 'Issue',
1275
                value  => {
1276
                    borrowernumber => $patron->{borrowernumber},
1277
                    itemnumber     => $item_3->itemnumber,
1278
                },
1279
            }
1280
        );
1281
        my $item_4 = $builder->build_object(
1282
            {   class => 'Koha::Items',
1283
                value  => {
1284
                    itemlost  => 0,
1285
                    withdrawn => 0,
1286
                    damaged => 0,
1287
                },
1288
            }
1289
        );
1290
        my $issue_4 = $builder->build(
1291
            {   source => 'Issue',
1292
                value  => {
1293
                    borrowernumber => $patron->{borrowernumber},
1294
                    itemnumber     => $item_4->itemnumber,
1295
                },
1296
            }
1297
        );
1298
1299
        my ( $returned_1, undef, undef ) = C4::Circulation::AddReturn( $item_1->barcode, undef, undef, dt_from_string('2010-10-11') );
1300
        my ( $returned_2, undef, undef ) = C4::Circulation::AddReturn( $item_2->barcode, undef, undef, dt_from_string('2010-10-11') );
1301
        my ( $returned_3, undef, undef ) = C4::Circulation::AddReturn( $item_3->barcode, undef, undef, dt_from_string('2010-10-11') );
1302
        my ( $returned_4, undef, undef ) = C4::Circulation::AddReturn( $item_4->barcode, undef, undef, dt_from_string('2010-10-11') );
1303
        is( $returned_1 && $returned_2 && $returned_3 && $returned_4, 1, 'The items should have been returned' );
1304
        $item_1->withdrawn(1)->store;
1305
        $item_2->itemlost(1)->store;
1306
        $item_3->damaged(1)->store;
1307
1308
        Koha::Patrons->search_patrons_to_anonymise( { before => '2010-10-12' } )->anonymise_issue_history();
1309
1310
        my $dbh = C4::Context->dbh;
1311
        my $sth = $dbh->prepare(q|SELECT borrowernumber FROM items_last_borrower where itemnumber = ?|);
1312
        $sth->execute($item_1->itemnumber);
1313
        my ($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
1314
        is( $borrowernumber_used_to_anonymised, $patron->{borrowernumber}, 'withrawn items should not be anonymised' );
1315
        $sth->execute($item_2->itemnumber);
1316
        ($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
1317
        is( $borrowernumber_used_to_anonymised, $patron->{borrowernumber}, 'lost items should not be anonymised' );
1318
        $sth->execute($item_3->itemnumber);
1319
        ($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
1320
        is( $borrowernumber_used_to_anonymised, $patron->{borrowernumber}, 'damaged items should not be anonymised' );
1321
        $sth->execute($item_4->itemnumber);
1322
        ($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
1323
        is( $borrowernumber_used_to_anonymised, $anonymous->{borrowernumber}, 'not withdrawn, lost or damaged items are anonymised' );
1324
1325
    };
1326
1327
};
1328
1213
subtest 'libraries_where_can_see_patrons + can_see_patron_infos + search_limited' => sub {
1329
subtest 'libraries_where_can_see_patrons + can_see_patron_infos + search_limited' => sub {
1214
    plan tests => 3;
1330
    plan tests => 3;
1215
1331
1216
- 

Return to bug 23260