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

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/patron_lists/lists.tt (+20 lines)
Lines 45-50 Link Here
45
                    <th>&nbsp;</th>
45
                    <th>&nbsp;</th>
46
                    <th>&nbsp;</th>
46
                    <th>&nbsp;</th>
47
                    <th>&nbsp;</th>
47
                    <th>&nbsp;</th>
48
                    [% IF CAN_user_tools_edit_patrons %]
49
                        <th>&nbsp;</th>
50
                    [% END %]
51
                    [% IF CAN_user_tools_delete_anonymize_patrons %]
52
                        <th>&nbsp;</th>
53
                    [% END %]
48
                </tr>
54
                </tr>
49
            </thead>
55
            </thead>
50
56
Lines 68-73 Link Here
68
                                <i class="icon-trash"></i> Delete
74
                                <i class="icon-trash"></i> Delete
69
                            </a>
75
                            </a>
70
                        </td>
76
                        </td>
77
                        [% IF CAN_user_tools_edit_patrons %]
78
                            <td>
79
                                <a class="btn btn-mini" href="/cgi-bin/koha/tools/modborrowers.pl?patron_list_id=[% l.patron_list_id %]&op=show">
80
                                    <i class="icon-edit"></i> Edit patrons <i class="icon-user"></i>
81
                                </a>
82
                            </td>
83
                        [% END %]
84
                        [% IF CAN_user_tools_delete_anonymize_patrons %]
85
                            <td>
86
                                <a class="btn btn-mini" href="/cgi-bin/koha/tools/cleanborrowers.pl?step=2&patron_list_id=[% l.patron_list_id %]">
87
                                    <i class="icon-trash"></i> Delete patrons <i class="icon-user"></i>
88
                                </a>
89
                            </td>
90
                        [% END %]
71
                    </tr>
91
                    </tr>
72
                [% END %]
92
                [% END %]
73
            </tbody>
93
            </tbody>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cleanborrowers.tt (-8 / +22 lines)
Lines 11-17 Link Here
11
         */
11
         */
