Bug 20640: Add backend migration support to ILL
authorMartin Renvoize <martin.renvoize@ptfs-europe.com>
Fri, 27 Apr 2018 07:48:53 +0000 (08:48 +0100)
committerNick Clemens <nick@bywatersolutions.com>
Mon, 28 Jan 2019 13:06:29 +0000 (13:06 +0000)
- Add core methods required to support the migration of ILL requests
between backends.

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Koha/Illrequest.pm
ill/ill-requests.pl
koha-tmpl/intranet-tmpl/prog/en/modules/ill/ill-requests.tt

index 0fa4e49..f9b4995 100644 (file)
@@ -527,6 +527,22 @@ sub mark_completed {
     };
 }
 
+=head2 backend_migrate
+
+Migrate a request from one backend to another.
+
+=cut
+
+sub backend_migrate {
+    my ( $self, $params ) = @_;
+
+    my $response = $self->_backend->migrate({
+            request    => $self,
+            other      => $params,
+        });
+    return $self->expandTemplate($response);
+}
+
 =head2 backend_confirm
 
 Confirm a request. The backend handles setting of mandatory fields in the commit stage:
index 28e8cc6..0a29785 100755 (executable)
@@ -86,6 +86,28 @@ if ( $backends_available ) {
         );
         handle_commit_maybe($backend_result, $request);
 
+    } elsif ( $op eq 'migrate' ) {
+        # We're in the process of migrating a request
+        my $request = Koha::Illrequests->find($params->{illrequest_id});
+        my $backend_result;
+        if ( $params->{backend} ) {
+            my $new_request = Koha::Illrequest->new->load_backend( $params->{backend} );
+            $backend_result = $new_request->backend_migrate($params);
+            $template->param(
+                whole   => $backend_result,
+                request => $new_request
+            );
+        }
+        else {
+            $request = Koha::Illrequests->find( $params->{illrequest_id} );
+            $backend_result = $request->backend_migrate($params);
+            $template->param(
+                whole   => $backend_result,
+                request => $request
+            );
+        }
+        handle_commit_maybe( $backend_result, $request );
+
     } elsif ( $op eq 'confirm' ) {
         # Backend 'confirm' method
         # confirm requires a specific request, so first, find it.
@@ -287,16 +309,29 @@ output_html_with_http_headers( $cgi, $cookie, $template->output );
 
 sub handle_commit_maybe {
     my ( $backend_result, $request ) = @_;
+
     # We need to special case 'commit'
     if ( $backend_result->{stage} eq 'commit' ) {
         if ( $backend_result->{next} eq 'illview' ) {
+
             # Redirect to a view of the newly created request
-            print $cgi->redirect(
-                '/cgi-bin/koha/ill/ill-requests.pl?method=illview&illrequest_id='.
-                $request->id
-            );
+            print $cgi->redirect( '/cgi-bin/koha/ill/ill-requests.pl'
+                  . '?method=illview'
+                  . '&illrequest_id='
+                  . $request->id );
             exit;
-        } else {
+        }
+        elsif ( $backend_result->{next} eq 'emigrate' ) {
+
+            # Redirect to a view of the newly created request
+            print $cgi->redirect( '/cgi-bin/koha/ill/ill-requests.pl'
+                  . '?method=migrate'
+                  . '&stage=emigrate'
+                  . '&illrequest_id='
+                  . $request->id );
+            exit;
+        }
+        else {
             # Redirect to a requests list view
             redirect_to_list();
         }
index a004540..5f707fe 100644 (file)
                         Edit request
                         </a>
                         [% FOREACH action IN request.available_actions %]
-                            [% IF action.method != 0 %]
-                                <a title="[% action.ui_method_name | html %]" id="ill-toolbar-btn-[% action.id | lower | html %]" class="btn btn-sm btn-default" href="/cgi-bin/koha/ill/ill-requests.pl?method=[% action.method | html %]&amp;illrequest_id=[% request.illrequest_id | html %]">
+                            [% IF action.method == 'migrate' %]
+                                [% IF backends.size > 2 %]
+                                    <div class="dropdown btn-group">
+                                        <button class="btn btn-sm btn-default dropdown-toggle" type="button" id="ill-migrate-dropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
+                                            <i class="fa [% action.ui_method_icon | html %]"></i> [% action.ui_method_name | html %] <span class="caret"></span>
+                                        </button>
+                                        <ul class="dropdown-menu" aria-labelledby="ill-migrate-dropdown">
+                                            [% FOREACH backend IN backends %]
+                                                [% IF backend != request.backend %]
+                                                    <li><a href="/cgi-bin/koha/ill/ill-requests.pl?method=[% action.method | uri %]&amp;illrequest_id=[% request.illrequest_id | uri %]&amp;backend=[% backend | uri %]">[% backend | html %]</a></li>
+                                                [% END %]
+                                            [% END %]
+                                        </ul>
+                                    </div>
+                                [% ELSIF backends.size == 2 %]
+                                    [% FOREACH backend IN backends %]
+                                        [% IF backend != request.backend %]
+                                            <a title="[% action.ui_method_name | html %]" id="ill-toolbar-btn-[% action.id | lower | html %]" class="btn btn-sm btn-default" href="/cgi-bin/koha/ill/ill-requests.pl?method=[% action.method | uri %]&amp;illrequest_id=[% request.illrequest_id | uri %]">
+                                            <span class="fa [% action.ui_method_icon | html %]"></span>
+                                            [% action.ui_method_name | html %]
+                                            </a>
+                                        [% END %]
+                                    [% END %]
+                                [% END %]
+                            [% ELSIF action.method != 0 %]
+                                <a title="[% action.ui_method_name | html %]" id="ill-toolbar-btn-[% action.id | lower | html %]" class="btn btn-sm btn-default" href="/cgi-bin/koha/ill/ill-requests.pl?method=[% action.method | uri %]&amp;illrequest_id=[% request.illrequest_id | uri %]">
                                 <span class="fa [% action.ui_method_icon | html %]"></span>
                                 [% action.ui_method_name | html %]
                                 </a>