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

(-)a/C4/Circulation.pm (-1 / +2 lines)
Lines 2093-2101 sub GetUpcomingDueIssues { Link Here
2093
    my $dbh = C4::Context->dbh;
2093
    my $dbh = C4::Context->dbh;
2094
2094
2095
    my $statement = <<END_SQL;
2095
    my $statement = <<END_SQL;
2096
SELECT issues.*, items.itype as itemtype, items.homebranch, TO_DAYS( date_due )-TO_DAYS( NOW() ) as days_until_due
2096
SELECT issues.*, items.itype as itemtype, items.homebranch, TO_DAYS( date_due )-TO_DAYS( NOW() ) as days_until_due, branches.branchemail
2097
FROM issues 
2097
FROM issues 
2098
LEFT JOIN items USING (itemnumber)
2098
LEFT JOIN items USING (itemnumber)
2099
LEFT OUTER JOIN branches USING (branchcode)
2099
WhERE returndate is NULL
2100
WhERE returndate is NULL
2100
AND ( TO_DAYS( NOW() )-TO_DAYS( date_due ) ) < ?
2101
AND ( TO_DAYS( NOW() )-TO_DAYS( date_due ) ) < ?
2101
END_SQL
2102
END_SQL
(-)a/misc/cronjobs/advance_notices.pl (-13 / +27 lines)
Lines 63-76 my $confirm; # -c: Confir Link Here
63
my $nomail;                                                         # -n: No mail. Will not send any emails.
63
my $nomail;                                                         # -n: No mail. Will not send any emails.
64
my $mindays     = 0;                                                # -m: Maximum number of days in advance to send notices
64
my $mindays     = 0;                                                # -m: Maximum number of days in advance to send notices
65
my $maxdays     = 30;                                               # -e: the End of the time period
65
my $maxdays     = 30;                                               # -e: the End of the time period
66
my $fromaddress = C4::Context->preference('KohaAdminEmailAddress'); # -f: From address for the emails
67
my $verbose     = 0;                                                # -v: verbose
66
my $verbose     = 0;                                                # -v: verbose
68
my $itemscontent = join(',',qw( issuedate title barcode author ));
67
my $itemscontent = join(',',qw( issuedate title barcode author ));
69
68
70
GetOptions( 'c'              => \$confirm,
69
GetOptions( 'c'              => \$confirm,
71
            'n'              => \$nomail,
70
            'n'              => \$nomail,
72
            'm:i'            => \$maxdays,
71
            'm:i'            => \$maxdays,
73
            'f:s'            => \$fromaddress,
74
            'v'              => \$verbose,
72
            'v'              => \$verbose,
75
            'itemscontent=s' => \$itemscontent,
73
            'itemscontent=s' => \$itemscontent,
76
       );
74
       );
Lines 83-89 See the comments in the script for directions on changing the script. Link Here
83
This script has the following parameters :
81
This script has the following parameters :
84
	-c Confirm and remove this help & warning
82
	-c Confirm and remove this help & warning
85
        -m maximum number of days in advance to send advance notices.
83
        -m maximum number of days in advance to send advance notices.
86
        -f from address for the emails. Defaults to KohaAdminEmailAddress system preference
87
	-n send No mail. Instead, all mail messages are printed on screen. Usefull for testing purposes.
84
	-n send No mail. Instead, all mail messages are printed on screen. Usefull for testing purposes.
88
        -v verbose
85
        -v verbose
89
        -i csv list of fields that get substituted into templates in places
86
        -i csv list of fields that get substituted into templates in places
Lines 135-156 SELECT biblio.*, items.*, issues.* Link Here
135
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
132
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
136
END_SQL
133
END_SQL
137
134
135
my $admin_adress = C4::Context->preference('KohaAdminEmailAddress');
136
138
UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) {
137
UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) {
139
    warn 'examining ' . $upcoming->{'itemnumber'} . ' upcoming due items' if $verbose;
138
    warn 'examining ' . $upcoming->{'itemnumber'} . ' upcoming due items' if $verbose;
140
    # warn( Data::Dumper->Dump( [ $upcoming ], [ 'overdue' ] ) );
139
    # warn( Data::Dumper->Dump( [ $upcoming ], [ 'overdue' ] ) );
141
140
141
    my $from_address = $upcoming->{branchemail} || $admin_adress;
142
142
    my $letter;
143
    my $letter;
143
    my $borrower_preferences;
144
    my $borrower_preferences;
144
    if ( 0 == $upcoming->{'days_until_due'} ) {
145
    if ( 0 == $upcoming->{'days_until_due'} ) {
145
        # This item is due today. Send an 'item due' message.
146
        # This item is due today. Send an 'item due' message.
146
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
147
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
147
                                                                                   message_name   => 'item due' } );
148
                                                                                   message_name   => 'item_due' } );
148
        # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
149
        # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
149
        next DUEITEM unless $borrower_preferences;
150
        next unless $borrower_preferences;
150
        
151
        
151
        if ( $borrower_preferences->{'wants_digest'} ) {
152
        if ( $borrower_preferences->{'wants_digest'} ) {
152
            # cache this one to process after we've run through all of the items.
153
            # cache this one to process after we've run through all of the items.
153
            $due_digest->{$upcoming->{'borrowernumber'}}++;
154
            my $digest = $due_digest->{$upcoming->{'borrowernumber'}} ||= {};
155
            $digest->{email} ||= $from_address;
156
            $digest->{count}++;
154
        } else {
157
        } else {
155
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
158
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
156
            my $letter_type = 'DUE';
159
            my $letter_type = 'DUE';
Lines 172-185 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
172
        }
175
        }
