View | Details | Raw Unified | Return to bug 18595
Collapse All | Expand All

(-)a/C4/Circulation.pm (-2 / +3 lines)
Lines 49-54 use Koha::Illrequests; Link Here
49
use Koha::Items;
49
use Koha::Items;
50
use Koha::Patrons;
50
use Koha::Patrons;
51
use Koha::Patron::Debarments qw( DelUniqueDebarment AddUniqueDebarment );
51
use Koha::Patron::Debarments qw( DelUniqueDebarment AddUniqueDebarment );
52
use Koha::Patron::MessagePreferences;
52
use Koha::Database;
53
use Koha::Database;
53
use Koha::Libraries;
54
use Koha::Libraries;
54
use Koha::Account::Lines;
55
use Koha::Account::Lines;
Lines 3595-3601 sub SendCirculationAlert { Link Here
3595
        CHECKOUT => 'Item_Checkout',
3596
        CHECKOUT => 'Item_Checkout',
3596
        RENEWAL  => 'Item_Checkout',
3597
        RENEWAL  => 'Item_Checkout',
3597
    );
3598
    );
3598
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences({
3599
    return unless my $borrower_preferences = Koha::Patron::MessagePreferences->find_with_message_name({
3599
        borrowernumber => $borrower->{borrowernumber},
3600
        borrowernumber => $borrower->{borrowernumber},
3600
        message_name   => $message_name{$type},
3601
        message_name   => $message_name{$type},
3601
    });
3602
    });
Lines 3618-3624 sub SendCirculationAlert { Link Here
3618
    }
3619
    }
3619
3620
3620
    my $schema = Koha::Database->new->schema;
3621
    my $schema = Koha::Database->new->schema;
3621
    my @transports = keys %{ $borrower_preferences->{transports} };
3622
    my @transports = keys %{ $borrower_preferences->message_transport_types };
3622
3623
3623
    # From the MySQL doc:
3624
    # From the MySQL doc:
3624
    # LOCK TABLES is not transaction-safe and implicitly commits any active transaction before attempting to lock the tables.
3625
    # LOCK TABLES is not transaction-safe and implicitly commits any active transaction before attempting to lock the tables.
(-)a/C4/Form/MessagingPreferences.pm (-4 / +5 lines)
Lines 132-152 sub set_form_values { Link Here
132
    # walk through the options and update them with these borrower_preferences
132
    # walk through the options and update them with these borrower_preferences
133
    my $messaging_options = Koha::Patron::MessagePreferences->get_options;
133
    my $messaging_options = Koha::Patron::MessagePreferences->get_options;
134
    PREF: foreach my $option ( @$messaging_options ) {
134
    PREF: foreach my $option ( @$messaging_options ) {
135
        my $pref = C4::Members::Messaging::GetMessagingPreferences( { %{ $target_params }, message_name => $option->{'message_name'} } );
135
        my $pref = Koha::Patron::MessagePreferences->find( { %{ $target_params }, message_attribute_id => $option->{'message_attribute_id'} } );
136
        $option->{ $option->{'message_name'} } = 1;
136
        $option->{ $option->{'message_name'} } = 1;
137
        # make a hashref of the days, selecting one.
137
        # make a hashref of the days, selecting one.
138
        if ( $option->{'takes_days'} ) {
138
        if ( $option->{'takes_days'} ) {
139
            my $days_in_advance = $pref->{'days_in_advance'} ? $pref->{'days_in_advance'} : 0;
139
            my $days_in_advance = $pref && $pref->days_in_advance ? $pref->days_in_advance : 0;
140
            $option->{days_in_advance} = $days_in_advance;
140
            $option->{days_in_advance} = $days_in_advance;
141
            @{$option->{'select_days'}} = map { {
141
            @{$option->{'select_days'}} = map { {
142
                day        => $_,
142
                day        => $_,
143
                selected   => $_ == $days_in_advance  }
143
                selected   => $_ == $days_in_advance  }
144
            } ( 0..MAX_DAYS_IN_ADVANCE );
144
            } ( 0..MAX_DAYS_IN_ADVANCE );
145
        }
145
        }
146
        foreach my $transport ( keys %{$pref->{'transports'}} ) {
146
        next unless $pref;
147
        foreach my $transport ( keys %{$pref->message_transport_types} ) {
147
            $option->{'transports_'.$transport} = 1;
148
            $option->{'transports_'.$transport} = 1;
148
        }
149
        }
149
        $option->{'digest'} = 1 if $pref->{'wants_digest'};
150
        $option->{'digest'} = 1 if $pref->wants_digest;
150
    }
151
    }
151
    $template->param(messaging_preferences => $messaging_options);
152
    $template->param(messaging_preferences => $messaging_options);
152
}
153
}
(-)a/C4/Members/Messaging.pm (-64 lines)
Lines 35-104 This module lets you modify a patron's messaging preferences. Link Here
35
35
36
=head1 FUNCTIONS
36
=head1 FUNCTIONS
37
37
38
=head2 GetMessagingPreferences
39
40
  my $preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrower->{'borrowernumber'},
