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

(-)a/C4/Reserves.pm (-10 / +27 lines)
Lines 1848-1870 sub _koha_notify_reserve { Link Here
1848
    );
1848
    );
1849
1849
1850
    my $notification_sent = 0; #Keeping track if a Hold_filled message is sent. If no message can be sent, then default to a print message.
1850
    my $notification_sent = 0; #Keeping track if a Hold_filled message is sent. If no message can be sent, then default to a print message.
1851
    my $do_not_lock = ( exists $ENV{_} && $ENV{_} =~ m|prove| ) || $ENV{KOHA_TESTING};
1851
    my $send_notification = sub {
1852
    my $send_notification = sub {
1852
        my ( $mtt, $letter_code ) = (@_);
1853
        my ( $mtt, $letter_code, $wants_digest ) = (@_);
1853
        return unless defined $letter_code;
1854
        return unless defined $letter_code;
1854
        $letter_params{letter_code} = $letter_code;
1855
        $letter_params{letter_code}            = $letter_code;
1855
        $letter_params{message_transport_type} = $mtt;
1856
        $letter_params{message_transport_type} = $mtt;
1856
        my $letter =  C4::Letters::GetPreparedLetter ( %letter_params );
1857
        my $letter = C4::Letters::GetPreparedLetter(%letter_params);
1857
        unless ($letter) {
1858
        unless ($letter) {
1858
            warn "Could not find a letter called '$letter_params{'letter_code'}' for $mtt in the 'reserves' module";
1859
            warn "Could not find a letter called '$letter_params{'letter_code'}' for $mtt in the 'reserves' module";
1859
            return;
1860
            return;
1860
        }
1861
        }
1861
1862
1862
        C4::Letters::EnqueueLetter( {
1863
        unless ($wants_digest) {
1863
            letter => $letter,
1864
            C4::Letters::EnqueueLetter(
1864
            borrowernumber => $borrowernumber,
1865
                {
1865
            from_address => $from_email_address,
1866
                    letter                 => $letter,
1866
            message_transport_type => $mtt,
1867
                    borrowernumber         => $borrowernumber,
1867
        } );
1868
                    from_address           => $from_email_address,
1869
                    message_transport_type => $mtt,
1870
                }
1871
            );
1872
        } else {
1873
            C4::Context->dbh->do(q|LOCK TABLE message_queue READ|)  unless $do_not_lock;
1874
            C4::Context->dbh->do(q|LOCK TABLE message_queue WRITE|) unless $do_not_lock;
1875
            my $message = C4::Message->find_last_message( $patron->unblessed, $letter_code, $mtt );
1876
            unless ($message) {
1877
                C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock;
1878
                C4::Message->enqueue( $letter, $patron, $mtt );
1879
            } else {
1880
                $message->append($letter);
1881
                $message->update;
1882
            }
1883
            C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock;
1884
        }
1868
    };
1885
    };
1869
1886
1870
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
1887
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
Lines 1875-1881 sub _koha_notify_reserve { Link Here
1875
            or ( $mtt eq 'phone' and not $patron->phone ) # No phone number to call
1892
            or ( $mtt eq 'phone' and not $patron->phone ) # No phone number to call
1876
        );
1893
        );
1877
1894
1878
        &$send_notification($mtt, $letter_code);
1895
        &$send_notification($mtt, $letter_code, $messagingprefs->{wants_digest});
1879
        $notification_sent++;
1896
        $notification_sent++;
1880
    }
1897
    }
1881
    #Making sure that a print notification is sent if no other transport types can be utilized.
1898
    #Making sure that a print notification is sent if no other transport types can be utilized.