12
          function checkForm(form) {
12
          function checkForm(form) {
13
              if((form.checkbox[0].checked)){
13
              if((form.checkbox[0].checked)){
14
                  if ( (!form.date1.value) && (!form.borrower_dateexpiry.value) && (!form.borrower_categorycode.value) ){
14
                  if ( (!form.date1.value) && (!form.borrower_dateexpiry.value) && (!form.borrower_categorycode.value) && (!form.patron_list_id.value)){
15
                    alert(_("Please enter at least one criterion for deletion!"));
15
                    alert(_("Please enter at least one criterion for deletion!"));
16
                    return false;
16
                    return false;
17
                  }
17
                  }
Lines 87-94 Link Here
87
                        [% END %]
87
                        [% END %]
88
                    </select>
88
                    </select>
89
                </li>
89
                </li>
90
                [% IF patron_lists %]
91
                <li>
92
                    <label for="patron_list_id"><strong>Or</strong> use a patron list: </label>
93
                    <select id="patron_list_id" name="patron_list_id">
94
                        <option value=""></option>
95
                        [% FOREACH pl IN patron_lists %]
96
                            <option value="[% pl.patron_list_id %]">[% pl.name %]</option>
97
                        [% END %]
98
                    </select>
99
                    <span class="hint">If using a patron list, no other criteria will be used.</span>
100
                </li>
101
                [% END %]
90
            </ul>
102
            </ul>
91
        </fieldset>
103
        </fieldset>
104
92
        <fieldset>
105
        <fieldset>
93
        <legend>Anonymize checkout history</legend>
106
        <legend>Anonymize checkout history</legend>
94
        <h3><input id="checkissue" type="checkbox" name="checkbox" value="issue" /><label for="checkissue"> Verify you want to anonymize patron checkout history</label></h3>
107
        <h3><input id="checkissue" type="checkbox" name="checkbox" value="issue" /><label for="checkissue"> Verify you want to anonymize patron checkout history</label></h3>
Lines 117-128 Link Here
117
    <fieldset>
130
    <fieldset>
118
        <legend>Warnings</legend>
131
        <legend>Warnings</legend>
119
        <ul>
132
        <ul>
120
            <li>[% IF ( totalToDelete ) %][% totalToDelete %] [% ELSE %]0 [% END %] patrons will be deleted</li>
133
            <li>[% memberstodelete_list.size || 0 %] patrons will be deleted</li>
121
            <li>[% IF ( totalToAnonymize ) %][% totalToAnonymize %] [% ELSE %]0 [% END %] checkout history will be anonymized</li>
134
            <li>[% memberstoanonymize_list.size || 0 %] patron's checkout histories will be anonymized</li>
122
        </ul>
135
        </ul>
123
136
124
        <br />
137
        <br />
125
            [% IF ( totalToDelete ) %]
138
            [% IF memberstodelete_list.size %]
126
                <fieldset><legend>What do you want to do for deleted patrons?</legend>
139
                <fieldset><legend>What do you want to do for deleted patrons?</legend>
127
                <input id="delete" type="radio" name="radio" value="delete" />
140
                <input id="delete" type="radio" name="radio" value="delete" />
128
                <label for="delete">Permanently delete these patrons</label>
141
                <label for="delete">Permanently delete these patrons</label>
Lines 132-143 Link Here
132
145
133
                <br /><input id="testrun" type="radio" name="radio" value="testrun" checked="checked" />
146
                <br /><input id="testrun" type="radio" name="radio" value="testrun" checked="checked" />
134
                <label for="testrun">Do not remove any patrons (test run)</label>
147
                <label for="testrun">Do not remove any patrons (test run)</label>
135
                <input type="hidden" name="do_delete" value="[% totalToDelete %]" /></fieldset>
148
                <input type="hidden" name="do_delete" value="[% memberstodelete_list.size %]" /></fieldset>
136
149
137
            [% END %]
150
            [% END %]
138
            [% IF ( totalToAnonymize ) %]
151
            [% IF memberstoanonymize_list.size %]
139
                Checkout history for [% totalToAnonymize %] patrons will be anonymized
152
                Checkout history for [% memberstoanonymize_list.size %] patrons will be anonymized
140
                <input type="hidden" name="do_anonym" value="[% totalToAnonymize %]" />
153
                <input type="hidden" name="do_anonym" value="[% memberstoanonymize_list.size %]" />
141
            [% END %]
154
            [% END %]
142
155
143
            <input type="hidden" name="step" value="3" />
156
            <input type="hidden" name="step" value="3" />
Lines 145-150 Link Here
145
            <input type="hidden" name="last_issue_date" value="[% last_issue_date | $KohaDates %]" />
158
            <input type="hidden" name="last_issue_date" value="[% last_issue_date | $KohaDates %]" />
146
            <input type="hidden" name="borrower_dateexpiry" value="[% borrower_dateexpiry | $KohaDates %]" />
159
            <input type="hidden" name="borrower_dateexpiry" value="[% borrower_dateexpiry | $KohaDates %]" />
147
            <input type="hidden" name="borrower_categorycode" value="[% borrower_categorycode %]" />
160
            <input type="hidden" name="borrower_categorycode" value="[% borrower_categorycode %]" />
161
            <input type="hidden" name="patron_list_id" value="[% patron_list_id %] />
148
    </fieldset>
162
    </fieldset>
149
    <fieldset class="action"><input type="submit" value="Finish" /> <a class="cancel" href="/cgi-bin/koha/tools/cleanborrowers.pl">Cancel</a></fieldset>
163
    <fieldset class="action"><input type="submit" value="Finish" /> <a class="cancel" href="/cgi-bin/koha/tools/cleanborrowers.pl">Cancel</a></fieldset>
150
        </form>
164
        </form>
(-)a/tools/cleanborrowers.pl (-22 / +47 lines)
Lines 41-47 use C4::Members; # GetBorrowersWhoHavexxxBorrowed. Link Here
41
use C4::Circulation;    # AnonymiseIssueHistory.
41
use C4::Circulation;    # AnonymiseIssueHistory.
42
use C4::VirtualShelves ();    #no import
42
use C4::VirtualShelves ();    #no import
43
use Koha::DateUtils qw( dt_from_string output_pref );
43
use Koha::DateUtils qw( dt_from_string output_pref );
44
use Koha::Database;
44
use Date::Calc qw/Today Add_Delta_YM/;
45
use Date::Calc qw/Today Add_Delta_YM/;
46
use Koha::List::Patron;
45
47
46
my $cgi = new CGI;
48
my $cgi = new CGI;
47
49
Lines 64-69 my $borrower_dateexpiry = Link Here
64
  $params->{borrower_dateexpiry}
66
  $params->{borrower_dateexpiry}
65
  ? dt_from_string $params->{borrower_dateexpiry}
67
  ? dt_from_string $params->{borrower_dateexpiry}
66
  : undef;
68
  : undef;
69
my $patron_list_id = $params->{patron_list_id};
67
70
68
my $borrower_categorycode = $params->{'borrower_categorycode'} || q{};
71
my $borrower_categorycode = $params->{'borrower_categorycode'} || q{};
69
72
Lines 81-108 if ( $step == 2 ) { Link Here
81
84
82
    my %checkboxes = map { $_ => 1 } split /\0/, $params->{'checkbox'};
85
    my %checkboxes = map { $_ => 1 } split /\0/, $params->{'checkbox'};
83
86
84
    my $totalDel;
85
    my $membersToDelete;
87
    my $membersToDelete;
86
    if ( $checkboxes{borrower} ) {
88
    if ($patron_list_id) {
87
        $membersToDelete = GetBorrowersToExpunge(
89
        my @patron_list_patrons =
88
            _get_selection_params($not_borrowered_since, $borrower_dateexpiry, $borrower_categorycode)
90
          Koha::Database->new()->schema()->resultset('PatronListPatron')
89
        );
91
          ->search( { patron_list_id => $patron_list_id } );
90
        _skip_borrowers_with_nonzero_balance( $membersToDelete );
92
        $membersToDelete = \@patron_list_patrons;
91
        $totalDel = scalar @$membersToDelete;
92
93
    }
93
    }
94
    my $totalAno;
94
    else {
95
        if ( $checkboxes{borrower} ) {
96
            $membersToDelete = GetBorrowersToExpunge(
97
                _get_selection_params(
98
                    $not_borrowered_since,
99
                    $borrower_dateexpiry,
100
                    $borrower_categorycode,
101
                )
102
            );
103
        }
104
    }
105
    _skip_borrowers_with_nonzero_balance($membersToDelete);
106
95
    my $membersToAnonymize;
107
    my $membersToAnonymize;
96
    if ( $checkboxes{issue} ) {
108
    if ( $checkboxes{issue} ) {
97
        $membersToAnonymize = GetBorrowersWithIssuesHistoryOlderThan($last_issue_date);
109
        $membersToAnonymize = GetBorrowersWithIssuesHistoryOlderThan($last_issue_date);
98
        $totalAno           = scalar @$membersToAnonymize;
99
    }
110
    }
100
111
101
    $template->param(
112
    $template->param(
102
        totalToDelete           => $totalDel,
103
        totalToAnonymize        => $totalAno,
104
        memberstodelete_list    => $membersToDelete,
113
        memberstodelete_list    => $membersToDelete,
105
        memberstoanonymize_list => $membersToAnonymize,
114
        memberstoanonymize_list => $membersToAnonymize,
115
        patron_list_id          => $patron_list_id,
106
    );
116
    );
107
}
117
}
108
118
Lines 114-131 elsif ( $step == 3 ) { Link Here
114
124
115
    # delete members
125
    # delete members
116
    if ($do_delete) {
126
    if ($do_delete) {
117
        my $membersToDelete = GetBorrowersToExpunge(
127
        my $membersToDelete;
118
            _get_selection_params($not_borrowered_since, $borrower_dateexpiry, $borrower_categorycode)
128
        if ($patron_list_id) {
119
        );
129
            my @patron_list_patrons =
120
        _skip_borrowers_with_nonzero_balance( $membersToDelete );
130
              Koha::Database->new()->schema()->resultset('PatronListPatron')
131
              ->search( { patron_list_id => $patron_list_id } );
132
            $membersToDelete = \@patron_list_patrons;
133
        }
134
        else {
135
            $membersToDelete = GetBorrowersToExpunge(
136
                _get_selection_params(
137
                    $not_borrowered_since, $borrower_dateexpiry,
138
                    $borrower_categorycode
139
                )
140
            );
141
        }
142
        _skip_borrowers_with_nonzero_balance($membersToDelete);
143
121
        $totalDel = scalar(@$membersToDelete);
144
        $totalDel = scalar(@$membersToDelete);
122
        $radio    = $params->{'radio'};
145
        $radio    = $params->{'radio'};
123
        for ( my $i = 0 ; $i < $totalDel ; $i++ ) {
146
        for ( my $i = 0 ; $i < $totalDel ; $i++ ) {
124
            $radio eq 'testrun' && last;
147
            $radio eq 'testrun' && last;
125
            my $borrowernumber = $membersToDelete->[$i]->{'borrowernumber'};
148
            my $borrowernumber = $membersToDelete->[$i]->{'borrowernumber'}
126
            $radio eq 'trash' && MoveMemberToDeleted( $borrowernumber );
149
              || $membersToDelete->[$i]->get_column('borrowernumber');
127
            C4::VirtualShelves::HandleDelBorrower( $borrowernumber );
150
            $radio eq 'trash' && MoveMemberToDeleted($borrowernumber);
128
            DelMember( $borrowernumber );
151
            C4::VirtualShelves::HandleDelBorrower($borrowernumber);
152
            DelMember($borrowernumber);
129
        }
153
        }
130
        $template->param(
154
        $template->param(
131
            do_delete => '1',
155
            do_delete => '1',
Lines 146-151 elsif ( $step == 3 ) { Link Here
146
        trash => ( $radio eq "trash" ) ? (1) : (0),
170
        trash => ( $radio eq "trash" ) ? (1) : (0),
147
        testrun => ( $radio eq "testrun" ) ? 1: 0,
171
        testrun => ( $radio eq "testrun" ) ? 1: 0,
148
    );
172
    );
173
} else { # $step == 1
174
    $template->param( patron_lists => [ GetPatronLists() ] );
149
}
175
}
150
176
151
$template->param(
177
$template->param(
Lines 164-170 sub _skip_borrowers_with_nonzero_balance { Link Here
164
    my $borrowers = shift;
190
    my $borrowers = shift;
165
    my $balance;
191
    my $balance;
166
    @$borrowers = map {
192
    @$borrowers = map {
167
        (undef, undef, $balance) = GetMemberIssuesAndFines( $_->{borrowernumber} );
193
        (undef, undef, $balance) = GetMemberIssuesAndFines( $_->{borrowernumber} || $_->get_column('borrowernumber') );
168
        ($balance != 0) ? (): ($_);
194
        ($balance != 0) ? (): ($_);
169
    } @$borrowers;
195
    } @$borrowers;
170
}
196
}
171
- 

Return to bug 10612