Bug 32437: Add Objects for ImportAuths
[koha-ffzg.git] / circ / request-article.pl
index 7c0877b..a972474 100755 (executable)
 
 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' },
     }
 );
@@ -43,7 +45,7 @@ my ( $template, $borrowernumber, $cookie, $flags ) = get_template_and_user(
 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')
@@ -67,45 +69,53 @@ if ( $action eq 'create' ) {
     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(
@@ -113,6 +123,11 @@ $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;