Bug 16330: (QA follow-up) Repect guidelines on plurals Patron > Patrons
[koha_ffzg] / Koha / Illrequest.pm
index 12ef9aa..99b97bd 100644 (file)
@@ -18,17 +18,19 @@ package Koha::Illrequest;
 # Koha; if not, write to the Free Software Foundation, Inc., 51 Franklin
 # Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-use Modern::Perl;
+use Modern::Perl;
 
 use Clone 'clone';
-use File::Basename qw/basename/;
+use File::Basename qw( basename );
+use Encode qw( encode );
+use Mail::Sendmail;
+use Try::Tiny;
+
 use Koha::Database;
 use Koha::Email;
-use Koha::Illrequest;
+use Koha::Exceptions::Ill;
 use Koha::Illrequestattributes;
 use Koha::Patron;
-use Mail::Sendmail;
-use Try::Tiny;
 
 use base qw(Koha::Object);
 
@@ -59,6 +61,8 @@ TODO:
 
 All methods should return a hashref in the following format:
 
+=over
+
 =item * error
 
 This should be set to 1 if an error was encountered.
@@ -75,7 +79,7 @@ The message is a free text field that can be passed on to the end user.
 
 The value returned by the method.
 
-=over
+=back
 
 =head2 Interface Status Messages
 
@@ -100,18 +104,14 @@ the API.
 The interface's request method returned saying that the desired item is not
 available for request.
 
-=head2 Class Methods
+=back
 
-=cut
+=head2 Class methods
 
-=head3 type
+=head3 illrequestattributes
 
 =cut
 
