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

(-)a/Koha/ArticleRequest.pm (+5 lines)
Lines 27-32 use Koha::Items; Link Here
27
use Koha::Libraries;
27
use Koha::Libraries;
28
use Koha::DateUtils qw( dt_from_string );
28
use Koha::DateUtils qw( dt_from_string );
29
use Koha::ArticleRequest::Status;
29
use Koha::ArticleRequest::Status;
30
use Koha::Exceptions::ArticleRequest;
30
31
31
use base qw(Koha::Object);
32
use base qw(Koha::Object);
32
33
Lines 60-65 sub request { Link Here
60
sub set_pending {
61
sub set_pending {
61
    my ($self) = @_;
62
    my ($self) = @_;
62
63
64
    Koha::Exceptions::ArticleRequest::LimitReached->throw(
65
        error => 'Patron cannot request more articles for today'
66
    ) unless $self->borrower->can_request_article;
67
63
    $self->status(Koha::ArticleRequest::Status::Pending);
68
    $self->status(Koha::ArticleRequest::Status::Pending);
64
    $self->SUPER::store();
69
    $self->SUPER::store();
65
    $self->notify();
70
    $self->notify();
(-)a/Koha/Exceptions/ArticleRequest.pm (+47 lines)
Line 0 Link Here
1
package Koha::Exceptions::ArticleRequest;
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
20
use Exception::Class (
21
    'Koha::Exceptions::ArticleRequest' => {
22
        description => 'Something went wrong!',
23
    },
24
    'Koha::Exceptions::ArticleRequest::LimitReached' => {
25
        isa         => 'Koha::Exceptions::ArticleRequest',
26
        description => 'Article request limit was reached'
27
    },
28
);
29
30
=head1 NAME
31
32
Koha::Exceptions::ArticleRequest - Base class for ArticleRequest exceptions
33
34
=head1 Exceptions
35
36
=head2 Koha::Exceptions::ArticleRequest
37
38
Generic ArticleRequest exception
39
40
=head2 Koha::Exceptions::ArticleRequest::IsNotCredit
41
42
Exception to be used when an action on an account line requires it to be a
43
credit and it isn't.
44
45
=cut
46
47
1;
(-)a/Koha/Patron.pm (+26 lines)
Lines 958-963 sub move_to_deleted { Link Here
958
    return Koha::Database->new->schema->resultset('Deletedborrower')->create($patron_infos);
958
    return Koha::Database->new->schema->resultset('Deletedborrower')->create($patron_infos);
959
}
959
}
960
960
961
=head3 can_request_article
962
963
my $can_request = $borrower->can_request_article
964
965
Returns true if patron can request articles
966
967
=cut
968
969
sub can_request_article {
970
    my ($self) = @_;
971
    my $limit = $self->category->article_request_limit;
972
973
    return 1 if !$limit;
974
975
    my $date = dt_from_string;
976
    my $count = Koha::ArticleRequests->search({
977
            borrowernumber => $self->borrowernumber,
978
            status => {'!=' => 'CANCELED'},
979
            created_on => {
980
                '>=' => $date->date.' 00:00:00',
981
                '<=' => $date->date.' 23:59:59'
982
            }
983
        })->count;
984
    return $count < $limit ? 1 : 0;
985
}
986
961
=head3 article_requests
987
=head3 article_requests
962
988
963
my @requests = $borrower->article_requests();
989
my @requests = $borrower->article_requests();
(-)a/admin/categories.pl (-89 / +101 lines)
Lines 46-63 my ( $template, $loggedinuser, $cookie ) = get_template_and_user( Link Here
46
    }
46
    }
47
);
47
);
48
48
49
if ( $op eq 'add_form' ) {
49
if ( $op eq 'add_validate' ) {
50
51
    $template->param(
52
        category => scalar Koha::Patron::Categories->find($categorycode),
53
    );
54
55
    if ( C4::Context->preference('EnhancedMessagingPreferences') ) {
56
        C4::Form::MessagingPreferences::set_form_values(
57
            { categorycode => $categorycode }, $template );
58
    }
59
}
60
elsif ( $op eq 'add_validate' ) {
61
50
62
    my $categorycode = $input->param('categorycode');
51
    my $categorycode = $input->param('categorycode');
63
    my $description = $input->param('description');
52
    my $description = $input->param('description');
Lines 78-83 elsif ( $op eq 'add_validate' ) { Link Here
78
    my $exclude_from_local_holds_priority = $input->param('exclude_from_local_holds_priority');
67
    my $exclude_from_local_holds_priority = $input->param('exclude_from_local_holds_priority');
79
    my $min_password_length = $input->param('min_password_length');
68
    my $min_password_length = $input->param('min_password_length');
80
    my $require_strong_password = $input->param('require_strong_password');
69
    my $require_strong_password = $input->param('require_strong_password');
70
    my $article_request_limit = $input->param('article_request_limit');
81
    my @branches = grep { $_ ne q{} } $input->multi_param('branches');
71
    my @branches = grep { $_ ne q{} } $input->multi_param('branches');
82
72
83
    $reset_password = undef if $reset_password eq -1;
73
    $reset_password = undef if $reset_password eq -1;
Lines 87-174 elsif ( $op eq 'add_validate' ) { Link Here
87
77
88
    my $is_a_modif = $input->param("is_a_modif");
78
    my $is_a_modif = $input->param("is_a_modif");
89
79
90
    if ($enrolmentperioddate) {
80
    if ($article_request_limit ne '' && $article_request_limit !~ /\d+/) {
91
        $enrolmentperioddate = output_pref(
81
        push @messages, {type => 'error', code => 'article_request_numeric_limit' };
92
            {
82
        $op = 'add_form';
93
                dt         => dt_from_string($enrolmentperioddate),
83
    } elsif ($article_request_limit ne '' && $article_request_limit < 0) {
94
                dateformat => 'iso',
84
        push @messages, {type => 'error', code => 'article_request_negative_limit' };
95
                dateonly   => 1,
85
        $op = 'add_form';
96
            }
86
    } else {
97
        );
87
        if ($enrolmentperioddate) {
98
    }
88
            $enrolmentperioddate = output_pref(
89
                {
90
                    dt         => dt_from_string($enrolmentperioddate),
91
                    dateformat => 'iso',
92
                    dateonly   => 1,
93
                }
94
            );
95
        }
99
96
100
    if ($is_a_modif) {
97
        if ($is_a_modif) {
101
        my $category = Koha::Patron::Categories->find( $categorycode );
98
            my $category = Koha::Patron::Categories->find( $categorycode );
102
        $category->categorycode($categorycode);
99
            $category->categorycode($categorycode);
103
        $category->description($description);
100
            $category->description($description);
104
        $category->enrolmentperiod($enrolmentperiod);
101
            $category->enrolmentperiod($enrolmentperiod);
105
        $category->enrolmentperioddate($enrolmentperioddate);
102
            $category->enrolmentperioddate($enrolmentperioddate);
106
        $category->upperagelimit($upperagelimit);
103
            $category->upperagelimit($upperagelimit);
107
        $category->dateofbirthrequired($dateofbirthrequired);
104
            $category->dateofbirthrequired($dateofbirthrequired);
108
        $category->enrolmentfee($enrolmentfee);
105
            $category->enrolmentfee($enrolmentfee);
109
        $category->reservefee($reservefee);
106
            $category->reservefee($reservefee);
110
        $category->hidelostitems($hidelostitems);
107
            $category->hidelostitems($hidelostitems);
111
        $category->overduenoticerequired($overduenoticerequired);
108
            $category->overduenoticerequired($overduenoticerequired);
112
        $category->category_type($category_type);
109
            $category->category_type($category_type);
113
        $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions);
110
            $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions);
114
        $category->checkprevcheckout($checkPrevCheckout);
111
            $category->checkprevcheckout($checkPrevCheckout);
115
        $category->default_privacy($default_privacy);
112
            $category->default_privacy($default_privacy);
116
        $category->reset_password($reset_password);
113
            $category->reset_password($reset_password);
117
        $category->change_password($change_password);
114
            $category->change_password($change_password);
118
        $category->exclude_from_local_holds_priority($exclude_from_local_holds_priority);
115
            $category->exclude_from_local_holds_priority($exclude_from_local_holds_priority);
119
        $category->min_password_length($min_password_length);
116
            $category->min_password_length($min_password_length);
120
        $category->require_strong_password($require_strong_password);
117
            $category->require_strong_password($require_strong_password);
121
        eval {
118
            $category->article_request_limit($article_request_limit);
122
            $category->store;
119
            eval {
123
            $category->replace_library_limits( \@branches );
120
                $category->store;
124
        };
121
                $category->replace_library_limits( \@branches );
125
        if ( $@ ) {
122
            };
126
            push @messages, {type => 'error', code => 'error_on_update' };
123
            if ( $@ ) {
127
        } else {
124
                push @messages, {type => 'error', code => 'error_on_update' };
128
            push @messages, { type => 'message', code => 'success_on_update' };
125
            } else {
126
                push @messages, { type => 'message', code => 'success_on_update' };
127
            }
129
        }
128
        }
130
    }
129
        else {
131
    else {
130
            my $category = Koha::Patron::Category->new({
132
        my $category = Koha::Patron::Category->new({
131
                categorycode => $categorycode,
133
            categorycode => $categorycode,
132
                description => $description,
134
            description => $description,
133
                enrolmentperiod => $enrolmentperiod,
135
            enrolmentperiod => $enrolmentperiod,
134
                enrolmentperioddate => $enrolmentperioddate,
136
            enrolmentperioddate => $enrolmentperioddate,
135
                upperagelimit => $upperagelimit,
137
            upperagelimit => $upperagelimit,
136
                dateofbirthrequired => $dateofbirthrequired,
138
            dateofbirthrequired => $dateofbirthrequired,
137
                enrolmentfee => $enrolmentfee,
139
            enrolmentfee => $enrolmentfee,
138
                reservefee => $reservefee,
140
            reservefee => $reservefee,
139
                hidelostitems => $hidelostitems,
141
            hidelostitems => $hidelostitems,
140
                overduenoticerequired => $overduenoticerequired,
142
            overduenoticerequired => $overduenoticerequired,
141
                category_type => $category_type,
143
            category_type => $category_type,
142
                BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions,
144
            BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions,
143
                checkprevcheckout => $checkPrevCheckout,
145
            checkprevcheckout => $checkPrevCheckout,
144
                default_privacy => $default_privacy,
146
            default_privacy => $default_privacy,
145
                reset_password => $reset_password,
147
            reset_password => $reset_password,
146
                change_password => $change_password,
148
            change_password => $change_password,
147
                exclude_from_local_holds_priority => $exclude_from_local_holds_priority,
149
            exclude_from_local_holds_priority => $exclude_from_local_holds_priority,
148
                min_password_length => $min_password_length,
150
            min_password_length => $min_password_length,
149
                require_strong_password => $require_strong_password,
151
            require_strong_password => $require_strong_password,
150
                article_request_limit => $article_request_limit
152
        });
151
            });
153
        eval {
152
            eval {
154
            $category->store;
153
                $category->store;
155
            $category->replace_library_limits( \@branches );
154
                $category->replace_library_limits( \@branches );
156
        };
155
            };
157
156
158
        if ( $@ ) {
157
            if ( $@ ) {
159
            push @messages, { type => 'error', code => 'error_on_insert' };
158
                push @messages, { type => 'error', code => 'error_on_insert' };
160
        } else {
159
            } else {
161
            push @messages, { type => 'message', code => 'success_on_insert' };
160
                push @messages, { type => 'message', code => 'success_on_insert' };
161
            }
162
        }
162
        }
163
    }
164
163
165
    if ( C4::Context->preference('EnhancedMessagingPreferences') ) {
164
        if ( C4::Context->preference('EnhancedMessagingPreferences') ) {
166
        C4::Form::MessagingPreferences::handle_form_action( $input,
165
            C4::Form::MessagingPreferences::handle_form_action( $input,
167
            { categorycode => scalar $input->param('categorycode') }, $template );
166
                { categorycode => scalar $input->param('categorycode') }, $template );
168
    }
167
        }
169
168
170
    $searchfield = q||;
169
        $searchfield = q||;
171
    $op = 'list';
170
        $op = 'list';
171
    }
172
}
172
}
173
elsif ( $op eq 'delete_confirm' ) {
173
elsif ( $op eq 'delete_confirm' ) {
174
174
Lines 199-204 elsif ( $op eq 'delete_confirmed' ) { Link Here
199
    $op = 'list';
199
    $op = 'list';
200
}
200
}
201
201
202
if ( $op eq 'add_form' ) {
203
204
    $template->param(
205
        category => scalar Koha::Patron::Categories->find($categorycode),
206
    );
207
208
    if ( C4::Context->preference('EnhancedMessagingPreferences') ) {
209
        C4::Form::MessagingPreferences::set_form_values(
210
            { categorycode => $categorycode }, $template );
211
    }
212
}
213
202
if ( $op eq 'list' ) {
214
if ( $op eq 'list' ) {
203
    my $categories = Koha::Patron::Categories->search(
215
    my $categories = Koha::Patron::Categories->search(
204
        {
216
        {
(-)a/circ/request-article.pl (-17 / +31 lines)
Lines 27-32 use C4::Serials qw( CountSubscriptionFromBiblionumber ); Link Here
27
use Koha::Biblios;
27
use Koha::Biblios;
28
use Koha::Patrons;
28
use Koha::Patrons;
29
use Koha::ArticleRequests;
29
use Koha::ArticleRequests;
30
use Try::Tiny;
30
31
31
my $cgi = CGI->new;
32
my $cgi = CGI->new;
32
33
Lines 68-90 if ( $action eq 'create' ) { Link Here
68
    my $patron_notes = $cgi->param('patron_notes') || undef;
69
    my $patron_notes = $cgi->param('patron_notes') || undef;
69
    my $format       = $cgi->param('format')       || undef;
70
    my $format       = $cgi->param('format')       || undef;
70
71
71
    my $ar = Koha::ArticleRequest->new(
72
    try {
72
        {
73
        my $ar = Koha::ArticleRequest->new(
73
            borrowernumber => $borrowernumber,
74
            {
74
            biblionumber   => $biblionumber,
75
                borrowernumber => $borrowernumber,
75
            branchcode     => $branchcode,
76
                biblionumber   => $biblionumber,
76
            itemnumber     => $itemnumber,
77
                branchcode     => $branchcode,
77
            title          => $title,
78
                itemnumber     => $itemnumber,
78
            author         => $author,
79
                title          => $title,
79
            volume         => $volume,
80
                author         => $author,
80
            issue          => $issue,
81
                volume         => $volume,
81
            date           => $date,
82
                issue          => $issue,
82
            pages          => $pages,
83
                date           => $date,
83
            chapters       => $chapters,
84
                pages          => $pages,
84
            patron_notes   => $patron_notes,
85
                chapters       => $chapters,
85
            format         => $format,
86
                patron_notes   => $patron_notes,
86
        }
87
                format         => $format,
87
    )->store();
88
            }
89
        )->store();
90
    } catch {
91
        $template->param(
92
            error_message => $_->{message}
93
        );
94
    };
88
95
89
}
96
}
90
97
Lines 109-114 if ( !$patron && $patron_cardnumber ) { Link Here
109
    }
116
    }
110
}
117
}
111
118
119
if( $patron && !$patron->can_request_article) {
120
    $patron = undef;
121
    $template->param(
122
        error_message => 'Patron cannot request more articles for today'
123
    );
124
}
125
112
$template->param(
126
$template->param(
113
    biblio => $biblio,
127
    biblio => $biblio,
114
    patron => $patron,
128
    patron => $patron,
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt (+20 lines)
Lines 108-113 Link Here
108
            Patron category deleted successfully.
108
            Patron category deleted successfully.
109
        [% CASE 'already_exists' %]
109
        [% CASE 'already_exists' %]
110
            This patron category already exists.
110
            This patron category already exists.
111
        [% CASE 'article_request_negative_limit' %]
112
            Maximum article request limit cannot be negative.
113
        [% CASE 'article_request_numeric_limit' %]
114
            Maximum article request limit must be a positive number.
111
        [% CASE %]
115
        [% CASE %]
112
            [% m.code | html %]
116
            [% m.code | html %]
113
        [% END %]
117
        [% END %]
Lines 202-207 Link Here
202
                    <label for="reservefee">Hold fee: </label>
206
                    <label for="reservefee">Hold fee: </label>
203
                    <input type="text" name="reservefee" id="reservefee" size="6" value="[% category.reservefee | $Price on_editing => 1 %]" />
207
                    <input type="text" name="reservefee" id="reservefee" size="6" value="[% category.reservefee | $Price on_editing => 1 %]" />
204
                </li>
208
                </li>
209
                [% IF Koha.Preference('ArticleRequests') %]
210
                <li>
211
                    <label for="article_request_limit">Maximum article scan requests</label>
212
                    <input type="text" name="article_request_limit" id="article_request_limit" size="6" value="[% category.article_request_limit | html %]" /> per day
213
                </li>
214
                [% END %]
205
                <li>
215
                <li>
206
                    <label for="category_type" class="required">Category type: </label>
216
                    <label for="category_type" class="required">Category type: </label>
207
                    <select name="category_type" id="category_type">
217
                    <select name="category_type" id="category_type">
Lines 523-528 Link Here
523
                    <th scope="col">Overdue</th>
533
                    <th scope="col">Overdue</th>
524
                    <th scope="col">Lost items</th>
534
                    <th scope="col">Lost items</th>
525
                    <th scope="col">Hold fee</th>
535
                    <th scope="col">Hold fee</th>
536
                    [% IF Koha.Preference('ArticleRequests') %]
537
                    <th scope="col">Maximum request limit</th>
538
                    [% END %]
526
                    [% IF ( EnhancedMessagingPreferences ) %]
539
                    [% IF ( EnhancedMessagingPreferences ) %]
527
                    <th scope="col">Messaging</th>
540
                    <th scope="col">Messaging</th>
528
                    [% END %]
541
                    [% END %]
Lines 581-586 Link Here
581
                        [% ELSE %]
594
                        [% ELSE %]
582
                            <td>-</td>
595
                            <td>-</td>
583
                        [% END %]
596
                        [% END %]
597
                        [% IF Koha.Preference('ArticleRequests') %]
598
                            [% IF (category.article_request_limit > 0) %]
599
                                <td>[% category.article_request_limit | html %]</td>
600
                            [% ELSE %]
601
                                <td>-</td>
602
                            [% END %]
603
                        [% END %]
584
                        [% IF Koha.Preference('EnhancedMessagingPreferences') %]
604
                        [% IF Koha.Preference('EnhancedMessagingPreferences') %]
585
                            <td style="white-space: nowrap; font-size:80%;">
605
                            <td style="white-space: nowrap; font-size:80%;">
586
                                [% SET default_messaging = category.default_messaging %]
606
                                [% SET default_messaging = category.default_messaging %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/request-article.tt (+5 lines)
Lines 46-51 Link Here
46
            <main>
46
            <main>
47
47
48
                    <h1>Request article from [% INCLUDE 'biblio-title.inc' link = 1 %]</h1>
48
                    <h1>Request article from [% INCLUDE 'biblio-title.inc' link = 1 %]</h1>
49
                    [% IF error_message %]
50
                        <div class="dialog alert">
51
                            <p>[% error_message | html %]</p>
52
                        </div>
53
                    [% END %]
49
                    [% IF no_patrons_found %]
54
                    [% IF no_patrons_found %]
50
                        <div class="dialog alert">
55
                        <div class="dialog alert">
51
                            <h3>Patron not found</h3>
56
                            <h3>Patron not found</h3>
(-)a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-request-article.tt (-1 / +6 lines)
Lines 33-39 Link Here
33
    <div class="container-fluid maincontent">
33
    <div class="container-fluid maincontent">
34
        <div class="row">
34
        <div class="row">
35
            <div class="col">
35
            <div class="col">
36
                [% IF biblio.can_article_request( patron ) %]
36
                [% IF !error_message && biblio.can_article_request( patron ) %]
37
                    <h1>Place article request for [% biblio.title | html %]</h1>
37
                    <h1>Place article request for [% biblio.title | html %]</h1>
38
                    [% IF ( disclaimer && !action) %]
38
                    [% IF ( disclaimer && !action) %]
39
                        <div class="alert alert-warning">
39
                        <div class="alert alert-warning">
Lines 216-221 Link Here
216
                            <input type="submit" class="btn btn-primary" value="Place request" />
216
                            <input type="submit" class="btn btn-primary" value="Place request" />
217
                        </form>
217
                        </form>
218
                    [% END %]
218
                    [% END %]
219
                [% ELSIF error_message %]
220
                    <h1 class="title">[% biblio.title | html %]</h1>
221
                    <div class="alert alert-info">
222
                        [% error_message | html %]
223
                    </div>
219
                [% ELSE %]
224
                [% ELSE %]
220
                    <h1 class="title">[% biblio.title | html %]</h1>
225
                    <h1 class="title">[% biblio.title | html %]</h1>
221
                    <div class="alert alert-info">
226
                    <div class="alert alert-info">
(-)a/opac/opac-request-article.pl (-21 / +34 lines)
Lines 26-31 use C4::Output qw( output_html_with_http_headers ); Link Here
26
26
27
use Koha::Biblios;
27
use Koha::Biblios;
28
use Koha::Patrons;
28
use Koha::Patrons;
29
use Try::Tiny;
29
30
30
my $cgi = CGI->new;
31
my $cgi = CGI->new;
31
32
Lines 59-84 if ( $action eq 'create' ) { Link Here
59
    my $patron_notes = $cgi->param('patron_notes') || undef;
60
    my $patron_notes = $cgi->param('patron_notes') || undef;
60
    my $format       = $cgi->param('format')       || undef;
61
    my $format       = $cgi->param('format')       || undef;
61
62
62
    my $ar = Koha::ArticleRequest->new(
63
    try {
63
        {
64
        my $ar = Koha::ArticleRequest->new(
64
            borrowernumber => $borrowernumber,
65
            {
65
            biblionumber   => $biblionumber,
66
                borrowernumber => $borrowernumber,
66
            branchcode     => $branchcode,
67
                biblionumber   => $biblionumber,
67
            itemnumber     => $itemnumber,
68
                branchcode     => $branchcode,
68
            title          => $title,
69
                itemnumber     => $itemnumber,
69
            author         => $author,
70
                title          => $title,
70
            volume         => $volume,
71
                author         => $author,
71
            issue          => $issue,
72
                volume         => $volume,
72
            date           => $date,
73
                issue          => $issue,
73
            pages          => $pages,
74
                date           => $date,
74
            chapters       => $chapters,
75
                pages          => $pages,
75
            patron_notes   => $patron_notes,
76
                chapters       => $chapters,
76
            format         => $format,
77
                patron_notes   => $patron_notes,
77
        }
78
                format         => $format,
78
    )->store();
79
            }
79
80
        )->store();
80
    print $cgi->redirect("/cgi-bin/koha/opac-user.pl#opac-user-article-requests");
81
81
    exit;
82
        print $cgi->redirect("/cgi-bin/koha/opac-user.pl#opac-user-article-requests");
83
        exit;
84
    } catch {
85
        exit unless $_->[0] && $_->[0] eq 'EXIT';
86
        $template->param(
87
            error_message => $_->{message}
88
        );
89
    };
82
# Should we redirect?
90
# Should we redirect?
83
}
91
}
84
elsif ( !$action && C4::Context->preference('ArticleRequestsOpacHostRedirection') ) {
92
elsif ( !$action && C4::Context->preference('ArticleRequestsOpacHostRedirection') ) {
Lines 96-101 elsif ( !$action && C4::Context->preference('ArticleRequestsOpacHostRedirection' Link Here
96
104
97
my $patron = Koha::Patrons->find($borrowernumber);
105
my $patron = Koha::Patrons->find($borrowernumber);
98
106
107
if(!$patron->can_request_article) {
108
    $template->param(
109
        error_message => 'You cannot request more articles for today'
110
    );
111
}
112
99
$template->param(
113
$template->param(
100
    biblio => $biblio,
114
    biblio => $biblio,
101
    patron => $patron,
115
    patron => $patron,
102
- 

Return to bug 27945