+=head2 send_digests
+
+ send_digests({
+ digests => ...,
+ sth => ...,
+ letter_code => ...,
+ get_item_info => ...,
+ })
+
+Enqueue digested letters (or print them if -n was passed at command line).
+
+Parameters:
+
+=over 4
+
+=item C<$digests>
+
+Reference to the array of digested messages.
+
+=item C<$sth>
+
+Prepared statement handle for fetching overdue issues.
+
+=item C<$letter_code>
+
+String that denote the letter code.
+
+=item C<$get_item_info>
+
+Subroutine for executing prepared statement. Takes parameters $sth,
+$borrowernumber and $borrower_parameters and return a generator
+function that produce the matching rows.
+
+=back
+
+=cut
+
+sub send_digests {
+ my $params = shift;
+
+ PATRON: while ( my ( $borrowernumber, $digest ) = each %{$params->{digests}} ) {
+ @letters = ();
+ my $count = $digest->{count};
+ my $from_address = $digest->{email};
+
+ my %branch_info;
+ my $branchcode;
+
+ if (defined($params->{branchcode})) {
+ %branch_info = ();
+ $branchcode = $params->{branchcode};
+ } else {
+ ## Get branch info for borrowers home library.
+ %branch_info = get_branch_info( $borrowernumber );
+ $branchcode = $branch_info{'branches.branchcode'};
+ }
+
+ my $borrower_preferences =
+ C4::Members::Messaging::GetMessagingPreferences(
+ {
+ borrowernumber => $borrowernumber,
+ message_name => $params->{message_name}
+ }
+ );
+
+ next PATRON unless $borrower_preferences; # how could this happen?
+
+ my $next_item_info = $params->{get_item_info}->({
+ sth => $params->{sth},
+ borrowernumber => $borrowernumber,
+ borrower_preferences => $borrower_preferences
+ });
+ my $titles = "";
+ my @itemnumbers;
+ while ( my $item_info = $next_item_info->()) {
+ push @itemnumbers, $item_info->{itemnumber};
+ $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
+ }
+
+ foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) {
+ next if $transport eq 'itiva';
+ my $letter = parse_letter(
+ {
+ letter_code => $params->{letter_code},
+ borrowernumber => $borrowernumber,
+ substitute => {
+ count => $count,
+ 'items.content' => $titles,
+ %branch_info
+ },
+ itemnumbers => \@itemnumbers,
+ branchcode => $branchcode,
+ message_transport_type => $transport
+ }
+ );
+ unless ( $letter ){
+ warn "no letter of type '$params->{letter_type}' found for borrowernumber $borrowernumber. Please see sample_notices.sql";
+ next;
+ }
+ push @letters, $letter if $letter;
+ }
+
+ if ( @letters ) {
+ if ($nomail) {
+ for my $letter ( @letters ) {
+ local $, = "\f";
+ print $letter->{'content'};
+ }
+ }
+ else {
+ for my $letter ( @letters ) {
+ C4::Letters::EnqueueLetter( { letter => $letter,
+ borrowernumber => $borrowernumber,
+ from_address => $from_address,
+ message_transport_type => $letter->{message_transport_type} } );
+ }
+ }
+ }
+ }
+}
+
+cronlogaction({ action => 'End', info => "COMPLETED" });
+