41
                                                                       message_name   => 'Item_Due ' } );
42
43
  my $preferences = C4::Members::Messaging::GetMessagingPreferences( { categorycode => 'LIBRARY',
44
                                                                       message_name   => 'Item_Due ' } );
45
46
returns: a hashref of messaging preferences for a borrower or patron category for a particlar message_name
47
48
Requires either a borrowernumber or a categorycode key, but not both.
49
50
message_name argument is a message attribute name.
51
52
=cut
53
54
sub GetMessagingPreferences {
55
    my $params = shift;
56
57
    return unless exists $params->{message_name};
58
    return unless exists $params->{borrowernumber} xor exists $params->{categorycode}; # yes, xor
59
    my $sql = <<'END_SQL';
60
SELECT borrower_message_preferences.*,
61
       borrower_message_transport_preferences.message_transport_type,
62
       message_attributes.message_name,
63
       message_attributes.takes_days,
64
       message_transports.is_digest,
65
       message_transports.letter_module,
66
       message_transports.letter_code
67
FROM   borrower_message_preferences
68
LEFT JOIN borrower_message_transport_preferences
69
ON     borrower_message_transport_preferences.borrower_message_preference_id = borrower_message_preferences.borrower_message_preference_id
70
LEFT JOIN message_attributes
71
ON     message_attributes.message_attribute_id = borrower_message_preferences.message_attribute_id
72
LEFT JOIN message_transports
73
ON     message_transports.message_attribute_id = message_attributes.message_attribute_id
74
AND    message_transports.message_transport_type = borrower_message_transport_preferences.message_transport_type
75
AND    message_transports.is_digest = borrower_message_preferences.wants_digest
76
WHERE  message_attributes.message_name = ?
77
END_SQL
78
79
    my @bind_params = ( $params->{'message_name'} );
80
    if ( exists $params->{'borrowernumber'} ) {
81
        $sql .= " AND borrower_message_preferences.borrowernumber = ? ";
82
        push @bind_params, $params->{borrowernumber};
83
    } else {
84
        $sql .= " AND borrower_message_preferences.categorycode = ? ";
85
        push @bind_params, $params->{categorycode};
86
    }
87
88
    my $sth = C4::Context->dbh->prepare($sql);
89
    $sth->execute(@bind_params);
90
    my $return;
91
    ROW: while ( my $row = $sth->fetchrow_hashref() ) {
92
        next ROW unless $row->{'message_attribute_id'};
93
        $return->{'days_in_advance'} = $row->{'days_in_advance'} if defined $row->{'days_in_advance'};
94
        $return->{'wants_digest'}    = $row->{'wants_digest'}    if defined $row->{'wants_digest'};
95
        $return->{'letter_code'}     = $row->{'letter_code'};
96
        next unless defined $row->{'message_transport_type'};
97
        $return->{'transports'}->{ $row->{'message_transport_type'} } = $row->{'letter_code'};
98
    }
99
    return $return;
100
}
101
102
=head2 SetMessagingPreference
38
=head2 SetMessagingPreference
103
39
104
This method defines how a user (or a default for a patron category) wants to get a certain 
40
This method defines how a user (or a default for a patron category) wants to get a certain 
(-)a/C4/Reserves.pm (-5 / +8 lines)
Lines 44-49 use Koha::ItemTypes; Link Here
44
use Koha::Items;
44
use Koha::Items;
45
use Koha::Libraries;
45
use Koha::Libraries;
46
use Koha::Old::Holds;
46
use Koha::Old::Holds;
47
use Koha::Patron::MessagePreferences;
47
use Koha::Patrons;
48
use Koha::Patrons;
48
use Koha::Plugins;
49
use Koha::Plugins;
49
50
Lines 1882-1891 sub _koha_notify_reserve { Link Here
1882
    # Try to get the borrower's email address
1883
    # Try to get the borrower's email address
1883
    my $to_address = $patron->notice_email_address;
1884
    my $to_address = $patron->notice_email_address;
1884
1885
1885
    my $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( {
1886
    my $messagingpref = Koha::Patron::MessagePreferences->find_with_message_name({
1886
            borrowernumber => $borrowernumber,
1887
        borrowernumber => $borrowernumber,
1887
            message_name => 'Hold_Filled'
1888
        message_name   => 'Hold_Filled',
1888
    } );
1889
    });
1889
1890
1890
    my $library = Koha::Libraries->find( $hold->branchcode );
1891
    my $library = Koha::Libraries->find( $hold->branchcode );
1891
    my $from_email_address = $library->from_email_address;
1892
    my $from_email_address = $library->from_email_address;
Lines 1924-1930 sub _koha_notify_reserve { Link Here
1924
        } );
