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

(-)a/misc/maintenance/borrowers-force-messaging-defaults.pl (-76 / +76 lines)
Lines 27-107 use C4::Members::Messaging; Link Here
27
use Getopt::Long qw( GetOptions );
27
use Getopt::Long qw( GetOptions );
28
use Pod::Usage   qw( pod2usage );
28
use Pod::Usage   qw( pod2usage );
29
29
30
sub usage {
31
    pod2usage( -verbose => 2 );
32
    exit;
33
}
34
35
sub force_borrower_messaging_defaults {
36
    my ( $doit, $since, $not_expired, $no_overwrite, $category, $branchcode, $message_name, $verbose ) = @_;
37
38
    print "Since: $since\n" if $since;
39
    my $update_statement = $doit ? "Updating" : "Would have updated";
40
41
    my $dbh = C4::Context->dbh;
42
    $dbh->{AutoCommit} = 0;
43
44
    my $sql = q|SELECT DISTINCT bo.borrowernumber, bo.categorycode FROM borrowers bo
45
LEFT JOIN borrower_message_preferences mp USING (borrowernumber)
46
WHERE 1|;
47
48
    if ($since) {
49
        $sql .= " AND bo.dateenrolled >= ?";
50
    }
51
    if ($not_expired) {
52
        $sql .= " AND bo.dateexpiry >= NOW()";
53
    }
54
    if ($no_overwrite) {
55
        $sql .= " AND mp.borrowernumber IS NULL";
56
    }
57
    $sql .= " AND bo.categorycode = ?" if $category;
58
    $sql .= " AND bo.branchcode = ?"   if $branchcode;
59
    my $sth = $dbh->prepare($sql);
60
    $sth->execute( $since || (), $category || (), $branchcode || () );
61
    my $cnt = 0;
62
    while ( my ( $borrowernumber, $categorycode ) = $sth->fetchrow ) {
63
        print "$update_statement borrowernumber: $borrowernumber : category ($categorycode)\n" if $verbose;
64
        next unless $doit;
65
        my $options = {
66
            borrowernumber => $borrowernumber,
67
            categorycode   => $categorycode,
68
        };
69
        $options->{message_name} = $message_name if defined $message_name;
70
        C4::Members::Messaging::SetMessagingPreferencesFromDefaults($options);
71
        $cnt++;
72
    }
73
    $dbh->commit();
74
    print "Total borrowers updated: $cnt\n" if $doit;
75
}
76
77
my ( $doit, $since, $help, $not_expired, $no_overwrite, $category, $branchcode, $message_name, $verbose );
78
my $result = GetOptions(
79
    'doit'           => \$doit,
80
    'since:s'        => \$since,
81
    'not-expired'    => \$not_expired,
82
    'no-overwrite'   => \$no_overwrite,
83
    'category:s'     => \$category,
84
    'library:s'      => \$branchcode,
85
    'message-name:s' => \$message_name,
86
    'help|h'         => \$help,
87
    'verbose|v+'     => \$verbose,
88
);
89
90
my $command_line_options = join( " ", @ARGV );
91
92
if ($doit) {
93
    cronlogaction( { action => 'Run', info => $command_line_options } );
94
} else {
95
    print "Running in dry-run mode, provide --doit to apply the changes\n";
96
}
97
98
usage() if $help;
99
100
force_borrower_messaging_defaults(
101
    $doit, $since, $not_expired, $no_overwrite, $category, $branchcode, $message_name,
102
    $verbose
103
);
104
105
=head1 NAME
30
=head1 NAME
106
31
107
borrowers-force-messaging-defaults.pl
32
borrowers-force-messaging-defaults.pl
Lines 178-180 Examples: Link Here
178
=back
103
=back
179
104
180
=cut
105
=cut
181
- 
106
107
my ( $doit, $since, $help, $not_expired, $no_overwrite, $category, $branchcode, $message_name, $verbose );
108
my $result = GetOptions(
109
    'doit'           => \$doit,
110
    'since:s'        => \$since,
111
    'not-expired'    => \$not_expired,
112
    'no-overwrite'   => \$no_overwrite,
113
    'category:s'     => \$category,
114
    'library:s'      => \$branchcode,
115
    'message-name:s' => \$message_name,
116
    'help|h'         => \$help,
117
    'verbose|v+'     => \$verbose,
118
);
119
120
my $command_line_options = join( " ", @ARGV );
121
122
if ($doit) {
123
    cronlogaction( { action => 'Run', info => $command_line_options } );
124
} else {
125
    print "Running in dry-run mode, provide --doit to apply the changes\n";
126
}
127
128
usage() if $help;
129
130
force_borrower_messaging_defaults(
131
    $doit, $since, $not_expired, $no_overwrite, $category, $branchcode, $message_name,
132
    $verbose
133
);
134
135
sub usage {
136
    pod2usage( -verbose => 2 );
137
    exit;
138
}
139
140
sub force_borrower_messaging_defaults {
141
    my ( $doit, $since, $not_expired, $no_overwrite, $category, $branchcode, $message_name, $verbose ) = @_;
142
143
    print "Since: $since\n" if $since;
144
    my $update_statement = $doit ? "Updating" : "Would have updated";
145
146
    my $dbh = C4::Context->dbh;
147
    $dbh->{AutoCommit} = 0;
148
149
    my $sql = q|SELECT DISTINCT bo.borrowernumber, bo.categorycode FROM borrowers bo
150
LEFT JOIN borrower_message_preferences mp USING (borrowernumber)
151
WHERE 1|;
152
153
    if ($since) {
154
        $sql .= " AND bo.dateenrolled >= ?";
155
    }
156
    if ($not_expired) {
157
        $sql .= " AND bo.dateexpiry >= NOW()";
158
    }
159
    if ($no_overwrite) {
160
        $sql .= " AND mp.borrowernumber IS NULL";
161
    }
162
    $sql .= " AND bo.categorycode = ?" if $category;
163
    $sql .= " AND bo.branchcode = ?"   if $branchcode;
164
    my $sth = $dbh->prepare($sql);
165
    $sth->execute( $since || (), $category || (), $branchcode || () );
166
    my $cnt = 0;
167
    while ( my ( $borrowernumber, $categorycode ) = $sth->fetchrow ) {
168
        print "$update_statement borrowernumber: $borrowernumber : category ($categorycode)\n" if $verbose;
169
        next unless $doit;
170
        my $options = {
171
            borrowernumber => $borrowernumber,
172
            categorycode   => $categorycode,
173
        };
174
        $options->{message_name} = $message_name if defined $message_name;
175
        C4::Members::Messaging::SetMessagingPreferencesFromDefaults($options);
176
        $cnt++;
177
    }
178
    $dbh->commit();
179
    print "Total borrowers updated: $cnt\n" if $doit;
180
}
181

Return to bug 13811