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

(-)a/C4/Reserves.pm (-10 / +27 lines)
Lines 1845-1867 sub _koha_notify_reserve { Link Here
1845
    );
1845
    );
1846
1846
1847
    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.
1847
    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.
1848
    my $do_not_lock = ( exists $ENV{_} && $ENV{_} =~ m|prove| ) || $ENV{KOHA_TESTING};
1848
    my $send_notification = sub {
1849
    my $send_notification = sub {
1849
        my ( $mtt, $letter_code ) = (@_);
1850
        my ( $mtt, $letter_code, $wants_digest ) = (@_);
1850
        return unless defined $letter_code;
1851
        return unless defined $letter_code;
1851
        $letter_params{letter_code} = $letter_code;
1852
        $letter_params{letter_code}            = $letter_code;
1852
        $letter_params{message_transport_type} = $mtt;
1853
        $letter_params{message_transport_type} = $mtt;
1853
        my $letter =  C4::Letters::GetPreparedLetter ( %letter_params );
1854
        my $letter = C4::Letters::GetPreparedLetter(%letter_params);
1854
        unless ($letter) {
1855
        unless ($letter) {
1855
            warn "Could not find a letter called '$letter_params{'letter_code'}' for $mtt in the 'reserves' module";
1856
            warn "Could not find a letter called '$letter_params{'letter_code'}' for $mtt in the 'reserves' module";
1856
            return;
1857
            return;
1857
        }
1858
        }
1858
1859
1859
        C4::Letters::EnqueueLetter( {
1860
        unless ($wants_digest) {
1860
            letter => $letter,
1861
            C4::Letters::EnqueueLetter(
1861
            borrowernumber => $borrowernumber,
1862
                {
1862
            from_address => $from_email_address,
1863
                    letter                 => $letter,
1863
            message_transport_type => $mtt,
1864
                    borrowernumber         => $borrowernumber,
1864
        } );
1865
                    from_address           => $from_email_address,
1866
                    message_transport_type => $mtt,
1867
                }
1868
            );
1869
        } else {
1870
            C4::Context->dbh->do(q|LOCK TABLE message_queue READ|)  unless $do_not_lock;
1871
            C4::Context->dbh->do(q|LOCK TABLE message_queue WRITE|) unless $do_not_lock;
1872
            my $message = C4::Message->find_last_message( $patron->unblessed, $letter_code, $mtt );
1873
            unless ($message) {
1874
                C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock;
1875
                C4::Message->enqueue( $letter, $patron, $mtt );
1876
            } else {
1877
                $message->append($letter);
1878
                $message->update;
1879
            }
1880
            C4::Context->dbh->do(q|UNLOCK TABLES|) unless $do_not_lock;
1881
        }
1865
    };
1882
    };
1866
1883
1867
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
1884
    while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) {
Lines 1872-1878 sub _koha_notify_reserve { Link Here
1872
            or ( $mtt eq 'phone' and not $patron->phone ) # No phone number to call
1889
            or ( $mtt eq 'phone' and not $patron->phone ) # No phone number to call
1873
        );
1890
        );
1874
1891
1875
        &$send_notification($mtt, $letter_code);
1892
        &$send_notification($mtt, $letter_code, $messagingprefs->{wants_digest});
1876
        $notification_sent++;
1893
        $notification_sent++;
1877
    }
1894
    }
1878
    #Making sure that a print notification is sent if no other transport types can be utilized.
1895
    #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 1791-1796 tables: Link Here
1791
            - "<<branches.branchaddress3>>"
1791
            - "<<branches.branchaddress3>>"
1792
            - "<<branches.branchcity>> <<branches.branchzip>>"
1792
            - "<<branches.branchcity>> <<branches.branchzip>>"
1793
1793
1794
        - module: reserves
1795
          code: HOLDDGST
1796
          branchcode: ""
1797
          name: "Hold(s) available for pickup"
1798
          is_html: 0
1799
          title: "Hold(s) available for pickup"
1800
          message_transport_type: email
1801
          lang: default
1802
          content:
1803
            - "You have one or more holds available for pickup:"
1804
            - "----"
1805
            - "Title: [% hold.biblio.title %]"
1806
            - "Author: [% hold.biblio.author %]"
1807
            - "Copy: [% hold.item.copynumber %]"
1808
            - "Waiting since: [% hold.waitingdate %]"
1809
            - "Waitng at: [% hold.branch.branchname %]"
1810
            - "[% hold.branch.branchaddress1 %]"
