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-460
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 |
} |
382 |
|
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 |
} |
369 |
} |
455 |
|
370 |
}); |
456 |
} |
371 |
|
457 |
|
|
|
458 |
=head1 METHODS |
372 |
=head1 METHODS |
459 |
|
373 |
|
460 |
=head2 parse_letter |
374 |
=head2 parse_letter |
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 |
- |
|
|