| Lines 60-65
          use C4::Log;
      
      
        Link Here | 
        
          | 60 | use Koha::Items; | 60 | use Koha::Items; | 
        
          | 61 | use Koha::Libraries; | 61 | use Koha::Libraries; | 
        
          | 62 | use Koha::Patrons; | 62 | use Koha::Patrons; | 
            
              |  |  | 63 | use Koha::Patron::Message::Preferences; | 
        
          | 63 |  | 64 |  | 
        
          | 64 | =head1 NAME | 65 | =head1 NAME | 
        
          | 65 |  | 66 |  | 
  
    | Lines 244-254
          UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) {
      
      
        Link Here | 
        
          | 244 |     my $borrower_preferences; | 245 |     my $borrower_preferences; | 
        
          | 245 |     if ( 0 == $upcoming->{'days_until_due'} ) { | 246 |     if ( 0 == $upcoming->{'days_until_due'} ) { | 
        
          | 246 |         # This item is due today. Send an 'item due' message. | 247 |         # This item is due today. Send an 'item due' message. | 
          
            
              | 247 |         $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'}, | 248 |         $borrower_preferences = Koha::Patron::Message::Preferences->find_with_message_name({ | 
            
              | 248 |                                                                                    message_name   => 'item_due' } ); | 249 |             borrowernumber => $upcoming->{'borrowernumber'}, | 
            
              |  |  | 250 |             message_name   => 'item_due', | 
            
              | 251 |         }); | 
        
          | 249 |         next unless $borrower_preferences; | 252 |         next unless $borrower_preferences; | 
        
          | 250 |          | 253 |          | 
          
            
              | 251 |         if ( $borrower_preferences->{'wants_digest'} ) { | 254 |         if ( $borrower_preferences->wants_digest ) { | 
        
          | 252 |             # cache this one to process after we've run through all of the items. | 255 |             # cache this one to process after we've run through all of the items. | 
        
          | 253 |             $due_digest->{ $upcoming->{borrowernumber} }->{email} = $from_address; | 256 |             $due_digest->{ $upcoming->{borrowernumber} }->{email} = $from_address; | 
        
          | 254 |             $due_digest->{ $upcoming->{borrowernumber} }->{count}++; | 257 |             $due_digest->{ $upcoming->{borrowernumber} }->{count}++; | 
  
    | Lines 262-268
          UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) {
      
      
        Link Here | 
        
          | 262 |             } | 265 |             } | 
        
          | 263 |  | 266 |  | 
        
          | 264 |             ## Get branch info for borrowers home library. | 267 |             ## Get branch info for borrowers home library. | 
          
            
              | 265 |             foreach my $transport ( keys %{$borrower_preferences->{'transports'}} ) { | 268 |             foreach my $transport ( keys %{$borrower_preferences->message_transport_types} ) { | 
        
          | 266 |                 my $letter = parse_letter( { letter_code    => $letter_type, | 269 |                 my $letter = parse_letter( { letter_code    => $letter_type, | 
        
          | 267 |                                       borrowernumber => $upcoming->{'borrowernumber'}, | 270 |                                       borrowernumber => $upcoming->{'borrowernumber'}, | 
        
          | 268 |                                       branchcode     => $upcoming->{'branchcode'}, | 271 |                                       branchcode     => $upcoming->{'branchcode'}, | 
  
    | Lines 276-301
          UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) {
      
      
        Link Here | 
        
          | 276 |             } | 279 |             } | 
        
          | 277 |         } | 280 |         } | 
        
          | 278 |     } else { | 281 |     } else { | 
          
            
              | 279 |         $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'}, | 282 |         $borrower_preferences = Koha::Patron::Message::Preferences->find_with_message_name({ | 
            
              | 280 |                                                                                    message_name   => 'advance_notice' } ); | 283 |             borrowernumber => $upcoming->{'borrowernumber'}, | 
            
              | 281 |         next UPCOMINGITEM unless $borrower_preferences && exists $borrower_preferences->{'days_in_advance'}; | 284 |             message_name   => 'advance_notice', | 
            
              | 282 |         next UPCOMINGITEM unless $borrower_preferences->{'days_in_advance'} == $upcoming->{'days_until_due'}; | 285 |         }); | 
            
              | 283 |  | 286 |         next UPCOMINGITEM unless $borrower_preferences && $borrower_preferences->days_in_advance; | 
            
              | 284 |         if ( $borrower_preferences->{'wants_digest'} ) { | 287 |         next UPCOMINGITEM unless $borrower_preferences->days_in_advance == $upcoming->{'days_until_due'}; | 
            
              |  |  | 288 |  | 
            
              | 289 |         if ( $borrower_preferences->wants_digest ) { | 
        
          | 285 |             # cache this one to process after we've run through all of the items. | 290 |             # cache this one to process after we've run through all of the items. | 
        
          | 286 |             $upcoming_digest->{ $upcoming->{borrowernumber} }->{email} = $from_address; | 291 |             $upcoming_digest->{ $upcoming->{borrowernumber} }->{email} = $from_address; | 
        
          | 287 |             $upcoming_digest->{ $upcoming->{borrowernumber} }->{count}++; | 292 |             $upcoming_digest->{ $upcoming->{borrowernumber} }->{count}++; | 
        
          | 288 |         } else { | 293 |         } else { | 
        
          | 289 |             my $item = Koha::Items->find( $upcoming->{itemnumber} ); | 294 |             my $item = Koha::Items->find( $upcoming->{itemnumber} ); | 
        
          | 290 |             my $letter_type = 'PREDUE'; | 295 |             my $letter_type = 'PREDUE'; | 
          
            
              | 291 |             $sth->execute($upcoming->{'borrowernumber'},$upcoming->{'itemnumber'},$borrower_preferences->{'days_in_advance'}); | 296 |             $sth->execute($upcoming->{'borrowernumber'},$upcoming->{'itemnumber'},$borrower_preferences->days_in_advance); | 
        
          | 292 |             my $titles = ""; | 297 |             my $titles = ""; | 
        
          | 293 |             while ( my $item_info = $sth->fetchrow_hashref()) { | 298 |             while ( my $item_info = $sth->fetchrow_hashref()) { | 
        
          | 294 |                 $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } ); | 299 |                 $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } ); | 
        
          | 295 |             } | 300 |             } | 
        
          | 296 |  | 301 |  | 
        
          | 297 |             ## Get branch info for borrowers home library. | 302 |             ## Get branch info for borrowers home library. | 
          
            
              | 298 |             foreach my $transport ( keys %{$borrower_preferences->{'transports'}} ) { | 303 |             foreach my $transport ( keys %{$borrower_preferences->message_transport_types} ) { | 
        
          | 299 |                 my $letter = parse_letter( { letter_code    => $letter_type, | 304 |                 my $letter = parse_letter( { letter_code    => $letter_type, | 
        
          | 300 |                                       borrowernumber => $upcoming->{'borrowernumber'}, | 305 |                                       borrowernumber => $upcoming->{'borrowernumber'}, | 
        
          | 301 |                                       branchcode     => $upcoming->{'branchcode'}, | 306 |                                       branchcode     => $upcoming->{'branchcode'}, | 
  
    | Lines 346-359
          PATRON: while ( my ( $borrowernumber, $digest ) = each %$upcoming_digest ) {
      
      
        Link Here | 
        
          | 346 |     my $count = $digest->{count}; | 351 |     my $count = $digest->{count}; | 
        
          | 347 |     my $from_address = $digest->{email}; | 352 |     my $from_address = $digest->{email}; | 
        
          | 348 |  | 353 |  | 
          
            
              | 349 |     my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, | 354 |     my $borrower_preferences = Koha::Patron::Message::Preferences->find_with_message_name({ | 
            
              | 350 |                                                                                   message_name   => 'advance_notice' } ); | 355 |             borrowernumber => $borrowernumber, | 
            
              |  |  | 356 |             message_name   => 'advance_notice', | 
            
              | 357 |         }); | 
        
          | 351 |     next PATRON unless $borrower_preferences; # how could this happen? | 358 |     next PATRON unless $borrower_preferences; # how could this happen? | 
        
          | 352 |  | 359 |  | 
        
          | 353 |  | 360 |  | 
        
          | 354 |     my $letter_type = 'PREDUEDGST'; | 361 |     my $letter_type = 'PREDUEDGST'; | 
        
          | 355 |  | 362 |  | 
          
            
              | 356 |     $sth->execute($borrowernumber,$borrower_preferences->{'days_in_advance'}); | 363 |     $sth->execute($borrowernumber,$borrower_preferences->days_in_advance); | 
        
          | 357 |     my $titles = ""; | 364 |     my $titles = ""; | 
        
          | 358 |     while ( my $item_info = $sth->fetchrow_hashref()) { | 365 |     while ( my $item_info = $sth->fetchrow_hashref()) { | 
        
          | 359 |         $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } ); | 366 |         $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } ); | 
  
    | Lines 362-368
          PATRON: while ( my ( $borrowernumber, $digest ) = each %$upcoming_digest ) {
      
      
        Link Here | 
        
          | 362 |     ## Get branch info for borrowers home library. | 369 |     ## Get branch info for borrowers home library. | 
        
          | 363 |     my %branch_info = get_branch_info( $borrowernumber ); | 370 |     my %branch_info = get_branch_info( $borrowernumber ); | 
        
          | 364 |  | 371 |  | 
          
            
              | 365 |     foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) { | 372 |     foreach my $transport ( keys %{ $borrower_preferences->message_transport_types } ) { | 
        
          | 366 |         my $letter = parse_letter( | 373 |         my $letter = parse_letter( | 
        
          | 367 |             { | 374 |             { | 
        
          | 368 |                 letter_code    => $letter_type, | 375 |                 letter_code    => $letter_type, | 
  
    | Lines 404-411
          PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) {
      
      
        Link Here | 
        
          | 404 |     my $count = $digest->{count}; | 411 |     my $count = $digest->{count}; | 
        
          | 405 |     my $from_address = $digest->{email}; | 412 |     my $from_address = $digest->{email}; | 
        
          | 406 |  | 413 |  | 
          
            
              | 407 |     my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, | 414 |     my $borrower_preferences = Koha::Patron::Message::Preferences->find_with_message_name({ | 
            
              | 408 |                                                                                   message_name   => 'item_due' } ); | 415 |             borrowernumber => $borrowernumber, | 
            
              |  |  | 416 |             message_name   => 'item_due', | 
            
              | 417 |         }); | 
        
          | 409 |     next PATRON unless $borrower_preferences; # how could this happen? | 418 |     next PATRON unless $borrower_preferences; # how could this happen? | 
        
          | 410 |  | 419 |  | 
        
          | 411 |     my $letter_type = 'DUEDGST'; | 420 |     my $letter_type = 'DUEDGST'; | 
  
    | Lines 418-424
          PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) {
      
      
        Link Here | 
        
          | 418 |     ## Get branch info for borrowers home library. | 427 |     ## Get branch info for borrowers home library. | 
        
          | 419 |     my %branch_info = get_branch_info( $borrowernumber ); | 428 |     my %branch_info = get_branch_info( $borrowernumber ); | 
        
          | 420 |  | 429 |  | 
          
            
              | 421 |     for my $transport ( keys %{ $borrower_preferences->{'transports'} } ) { | 430 |     for my $transport ( keys %{ $borrower_preferences->message_transport_types } ) { | 
        
          | 422 |         my $letter = parse_letter( | 431 |         my $letter = parse_letter( | 
        
          | 423 |             { | 432 |             { | 
        
          | 424 |                 letter_code    => $letter_type, | 433 |                 letter_code    => $letter_type, |