|
Lines 333-339
UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) {
Link Here
|
| 333 |
|
333 |
|
| 334 |
# Now, run through all the people that want digests and send them |
334 |
# Now, run through all the people that want digests and send them |
| 335 |
|
335 |
|
| 336 |
$sth = $dbh->prepare(<<'END_SQL'); |
336 |
my $sth_digest = $dbh->prepare(<<'END_SQL'); |
| 337 |
SELECT biblio.*, items.*, issues.* |
337 |
SELECT biblio.*, items.*, issues.* |
| 338 |
FROM issues,items,biblio |
338 |
FROM issues,items,biblio |
| 339 |
WHERE items.itemnumber=issues.itemnumber |
339 |
WHERE items.itemnumber=issues.itemnumber |
|
Lines 341-459
SELECT biblio.*, items.*, issues.*
Link Here
|
| 341 |
AND issues.borrowernumber = ? |
341 |
AND issues.borrowernumber = ? |
| 342 |
AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?) |
342 |
AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?) |
| 343 |
END_SQL |
343 |
END_SQL |
| 344 |
PATRON: while ( my ( $borrowernumber, $digest ) = each %$upcoming_digest ) { |
|
|
| 345 |
@letters = (); |
| 346 |
my $count = $digest->{count}; |
| 347 |
my $from_address = $digest->{email}; |
| 348 |
|
| 349 |
my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, |
| 350 |
message_name => 'advance_notice' } ); |
| 351 |
next PATRON unless $borrower_preferences; # how could this happen? |
| 352 |
|
| 353 |
|
344 |
|
| 354 |
my $letter_type = 'PREDUEDGST'; |
345 |
send_digests({ |
| 355 |
|
346 |
sth => $sth_digest, |
| 356 |
$sth->execute($borrowernumber,$borrower_preferences->{'days_in_advance'}); |
347 |
digests => $upcoming_digest, |
| 357 |
my $titles = ""; |
348 |
letter_code => 'PREDUEDGST', |
| 358 |
while ( my $item_info = $sth->fetchrow_hashref()) { |
349 |
get_item_info => sub { |
| 359 |
$titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } ); |
350 |
my $params = shift; |
|
|
351 |
$params->{sth}->execute($params->{borrowernumber}, |
| 352 |
$params->{borrower_preferences}->{'days_in_advance'}); |
| 353 |
return sub { |
| 354 |
$params->{sth}->fetchrow_hashref; |
| 355 |
}; |
| 360 |
} |
356 |
} |
| 361 |
|
357 |
}); |
| 362 |
## Get branch info for borrowers home library. |
358 |
|
| 363 |
my %branch_info = get_branch_info( $borrowernumber ); |
359 |
send_digests({ |
| 364 |
|
360 |
sth => $sth_digest, |
| 365 |
foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) { |
361 |
digest => $due_digest, |
| 366 |
my $letter = parse_letter( |
362 |
letter_code => 'DUEGST', |
| 367 |
{ |
363 |
get_item_info => sub { |
| 368 |
letter_code => $letter_type, |
364 |
my $params = shift; |
| 369 |
borrowernumber => $borrowernumber, |
365 |
$params->{sth}->execute($params->{borrowernumber}, 0); |
| 370 |
substitute => { |
366 |
return sub { |
| 371 |
count => $count, |
367 |
$params->{sth}->fetchrow_hashref; |
| 372 |
'items.content' => $titles, |
368 |
}; |
| 373 |
%branch_info, |
|
|
| 374 |
}, |
| 375 |
branchcode => $branch_info{"branches.branchcode"}, |
| 376 |
message_transport_type => $transport, |
| 377 |
} |
| 378 |
) |
| 379 |
or warn "no letter of type '$letter_type' found for borrowernumber $borrowernumber. Please see sample_notices.sql"; |
| 380 |
push @letters, $letter if $letter; |
| 381 |
} |
369 |
} |
| 382 |
|
370 |
}); |
| 383 |
if ( @letters ) { |
|
|
| 384 |
if ($nomail) { |
| 385 |
for my $letter ( @letters ) { |
| 386 |
local $, = "\f"; |
| 387 |
print $letter->{'content'}; |
| 388 |
} |
| 389 |
} |
| 390 |
else { |
| 391 |
for my $letter ( @letters ) { |
| 392 |
C4::Letters::EnqueueLetter( { letter => $letter, |
| 393 |
borrowernumber => $borrowernumber, |
| 394 |
from_address => $from_address, |
| 395 |
message_transport_type => $letter->{message_transport_type} } ); |
| 396 |
} |
| 397 |
} |
| 398 |
} |
| 399 |
} |
| 400 |
|
| 401 |
# Now, run through all the people that want digests and send them |
| 402 |
PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) { |
| 403 |
@letters = (); |
| 404 |
my $count = $digest->{count}; |
| 405 |
my $from_address = $digest->{email}; |
| 406 |
|
| 407 |
my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, |
| 408 |
message_name => 'item_due' } ); |
| 409 |
next PATRON unless $borrower_preferences; # how could this happen? |
| 410 |
|
| 411 |
my $letter_type = 'DUEDGST'; |
| 412 |
$sth->execute($borrowernumber,'0'); |
| 413 |
my $titles = ""; |
| 414 |
while ( my $item_info = $sth->fetchrow_hashref()) { |
| 415 |
$titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } ); |
| 416 |
} |
| 417 |
|
| 418 |
## Get branch info for borrowers home library. |
| 419 |
my %branch_info = get_branch_info( $borrowernumber ); |
| 420 |
|
| 421 |
for my $transport ( keys %{ $borrower_preferences->{'transports'} } ) { |
| 422 |
my $letter = parse_letter( |
| 423 |
{ |
| 424 |
letter_code => $letter_type, |
| 425 |
borrowernumber => $borrowernumber, |
| 426 |
substitute => { |
| 427 |
count => $count, |
| 428 |
'items.content' => $titles, |
| 429 |
%branch_info, |
| 430 |
}, |
| 431 |
branchcode => $branch_info{"branches.branchcode"}, |
| 432 |
message_transport_type => $transport, |
| 433 |
} |
| 434 |
) |
| 435 |
or warn "no letter of type '$letter_type' found for borrowernumber $borrowernumber. Please see sample_notices.sql"; |
| 436 |
push @letters, $letter if $letter; |
| 437 |
} |
| 438 |
|
| 439 |
if ( @letters ) { |
| 440 |
if ($nomail) { |
| 441 |
for my $letter ( @letters ) { |
| 442 |
local $, = "\f"; |
| 443 |
print $letter->{'content'}; |
| 444 |
} |
| 445 |
} |
| 446 |
else { |
| 447 |
for my $letter ( @letters ) { |
| 448 |
C4::Letters::EnqueueLetter( { letter => $letter, |
| 449 |
borrowernumber => $borrowernumber, |
| 450 |
from_address => $from_address, |
| 451 |
message_transport_type => $letter->{message_transport_type} } ); |
| 452 |
} |
| 453 |
} |
| 454 |
} |
| 455 |
|
| 456 |
} |
| 457 |
|
371 |
|
| 458 |
=head1 METHODS |
372 |
=head1 METHODS |
| 459 |
|
373 |
|
|
Lines 463-468
PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) {
Link Here
|
| 463 |
|
377 |
|
| 464 |
sub parse_letter { |
378 |
sub parse_letter { |
| 465 |
my $params = shift; |
379 |
my $params = shift; |
|
|
380 |
|
| 466 |
foreach my $required ( qw( letter_code borrowernumber ) ) { |
381 |
foreach my $required ( qw( letter_code borrowernumber ) ) { |
| 467 |
return unless exists $params->{$required}; |
382 |
return unless exists $params->{$required}; |
| 468 |
} |
383 |
} |
|
Lines 511-516
sub get_branch_info {
Link Here
|
| 511 |
return %branch_info; |
426 |
return %branch_info; |
| 512 |
} |
427 |
} |
| 513 |
|
428 |
|
|
|
429 |
=head2 send_digests |
| 430 |
|
| 431 |
send_digests({ |
| 432 |
digests => ..., |
| 433 |
sth => ..., |
| 434 |
letter_code => ..., |
| 435 |
get_item_info => ..., |
| 436 |
}) |
| 437 |
|
| 438 |
Enqueue digested letters (or print them if -n was passed at command line). |
| 439 |
|
| 440 |
Parameters: |
| 441 |
|
| 442 |
=over 4 |
| 443 |
|
| 444 |
=item C<$digests> |
| 445 |
|
| 446 |
Reference to the array of digested messages. |
| 447 |
|
| 448 |
=item C<$sth> |
| 449 |
|
| 450 |
Prepared statement handle for fetching overdue issues. |
| 451 |
|
| 452 |
=item C<$letter_code> |
| 453 |
|
| 454 |
String that denote the letter code. |
| 455 |
|
| 456 |
=item C<$get_item_info> |
| 457 |
|
| 458 |
Subroutine for executing prepared statement. Takes parameters $sth, |
| 459 |
$borrowernumber and $borrower_parameters and return a generator |
| 460 |
function that produce the matching rows. |
| 461 |
|
| 462 |
=back |
| 463 |
|
| 464 |
=cut |
| 465 |
|
| 466 |
sub send_digests { |
| 467 |
my $params = shift; |
| 468 |
|
| 469 |
PATRON: while ( my ( $borrowernumber, $digest ) = each %{$params->{digests}} ) { |
| 470 |
@letters = (); |
| 471 |
my $count = $digest->{count}; |
| 472 |
my $from_address = $digest->{email}; |
| 473 |
|
| 474 |
my $borrower_preferences = |
| 475 |
C4::Members::Messaging::GetMessagingPreferences( |
| 476 |
{ |
| 477 |
borrowernumber => $borrowernumber, |
| 478 |
message_name => 'advance_notice' |
| 479 |
} |
| 480 |
); |
| 481 |
|
| 482 |
next PATRON unless $borrower_preferences; # how could this happen? |
| 483 |
|
| 484 |
my $next_item_info = $params->{get_item_info}->({ |
| 485 |
sth => $params->{sth}, |
| 486 |
borrowernumber => $borrowernumber, |
| 487 |
borrower_preferences => $borrower_preferences |
| 488 |
}); |
| 489 |
my $titles = ""; |
| 490 |
while ( my $item_info = $next_item_info->()) { |
| 491 |
$titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } ); |
| 492 |
} |
| 493 |
|
| 494 |
## Get branch info for borrowers home library. |
| 495 |
my %branch_info = get_branch_info( $borrowernumber ); |
| 496 |
|
| 497 |
foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) { |
| 498 |
my $letter = parse_letter( |
| 499 |
{ |
| 500 |
letter_code => $params->{letter_code}, |
| 501 |
borrowernumber => $borrowernumber, |
| 502 |
substitute => { |
| 503 |
count => $count, |
| 504 |
'items.content' => $titles, |
| 505 |
%branch_info, |
| 506 |
}, |
| 507 |
branchcode => $branch_info{"branches.branchcode"}, |
| 508 |
message_transport_type => $transport, |
| 509 |
} |
| 510 |
) |
| 511 |
or warn "no letter of type '$params->{letter_type}' found for borrowernumber $borrowernumber. Please see sample_notices.sql"; |
| 512 |
push @letters, $letter if $letter; |
| 513 |
} |
| 514 |
|
| 515 |
if ( @letters ) { |
| 516 |
if ($nomail) { |
| 517 |
for my $letter ( @letters ) { |
| 518 |
local $, = "\f"; |
| 519 |
print $letter->{'content'}; |
| 520 |
} |
| 521 |
} |
| 522 |
else { |
| 523 |
for my $letter ( @letters ) { |
| 524 |
C4::Letters::EnqueueLetter( { letter => $letter, |
| 525 |
borrowernumber => $borrowernumber, |
| 526 |
from_address => $from_address, |
| 527 |
message_transport_type => $letter->{message_transport_type} } ); |
| 528 |
} |
| 529 |
} |
| 530 |
} |
| 531 |
} |
| 532 |
} |
| 533 |
|
| 534 |
|
| 514 |
1; |
535 |
1; |
| 515 |
|
536 |
|
| 516 |
__END__ |
537 |
__END__ |
| 517 |
- |
|
|