use Modern::Perl;
-use C4::Output;
-use C4::Auth;
-use C4::Utils::DataTables::Members;
-use C4::Search;
-use C4::Serials;
+use C4::Output qw( output_and_exit output_html_with_http_headers );
+use C4::Auth qw( get_template_and_user );
+use C4::Search qw( enabled_staff_search_views );
+use C4::Serials qw( CountSubscriptionFromBiblionumber );
use Koha::Biblios;
+use Koha::Logger;
use Koha::Patrons;
use Koha::ArticleRequests;
-my $cgi = new CGI;
+use Scalar::Util qw( blessed );
+use Try::Tiny;
+
+my $cgi = CGI->new;
my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user(
{
template_name => "circ/request-article.tt",
query => $cgi,
type => "intranet",
- authnotrequired => 0,
flagsrequired => { circulate => 'circulate_remaining_permissions' },
}
);
my $action = $cgi->param('action') || q{};
my $biblionumber = $cgi->param('biblionumber');
my $patron_cardnumber = $cgi->param('patron_cardnumber');
-my $patron_id = $cgi->param('patron_id');
+my $patron_id = $cgi->param('borrowernumber');
my $biblio = Koha::Biblios->find($biblionumber);
output_and_exit( $cgi, $cookie, $template, 'unknown_biblio')
my $pages = $cgi->param('pages') || undef;
my $chapters = $cgi->param('chapters') || undef;
my $patron_notes = $cgi->param('patron_notes') || undef;
-
- my $ar = Koha::ArticleRequest->new(
- {
- borrowernumber => $borrowernumber,
- biblionumber => $biblionumber,
- branchcode => $branchcode,
- itemnumber => $itemnumber,
- title => $title,
- author => $author,
- volume => $volume,
- issue => $issue,
- date => $date,
- pages => $pages,
- chapters => $chapters,
- patron_notes => $patron_notes,
+ my $format = $cgi->param('format') || undef;
+ my $toc_request = $cgi->param('toc_request');
+
+ try {
+ my $ar = Koha::ArticleRequest->new(
+ {
+ borrowernumber => $borrowernumber,
+ biblionumber => $biblionumber,
+ branchcode => $branchcode,
+ itemnumber => $itemnumber,
+ title => $title,
+ author => $author,
+ volume => $volume,
+ issue => $issue,
+ date => $date,
+ pages => $pages,
+ chapters => $chapters,
+ patron_notes => $patron_notes,
+ format => $format,
+ toc_request => $toc_request ? 1 : 0,
+ }
+ )->request;
+ } catch {
+ if ( blessed $_ and $_->isa('Koha::Exceptions::ArticleRequest::LimitReached') ) {
+ $template->param(
+ error_message => 'article_request_limit_reached'
+ );
+ }
+ else {
+ Koha::Logger->get->debug("Unhandled exception when placing an article request ($_)");
+ $template->param(
+ error_message => 'article_request_unhandled_exception'
+ );
}
- )->store();
+ };
+ undef $patron;
+}
+if ( $patron && !$patron->can_request_article ) {
+ $patron = undef;
+ $template->param( error_message => 'article_request_limit_reached' );
}
-if ( !$patron && $patron_cardnumber ) {
- my $results = C4::Utils::DataTables::Members::search(
- {
- searchmember => $patron_cardnumber,
- dt_params => { iDisplayLength => -1 },
- }
+if ( $patron ) {
+ $template->param(
+ article_request_fee => $patron->article_request_fee
);
-
- my $patrons = $results->{patrons};
-
- if ( scalar @$patrons == 1 ) {
- $patron = Koha::Patrons->find( $patrons->[0]->{borrowernumber} );
- }
- elsif (@$patrons) {
- $template->param( patrons => $patrons );
- }
- else {
- $template->param( no_patrons_found => $patron_cardnumber );
- }
}
$template->param(
patron => $patron,
subscriptionsnumber => CountSubscriptionFromBiblionumber($biblionumber),
C4::Search::enabled_staff_search_views,
+ attribute_type_codes => ( C4::Context->preference('ExtendedPatronAttributes')
+ ? [ Koha::Patron::Attribute::Types->search( { staff_searchable => 1 } )->get_column('code') ]
+ : []
+ ),
);
+
output_html_with_http_headers $cgi, $cookie, $template->output;