1925
        } );
1925
    };
1926
    };
1926
1927
1927
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
1928
    my $transports = $messagingpref->message_transport_types if $messagingpref;
1929
    foreach my $mtt (keys %{$transports}) {
1930
        my $letter_code = $transports->{$mtt};
1928
        next if (
1931
        next if (
1929
               ( $mtt eq 'email' and not $to_address ) # No email address
1932
               ( $mtt eq 'email' and not $to_address ) # No email address
1930
            or ( $mtt eq 'sms'   and not $patron->smsalertnumber ) # No SMS number
1933
            or ( $mtt eq 'sms'   and not $patron->smsalertnumber ) # No SMS number
(-)a/Koha/CurbsidePickup.pm (-1 lines)
Lines 24-30 use Koha::Database; Link Here
24
use base qw(Koha::Object);
24
use base qw(Koha::Object);
25
25
26
use C4::Circulation qw( CanBookBeIssued AddIssue );
26
use C4::Circulation qw( CanBookBeIssued AddIssue );
27
use C4::Members::Messaging qw( GetMessagingPreferences );
28
use C4::Letters qw( GetPreparedLetter EnqueueLetter );
27
use C4::Letters qw( GetPreparedLetter EnqueueLetter );
29
use Koha::Calendar;
28
use Koha::Calendar;
30
use Koha::DateUtils qw( dt_from_string );
29
use Koha::DateUtils qw( dt_from_string );
(-)a/Koha/Illrequest.pm (-2 / +3 lines)
Lines 32-37 use Koha::Illrequestattributes; Link Here
32
use Koha::AuthorisedValue;
32
use Koha::AuthorisedValue;
33
use Koha::Illrequest::Logger;
33
use Koha::Illrequest::Logger;
34
use Koha::Patron;
34
use Koha::Patron;
35
use Koha::Patron::MessagePreferences;
35
use Koha::AuthorisedValues;
36
use Koha::AuthorisedValues;
36
use Koha::Biblios;
37
use Koha::Biblios;
37
use Koha::Items;
38
use Koha::Items;
Lines 1504-1514 sub send_patron_notice { Link Here
1504
    );
1505
    );
1505
1506
1506
    # Get the patron's messaging preferences
1507
    # Get the patron's messaging preferences
1507
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences({
1508
    my $borrower_preferences = Koha::Patron::MessagePreferences->find_with_message_name({
1508
        borrowernumber => $self->borrowernumber,
1509
        borrowernumber => $self->borrowernumber,
1509
        message_name   => $message_name{$notice_code}
1510
        message_name   => $message_name{$notice_code}
1510
    });
1511
    });
1511
    my @transports = keys %{ $borrower_preferences->{transports} };
1512
    my @transports = keys %{ $borrower_preferences->message_transport_types };
1512
1513
1513
    # Notice should come from the library where the request was placed,
1514
    # Notice should come from the library where the request was placed,
1514
    # not the patrons home library
1515
    # not the patrons home library
(-)a/Koha/Patron.pm (-3 / +3 lines)
Lines 2228-2239 sub queue_notice { Link Here
2228
    my $letter_code;
2228
    my $letter_code;
2229
    $letter_code = $letter_params->{letter_code};
2229
    $letter_code = $letter_params->{letter_code};
2230
    if( $params->{message_name} ){
2230
    if( $params->{message_name} ){
2231
        my $messaging_prefs = C4::Members::Messaging::GetMessagingPreferences( {
2231
        my $messaging_prefs = Koha::Patron::MessagePreferences->find_with_message_name( {
2232
                borrowernumber => $letter_params->{borrowernumber},
2232
                borrowernumber => $letter_params->{borrowernumber},
2233
                message_name => $params->{message_name}
2233
                message_name => $params->{message_name}
2234
        } );
2234
        } );
2235
        @message_transports = ( keys %{ $messaging_prefs->{transports} } );
2235
        @message_transports = ( keys %{ $messaging_prefs->message_transport_types } );
2236
        $letter_code = $messaging_prefs->{transports}->{$message_transports[0]} unless $letter_code;
2236
        $letter_code = $messaging_prefs->message_transport_types->{$message_transports[0]} unless $letter_code;
2237
    } else {
2237
    } else {
2238
        @message_transports = @{$params->{message_transports}};
2238
        @message_transports = @{$params->{message_transports}};
2239
    }
2239
    }
(-)a/Koha/Patron/Category.pm (-8 / +6 lines)
Lines 83-101 sub default_messaging { Link Here
83
    my $messaging_options = Koha::Patron::MessagePreferences->get_options;
83
    my $messaging_options = Koha::Patron::MessagePreferences->get_options;
84
    my @messaging;
84
    my @messaging;
85
    foreach my $option (@$messaging_options) {
85
    foreach my $option (@$messaging_options) {
86
        my $pref = C4::Members::Messaging::GetMessagingPreferences(
86
        my $pref = Koha::Patron::MessagePreferences->find_with_message_name({
87
            {
87
            categorycode   => $self->categorycode,
88
                categorycode => $self->categorycode,
88
            message_name   => $option->{message_name},
89
                message_name => $option->{message_name}
89
        });
90
            }
90
        next if !$pref || $pref && !$pref->message_transport_types;
91
        );
92
        next unless $pref->{transports};
93
        my $brief_pref = {
91
        my $brief_pref = {
94
            message_attribute_id      => $option->{message_attribute_id},
92
            message_attribute_id      => $option->{message_attribute_id},
95
            message_name              => $option->{message_name},
93
            message_name              => $option->{message_name},
96
            $option->{'message_name'} => 1,
94
            $option->{'message_name'} => 1,
97
        };
95
        };
98
        foreach my $transport ( keys %{ $pref->{transports} } ) {
96
        foreach my $transport ( keys %{ $pref->message_transport_types } ) {
99
            push @{ $brief_pref->{transports} }, { transport => $transport };
97
            push @{ $brief_pref->{transports} }, { transport => $transport };
100
        }
98
        }
101
        push @messaging, $brief_pref;
99
        push @messaging, $brief_pref;
(-)a/circ/returns.pl (-2 / +7 lines)
Lines 54-59 use Koha::Item::Transfers; Link Here
54
use Koha::Items;
54
use Koha::Items;
55
use Koha::Patrons;
55
use Koha::Patrons;
56
use Koha::Recalls;
56
use Koha::Recalls;
57
use Koha::Patron::MessagePreferences;
57
58
58
my $query = CGI->new;
59
my $query = CGI->new;
59
60
Lines 562-568 if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) { Link Here
562
if ( $messages->{'ResFound'} ) {
563
if ( $messages->{'ResFound'} ) {
563
    my $reserve    = $messages->{'ResFound'};
564
    my $reserve    = $messages->{'ResFound'};
564
    my $patron = Koha::Patrons->find( $reserve->{borrowernumber} );
565
    my $patron = Koha::Patrons->find( $reserve->{borrowernumber} );
565
    my $holdmsgpreferences =  C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $reserve->{'borrowernumber'}, message_name   => 'Hold_Filled' } );
566
    my $holdmsgpreferences =  Koha::Patron::MessagePreferences->find_with_message_name({
567
        borrowernumber => $reserve->{'borrowernumber'},
568
        message_name   => 'Hold_Filled',
569
    });
570
    my $mtts = $holdmsgpreferences->message_transport_types if defined $holdmsgpreferences;
566
    my $branchCheck = ( $userenv_branch eq $reserve->{branchcode} );
571
    my $branchCheck = ( $userenv_branch eq $reserve->{branchcode} );
567
    if ( $reserve->{'ResFound'} eq "Waiting" ) {
572
    if ( $reserve->{'ResFound'} eq "Waiting" ) {
568
        $template->param(
573
        $template->param(
Lines 607-613 if ( $messages->{'ResFound'} ) { Link Here
607
        destbranch     => $reserve->{'branchcode'},
612
        destbranch     => $reserve->{'branchcode'},
608
        reservenotes   => $reserve->{'reservenotes'},
613
        reservenotes   => $reserve->{'reservenotes'},
609
        reserve_id     => $reserve->{reserve_id},
614
        reserve_id     => $reserve->{reserve_id},
610
        bormessagepref => $holdmsgpreferences->{'transports'},
615
        bormessagepref => $mtts,
611
    );
616
    );
612
}
617
}
613
618
(-)a/misc/cronjobs/advance_notices.pl (-21 / +23 lines)
Lines 49-54 use C4::Log qw( cronlogaction ); Link Here
49
use Koha::Items;
49
use Koha::Items;
50
use Koha::Libraries;
50
use Koha::Libraries;
51
use Koha::Patrons;
51
use Koha::Patrons;
52
use Koha::Patron::MessagePreferences;
52
53
53
=head1 OPTIONS
54
=head1 OPTIONS
54
55
Lines 267-277 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
267
    my $borrower_preferences;
268
    my $borrower_preferences;
268
    if ( 0 == $upcoming->{'days_until_due'} ) {
269
    if ( 0 == $upcoming->{'days_until_due'} ) {
269
        # This item is due today. Send an 'item due' message.
270
        # This item is due today. Send an 'item due' message.
270
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
271
        $borrower_preferences = Koha::Patron::MessagePreferences->find_with_message_name({
271
                                                                                   message_name   => 'item_due' } );
272
            borrowernumber => $upcoming->{'borrowernumber'},
273
            message_name   => 'item_due',
274
        });
272
        next unless $borrower_preferences;
275
        next unless $borrower_preferences;
273
        
276
        
274
        if ( $borrower_preferences->{'wants_digest'} ) {
277
        if ( $borrower_preferences->wants_digest ) {
275
            # cache this one to process after we've run through all of the items.
278
            # cache this one to process after we've run through all of the items.
276
            if ($digest_per_branch) {
279
            if ($digest_per_branch) {
277
                $due_digest->{ $upcoming->{branchcode} }->{ $upcoming->{borrowernumber} }->{email} = $from_address;
280
                $due_digest->{ $upcoming->{branchcode} }->{ $upcoming->{borrowernumber} }->{email} = $from_address;
Lines 297-303 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
297
            my $title = C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
300
            my $title = C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
298
301
299
            ## Get branch info for borrowers home library.
302
            ## Get branch info for borrowers home library.
300
            foreach my $transport ( keys %{$borrower_preferences->{'transports'}} ) {
303
            foreach my $transport ( keys %{$borrower_preferences->message_transport_types} ) {
301
                next if $transport eq 'itiva';
304
                next if $transport eq 'itiva';
302
                my $letter = parse_letter( { letter_code    => $letter_type,
305
                my $letter = parse_letter( { letter_code    => $letter_type,
303
                                      borrowernumber => $upcoming->{'borrowernumber'},
306
                                      borrowernumber => $upcoming->{'borrowernumber'},
Lines 315-326 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
315
            }
318
            }
316
        }
319
        }
317
    } else {
320
    } else {
318
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $upcoming->{'borrowernumber'},
321
        $borrower_preferences = Koha::Patron::MessagePreferences->find_with_message_name({
319
                                                                                   message_name   => 'advance_notice' } );
322
            borrowernumber => $upcoming->{'borrowernumber'},
320
        next UPCOMINGITEM unless $borrower_preferences && exists $borrower_preferences->{'days_in_advance'};
323
            message_name   => 'advance_notice',
321
        next UPCOMINGITEM unless $borrower_preferences->{'days_in_advance'} == $upcoming->{'days_until_due'};
324
        });
325
        next UPCOMINGITEM unless $borrower_preferences && defined $borrower_preferences->days_in_advance;
326
        next UPCOMINGITEM unless $borrower_preferences->days_in_advance == $upcoming->{'days_until_due'};
322
327
323
        if ( $borrower_preferences->{'wants_digest'} ) {
328
        if ( $borrower_preferences->wants_digest ) {
324
            # cache this one to process after we've run through all of the items.
329
            # cache this one to process after we've run through all of the items.
325
            if ($digest_per_branch) {
330
            if ($digest_per_branch) {
326
                $upcoming_digest->{ $upcoming->{branchcode} }->{ $upcoming->{borrowernumber} }->{email} = $from_address;
331
                $upcoming_digest->{ $upcoming->{branchcode} }->{ $upcoming->{borrowernumber} }->{email} = $from_address;
Lines 341-352 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
341
346
342
            my $item = Koha::Items->find( $upcoming->{itemnumber} );
347
            my $item = Koha::Items->find( $upcoming->{itemnumber} );
343
            my $letter_type = 'PREDUE';
348
            my $letter_type = 'PREDUE';
344
            $sth->execute($upcoming->{'borrowernumber'},$upcoming->{'itemnumber'},$borrower_preferences->{'days_in_advance'});
349
            $sth->execute($upcoming->{'borrowernumber'},$upcoming->{'itemnumber'},$borrower_preferences->days_in_advance);
345
            my $item_info = $sth->fetchrow_hashref();
350
            my $item_info = $sth->fetchrow_hashref();
346
            my $title = C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
351
            my $title = C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
347
352
348
            ## Get branch info for borrowers home library.
353
            ## Get branch info for borrowers home library.
349
            foreach my $transport ( keys %{$borrower_preferences->{'transports'}} ) {
354
            foreach my $transport ( keys %{$borrower_preferences->message_transport_types} ) {
350
                next if $transport eq 'itiva';
355
                next if $transport eq 'itiva';
351
                my $letter = parse_letter( { letter_code    => $letter_type,
356
                my $letter = parse_letter( { letter_code    => $letter_type,
352
                                      borrowernumber => $upcoming->{'borrowernumber'},
357
                                      borrowernumber => $upcoming->{'borrowernumber'},
Lines 408-414 if ($digest_per_branch) { Link Here
408
            get_item_info => sub {
413
            get_item_info => sub {
409
                my $params = shift;
414
                my $params = shift;
410
                $params->{sth}->execute($params->{borrowernumber},
415
                $params->{sth}->execute($params->{borrowernumber},
411
                                        $params->{borrower_preferences}->{'days_in_advance'});
416
                                        $params->{borrower_preferences}->days_in_advance);
412
                return sub {
417
                return sub {
413
                    $params->{sth}->fetchrow_hashref;
418
                    $params->{sth}->fetchrow_hashref;
414
                };
419
                };
Lines 441-447 if ($digest_per_branch) { Link Here
441
        get_item_info => sub {
446
        get_item_info => sub {
442
            my $params = shift;
447
            my $params = shift;
443
            $params->{sth}->execute($params->{borrowernumber},
448
            $params->{sth}->execute($params->{borrowernumber},
444
                                    $params->{borrower_preferences}->{'days_in_advance'});
449
                                    $params->{borrower_preferences}->days_in_advance);
445
            return sub {
450
            return sub {
446
                $params->{sth}->fetchrow_hashref;
451
                $params->{sth}->fetchrow_hashref;
447
            };
452
            };
Lines 578-590 sub send_digests { Link Here
578
            $branchcode = $branch_info{'branches.branchcode'};
583
            $branchcode = $branch_info{'branches.branchcode'};
579
        }
584
        }
580
585
581
        my $borrower_preferences =
586
        my $borrower_preferences = Koha::Patron::MessagePreferences->find_with_message_name({
582
            C4::Members::Messaging::GetMessagingPreferences(
587
            borrowernumber => $borrowernumber,
583
                {
588
            message_name   => $params->{message_name},
584
                    borrowernumber => $borrowernumber,
589
        });
585
                    message_name   => $params->{message_name}
586
                }
587
            );
588
590
589
        next PATRON unless $borrower_preferences; # how could this happen?
591
        next PATRON unless $borrower_preferences; # how could this happen?
590
592
Lines 602-608 sub send_digests { Link Here
602
            $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
604
            $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
603
        }
605
        }
604
606
605
        foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) {
607
        foreach my $transport ( keys %{ $borrower_preferences->message_transport_types } ) {
606
            next if $transport eq 'itiva';
608
            next if $transport eq 'itiva';
607
            my $letter = parse_letter(
609
            my $letter = parse_letter(
608
                {
610
                {
(-)a/misc/cronjobs/automatic_renewals.pl (-7 / +8 lines)
Lines 86-91 use C4::Letters; Link Here
86
use Koha::Checkouts;
86
use Koha::Checkouts;
87
use Koha::Libraries;
87
use Koha::Libraries;
88
use Koha::Patrons;
88
use Koha::Patrons;
89
use Koha::Patron::MessagePreferences;
89
90
90
my $command_line_options = join(" ",@ARGV);
91
my $command_line_options = join(" ",@ARGV);
91
92
Lines 153-159 while ( my $auto_renew = $auto_renews->next ) { Link Here
153
154
154
    my ( $borrower_preferences, $wants_messages, $wants_digest ) = ( undef, 0, 0 );
155
    my ( $borrower_preferences, $wants_messages, $wants_digest ) = ( undef, 0, 0 );
155
    if ( $send_notices_pref eq 'preferences' ){
156
    if ( $send_notices_pref eq 'preferences' ){
156
        $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences(
157
        $borrower_preferences = Koha::Patron::MessagePreferences->find_with_message_name(
157
            {
158
            {
158
                borrowernumber => $auto_renew->borrowernumber,
159
                borrowernumber => $auto_renew->borrowernumber,
159
                message_name   => 'auto_renewals'
160
                message_name   => 'auto_renewals'
Lines 161-170 while ( my $auto_renew = $auto_renews->next ) { Link Here
161
        );
162
        );
162
        $wants_messages = 1
163
        $wants_messages = 1
163
            if $borrower_preferences
164
            if $borrower_preferences
164
            && $borrower_preferences->{transports};
165
            && $borrower_preferences->message_transport_types;
165
        $wants_digest = 1
166
        $wants_digest = 1
166
            if $wants_messages
167
            if $wants_messages
167
            && $borrower_preferences->{wants_digest};
168
            && $borrower_preferences->wants_digest;
168
    } else { # Preference is never or cron
169
    } else { # Preference is never or cron
169
        $wants_messages = $send_notices;
170
        $wants_messages = $send_notices;
170
        $wants_digest = 0;
171
        $wants_digest = 0;
Lines 230-236 if ( $send_notices && $confirm ) { Link Here
230
    for my $borrowernumber ( keys %report ) {
231
    for my $borrowernumber ( keys %report ) {
231
        my $patron = Koha::Patrons->find($borrowernumber);
232
        my $patron = Koha::Patrons->find($borrowernumber);
232
        my $borrower_preferences =
233
        my $borrower_preferences =
233
            C4::Members::Messaging::GetMessagingPreferences(
234
            Koha::Patron::MessagePreferences->find_with_message_name(
234
                {
235
                {
235
                    borrowernumber => $borrowernumber,
236
                    borrowernumber => $borrowernumber,
236
                    message_name   => 'auto_renewals'
237
                    message_name   => 'auto_renewals'
Lines 239-245 if ( $send_notices && $confirm ) { Link Here
239
        for my $issue ( @{ $report{$borrowernumber} } ) {
240
        for my $issue ( @{ $report{$borrowernumber} } ) {
240
            my $item = $issue->item;
241
            my $item = $issue->item;
241
            # Force sending of email and only email if pref is set to "cron"
242
            # Force sending of email and only email if pref is set to "cron"
242
            my @transports = $send_notices_pref eq 'preferences' ? keys %{ $borrower_preferences->{'transports'} } : 'email';
243
            my @transports = $send_notices_pref eq 'preferences' ? keys %{ $borrower_preferences->message_transport_types } : 'email';
243
            foreach my $transport ( @transports ) {
244
            foreach my $transport ( @transports ) {
244
                my $letter = C4::Letters::GetPreparedLetter (
245
                my $letter = C4::Letters::GetPreparedLetter (
245
                    module      => 'circulation',
246
                    module      => 'circulation',
Lines 322-328 sub send_digests { Link Here
322
    PATRON: while ( my ( $borrowernumber, $digest ) = each %{$params->{digests}} ) {
323
    PATRON: while ( my ( $borrowernumber, $digest ) = each %{$params->{digests}} ) {
323
        next unless defined $digest->{updated} && $digest->{updated} == 1;
324
        next unless defined $digest->{updated} && $digest->{updated} == 1;
324
        my $borrower_preferences =
325
        my $borrower_preferences =
325
            C4::Members::Messaging::GetMessagingPreferences(
326
            Koha::Patron::MessagePreferences->find_with_message_name(
326
                {
327
                {
327
                    borrowernumber => $borrowernumber,
328
                    borrowernumber => $borrowernumber,
328
                    message_name   => 'auto_renewals'
329
                    message_name   => 'auto_renewals'
Lines 341-347 sub send_digests { Link Here
341
        my $library = Koha::Libraries->find( $branchcode );
342
        my $library = Koha::Libraries->find( $branchcode );
342
        my $from_address = $library->from_email_address;
343
        my $from_address = $library->from_email_address;
343
344
344
        foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) {
345
        foreach my $transport ( keys %{ $borrower_preferences->message_transport_types } ) {
345
            my $letter = C4::Letters::GetPreparedLetter (
346
            my $letter = C4::Letters::GetPreparedLetter (
346
                module => 'circulation',
347
                module => 'circulation',
347
                letter_code => $params->{letter_code},
348
                letter_code => $params->{letter_code},
(-)a/t/db_dependent/Koha/Patron/Categories.t (-3 / +3 lines)
Lines 22-33 use Modern::Perl; Link Here
22
use Test::More tests => 11;
22
use Test::More tests => 11;
23
23
24
use C4::Context;
24
use C4::Context;
25
use C4::Members::Messaging;
26
use Koha::Database;
25
use Koha::Database;
27
use Koha::DateUtils qw( dt_from_string );
26
use Koha::DateUtils qw( dt_from_string );
28
use Koha::Patron;
27
use Koha::Patron;
29
use Koha::Patron::Category;
28
use Koha::Patron::Category;
30
use Koha::Patron::Categories;
29
use Koha::Patron::Categories;
30
use Koha::Patron::MessagePreferences;
31
use t::lib::Dates;
31
use t::lib::Dates;
32
use t::lib::TestBuilder;
32
use t::lib::TestBuilder;
33
use t::lib::Mocks;
33
use t::lib::Mocks;
Lines 124-136 subtest 'default_messaging tests' => sub { Link Here
124
            is_digest => 1,
124
            is_digest => 1,
125
        }
125
        }
126
    });
126
    });
127
    C4::Members::Messaging::SetMessagingPreference({
127
    Koha::Patron::MessagePreference->new({
128
        categorycode            => $category->categorycode,
128
        categorycode            => $category->categorycode,
129
        message_attribute_id    => $attr->{'message_attribute_id'},
129
        message_attribute_id    => $attr->{'message_attribute_id'},
130
        message_transport_types => [ qw( email ) ],
130
        message_transport_types => [ qw( email ) ],
131
        days_in_advance         => 5,
131
        days_in_advance         => 5,
132
        wants_digest            => 1
132
        wants_digest            => 1
133
    });
133
    })->store;
134
    my $default_messaging = $category->default_messaging;
134
    my $default_messaging = $category->default_messaging;
135
    is(@$default_messaging, 1, "One default messaging found.");
135
    is(@$default_messaging, 1, "One default messaging found.");
136
    $default_messaging = $default_messaging->[0];
136
    $default_messaging = $default_messaging->[0];
(-)a/t/db_dependent/api/v1/patrons.t (-2 / +1 lines)
Lines 567-573 subtest 'add() tests' => sub { Link Here
567
                }
567
                }
568
            )->status_is(201, 'Patron added')->tx->res->json->{patron_id};
568
            )->status_is(201, 'Patron added')->tx->res->json->{patron_id};
569
569
570
            my $messaging_preferences = C4::Members::Messaging::GetMessagingPreferences({ borrowernumber => $patron_id, message_name => 'Item_Due' });
570
            my $messaging_preferences = Koha::Patron::MessagePreferences->find_with_message_name({ borrowernumber => $patron_id, message_name => 'Item_Due' });
571
571
572
            is_deeply(
572
            is_deeply(
573
                $messaging_preferences,
573
                $messaging_preferences,
574
- 

Return to bug 18595