(-)a/installer/data/mysql/atomicupdate/bug_8838.pl (+37 lines)
Line 0 Link Here
1
use Modern::Perl;
2
3
return {
4
    bug_number  => "8838",
5
    description => "Add digest option for HOLD notice",
6
    up          => sub {
7
        my ($args) = @_;
8
        my ( $dbh, $out ) = @$args{qw(dbh out)};
9
10
        $dbh->do(q{
11
            INSERT INTO `letter` VALUES (NULL,'reserves','HOLDDGST','','Hold available for pickup (digest)',0,'Hold(s) available for pickup','You have one or more holds available for pickup:\r\n----\r\nTitle: [% hold.biblio.title %]\r\nAuthor: [% hold.biblio.author %]\r\nCopy: [% hold.item.copynumber %]\r\nLocation: [% hold.branch.branchname %]\r\nWaiting since: [% hold.waitingdate %]:\r\n[% hold.branch.branchaddress1 %]\r\n[% hold.branch.branchaddress2 %]\r\n[% hold.branch.branchaddress3 %]\r\n[% hold.branch.branchcity %] [% hold.branch.branchzip %]\r\n----','email','default','2023-08-29 18:42:15');
12
        });
13
14
        $dbh->do(q{
15
            INSERT INTO message_transports VALUES
16
            ( 4, "email", 1, "reserves", "HOLDDGST", "" ),
17
            ( 4, "sms", 1, "reserves", "HOLDDGST", "" ),
18
            ( 4, "phone", 1, "reserves", "HOLDDGST", "");
19
        });
20
21
        # Print useful stuff here
22
        # tables
23
        say $out "Added new table 'XXX'";
24
        say $out "Added column 'XXX.YYY'";
25
26
        # sysprefs
27
        say $out "Added new system preference 'XXX'";
28
        say $out "Updated system preference 'XXX'";
29
        say $out "Removed system preference 'XXX'";
30
31
        # permissions
32
        say $out "Added new permission 'XXX'";
33
34
        # letters
35
        say $out "Added new letter 'XXX' (TRANSPORT)";
36
    },
37
};
(-)a/installer/data/mysql/en/mandatory/sample_notices.yml (+23 lines)
Lines 1771-1776 tables: Link Here
1771
            - "<<branches.branchaddress3>>"
1771
            - "<<branches.branchaddress3>>"
1772
            - "<<branches.branchcity>> <<branches.branchzip>>"
1772
            - "<<branches.branchcity>> <<branches.branchzip>>"
1773
1773
1774
        - module: reserves
1775
          code: HOLDDGST
1776
          branchcode: ""
1777
          name: "Hold(s) available for pickup"
1778
          is_html: 0
1779
          title: "Hold(s) available for pickup"
1780
          message_transport_type: email
1781
          lang: default
1782
          content:
1783
            - "You have one or more holds available for pickup:"
1784
            - "----"
1785
            - "Title: [% hold.biblio.title %]"
1786
            - "Author: [% hold.biblio.author %]"
1787
            - "Copy: [% hold.item.copynumber %]"
1788
            - "Waiting since: [% hold.waitingdate %]"
1789
            - "Waitng at: [% hold.branch.branchname %]"
1790
            - "[% hold.branch.branchaddress1 %]"
1791
            - "[% hold.branch.branchaddress2 %]"
1792
            - "[% hold.branch.branchaddress3 %]"
1793
            - "[% hold.branch.branchcity %] [% hold.branch.branchzip %]"
1794
            - "----"
1795
            - "Thank you!"
1796
1774
        - module: reserves
1797
        - module: reserves
1775
          code: HOLD
1798
          code: HOLD
1776
          branchcode: ""
1799
          branchcode: ""
