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

(-)a/C4/Circulation.pm (-1 / +2 lines)
Lines 2035-2043 sub GetUpcomingDueIssues { Link Here
2035
    my $dbh = C4::Context->dbh;
2035
    my $dbh = C4::Context->dbh;
2036
2036
2037
    my $statement = <<END_SQL;
2037
    my $statement = <<END_SQL;
2038
SELECT issues.*, items.itype as itemtype, items.homebranch, TO_DAYS( date_due )-TO_DAYS( NOW() ) as days_until_due
2038
SELECT issues.*, items.itype as itemtype, items.homebranch, TO_DAYS( date_due )-TO_DAYS( NOW() ) as days_until_due, branches.branchemail
2039
FROM issues 
2039
FROM issues 
2040
LEFT JOIN items USING (itemnumber)
2040
LEFT JOIN items USING (itemnumber)
2041
LEFT OUTER JOIN branches USING (branchcode)
2041
WhERE returndate is NULL
2042
WhERE returndate is NULL
2042
AND ( TO_DAYS( NOW() )-TO_DAYS( date_due ) ) < ?
2043
AND ( TO_DAYS( NOW() )-TO_DAYS( date_due ) ) < ?
2043
END_SQL
2044
END_SQL
(-)a/misc/cronjobs/advance_notices.pl (-9 / +24 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-144 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
    die Dumper($upcoming);
143
142
    my $letter;
144
    my $letter;
143
    my $borrower_preferences;
145
    my $borrower_preferences;
144
    if ( 0 == $upcoming->{'days_until_due'} ) {
146
    if ( 0 == $upcoming->{'days_until_due'} ) {
Lines 146-156 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
146
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
148
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
147
                                                                                   message_name   => 'item due' } );
149
                                                                                   message_name   => 'item due' } );
148
        # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
150
        # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
149
        next DUEITEM unless $borrower_preferences;
151
        next unless $borrower_preferences;
150
        
152
        
151
        if ( $borrower_preferences->{'wants_digest'} ) {
153
        if ( $borrower_preferences->{'wants_digest'} ) {
152
            # cache this one to process after we've run through all of the items.
154
            # cache this one to process after we've run through all of the items.
153
            $due_digest->{$upcoming->{'borrowernumber'}}++;
155
            my $digest = $due_digest->{$upcoming->{'borrowernumber'}} ||= {};
156
            $digest->{email} ||= $from_address;
157
            $digest->{count}++;
154
        } else {
158
        } else {
155
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
159
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
156
            my $letter_type = 'DUE';
160
            my $letter_type = 'DUE';
Lines 179-185 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
179
183
180
        if ( $borrower_preferences->{'wants_digest'} ) {
184
        if ( $borrower_preferences->{'wants_digest'} ) {
181
            # cache this one to process after we've run through all of the items.
185
            # cache this one to process after we've run through all of the items.
182
            $upcoming_digest->{$upcoming->{'borrowernumber'}}++;
186
            my $digest = $upcoming_digest->{$upcoming->{'borrowernumber'}} ||= {};
187
            $digest->{email} ||= $from_address;
188
            $digest->{count}++;
183
        } else {
189
        } else {
184
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
190
            my $biblio = C4::Biblio::GetBiblioFromItemNumber( $upcoming->{'itemnumber'} );
185
            my $letter_type = 'PREDUE';
191
            my $letter_type = 'PREDUE';
Lines 211-216 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
211
        foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
217
        foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
212
            C4::Letters::EnqueueLetter( { letter                 => $letter,
218
            C4::Letters::EnqueueLetter( { letter                 => $letter,
213
                                          borrowernumber         => $upcoming->{'borrowernumber'},
219
                                          borrowernumber         => $upcoming->{'borrowernumber'},
220
                                          from_address           => $from_address,
214
                                          message_transport_type => $transport } );
221
                                          message_transport_type => $transport } );
215
        }
222
        }
216
      }
223
      }
Lines 231-237 SELECT biblio.*, items.*, issues.* Link Here
231
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
238
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
232
END_SQL
239
END_SQL
233
240
234
PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) {
241
PATRON: while ( my ( $borrowernumber, $digest ) = each %$upcoming_digest ) {
242
    my $count = $digest->{count};
243
    my $from_address = $digest->{email};
244
235
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
245
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
236
                                                                                  message_name   => 'advance notice' } );
246
                                                                                  message_name   => 'advance notice' } );
237
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
247
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
Lines 241-246 PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) { Link Here
241
    my $letter_type = 'PREDUEDGST';
251
    my $letter_type = 'PREDUEDGST';
242
    my $letter = C4::Letters::getletter( 'circulation', $letter_type );
252
    my $letter = C4::Letters::getletter( 'circulation', $letter_type );
243
    die "no letter of type '$letter_type' found. Please see sample_notices.sql" unless $letter;
253
    die "no letter of type '$letter_type' found. Please see sample_notices.sql" unless $letter;
254
244
    $sth->execute($borrowernumber,$borrower_preferences->{'days_in_advance'});
255
    $sth->execute($borrowernumber,$borrower_preferences->{'days_in_advance'});
245
    my $titles = "";
256
    my $titles = "";
246
    while ( my $item_info = $sth->fetchrow_hashref()) {
257
    while ( my $item_info = $sth->fetchrow_hashref()) {
Lines 261-273 PATRON: while ( my ( $borrowernumber, $count ) = each %$upcoming_digest ) { Link Here
261
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
272
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
262
        C4::Letters::EnqueueLetter( { letter                 => $letter,
273
        C4::Letters::EnqueueLetter( { letter                 => $letter,
263
                                      borrowernumber         => $borrowernumber,
274
                                      borrowernumber         => $borrowernumber,
275
                                      from_address           => $from_address,
264
                                      message_transport_type => $transport } );
276
                                      message_transport_type => $transport } );
265
      }
277
      }
266
    }
278
    }
267
}
279
}
268
280
269
# Now, run through all the people that want digests and send them
281
# Now, run through all the people that want digests and send them
270
PATRON: while ( my ( $borrowernumber, $count ) = each %$due_digest ) {
282
PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) {
283
    my $count = $digest->{count};
284
    my $from_address = $digest->{email};
285
271
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
286
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
272
                                                                                  message_name   => 'item due' } );
287
                                                                                  message_name   => 'item due' } );
273
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
288
    # warn( Data::Dumper->Dump( [ $borrower_preferences ], [ 'borrower_preferences' ] ) );
Lines 297-302 PATRON: while ( my ( $borrowernumber, $count ) = each %$due_digest ) { Link Here
297
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
312
      foreach my $transport ( @{$borrower_preferences->{'transports'}} ) {
298
        C4::Letters::EnqueueLetter( { letter                 => $letter,
313
        C4::Letters::EnqueueLetter( { letter                 => $letter,
299
                                      borrowernumber         => $borrowernumber,
314
                                      borrowernumber         => $borrowernumber,
315
                                      from_address           => $from_address,
300
                                      message_transport_type => $transport } );
316
                                      message_transport_type => $transport } );
301
      }
317
      }
302
    }
318
    }
303
- 

Return to bug 5929