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 |
- |
|
|