RT# 83039 - only towers with sectors shown on provisioning page when export requires...
authorChristopher Burger <burgerc@freeside.biz>
Sun, 21 Apr 2019 20:14:13 +0000 (16:14 -0400)
committerChristopher Burger <burgerc@freeside.biz>
Sun, 21 Apr 2019 20:14:13 +0000 (16:14 -0400)
FS/FS/part_export/saisei.pm
httemplate/edit/svc_broadband.cgi
httemplate/elements/select-table.html
httemplate/elements/select-tower_sector.html

index 6fb504f..61aa12d 100644 (file)
@@ -197,6 +197,7 @@ sub _export_insert {
       '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},
+      'rateplan'              => $rateplan_name,
     };
     my $accesspoint = process_sector($self, $sector_opt);
     return $self->api_error if $self->{'__saisei_error'};
     };
     my $accesspoint = process_sector($self, $sector_opt);
     return $self->api_error if $self->{'__saisei_error'};
@@ -828,6 +829,11 @@ sub process_tower {
 sub process_sector {
   my ($self, $opt) = @_;
 
 sub process_sector {
   my ($self, $opt) = @_;
 
+  if (!$opt->{sector_name} || $opt->{sector_name} eq '_default') {
+    $self->{'__saisei_error'} = "No sector attached to Tower (".$opt->{tower_name}.") for service ".$opt->{'rateplan'}.".  Saisei requires a tower sector to be attached to each service that is exported to Saisei.";
+    return { error => $self->api_error, };
+  }
+
   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.";
     return { error => $self->api_error, };
   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.";
     return { error => $self->api_error, };
@@ -864,6 +870,16 @@ sub process_sector {
   return $accesspoint;
 }
 
   return $accesspoint;
 }
 
+=head2 require_tower_and_sector
+
+sets whether the service export requires a sector with it's tower.
+
+=cut
+
+sub require_tower_and_sector {
+  1;
+}
+
 sub process_virtual_ap {
   my ($self, $opt) = @_;
 
 sub process_virtual_ap {
   my ($self, $opt) = @_;
 
index 374af47..5a3692e 100644 (file)
@@ -101,7 +101,21 @@ END
 
 my @fields = (
   qw( description speed_down speed_up speed_test_down speed_test_up speed_test_latency),
 
 my @fields = (
   qw( description speed_down speed_up speed_test_down speed_test_up speed_test_latency),
-  { field=>'sectornum', type=>'select-tower_sector', },
+  { field=>'sectornum', type=>'select-tower_sector',
+    include_opt_callback => sub {
+      my $svc_broadband = shift;
+      my $part_svc = $svc_broadband->part_svc;
+      my $sectors_only;
+      foreach ($part_svc->part_export()) {
+        $sectors_only = '1' if $_->can('require_tower_and_sector');
+      }
+      ## incase export requires a sector and service only has tower attached it will not show on edit.
+      my $non_option_label;
+      my $sector = qsearchs({'table' => 'tower_sector', 'hashref' => { 'sectornum' => $svc_broadband->sectornum }, });
+      $non_option_label = $sector->description if $sector;
+      return ('sectorsonly' => $sectors_only, 'non_option_label' => $non_option_label);
+    },
+  },
   { field=>'routernum', type=>'select-router_block_ip', 
     include_opt_callback => sub { 
       my $svc_broadband = shift;
   { field=>'routernum', type=>'select-router_block_ip', 
     include_opt_callback => sub { 
       my $svc_broadband = shift;
index d86b7ee..ecac7f7 100644 (file)
@@ -90,6 +90,7 @@ Example:
     <OPTION VALUE=""><% $opt{'empty_label'} || 'all' %></OPTION>
 % }
 
     <OPTION VALUE=""><% $opt{'empty_label'} || 'all' %></OPTION>
 % }
 
+% my $curr_option_found;
 % foreach my $record ( 
 % # we have the order_by parameter for this
 % #sort {    $a->$name_col() cmp $b->$name_col()
 % foreach my $record ( 
 % # we have the order_by parameter for this
 % #sort {    $a->$name_col() cmp $b->$name_col()
@@ -108,6 +109,7 @@ Example:
 %     $selected =    ( ref($value) && $value->{$recvalue} )
 %                 || ( $value && $value eq $recvalue ); #not == because of value_col
 %   }
 %     $selected =    ( ref($value) && $value->{$recvalue} )
 %                 || ( $value && $value eq $recvalue ); #not == because of value_col
 %   }
+%   $curr_option_found = $selected unless $curr_option_found;
     <OPTION VALUE="<% $recvalue %>"
             <% $selected ? ' SELECTED' : '' %>
 %           foreach my $att ( @{ $opt{'extra_option_attributes'} } ) {
     <OPTION VALUE="<% $recvalue %>"
             <% $selected ? ' SELECTED' : '' %>
 %           foreach my $att ( @{ $opt{'extra_option_attributes'} } ) {
@@ -129,6 +131,11 @@ Example:
     <OPTION VALUE="<% $post_opt %>"
             <% $selected ? 'SELECTED' : '' %>
     ><% $post_label %></OPTION>
     <OPTION VALUE="<% $post_opt %>"
             <% $selected ? 'SELECTED' : '' %>
     ><% $post_label %></OPTION>
+% }
+
+% my $non_option_label = $opt{'non_option_label'};
+% if (!$curr_option_found && $non_option_label && $value) {
+    <OPTION VALUE="<% $value %>" SELECTED><% $non_option_label %></OPTION>
 % } 
 
 </SELECT>
 % } 
 
 </SELECT>
index 76ff252..4dfd23d 100644 (file)
@@ -3,7 +3,7 @@
     table       => 'tower_sector',
     name_col    => 'description',
     addl_from   => 'JOIN tower USING (towernum)',
     table       => 'tower_sector',
     name_col    => 'description',
     addl_from   => 'JOIN tower USING (towernum)',
-    extra_sql   => q(WHERE disabled = '' OR disabled IS NULL),
+    extra_sql   => $extra_sql,
     order_by    => 'ORDER BY towernum,sectorname',
     empty_label => ' ',
     @_ 
     order_by    => 'ORDER BY towernum,sectorname',
     empty_label => ' ',
     @_ 
@@ -67,4 +67,7 @@ foreach my $towernum (keys %sectors_of) {
 }
 
 my $empty_label = $opt{'empty_label'} || 'Include services with no sector';
 }
 
 my $empty_label = $opt{'empty_label'} || 'Include services with no sector';
+
+my $extra_sql = q(WHERE (disabled = '' OR disabled IS NULL));
+$extra_sql .= q( AND sectorname != '_default') if $opt{'sectorsonly'};
 </%init>
 </%init>