Bug 14310 [QA Followup] - Deal with error conditions
authorKyle M Hall <kyle@bywatersolutions.com>
Fri, 30 Oct 2015 14:27:10 +0000 (10:27 -0400)
committerBrendan A Gallagher <brendan@bywatersolutions.com>
Wed, 27 Jan 2016 06:20:19 +0000 (06:20 +0000)
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Brendan A Gallagher <brendan@bywatersolutions.com>
koha-tmpl/intranet-tmpl/prog/en/includes/strings.inc
koha-tmpl/intranet-tmpl/prog/en/js/holds.js
svc/hold/resume
svc/hold/suspend

index 3995b6d..62af2a3 100644 (file)
@@ -35,5 +35,8 @@
     var SUSPEND = _("Suspend");
     var SUSPEND_HOLD_ON = _("Suspend hold on");
     var CLEAR_DATE_TO_SUSPEND_INDEFINITELY = _("Clear date to suspend indefinitely");
+    var SUSPEND_HOLD_ERROR_DATE = _("Unable to suspend hold, invalid date");
+    var SUSPEND_HOLD_ERROR_NOT_FOUND = _("Unable to suspend hold, hold not found");
+    var RESUME_HOLD_ERROR_NOT_FOUND = _("Unable to resume, hold not found");
 //]]>
 </script>
index a6c8ca6..c009ba7 100644 (file)
@@ -162,7 +162,14 @@ $(document).ready(function() {
                     var id = $(this).attr("id").replace("resume", "");
                     var hold = holds[id];
                     $.post('/cgi-bin/koha/svc/hold/resume', { "reserve_id": hold.reserve_id }, function( data ){
-                      holdsTable.api().ajax.reload();
+                      if ( data.success ) {
+                          holdsTable.api().ajax.reload();
+                      } else {
+                        if ( data.error == "HOLD_NOT_FOUND" ) {
+                            alert ( RESUME_HOLD_ERROR_NOT_FOUND );
+                            holdsTable.api().ajax.reload();
+                        }
+                      }
                     });
                 });
             });
@@ -209,7 +216,17 @@ $(document).ready(function() {
         e.preventDefault();
         $.post('/cgi-bin/koha/svc/hold/suspend', $('#suspend-modal-form').serialize(), function( data ){
           $('#suspend-modal').modal('hide');
-          holdsTable.api().ajax.reload();
+          if ( data.success ) {
+              holdsTable.api().ajax.reload();
+          } else {
+            if ( data.error == "INVALID_DATE" ) {
+                alert( SUSPEND_HOLD_ERROR_DATE );
+            }
+            else if ( data.error == "HOLD_NOT_FOUND" ) {
+                alert ( SUSPEND_HOLD_ERROR_NOT_FOUND );
+                holdsTable.api().ajax.reload();
+            }
+          }
         });
     });
 
index 03cd017..52f3508 100755 (executable)
@@ -38,11 +38,17 @@ if ( $auth_status ne "ok" ) {
 }
 
 binmode STDOUT, ":encoding(UTF-8)";
-print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
+print $input->header( -type => 'text/json', -charset => 'UTF-8' );
 
 my $reserve_id = $input->param('reserve_id');
 
 my $hold = Koha::Holds->find( $reserve_id );
+
+unless ( $hold ) {
+    print to_json( { success => 0, error => "HOLD_NOT_FOUND" } );
+    exit;
+}
+
 $hold->resume();
 
 print to_json( { success => !$hold->suspend() } );
index 880e41a..bd5382b 100755 (executable)
@@ -30,22 +30,33 @@ use Koha::Holds;
 my $input = new CGI;
 
 my ( $auth_status, $sessionID ) =
-  check_cookie_auth( $input->cookie('CGISESSID'),
-    { circulate => 'circulate_remaining_permissions' } );
+  check_cookie_auth( $input->cookie('CGISESSID'), { circulate => 'circulate_remaining_permissions' } );
 
 if ( $auth_status ne "ok" ) {
     exit 0;
 }
 
 binmode STDOUT, ":encoding(UTF-8)";
-print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
+print $input->header( -type => 'text/json', -charset => 'UTF-8' );
 
 my $reserve_id = $input->param('reserve_id');
 
 my $suspend_until = $input->param('suspend_until') || undef;
-$suspend_until = dt_from_string( $suspend_until ) if $suspend_until;
+if ($suspend_until) {
+    eval { $suspend_until = dt_from_string($suspend_until) };
 
-my $hold = Koha::Holds->find( $reserve_id );
-$hold->suspend_hold( $suspend_until );
+    if ($@) {
+        print to_json( { success => 0, error => 'INVALID_DATE' } );
+        exit;
+    }
+}
+
+my $hold = Koha::Holds->find($reserve_id);
+unless ($hold) {
+    print to_json( { success => 0, error => 'HOLD_NOT_FOUND' } );
+    exit;
+}
+
+$hold->suspend_hold($suspend_until);
 
 print to_json( { success => $hold->suspend() } );