1811
            - "[% hold.branch.branchaddress2 %]"
1812
            - "[% hold.branch.branchaddress3 %]"
1813
            - "[% hold.branch.branchcity %] [% hold.branch.branchzip %]"
1814
            - "----"
1815
            - "Thank you!"
1816
1794
        - module: reserves
1817
        - module: reserves
1795
          code: HOLD
1818
          code: HOLD
1796
          branchcode: ""
1819
          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 (-2 / +104 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 76;
20
use Test::More tests => 79;
21
use Test::MockModule;
21
use Test::MockModule;
22
use Test::Warn;
22
use Test::Warn;
23
23
Lines 1813-1815 subtest '_Findgroupreserves' => sub { Link Here
1813
1813
1814
    $schema->txn_rollback;
1814
    $schema->txn_rollback;
1815
};
1815
};
1816
- 
1816
1817
subtest 'HOLDDGST tests' => sub {
1818
1819
    plan tests => 2;
1820
    $schema->storage->txn_begin;
1821
1822
    my $branch = $builder->build_object({
1823
        class => 'Koha::Libraries',
1824
        value => {
1825
            branchemail => 'branch@e.mail',
1826
            branchreplyto => 'branch@reply.to',
1827
            pickup_location => 1
1828
        }
1829
    });
1830
    my $item = $builder->build_sample_item({
1831
        homebranch => $branch->branchcode,
1832
        holdingbranch => $branch->branchcode
1833
    });
1834
    my $item2 = $builder->build_sample_item({
1835
        homebranch => $branch->branchcode,
1836
        holdingbranch => $branch->branchcode
1837
    });
1838
1839
    my $wants_hold_and_email = {
1840
        wants_digest => '1',
1841
        transports => {
1842
            sms => 'HOLDDGST',
1843
            email => 'HOLDDGST',
1844
            },
1845
        letter_code => 'HOLDDGST'
1846
    };
1847
1848
    my $mp = Test::MockModule->new( 'C4::Members::Messaging' );
1849
1850
    $mp->mock("GetMessagingPreferences",$wants_hold_and_email);
1851
1852
    $dbh->do('DELETE FROM letter');
1853
1854
    my $email_hold_notice = $builder->build({
1855
            source => 'Letter',
1856
            value => {
1857
                message_transport_type => 'email',
1858
                branchcode => '',
1859
                code => 'HOLDDGST',
1860
                module => 'reserves',
1861
                lang => 'default',
1862
            }
1863
        });
1864
1865
    my $sms_hold_notice = $builder->build({
1866
            source => 'Letter',
1867
            value => {
1868
                message_transport_type => 'sms',
1869
                branchcode => '',
1870
                code => 'HOLDDGST',
1871
                module => 'reserves',
1872
                lang=>'default',
1873
            }
1874
        });
1875
1876
    my $hold_borrower = $builder->build({
1877
            source => 'Borrower',
1878
            value => {
1879
                smsalertnumber=>'5555555551',
1880
                email=>'a@c.com',
1881
            }
1882
        })->{borrowernumber};
1883
1884
    C4::Reserves::AddReserve(
1885
        {
1886
            branchcode     => $item->homebranch,
1887
            borrowernumber => $hold_borrower,
1888
            biblionumber   => $item->biblionumber,
1889
        }
1890
    );
1891
1892
    C4::Reserves::AddReserve(
1893
        {
1894
            branchcode     => $item2->homebranch,
1895
            borrowernumber => $hold_borrower,
1896
            biblionumber   => $item2->biblionumber,
1897
        }
1898
    );
1899
1900
    ModReserveAffect($item->itemnumber, $hold_borrower, 0);
1901
    ModReserveAffect($item2->itemnumber, $hold_borrower, 0);
1902
1903
    my $sms_count = $schema->resultset('MessageQueue')->search({
1904
            letter_code     => 'HOLDDGST',
1905
            message_transport_type => 'sms',
1906
            borrowernumber => $hold_borrower,
1907
        })->count;
1908
    is($sms_count, 1 ,"Only one sms hold digest message created for two holds");
1909
1910
    my $email_count = $schema->resultset('MessageQueue')->search({
1911
            letter_code     => 'HOLDDGST',
1912
            message_transport_type => 'email',
1913
            borrowernumber => $hold_borrower,
1914
        })->count;
1915
    is($email_count, 1 ,"Only one email hold digest message created for two holds");
1916
1917
    $schema->txn_rollback;
1918
};

Return to bug 8838