fix svc_label_link...? how did this ever work? RT#11331
[freeside.git] / FS / FS / UI / Web.pm
index c9264a0..029b02c 100644 (file)
@@ -3,7 +3,9 @@ package FS::UI::Web;
 use strict;
 use vars qw($DEBUG @ISA @EXPORT_OK $me);
 use Exporter;
+use Carp qw( confess );;
 use FS::Conf;
+use FS::Misc::DateTime qw( parse_datetime );
 use FS::Record qw(dbdef);
 use FS::cust_main;  # are sql_balance and sql_date_balance in the right module?
 
@@ -30,7 +32,7 @@ sub parse_beginning_ending {
   if ( $cgi->param($prefix.'begin') =~ /^(\d+)$/ ) {
     $beginning = $1;
   } elsif ( $cgi->param($prefix.'beginning') =~ /^([ 0-9\-\/]{1,64})$/ ) {
-    $beginning = str2time($1) || 0;
+    $beginning = parse_datetime($1) || 0;
   }
 
   my $ending = 4294967295; #2^32-1
@@ -38,7 +40,7 @@ sub parse_beginning_ending {
     $ending = $1 - 1;
   } elsif ( $cgi->param($prefix.'ending') =~ /^([ 0-9\-\/]{1,64})$/ ) {
     #probably need an option to turn off the + 86399
-    $ending = str2time($1) + 86399;
+    $ending = parse_datetime($1) + 86399;
   }
 
   ( $beginning, $ending );
@@ -133,7 +135,8 @@ sub svc_link {
 
 sub svc_label_link {
   my($m, $part_svc, $cust_svc) = @_ or return '';
-  svc_X_link( ($cust_svc->label)[1], @_ );
+  my($svc, $label, $svcdb) = $cust_svc->label;
+  svc_X_link( $label, @_ );
 }
 
 sub svc_X_link {
@@ -142,6 +145,9 @@ sub svc_X_link {
   return $x
    unless $FS::CurrentUser::CurrentUser->access_right('View customer services');
 
+  confess "svc_X_link called without a service ($x, $m, $part_svc, $cust_svc)\n"
+    unless $cust_svc;
+
   my $ahref = svc_url(
     'ahref'    => 1,
     'm'        => $m,
@@ -493,6 +499,7 @@ use JSON;
 use FS::UID qw(getotaker);
 use FS::Record qw(qsearchs);
 use FS::queue;
+use FS::CGI qw(rooturl);
 
 $DEBUG = 0;
 
@@ -564,6 +571,7 @@ sub start_job {
     }
   }
   $param{CurrentUser} = getotaker();
+  $param{RootURL} = rooturl($self->{cgi}->self_url);
   warn "FS::UI::Web::start_job\n".
        join('', map {
                       if ( ref($param{$_}) ) {
@@ -619,13 +627,15 @@ sub job_status {
   }
 
   my @return;
-  if ( $job && $job->status ne 'failed' ) {
+  if ( $job && $job->status ne 'failed' && $job->status ne 'done' ) {
     my ($progress, $action) = split ',', $job->statustext, 2; 
     $action ||= 'Server processing job';
     @return = ( 'progress', $progress, $action );
   } elsif ( !$job ) { #handle job gone case : job successful
                       # so close popup, redirect parent window...
     @return = ( 'complete' );
+  } elsif ( $job->status eq 'done' ) {
+    @return = ( 'done', $job->statustext, '' );
   } else {
     @return = ( 'error', $job ? $job->statustext : $jobnum );
   }