summaryrefslogtreecommitdiff
path: root/httemplate
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2012-02-27 10:31:47 -0800
committerMark Wells <mark@freeside.biz>2012-02-27 10:31:47 -0800
commiteb9d1063e1203231ee0c6922ea5638370f7b5ece (patch)
treee2d6781d7b0a9239c5e3deb98b27c694426f86c5 /httemplate
parentcaba365bbebc7e73ad0c25f9a3a9c75a48ed6140 (diff)
allow svc_broadband to link directly to a router, #14698
Diffstat (limited to 'httemplate')
-rw-r--r--httemplate/browse/router.cgi4
-rwxr-xr-xhttemplate/edit/router.cgi3
-rw-r--r--httemplate/edit/svc_broadband.cgi5
-rw-r--r--httemplate/elements/select-tiered.html12
-rw-r--r--httemplate/elements/tr-select-router_block_ip.html94
-rwxr-xr-xhttemplate/search/report_svc_broadband.html4
-rwxr-xr-xhttemplate/search/svc_broadband.cgi4
-rw-r--r--httemplate/view/svc_broadband.cgi9
8 files changed, 123 insertions, 12 deletions
diff --git a/httemplate/browse/router.cgi b/httemplate/browse/router.cgi
index 069ca9b20..21047d7fc 100644
--- a/httemplate/browse/router.cgi
+++ b/httemplate/browse/router.cgi
@@ -9,6 +9,7 @@
'count_query' => "SELECT count(*) from router $count_sql",
'header' => [ 'Router name',
'Address block(s)',
+ 'IP addressing',
'Action',
],
'fields' => [ 'routername',
@@ -16,10 +17,12 @@
shift->addr_block
);
},
+ sub { shift->auto_addr ? 'Automatic' : 'Manual' },
sub { 'Delete' },
],
'links' => [ [ "${p2}edit/router.cgi?", 'routernum' ],
'',
+ '',
[ "${p}misc/delete-router.html?", 'routernum' ],
],
'agent_virt' => 1,
@@ -52,4 +55,5 @@ my $count_sql = $extra_sql. ( $extra_sql =~ /WHERE/ ? ' AND' : 'WHERE' ).
'null_right' => 'Broadband global configuration',
);
+
</%init>
diff --git a/httemplate/edit/router.cgi b/httemplate/edit/router.cgi
index 70eaa4576..6672d5d75 100755
--- a/httemplate/edit/router.cgi
+++ b/httemplate/edit/router.cgi
@@ -6,11 +6,14 @@
'labels' => { 'routernum' => 'Router',
'routername' => 'Name',
'svc_part' => 'Service',
+ 'agentnum' => 'Agent',
+ 'auto_addr' => 'Assign IP addresses automatically',
},
'fields' => [
{ 'field'=>'routername', 'type'=>'text', 'size'=>32 },
{ 'field'=>'agentnum', 'type'=>'select-agent' },
{ 'field'=>'svcnum', 'type'=>'hidden' },
+ { 'field'=>'auto_addr','type'=>'checkbox','value'=>'Y'},
],
'error_callback' => $callback,
'edit_callback' => $callback,
diff --git a/httemplate/edit/svc_broadband.cgi b/httemplate/edit/svc_broadband.cgi
index ff57ac0ce..8fccb1fa8 100644
--- a/httemplate/edit/svc_broadband.cgi
+++ b/httemplate/edit/svc_broadband.cgi
@@ -100,10 +100,9 @@ END
;
my @fields = (
- qw( description ip_addr speed_down speed_up ),
+ qw( description speed_down speed_up ),
{ field=>'sectornum', type=>'select-tower_sector', },
- qw( blocknum ),
- { field=>'block_label', type=>'fixed' },
+ { field=>'routernum', type=>'select-router_block_ip', },
qw( mac_addr latitude longitude altitude vlan_profile
performance_profile authkey plan_id ),
);
diff --git a/httemplate/elements/select-tiered.html b/httemplate/elements/select-tiered.html
index 35f9e5a60..99b285274 100644
--- a/httemplate/elements/select-tiered.html
+++ b/httemplate/elements/select-tiered.html
@@ -35,6 +35,7 @@ contain the following:
isn't fully tested.
- after: an HTML string to be inserted after the select element, before
the next one. By default there's nothing between them.
+- onchange: an additional javascript function to be called on change.
For convenience, "curr_value" and "field" can be passed as part of the
main argument list, and will be applied to the last tier.
@@ -43,8 +44,13 @@ main argument list, and will be applied to the last tier.
% $i = 0;
% foreach my $tier (@$tiers) {
% my $onchange;
-% $onchange="onchange='${pre}select_change(this, $i)'"
+% $onchange="${pre}select_change(this, $i)"
% if $i < scalar(@$tiers) - 1;
+%
+% $onchange .= ';'.$tier->{onchange}."(this, $i);"
+% if $tier->{onchange};
+%
+% $onchange = "onchange='$onchange'" if $onchange;
<SELECT
NAME="<% $tier->{field} %>"
ID="<% $pre."select_".$i %>"
@@ -54,7 +60,8 @@ main argument list, and will be applied to the last tier.
% if ( $i == 0 ) {
% my $options = $tiers_by_key->[0]->{''};
% foreach ( sort keys %$options ) {
- <OPTION VALUE="<%$_ |h%>"><% $options->{$_} |h%></OPTION>
+ <OPTION VALUE="<%$_ |h%>" <% $curr_values->[$i] eq $_ ? 'SELECTED' : ''%>>
+ <% $options->{$_} |h%></OPTION>
% }
% }
% $i++;
@@ -178,7 +185,6 @@ while($i >= 1) {
foreach my $key ( %{ $tier->{by_key} } ) {
my $options = $tier->{by_key}->{$key};
if ( exists( $options->{$curr_value} ) ) {
- warn "tier $i curr_value ($curr_value) found under key $key\n";
$tiers->[$i-1]->{curr_value} = $key;
last;
}
diff --git a/httemplate/elements/tr-select-router_block_ip.html b/httemplate/elements/tr-select-router_block_ip.html
new file mode 100644
index 000000000..e6b7bfe7e
--- /dev/null
+++ b/httemplate/elements/tr-select-router_block_ip.html
@@ -0,0 +1,94 @@
+<script type="text/javascript">
+var auto_addr_routernum = <% encode_json(\%auto_addr_routernum) %>;
+function hide_if_auto_addr(obj, i) {
+ var routernum = obj.value;
+ var select_blocknum = document.getElementsByName('blocknum')[0];
+ var label_auto_addr = document.getElementById('label_auto_addr');
+ var input_ip_addr = document.getElementById('input_ip_addr');
+ var auto = ( auto_addr_routernum[routernum] == 'Y' );
+ select_blocknum.style.display = auto ? '' : 'none';
+ label_auto_addr.style.display = auto ? '' : 'none';
+ input_ip_addr.style.display = !auto ? '' : 'none';
+}
+</script>
+<& /elements/tr-td-label.html, label => ($opt{'label'} || 'Router') &>
+<td>
+ <& /elements/select-tiered.html, prefix => 'router_', tiers => [
+ {
+ field => 'routernum',
+ records => \@routers,
+ name_col => 'routername',
+ value_col => 'routernum',
+ onchange => 'hide_if_auto_addr',
+ curr_value=> $opt{'routernum'},
+ },
+ {
+ field => 'blocknum',
+ table => 'addr_block',
+ hashref => (exists($fixed{'blocknum'}) ?
+ { blocknum => $fixed{'blocknum'} } : {}
+ ),
+ name_col => 'cidr',
+ link_col => 'routernum',
+ empty_label => '(any)',
+ curr_value => $opt{'blocknum'},
+ },
+]
+&>
+</td></tr>
+<& /elements/tr-td-label.html, label => 'IP address' &>
+<td>
+% if ( $fixed{'ip_addr'} ) {
+ <input type="hidden" id="input_ip_addr" name="ip_addr"
+ value="<% $opt{'ip_addr'} |h%>"><% $opt{'ip_addr'} || '' %>
+% }
+% else {
+ <input type="text" id="input_ip_addr" name="ip_addr"
+ style="display:none" value="<% $opt{'ip_addr'} |h%>">
+% }
+ <span id="label_auto_addr"><% $opt{'ip_addr'} || '' %>
+ <i>(automatic)</i></span>
+</td> </tr>
+<script type="text/javascript">
+hide_if_auto_addr(document.getElementsByName('routernum')[0],0);
+</script>
+<%init>
+my %opt = @_;
+my @routers;
+
+my $svc_x = $opt{'object'};
+if ( $svc_x ) {
+ $opt{$_} = $svc_x->$_
+ foreach qw(routernum blocknum ip_addr svcpart);
+}
+
+warn Dumper(\%opt);
+
+my $svcpart = $opt{'svcpart'} || '';
+my %fixed; # which fields are fixed
+$svcpart =~ /^\d*$/ or die "invalid svcpart '$svcpart'";
+if ( $svcpart ) {
+ my $part_svc = FS::part_svc->by_key($svcpart);
+ # Traditionally, columnflag 'F' on IP address means that it MUST
+ # be auto-assigned (or, if null IP addresses are allowed, that
+ # it must be null).
+ foreach (qw(routernum blocknum ip_addr)) {
+ my $psc = $part_svc->part_svc_column($_);
+ if ( $psc and $psc->columnflag eq 'F' ) {
+ $fixed{$_} = $psc->columnvalue;
+ }
+ }
+ if ( $fixed{'routernum'} ) {
+ @routers = (FS::router->by_key($fixed{'routernum'}))
+ }
+ else {
+ @routers = map { $_->router }
+ qsearch('part_svc_router', { svcpart => $svcpart });
+ }
+}
+else {
+ @routers = qsearch('router', {});
+}
+
+my %auto_addr_routernum = map { $_->routernum, $_->auto_addr } @routers;
+</%init>
diff --git a/httemplate/search/report_svc_broadband.html b/httemplate/search/report_svc_broadband.html
index ee4dfce90..37f21b79f 100755
--- a/httemplate/search/report_svc_broadband.html
+++ b/httemplate/search/report_svc_broadband.html
@@ -26,6 +26,10 @@
'multiple' => 'multiple',
)
%>
+ <tr>
+ <td></td>
+ <td><input type="checkbox" name="routernum" value="none" checked> Include services with no router</td>
+ </tr>
<% include( '/elements/tr-selectmultiple-part_pkg.html',
%pkg_search,
diff --git a/httemplate/search/svc_broadband.cgi b/httemplate/search/svc_broadband.cgi
index 605b829b4..ee62e9084 100755
--- a/httemplate/search/svc_broadband.cgi
+++ b/httemplate/search/svc_broadband.cgi
@@ -15,8 +15,8 @@
'fields' => [ 'svcnum',
'svc',
sub {
- my $blocknum = shift->blocknum or return '';
- $routerbyblock{$blocknum}->routername;
+ my $router = shift->router;
+ $router ? $router->routername : '';
},
@tower_fields,
'ip_addr',
diff --git a/httemplate/view/svc_broadband.cgi b/httemplate/view/svc_broadband.cgi
index 2e93d42fd..05ae632bd 100644
--- a/httemplate/view/svc_broadband.cgi
+++ b/httemplate/view/svc_broadband.cgi
@@ -27,7 +27,7 @@ $labels{'coordinates'} = 'Latitude/Longitude';
my @fields = (
'description',
- { field => 'router', value => \&router },
+ { field => 'routernum', value => \&router },
'speed_down',
'speed_up',
{ field => 'ip_addr', value => \&ip_addr },
@@ -48,9 +48,10 @@ push @fields,
sub router {
my $svc = shift;
- my $addr_block = $svc->addr_block or return '';
- my $router = $addr_block->router or return '';
- $router->routernum . ': ' . $router->routername;
+ my $router = $svc->router or return '';
+ my $block = $svc->addr_block;
+ $block = '; '.$block->cidr if $block;
+ $router->routernum . ': ' . $router->routername . $block
}
sub ip_addr {