RT# 83204 - added link to service or tower causing error.
authorChristopher Burger <burgerc@freeside.biz>
Sun, 28 Apr 2019 23:14:49 +0000 (19:14 -0400)
committerChristopher Burger <burgerc@freeside.biz>
Sun, 28 Apr 2019 23:14:49 +0000 (19:14 -0400)
FS/FS/part_export/saisei.pm
httemplate/edit/part_export.cgi
httemplate/edit/process/elements/process.html
httemplate/elements/error.html
httemplate/elements/progress-init.html
httemplate/misc/progress-popup.html

index 9646879..8661651 100644 (file)
@@ -62,6 +62,8 @@ tie my %scripts, 'Tie::IxHash',
                                       label     => 'Export provisioned services',
                                       description => 'will export provisioned services of part service with Saisei export attached.',
                                       html_label => '<b>Export provisioned services attached to this export.</b>',
                                       label     => 'Export provisioned services',
                                       description => 'will export provisioned services of part service with Saisei export attached.',
                                       html_label => '<b>Export provisioned services attached to this export.</b>',
+                                      error_url  => '/edit/part_export.cgi?',
+                                      success_message => 'Saisei export of provisioned services successful',
                                     },
 ;
 
                                     },
 ;
 
@@ -169,6 +171,7 @@ sub _export_insert {
                       tower.up_rate_limit as tower_upratelimit,
                       tower.down_rate_limit as tower_downratelimit,
                       tower_sector.sectorname,
                       tower.up_rate_limit as tower_upratelimit,
                       tower.down_rate_limit as tower_downratelimit,
                       tower_sector.sectorname,
+                      tower_sector.towernum,
                       tower_sector.up_rate_limit as sector_upratelimit,
                       tower_sector.down_rate_limit as sector_downratelimit ',
       'addl_from' => 'LEFT JOIN tower USING ( towernum )',
                       tower_sector.up_rate_limit as sector_upratelimit,
                       tower_sector.down_rate_limit as sector_downratelimit ',
       'addl_from' => 'LEFT JOIN tower USING ( towernum )',
@@ -182,6 +185,7 @@ sub _export_insert {
 
     my $tower_opt = {
       'tower_name'           => $tower_name,
 
     my $tower_opt = {
       'tower_name'           => $tower_name,
+      'tower_num'            => $tower_sector->{Hash}->{towernum},
       'tower_uprate_limit'   => $tower_sector->{Hash}->{tower_upratelimit},
       'tower_downrate_limit' => $tower_sector->{Hash}->{tower_downratelimit},
     };
       'tower_uprate_limit'   => $tower_sector->{Hash}->{tower_upratelimit},
       'tower_downrate_limit' => $tower_sector->{Hash}->{tower_downratelimit},
     };
@@ -194,6 +198,7 @@ sub _export_insert {
 
     my $sector_opt = {
       'tower_name'            => $tower_name,
 
     my $sector_opt = {
       'tower_name'            => $tower_name,
+      'tower_num'             => $tower_sector->{Hash}->{towernum},
       'sector_name'           => $sector_name,
       'sector_uprate_limit'   => $tower_sector->{Hash}->{sector_upratelimit},
       'sector_downrate_limit' => $tower_sector->{Hash}->{sector_downratelimit},
       'sector_name'           => $sector_name,
       'sector_uprate_limit'   => $tower_sector->{Hash}->{sector_upratelimit},
       'sector_downrate_limit' => $tower_sector->{Hash}->{sector_downratelimit},
@@ -331,6 +336,7 @@ sub export_tower_sector {
   $tower_name =~ s/\s/_/g;
   my $tower_opt = {
     'tower_name'           => $tower_name,
   $tower_name =~ s/\s/_/g;
   my $tower_opt = {
     'tower_name'           => $tower_name,
+    'tower_num'            => $tower->{Hash}->{towernum},
     'tower_uprate_limit'   => $tower->{Hash}->{up_rate_limit},
     'tower_downrate_limit' => $tower->{Hash}->{down_rate_limit},
     'modify_existing'      => '1', # modify an existing access point with this info
     'tower_uprate_limit'   => $tower->{Hash}->{up_rate_limit},
     'tower_downrate_limit' => $tower->{Hash}->{down_rate_limit},
     'modify_existing'      => '1', # modify an existing access point with this info
@@ -352,6 +358,7 @@ sub export_tower_sector {
     $sector_name =~ s/\s/_/g;
     my $sector_opt = {
       'tower_name'            => $tower_name,
     $sector_name =~ s/\s/_/g;
     my $sector_opt = {
       'tower_name'            => $tower_name,
+      'tower_num'             => $tower_sector->{Hash}->{towernum},
       'sector_name'           => $sector_name,
       'sector_uprate_limit'   => $tower_sector->{Hash}->{up_rate_limit},
       'sector_downrate_limit' => $tower_sector->{Hash}->{down_rate_limit},
       'sector_name'           => $sector_name,
       'sector_uprate_limit'   => $tower_sector->{Hash}->{up_rate_limit},
       'sector_downrate_limit' => $tower_sector->{Hash}->{down_rate_limit},
@@ -437,7 +444,7 @@ sub api_call {
     return;
   }
   elsif ($client->responseCode() eq '500') {
     return;
   }
   elsif ($client->responseCode() eq '500') {
-    $self->{'__saisei_error'} = "Could not connect to the host (".$self->{Hash}->{machine}.':'.$self->option('port').") during $method , we received the responce code: " . $client->responseCode();
+    $self->{'__saisei_error'} = "Could not connect to the Saisei export host machine (".$self->{Hash}->{machine}.':'.$self->option('port').") during $method , we received the responce code: " . $client->responseCode();
     warn "Saisei Response Content is\n".$client->responseContent."\n" if $self->option('debug');
     return;
   }
     warn "Saisei Response Content is\n".$client->responseContent."\n" if $self->option('debug');
     return;
   }
@@ -554,8 +561,8 @@ Creates a rateplan.
 sub api_create_rateplan {
   my ($self, $svc, $rateplan) = @_;
 
 sub api_create_rateplan {
   my ($self, $svc, $rateplan) = @_;
 
-  $self->{'__saisei_error'} = "There is no download speed set for the service $rateplan with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a download speed set for them." if !$svc->{Hash}->{speed_down};
-  $self->{'__saisei_error'} = "There is no upload speed set for the service $rateplan with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a upload speed set for them." if !$svc->{Hash}->{speed_up};
+  $self->{'__saisei_error'} = "There is no download speed set for the service !--service,".$svc->svcnum.",".$rateplan."--! with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a download speed set for them." if !$svc->{Hash}->{speed_down};
+  $self->{'__saisei_error'} = "There is no upload speed set for the service !--service,".$svc->svcnum.",".$rateplan."--! with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a upload speed set for them." if !$svc->{Hash}->{speed_up};
 
   my $new_rateplan = $self->api_call(
       "PUT", 
 
   my $new_rateplan = $self->api_call(
       "PUT", 
@@ -617,6 +624,9 @@ Modify a existing rateplan.
 sub api_modify_existing_rateplan {
   my ($self,$svc,$rateplan_name) = @_;
 
 sub api_modify_existing_rateplan {
   my ($self,$svc,$rateplan_name) = @_;
 
+  $self->{'__saisei_error'} = "There is no download speed set for the service !--service,".$svc->svcnum.",".$rateplan_name."--! with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a download speed set for them." if !$svc->{Hash}->{speed_down};
+  $self->{'__saisei_error'} = "There is no upload speed set for the service !--service,".$svc->svcnum.",".$rateplan_name."--! with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a upload speed set for them." if !$svc->{Hash}->{speed_up};
+
   my $modified_rateplan = $self->api_call(
     "PUT",
     "/rate_plans/$rateplan_name",
   my $modified_rateplan = $self->api_call(
     "PUT",
     "/rate_plans/$rateplan_name",
@@ -795,7 +805,7 @@ sub process_tower {
   my ($self, $opt) = @_;
 
   if (!$opt->{tower_uprate_limit} || !$opt->{tower_downrate_limit}) {
   my ($self, $opt) = @_;
 
   if (!$opt->{tower_uprate_limit} || !$opt->{tower_downrate_limit}) {
-    $self->{'__saisei_error'} = "Could not export tower ".$opt->{tower_name}." because there was no up or down rates attached to the tower.  Saisei requires a up and down rate be attached to each tower.";
+    $self->{'__saisei_error'} = "Could not export tower !--tower,".$opt->{tower_num}.",".$opt->{tower_name}."--! because there was no up or down rates attached to the tower.  Saisei requires a up and down rate be attached to each tower.";
     return { error => $self->api_error, };
   }
 
     return { error => $self->api_error, };
   }
 
@@ -835,7 +845,7 @@ sub process_sector {
   }
 
   if (!$opt->{sector_uprate_limit} || !$opt->{sector_downrate_limit}) {
   }
 
   if (!$opt->{sector_uprate_limit} || !$opt->{sector_downrate_limit}) {
-    $self->{'__saisei_error'} = "Could not export sector ".$opt->{tower_name}." because there was no up or down rates attached to the sector.  Saisei requires a up and down rate be attached to each sector.";
+    $self->{'__saisei_error'} = "Could not export sector !--tower,".$opt->{tower_num}.",".$opt->{sector_name}."--! because there was no up or down rates attached to the sector.  Saisei requires a up and down rate be attached to each sector.";
     return { error => $self->api_error, };
   }
 
     return { error => $self->api_error, };
   }
 
index f6ec208..f8a46c7 100644 (file)
@@ -63,6 +63,8 @@ if ( $cgi->param('error') ) {
   $part_export = new FS::part_export ( {
     map { $_, scalar($cgi->param($_)) } fields('part_export')
   } );
   $part_export = new FS::part_export ( {
     map { $_, scalar($cgi->param($_)) } fields('part_export')
   } );
+} elsif ( $cgi->param('exportnum') ) {
+  $part_export = qsearchs('part_export', { 'exportnum' => $cgi->param('exportnum') } );
 } elsif ( $query =~ /^(\d+)$/ ) {
   $part_export = qsearchs('part_export', { 'exportnum' => $1 } );
 } else {
 } elsif ( $query =~ /^(\d+)$/ ) {
   $part_export = qsearchs('part_export', { 'exportnum' => $1 } );
 } else {
@@ -296,7 +298,12 @@ my $widget = new HTML::Widgets::SelectLayers(
               $part_export->exporttype,
               [ $script.'_exportnum', $script.'_script' ],
               rooturl().'view/svc_export/run_script.cgi',
               $part_export->exporttype,
               [ $script.'_exportnum', $script.'_script' ],
               rooturl().'view/svc_export/run_script.cgi',
-              rooturl().'edit/part_export.cgi?'.$part_export->{Hash}->{exportnum},
+              {
+                'error_url' => rooturl().$exports->{$layer}{scripts}{$script}->{error_url}."exportnum=".$part_export->{Hash}->{exportnum},
+                'reload_with_error' => '1',
+                'url'       => rooturl().'edit/part_export.cgi?'.$part_export->{Hash}->{exportnum},
+                'message'   => $exports->{$layer}{scripts}{$script}->{success_message},
+              },
               $script,
         ) .
         '<INPUT TYPE="hidden" NAME="'.$script.'_exportnum" VALUE="'.$part_export->{Hash}->{exportnum}.'">
               $script,
         ) .
         '<INPUT TYPE="hidden" NAME="'.$script.'_exportnum" VALUE="'.$part_export->{Hash}->{exportnum}.'">
index f70875b..e332957 100644 (file)
@@ -499,7 +499,11 @@ if ($class eq "FS::tower" && !$error) {
       $error = $export_tower->{'error'} if $export_tower;
     }
   }
       $error = $export_tower->{'error'} if $export_tower;
     }
   }
-  $cgi->param('error', $error) if $error;
+  if ($error) {
+    my $encoded_error = encode_base64($error);
+    $cgi->param('error_link', $encoded_error) if $error;
+
+  }
 }
 
 # set up redirect URLs
 }
 
 # set up redirect URLs
index f9664bd..5083799 100644 (file)
@@ -1,5 +1,28 @@
 % if ( $cgi->param('error') ) { 
 %   $m->notes('error', $cgi->param('error'));
   <FONT SIZE="+1" COLOR="#ff0000"><% mt("Error: [_1]", $cgi->param('error')) |h %></FONT>
 % if ( $cgi->param('error') ) { 
 %   $m->notes('error', $cgi->param('error'));
   <FONT SIZE="+1" COLOR="#ff0000"><% mt("Error: [_1]", $cgi->param('error')) |h %></FONT>
-  <BR><BR>
-% } 
+  <BR>
+% }
+
+% if ( $cgi->param('error_link') ) {
+%   $m->notes('error', $error_link);
+  <FONT SIZE="+1" COLOR="#ff0000"><% $error_link %></FONT>
+  <BR>
+% }
+<BR>
+
+<%init>
+
+my %type_error_links = (
+  'service' => rooturl()."/view/svc_broadband.cgi?",
+  'tower'   => rooturl()."/edit/tower.html?",
+);
+
+my $error_link;
+
+if ( $cgi->param('error_link') ) {
+  $error_link = encode_entities(decode_base64($cgi->param('error_link')));
+  $error_link =~ s/!--(.*)\,(.*)\,(.*)--!/<a href=$type_error_links{$1}$2><font color=red><b>$3<\/b><\/font><\/a>/g;
+}
+
+</%init>
\ No newline at end of file
index 789825c..2a62c5e 100644 (file)
@@ -154,7 +154,7 @@ my %dest_info;
 if ( ref($url_or_message) ) { #its a message or something
   %dest_info = map { $_ => $url_or_message->{$_} }
                grep { $url_or_message->{$_} }
 if ( ref($url_or_message) ) { #its a message or something
   %dest_info = map { $_ => $url_or_message->{$_} }
                grep { $url_or_message->{$_} }
-               qw( message url popup_url error_url );
+               qw( message url popup_url error_url reload_with_error );
 } else {
   # it can also just be a url
   %dest_info = ( 'url' => $url_or_message );
 } else {
   # it can also just be a url
   %dest_info = ( 'url' => $url_or_message );
index 9964bcc..a0aa6f5 100644 (file)
@@ -73,7 +73,13 @@ function updateStatus( status_statustext ) {
 % # default behavior: just close the popup
 % my $onClick = 'parent.nd(1);';
 % if ( $error_url ) { # then on clicking to confirm, redirect somewhere
 % # default behavior: just close the popup
 % my $onClick = 'parent.nd(1);';
 % if ( $error_url ) { # then on clicking to confirm, redirect somewhere
-%   $onClick = "window.top.location.href = \\'$error_url\\';";
+%   if ( $reload_with_error ) {
+       var encodedString = btoa(statustext);
+       parent.nd(1);
+       window.top.location.href = '<% $error_url."&error_link="  %>'+encodedString;
+%   }
+%
+%     $onClick = "window.top.location.href = \\'$error_url\\';";
 % }
 
     document.getElementById("progress_message").innerHTML = '<FONT SIZE="+1" COLOR="#FF0000">Error: ' + statustext + '</FONT>';
 % }
 
     document.getElementById("progress_message").innerHTML = '<FONT SIZE="+1" COLOR="#FF0000">Error: ' + statustext + '</FONT>';
@@ -126,5 +132,6 @@ my $message = $cgi->param('message');
 my $popup_url = $cgi->param('popup_url');
 my $formname = scalar($cgi->param('formname'));
 my $error_url = $cgi->param('error_url');
 my $popup_url = $cgi->param('popup_url');
 my $formname = scalar($cgi->param('formname'));
 my $error_url = $cgi->param('error_url');
+my $reload_with_error = $cgi->param('reload_with_error');
 
 </%init>
 
 </%init>