-sub _type {
-    return 'Illrequest';
-}
-
 sub illrequestattributes {
     my ( $self ) = @_;
     return Koha::Illrequestattributes->_new_from_dbic(
@@ -119,6 +119,10 @@ sub illrequestattributes {
     );
 }
 
+=head3 patron
+
+=cut
+
 sub patron {
     my ( $self ) = @_;
     return Koha::Patron->_new_from_dbic(
@@ -126,19 +130,32 @@ sub patron {
     );
 }
 
+=head3 load_backend
+
+Require "Base.pm" from the relevant ILL backend.
+
+=cut
+
 sub load_backend {
     my ( $self, $backend_id ) = @_;
 
     my @raw = qw/Koha Illbackends/; # Base Path
 
     my $backend_name = $backend_id || $self->backend;
-    $location = join "/", @raw, $backend_name, "Base.pm"; # File to load
-    $backend_class = join "::", @raw, $backend_name, "Base"; # Package name
+
+    unless ( defined $backend_name && $backend_name ne '' ) {
+        Koha::Exceptions::Ill::InvalidBackendId->throw(
+            "An invalid backend ID was requested ('')");
+    }
+
+    my $location = join "/", @raw, $backend_name, "Base.pm";    # File to load
+    my $backend_class = join "::", @raw, $backend_name, "Base"; # Package name
     require $location;
     $self->{_my_backend} = $backend_class->new({ config => $self->_config });
     return $self;
 }
 
+
 =head3 _backend
 
     my $backend = $abstract->_backend($new_backend);
@@ -350,7 +367,7 @@ sub _status_graph_union {
     my $status_graph = clone($core_status_graph);
 
     foreach my $backend_status_key ( keys %{$backend_status_graph} ) {
-        $backend_status = $backend_status_graph->{$backend_status_key};
+        my $backend_status = $backend_status_graph->{$backend_status_key};
         # Add to new status graph
         $status_graph->{$backend_status_key} = $backend_status;
         # Update all core methods' next_actions.
@@ -453,15 +470,24 @@ sub custom_capability {
     return 0;
 }
 
+=head3 available_backends
+
+Return a list of available backends.
+
+=cut
+
 sub available_backends {
     my ( $self ) = @_;
-    my $backend_dir = $self->_config->backend_dir;
-    my @backends = ();
-    @backends = <$backend_dir/*> if ( $backend_dir );
-    @backends = map { basename($_) } @backends;
-    return \@backends;
+    my $backends = $self->_config->available_backends;
+    return $backends;
 }
 
+=head3 available_actions
+
+Return a list of available actions.
+
+=cut
+
 sub available_actions {
     my ( $self ) = @_;
     my $current_action = $self->capabilities($self->status);
@@ -470,6 +496,12 @@ sub available_actions {
     return \@available_actions;
 }
 
+=head3 mark_completed
+
+Mark a request as completed (status = COMP).
+
+=cut
+
 sub mark_completed {
     my ( $self ) = @_;
     $self->status('COMP')->store;
@@ -483,12 +515,23 @@ sub mark_completed {
     };
 }
 
+=head2 backend_confirm
+
+Confirm a request. The backend handles setting of mandatory fields in the commit stage:
+
+=over
+
+=item * orderid
+
+=item * accessurl, cost (if available).
+
+=back
+
+=cut
+
 sub backend_confirm {
     my ( $self, $params ) = @_;
 
-    # The backend handles setting of mandatory fields in the commit stage:
-    # - orderid
-    # - accessurl, cost (if available).
     my $response = $self->_backend->confirm({
             request    => $self,
             other      => $params,
@@ -496,6 +539,10 @@ sub backend_confirm {
     return $self->expandTemplate($response);
 }
 
+=head3 backend_update_status
+
+=cut
+
 sub backend_update_status {
     my ( $self, $params ) = @_;
     return $self->expandTemplate($self->_backend->update_status($params));
@@ -565,7 +612,8 @@ sub backend_create {
                 backend => $self->_backend->name
             }
         };
-    } elsif ( $params->{stage} eq 'copyrightclearance' ) {
+    } elsif (     defined $params->{stage}
+               && $params->{stage} eq 'copyrightclearance' ) {
         $params->{stage} = 'init';
     }
 
@@ -644,9 +692,13 @@ sub getLimits {
     my ( $self, $params ) = @_;
     my $limits = $self->_config->getLimitRules($params->{type});
 
-    return $limits->{$params->{value}}
-        || $limits->{default}
-        || { count => -1, method => 'active' };
+    if (     defined $params->{value}
+          && defined $limits->{$params->{value}} ) {
+            return $limits->{$params->{value}};
+    }
+    else {
+        return $limits->{default} || { count => -1, method => 'active' };
+    }
 }
 
 =head3 getPrefix
@@ -747,7 +799,7 @@ sub _limit_counter {
     } else {                    # assume 'active'
         # XXX: This status list is ugly. There should be a method in config
         # to return these.
-        $where = { status => { -not_in => [ 'QUEUED', 'COMP' ] } };
+        my $where = { status => { -not_in => [ 'QUEUED', 'COMP' ] } };
         $resultset = Koha::Illrequests->search({ %{$target}, %{$where} });
     }
 
@@ -838,14 +890,20 @@ EOF
     } elsif ( 'draft' eq $params->{stage} ) {
         # Create the to header
         my $to = $params->{partners};
-        $to =~ s/^\x00//;       # Strip leading NULLs
-        $to =~ s/\x00/; /;      # Replace others with '; '
-        die "No target email addresses found. Either select at least one partner or check your ILL partner library records." if ( !$to );
+        if ( defined $to ) {
+            $to =~ s/^\x00//;       # Strip leading NULLs
+            $to =~ s/\x00/; /;      # Replace others with '; '
+        }
+        Koha::Exceptions::Ill::NoTargetEmail->throw(
+            "No target email addresses found. Either select at least one partner or check your ILL partner library records.")
+          if ( !$to );
         # Create the from, replyto and sender headers
         my $from = $branch->branchemail;
         my $replyto = $branch->branchreplyto || $from;
-        die "Your branch has no email address. Please set it."
-            if ( !$from );
+        Koha::Exceptions::Ill::NoLibraryEmail->throw(
+            "Your library has no usable email address. Please set it.")
+          if ( !$from );
+
         # Create the email
         my $message = Koha::Email->new;
         my %mail = $message->create_message_headers(
@@ -926,6 +984,60 @@ sub _censor {
     return $params;
 }
 
+=head3 TO_JSON
+
+    $json = $illrequest->TO_JSON
+
+Overloaded I<TO_JSON> method that takes care of inserting calculated values
+into the unblessed representation of the object.
+
+=cut
+
+sub TO_JSON {
+    my ( $self, $embed ) = @_;
+
+    my $object = $self->SUPER::TO_JSON();
+    $object->{id_prefix} = $self->id_prefix;
+
+    if ( scalar (keys %$embed) ) {
+        # Augment the request response with patron details if appropriate
+        if ( $embed->{patron} ) {
+            my $patron = $self->patron;
+            $object->{patron} = {
+                firstname  => $patron->firstname,
+                surname    => $patron->surname,
+                cardnumber => $patron->cardnumber
+            };
+        }
+        # Augment the request response with metadata details if appropriate
+        if ( $embed->{metadata} ) {
+            $object->{metadata} = $self->metadata;
+        }
+        # Augment the request response with status details if appropriate
+        if ( $embed->{capabilities} ) {
+            $object->{capabilities} = $self->capabilities;
+        }
+        # Augment the request response with library details if appropriate
+        if ( $embed->{library} ) {
+            $object->{library} = Koha::Libraries->find(
+                $self->branchcode
+            )->TO_JSON;
+        }
+    }
+
+    return $object;
+}
+
+=head2 Internal methods
+
+=head3 _type
+
+=cut
+
+sub _type {
+    return 'Illrequest';
+}
+
 =head1 AUTHOR
 
 Alex Sassmannshausen <alex.sassmannshausen@ptfs-europe.com>