173
    } else {
176
    } else {
174
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
177
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
175
                                                                                   message_name   => 'advance notice' } );
178
                                                                                   message_name   => 'advance_notice' } );
176
        # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
179
        # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
177
        next UPCOMINGITEM unless $borrower_preferences && exists $borrower_preferences->{'days_in_advance'};
180
        next UPCOMINGITEM unless $borrower_preferences && exists $borrower_preferences->{'days_in_advance'};
178
        next UPCOMINGITEM unless $borrower_preferences->{'days_in_advance'} == $upcoming->{'days_until_due'};
181
        next UPCOMINGITEM unless $borrower_preferences->{'days_in_advance'} == $upcoming->{'days_until_due'};
179
182
180
        if ( $borrower_preferences->{'wants_digest'} ) {
183
        if ( $borrower_preferences->{'wants_digest'} ) {
181
            # cache this one to process after we've run through all of the items.
184
            # cache this one to process after we've run through all of the items.
182
            $upcoming_digest->{$upcoming->{'borrowernumber'}}++;
185
            my $digest = $upcoming_digest->{$upcoming->{'borrowernumber'}} ||= {};
186
            $digest->{email} ||= $from_address;
187
            $digest->{count}++;
183
        } else {
188
        } else {
184
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
189
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
185
            my $letter_type = 'PREDUE';
190
            my $letter_type = 'PREDUE';
Lines 211-216 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
211
        foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
216
        foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
212
            C4::Letters::EnqueueLetter( { letter                 => $letter,
217
            C4::Letters::EnqueueLetter( { letter                 => $letter,
213
                                          borrowernumber         => $upcoming->{'borrowernumber'},
218
                                          borrowernumber         => $upcoming->{'borrowernumber'},
219
                                          from_address           => $from_address,
214
                                          message_transport_type => $transport } );
220
                                          message_transport_type => $transport } );
215
        }
221
        }
216
      }
222
      }
Lines 231-239 SELECT biblio.*, items.*, issues.* Link Here
231
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
237
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
232
END_SQL
238
END_SQL
233
239
234
PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) {
240
PATRON: while ( my ( $borrowernumber, $digest ) = each %$upcoming_digest ) {
241
    my $count = $digest->{count};
242
    my $from_address = $digest->{email};
243
235
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
244
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
236
                                                                                  message_name   => 'advance notice' } );
245
                                                                                  message_name   => 'advance_notice' } );
237
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
246
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
238
    next PATRON unless $borrower_preferences; # how could this happen?
247
    next PATRON unless $borrower_preferences; # how could this happen?
239
248
Lines 241-246 PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) { Link Here
241
    my $letter_type = 'PREDUEDGST';
250
    my $letter_type = 'PREDUEDGST';
242
    my $letter = C4::Letters::getletter( 'circulation', $letter_type );
251
    my $letter = C4::Letters::getletter( 'circulation', $letter_type );
243
    die "no letter of type '$letter_type' found. Please see sample_notices.sql" unless $letter;
252
    die "no letter of type '$letter_type' found. Please see sample_notices.sql" unless $letter;
253
244
    $sth->execute($borrowernumber,$borrower_preferences->{'days_in_advance'});
254
    $sth->execute($borrowernumber,$borrower_preferences->{'days_in_advance'});
245
    my $titles = "";
255
    my $titles = "";
246
    while ( my $item_info = $sth->fetchrow_hashref()) {
256
    while ( my $item_info = $sth->fetchrow_hashref()) {
Lines 261-275 PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) { Link Here
261
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
271
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
262
        C4::Letters::EnqueueLetter( { letter                 => $letter,
272
        C4::Letters::EnqueueLetter( { letter                 => $letter,
263
                                      borrowernumber         => $borrowernumber,
273
                                      borrowernumber         => $borrowernumber,
274
                                      from_address           => $from_address,
264
                                      message_transport_type => $transport } );
275
                                      message_transport_type => $transport } );
265
      }
276
      }
266
    }
277
    }
267
}
278
}
268
279
269
# Now, run through all the people that want digests and send them
280
# Now, run through all the people that want digests and send them
270
PATRON: while ( my ( $borrowernumber, $count ) = each %$due_digest ) {
281
PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) {
282
    my $count = $digest->{count};
283
    my $from_address = $digest->{email};
284
271
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
285
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
272
                                                                                  message_name   => 'item due' } );
286
                                                                                  message_name   => 'item_due' } );
273
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
287
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
274
    next PATRON unless $borrower_preferences; # how could this happen?
288
    next PATRON unless $borrower_preferences; # how could this happen?
275
289
Lines 297-302 PATRON: while ( my ( $borrowernumber, $count ) = each %$due_digest ) { Link Here
297
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
311
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
298
        C4::Letters::EnqueueLetter( { letter                 => $letter,
312
        C4::Letters::EnqueueLetter( { letter                 => $letter,
299
                                      borrowernumber         => $borrowernumber,
313
                                      borrowernumber         => $borrowernumber,
314
                                      from_address           => $from_address,
300
                                      message_transport_type => $transport } );
315
                                      message_transport_type => $transport } );
301
      }
316
      }
302
    }
317
    }
303
- 

Return to bug 5929