(-)a/installer/data/mysql/mandatory/sample_notices_message_transports.sql (+3 lines)
Lines 19-24 values Link Here
19
(4, 'sms',   0, 'reserves',    'HOLD'),
19
(4, 'sms',   0, 'reserves',    'HOLD'),
20
(4, 'phone', 0, 'reserves',    'HOLD'),
20
(4, 'phone', 0, 'reserves',    'HOLD'),
21
(4, 'itiva', 0, 'reserves',    'HOLD'),
21
(4, 'itiva', 0, 'reserves',    'HOLD'),
22
(4, 'email', 1, 'reserves',    'HOLDDGST'),
23
(4, 'sms',   1, 'reserves',    'HOLDDGST'),
24
(4, 'phone', 1, 'reserves',    'HOLDDGST'),
22
(5, 'email', 0, 'circulation', 'CHECKIN'),
25
(5, 'email', 0, 'circulation', 'CHECKIN'),
23
(5, 'sms',   0, 'circulation', 'CHECKIN'),
26
(5, 'sms',   0, 'circulation', 'CHECKIN'),
24
(5, 'phone', 0, 'circulation', 'CHECKIN'),
27
(5, 'phone', 0, 'circulation', 'CHECKIN'),
(-)a/t/db_dependent/Reserves.t (-1 / +103 lines)
Lines 1830-1832 subtest '_Findgroupreserves' => sub { Link Here
1830
1830
1831
    $schema->txn_rollback;
1831
    $schema->txn_rollback;
1832
};
1832
};
1833
- 
1833
1834
subtest 'HOLDDGST tests' => sub {
1835
1836
    plan tests => 2;
1837
    $schema->storage->txn_begin;
1838
1839
    my $branch = $builder->build_object({
1840
        class => 'Koha::Libraries',
1841
        value => {
1842
            branchemail => 'branch@e.mail',
1843
            branchreplyto => 'branch@reply.to',
1844
            pickup_location => 1
1845
        }
1846
    });
1847
    my $item = $builder->build_sample_item({
1848
        homebranch => $branch->branchcode,
1849
        holdingbranch => $branch->branchcode
1850
    });
1851
    my $item2 = $builder->build_sample_item({
1852
        homebranch => $branch->branchcode,
1853
        holdingbranch => $branch->branchcode
1854
    });
1855
1856
    my $wants_hold_and_email = {
1857
        wants_digest => '1',
1858
        transports => {
1859
            sms => 'HOLDDGST',
1860
            email => 'HOLDDGST',
1861
            },
1862
        letter_code => 'HOLDDGST'
1863
    };
1864
1865
    my $mp = Test::MockModule->new( 'C4::Members::Messaging' );
1866
1867
    $mp->mock("GetMessagingPreferences",$wants_hold_and_email);
1868
1869
    $dbh->do('DELETE FROM letter');
1870
1871
    my $email_hold_notice = $builder->build({
1872
            source => 'Letter',
1873
            value => {
1874
                message_transport_type => 'email',
1875
                branchcode => '',
1876
                code => 'HOLDDGST',
1877
                module => 'reserves',
1878
                lang => 'default',
1879
            }
1880
        });
1881
1882
    my $sms_hold_notice = $builder->build({
1883
            source => 'Letter',
1884
            value => {
1885
                message_transport_type => 'sms',
1886
                branchcode => '',
1887
                code => 'HOLDDGST',
1888
                module => 'reserves',
1889
                lang=>'default',
1890
            }
1891
        });
1892
1893
    my $hold_borrower = $builder->build({
1894
            source => 'Borrower',
1895
            value => {
1896
                smsalertnumber=>'5555555551',
1897
                email=>'a@c.com',
1898
            }
1899
        })->{borrowernumber};
1900
1901
    C4::Reserves::AddReserve(
1902
        {
1903
            branchcode     => $item->homebranch,
1904
            borrowernumber => $hold_borrower,
1905
            biblionumber   => $item->biblionumber,
1906
        }
1907
    );
1908
1909
    C4::Reserves::AddReserve(
1910
        {
1911
            branchcode     => $item2->homebranch,
1912
            borrowernumber => $hold_borrower,
1913
            biblionumber   => $item2->biblionumber,
1914
        }
1915
    );
1916
1917
    ModReserveAffect($item->itemnumber, $hold_borrower, 0);
1918
    ModReserveAffect($item2->itemnumber, $hold_borrower, 0);
1919
1920
    my $sms_count = $schema->resultset('MessageQueue')->search({
1921
            letter_code     => 'HOLDDGST',
1922
            message_transport_type => 'sms',
1923
            borrowernumber => $hold_borrower,
1924
        })->count;
1925
    is($sms_count, 1 ,"Only one sms hold digest message created for two holds");
1926
1927
    my $email_count = $schema->resultset('MessageQueue')->search({
1928
            letter_code     => 'HOLDDGST',
1929
            message_transport_type => 'email',
1930
            borrowernumber => $hold_borrower,
1931
        })->count;
1932
    is($email_count, 1 ,"Only one email hold digest message created for two holds");
1933
1934
    $schema->txn_rollback;
1935
};

Return to bug 8838