From 44398c83f25bf4e43838df9f39331c29fdeff19d Mon Sep 17 00:00:00 2001 From: khoff Date: Mon, 9 Sep 2002 23:05:30 +0000 Subject: svc_broadband merge --- httemplate/browse/ac.cgi | 57 ++++++++ httemplate/browse/ac_type.cgi | 47 +++++++ httemplate/edit/ac.cgi | 163 ++++++++++++++++++++++ httemplate/edit/ac_type.cgi | 106 +++++++++++++++ httemplate/edit/part_svc.cgi | 13 +- httemplate/edit/process/ac.cgi | 28 ++++ httemplate/edit/process/ac_block.cgi | 21 +++ httemplate/edit/process/ac_field.cgi | 21 +++ httemplate/edit/process/ac_type.cgi | 28 ++++ httemplate/edit/process/part_ac_field.cgi | 21 +++ httemplate/edit/process/part_svc.cgi | 2 +- httemplate/edit/process/svc_broadband.cgi | 45 ++++++ httemplate/edit/svc_broadband.cgi | 219 ++++++++++++++++++++++++++++++ httemplate/index.html | 4 + httemplate/view/svc_broadband.cgi | 75 ++++++++++ 15 files changed, 848 insertions(+), 2 deletions(-) create mode 100755 httemplate/browse/ac.cgi create mode 100755 httemplate/browse/ac_type.cgi create mode 100755 httemplate/edit/ac.cgi create mode 100755 httemplate/edit/ac_type.cgi create mode 100755 httemplate/edit/process/ac.cgi create mode 100755 httemplate/edit/process/ac_block.cgi create mode 100755 httemplate/edit/process/ac_field.cgi create mode 100755 httemplate/edit/process/ac_type.cgi create mode 100755 httemplate/edit/process/part_ac_field.cgi create mode 100644 httemplate/edit/process/svc_broadband.cgi create mode 100644 httemplate/edit/svc_broadband.cgi create mode 100644 httemplate/view/svc_broadband.cgi (limited to 'httemplate') diff --git a/httemplate/browse/ac.cgi b/httemplate/browse/ac.cgi new file mode 100755 index 000000000..0ae138d3b --- /dev/null +++ b/httemplate/browse/ac.cgi @@ -0,0 +1,57 @@ + +<%= header('Access Concentrator Listing', menubar( + 'Main Menu' => $p, + 'Access Concentrator Types' => $p. 'browse/ac_type.cgi', +)) %> +
+Add a new Access Concentrator

+ +<%= table() %> + + AC + AC Type + Fields + Network/Mask + +<% + +foreach my $ac ( qsearch('ac',{}) ) { + my($hashref)=$ac->hashref; + my($actypenum)=$hashref->{actypenum}; + my($ac_type)=qsearchs('ac_type',{'actypenum'=>$actypenum}); + my($actypename)=$ac_type->getfield('actypename'); + print < + + $hashref->{acnum} + + $hashref->{acname} + $actypename + +END + + foreach my $ac_field ( qsearch('ac_field', { acnum => $hashref->{acnum} }) ) { + my $part_ac_field = qsearchs('part_ac_field', + { acfieldpart => $ac_field->getfield('acfieldpart') }); + print $part_ac_field->getfield('name') . ' '; + print $ac_field->getfield('value') . '
'; + } + print ''; + + foreach (qsearch('ac_block', { acnum => $hashref->{acnum} })) { + my $net_addr = new NetAddr::IP($_->getfield('ip_gateway'), + $_->getfield('ip_netmask')); + print $net_addr->network->addr . '/' . $net_addr->network->mask . '
'; + } + + print "\n"; + +} + +print < + + +END + +%> diff --git a/httemplate/browse/ac_type.cgi b/httemplate/browse/ac_type.cgi new file mode 100755 index 000000000..0ad8271d3 --- /dev/null +++ b/httemplate/browse/ac_type.cgi @@ -0,0 +1,47 @@ + +<% + +print header('Access Concentrator Types', menubar( + 'Main Menu' => $p, + 'Access Concentrators' => $p. 'browse/ac.cgi', +)) %> +
+Add new AC Type

+<%= table() %> + + + Type + Fields + + +<% +foreach my $ac_type ( qsearch('ac_type',{}) ) { + my($hashref)=$ac_type->hashref; + print < + + $hashref->{actypenum} + + $hashref->{actypename} + +END + + foreach ( qsearch('part_ac_field', { actypenum => $hashref->{actypenum} }) ) { + my ($part_ac_field) = $_->hashref; + print $part_ac_field->{'name'} . + ' (' . $part_ac_field->{'ut_type'} . ')
'; + } + +} + +print < + + + + + + +END + +%> diff --git a/httemplate/edit/ac.cgi b/httemplate/edit/ac.cgi new file mode 100755 index 000000000..86b05a4a1 --- /dev/null +++ b/httemplate/edit/ac.cgi @@ -0,0 +1,163 @@ + +<% + +my($ac); +if ( $cgi->param('error') ) { + $ac = new FS::ac ( { + map { $_, scalar($cgi->param($_)) } fields('ac') + } ); +} elsif ( $cgi->keywords ) { #editing + my( $query ) = $cgi->keywords; + $query =~ /^(\d+)$/; + $ac=qsearchs('ac',{'acnum'=>$1}); +} else { #adding + $ac = new FS::ac {}; +} +my $action = $ac->acnum ? 'Edit' : 'Add'; +my $hashref = $ac->hashref; + +print header("$action Access Concentrator", menubar( + 'Main Menu' => "$p", + 'View all access concentrators' => "${p}browse/ac.cgi", +)); + +print qq!Error: !, $cgi->param('error'), + "" + if $cgi->param('error'); + +print '
', + qq!!, + "Access Concentrator #", $hashref->{acnum} ? $hashref->{acnum} : "(NEW)"; + +print < + + Access Concentrator + + + + +END + + +if (! $ac->acnum) { + print < + Access Concentrator Type + !; +} + +print qq!

!; + +if ($hashref->{acnum}) { + print table(); + print < + + Field Name + Field Value + +END + + #my @ac_fields = qsearch('ac_field', { acnum => $hashref->{acnum} }); + my @ac_fields = $ac->ac_field; + foreach (@ac_fields) { + print qq!\n!; + my $part_ac_field = qsearchs('part_ac_field', + { acfieldpart => $_->getfield('acfieldpart') }); + print '' . $part_ac_field->getfield('name') . + '' . $_->getfield('value') . ''; + print "\n"; + } + + print '
'; + print < + + + + (NEW) + + + + + + +END + +} + +if ($hashref->{acnum}) { + + print qq!

IP Address Blocks:
! . table() . + qq!Network/Mask! . + qq!Gateway AddressMask length\n!; + + foreach (qsearch('ac_block', { acnum => $hashref->{acnum} })) { + my $ip_addr = new NetAddr::IP($_->getfield('ip_gateway'), + $_->getfield('ip_netmask')); + print qq!! . $ip_addr->network->addr() . '/' . + $ip_addr->network->mask() . qq!!; + + print qq!! . $_->getfield('ip_gateway') . qq!\n! . + qq!! . $_->getfield('ip_netmask') . qq!!; + + } + + print '
'; + print < + + + + (NEW) + + + + + + + + +END + +} + +print < + +END + +%> diff --git a/httemplate/edit/ac_type.cgi b/httemplate/edit/ac_type.cgi new file mode 100755 index 000000000..ccc3d579c --- /dev/null +++ b/httemplate/edit/ac_type.cgi @@ -0,0 +1,106 @@ + +<% + +my $ac_type; +if ( $cgi->param('error') ) { + $ac_type = new FS::ac_type ( { + map { $_, scalar($cgi->param($_)) } fields('ac_type') + } ); +} elsif ( $cgi->keywords ) { #editing + my($query)=$cgi->keywords; + $query =~ /^(\d+)$/; + $ac_type=qsearchs('ac_type',{'actypenum'=>$1}); +} else { #adding + $ac_type = new FS::ac_type {}; +} +my $action = $ac_type->actypenum ? 'Edit' : 'Add'; +my $hashref = $ac_type->hashref; + +my @ut_types = qw( float number text alpha anything ip domain ); + +my $p1 = popurl(1); +print header("$action Access Concentrator Type", menubar( + 'Main Menu' => popurl(2), + 'View all Access Concentrator types' => popurl(2). "browse/ac_type.cgi", +)); + +print qq!Error: !, $cgi->param('error'), + "" + if $cgi->param('error'); + +print qq!
!; + +#display + +print qq!!, + "AC Type #", $hashref->{actypenum} ? $hashref->{actypenum} : "(NEW)"; + +print < +AC Type Name + + +TROZ + +print qq!
!; + + +if ($hashref->{actypenum}) { + print qq!
Available fields:
! . table(); + + print qq! Field nameField type!; + + my @part_ac_field = qsearch ( 'part_ac_field', + { actypenum => $hashref->{actypenum} } ); + foreach ( @part_ac_field ) { + my $pf_hashref = $_->hashref; + print < + $pf_hashref->{acfieldpart} + $pf_hashref->{name} + $pf_hashref->{ut_type} + +END + } + + my $name, $ut_type = ''; + if ($cgi->param('error')) { + $name = $cgi->param('name'); + $ut_type = $cgi->param('ut_type'); + } + + print < + + (NEW) + + + + + + + + + + +END + +} + +%> + + + + diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi index 4ccb770fb..a23107a40 100755 --- a/httemplate/edit/part_svc.cgi +++ b/httemplate/edit/part_svc.cgi @@ -53,6 +53,7 @@ Services are items you offer to your customers.
  • svc_acct_sm - deprecated (use svc_forward for new installations) Virtual domain mail aliasing.
  • svc_forward - mail forwarding
  • svc_www - Virtual domain website +
  • svc_broadband - Broadband/High-speed Internet service @@ -122,11 +123,21 @@ my %defs = ( #'recnum' => '', #'usersvc' => '', }, + 'svc_broadband' => { + 'actypenum' => 'This is the actypenum that refers to the type of AC that can be provisioned for this service. This field must be set fixed.', + 'speed_down' => 'Maximum download speed for this service in Kbps. 0 denotes unlimited.', + 'speed_up' => 'Maximum upload speed for this service in Kbps. 0 denotes unlimited.', + 'acnum' => 'acnum of a specific AC that this service is restricted to. Not required', + 'ip_addr' => 'IP address. Leave blank for automatic assignment.', + 'ip_netmask' => 'Mask length, aka. netmask bits. (Eg. 255.255.255.0 == 24)', + 'mac_addr' => 'MAC address which is used by some ACs for access control. Specified by 6 colon seperated hex octets. (Eg. 00:00:0a:bc:1a:2b)', + 'location' => 'Defines the physically location at which this service was installed. This is not necessarily the billing address', + }, ); my @dbs = $hashref->{svcdb} ? ( $hashref->{svcdb} ) - : qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www ); + : qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www svc_broadband ); tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } @dbs; my $widget = new HTML::Widgets::SelectLayers( diff --git a/httemplate/edit/process/ac.cgi b/httemplate/edit/process/ac.cgi new file mode 100755 index 000000000..fc434a807 --- /dev/null +++ b/httemplate/edit/process/ac.cgi @@ -0,0 +1,28 @@ +<% + +my $acnum = $cgi->param('acnum'); + +my $old = qsearchs('ac',{'acnum'=>$acnum}) if $acnum; + +my $new = new FS::ac ( { + map { + $_, scalar($cgi->param($_)); + } fields('ac') +} ); + +my $error = ''; +if ( $acnum ) { + $error = $new->replace($old); +} else { + $error = $new->insert; + $acnum=$new->getfield('acnum'); +} + +if ( $error ) { + $cgi->param('error', $error); + print $cgi->redirect(popurl(2). "ac.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(3). "browse/ac.cgi"); +} + +%> diff --git a/httemplate/edit/process/ac_block.cgi b/httemplate/edit/process/ac_block.cgi new file mode 100755 index 000000000..b1c3c726b --- /dev/null +++ b/httemplate/edit/process/ac_block.cgi @@ -0,0 +1,21 @@ +<% + +my $new = new FS::ac_block ( { + map { + $_, scalar($cgi->param($_)); + } fields('ac_block') +} ); + +my $error = ''; +$error = $new->check; + +unless ( $error ) { $error = $new->insert; } + +if ( $error ) { + $cgi->param('error', $error); + print $cgi->redirect(popurl(2). "ac.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(2). "ac.cgi?". $cgi->param('acnum')); +} + +%> diff --git a/httemplate/edit/process/ac_field.cgi b/httemplate/edit/process/ac_field.cgi new file mode 100755 index 000000000..2bfe3312f --- /dev/null +++ b/httemplate/edit/process/ac_field.cgi @@ -0,0 +1,21 @@ +<% + +my $new = new FS::ac_field ( { + map { + $_, scalar($cgi->param($_)); + } fields('ac_field') +} ); + +my $error = ''; +$error = $new->check; + +unless ( $error ) { $error = $new->insert; } + +if ( $error ) { + $cgi->param('error', $error); + print $cgi->redirect(popurl(2). "ac.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(2). "ac.cgi?". $cgi->param('acnum')); +} + +%> diff --git a/httemplate/edit/process/ac_type.cgi b/httemplate/edit/process/ac_type.cgi new file mode 100755 index 000000000..ca232ba58 --- /dev/null +++ b/httemplate/edit/process/ac_type.cgi @@ -0,0 +1,28 @@ +<% + +my $actypenum = $cgi->param('actypenum'); + +my $old = qsearchs('ac_type',{'actypenum'=>$actypenum}) if $actypenum; + +my $new = new FS::ac_type ( { + map { + $_, scalar($cgi->param($_)); + } fields('ac_type') +} ); + +my $error = ''; +if ( $actypenum ) { + $error = $new->replace($old); +} else { + $error = $new->insert; + $actypenum=$new->getfield('actypenum'); +} + +if ( $error ) { + $cgi->param('error', $error); + print $cgi->redirect(popurl(2). "ac_type.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(3). "browse/ac_type.cgi"); +} + +%> diff --git a/httemplate/edit/process/part_ac_field.cgi b/httemplate/edit/process/part_ac_field.cgi new file mode 100755 index 000000000..38ad586f7 --- /dev/null +++ b/httemplate/edit/process/part_ac_field.cgi @@ -0,0 +1,21 @@ +<% + +my $new = new FS::part_ac_field ( { + map { + $_, scalar($cgi->param($_)); + } fields('part_ac_field') +} ); + +my $error = ''; +$error = $new->check; + +unless ( $error ) { $error = $new->insert; } + +if ( $error ) { + $cgi->param('error', $error); + print $cgi->redirect(popurl(2). "ac_type.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(2). "ac_type.cgi?". $cgi->param('actypenum')); +} + +%> diff --git a/httemplate/edit/process/part_svc.cgi b/httemplate/edit/process/part_svc.cgi index 859670b17..69e8ac2fa 100755 --- a/httemplate/edit/process/part_svc.cgi +++ b/httemplate/edit/process/part_svc.cgi @@ -17,7 +17,7 @@ my $new = new FS::part_svc ( { push @fields, 'usergroup' if $svcdb eq 'svc_acct'; #kludge map { ( $svcdb.'__'.$_, $svcdb.'__'.$_.'_flag' ) } @fields; } grep defined( $FS::Record::dbdef->table($_) ), - qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www ) + qw( svc_acct svc_domain svc_acct_sm svc_forward svc_www svc_broadband ) ) } ); diff --git a/httemplate/edit/process/svc_broadband.cgi b/httemplate/edit/process/svc_broadband.cgi new file mode 100644 index 000000000..fd7ba20d5 --- /dev/null +++ b/httemplate/edit/process/svc_broadband.cgi @@ -0,0 +1,45 @@ +<% + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum = $1; + +my $old; +if ( $svcnum ) { + $old = qsearchs('svc_broadband', { 'svcnum' => $svcnum } ) + or die "fatal: can't find broadband service (svcnum $svcnum)!"; +} else { + $old = ''; +} + +my $new = new FS::svc_broadband ( { + map { + ($_, scalar($cgi->param($_))); + } ( fields('svc_broadband'), qw( pkgnum svcpart ) ) +} ); + +unless ( $new->ip_addr ) { + $new->ip_addr(join('.', (map $cgi->param('ip_addr_'.$_), (a..d)))); +} + +unless ( $new->mac_addr) { + $new->mac_addr(join(':', (map $cgi->param('mac_addr_'.$_), (a..f)))); +} + +my $error; +if ( $svcnum ) { + $error = $new->replace($old); +} else { + $error = $new->insert; + $svcnum = $new->svcnum; +} + +if ( $error ) { + $cgi->param('error', $error); + $cgi->param('ip_addr', $new->ip_addr); + $cgi->param('mac_addr', $new->mac_addr); + print $cgi->redirect(popurl(2). "svc_broadband.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(3). "view/svc_broadband.cgi?" . $svcnum ); +} + +%> diff --git a/httemplate/edit/svc_broadband.cgi b/httemplate/edit/svc_broadband.cgi new file mode 100644 index 000000000..d8a1f7a2a --- /dev/null +++ b/httemplate/edit/svc_broadband.cgi @@ -0,0 +1,219 @@ + +<% + +my( $svcnum, $pkgnum, $svcpart, $part_svc, $svc_broadband ); +if ( $cgi->param('error') ) { + $svc_broadband = new FS::svc_broadband ( { + map { $_, scalar($cgi->param($_)) } fields('svc_broadband') + } ); + $svcnum = $svc_broadband->svcnum; + $pkgnum = $cgi->param('pkgnum'); + $svcpart = $cgi->param('svcpart'); + $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); + die "No part_svc entry!" unless $part_svc; +} else { + my($query) = $cgi->keywords; + if ( $query =~ /^(\d+)$/ ) { #editing + $svcnum=$1; + $svc_broadband=qsearchs('svc_broadband',{'svcnum'=>$svcnum}) + or die "Unknown (svc_broadband) svcnum!"; + + my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum}) + or die "Unknown (cust_svc) svcnum!"; + + $pkgnum=$cust_svc->pkgnum; + $svcpart=$cust_svc->svcpart; + + $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); + die "No part_svc entry!" unless $part_svc; + + } else { #adding + + $svc_broadband = new FS::svc_broadband({}); + + foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart + $pkgnum=$1 if /^pkgnum(\d+)$/; + $svcpart=$1 if /^svcpart(\d+)$/; + } + $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart}); + die "No part_svc entry!" unless $part_svc; + + $svcnum=''; + + #set fixed and default fields from part_svc + foreach my $part_svc_column ( + grep { $_->columnflag } $part_svc->all_part_svc_column + ) { + $svc_broadband->setfield( $part_svc_column->columnname, + $part_svc_column->columnvalue, + ); + } + + } +} +my $action = $svc_broadband->svcnum ? 'Edit' : 'Add'; + +my @ac_list; + +if ($pkgnum) { + + unless ($svc_broadband->actypenum) {die "actypenum must be set fixed";}; + @ac_list = qsearch('ac', { actypenum => $svc_broadband->getfield('actypenum') }); + +} elsif ( $action eq 'Edit' ) { + + #Nothing? + +} else { + die "\$action eq Add, but \$pkgnum is null!\n"; +} + + +my $p1 = popurl(1); +print header("Broadband Service $action", ''); + +print qq!Error: !, $cgi->param('error'), + "" + if $cgi->param('error'); + +print qq!
    !; + +#display + + + +#svcnum +print qq!!; +print qq!Service #!, $svcnum ? $svcnum : "(NEW)", "

    "; + +#pkgnum +print qq!!; + +#svcpart +print qq!!; + +#actypenum +print ''; + + +print &ntable("#cccccc",2) . qq!AC!; + +#acnum +if (( $part_svc->part_svc_column('acnum')->columnflag eq 'F' ) or + ( !$pkgnum )) { + + my $ac = qsearchs('ac', { acnum => $svc_broadband->acnum }); + my ($acnum, $acname) = ($ac->acnum, $ac->acname); + + print qq!! . + qq!${acnum}: ${acname}!; + +} else { + + my @ac_list = qsearch('ac', { actypenum => $svc_broadband->actypenum }); + print qq!! . + qq!${speed_down}Kbps!; +} else { + print qq!! . + qq!Kbps!; +} + +print 'Upload speed'; +if ( $part_svc->part_svc_column('speed_up')->columnflag eq 'F' ) { + print qq!! . + qq!${speed_up}Kbps!; +} else { + print qq!! . + qq!Kbps!; +} + +#ip_addr & ip_netmask +#We're assuming that ip_netmask is fixed if ip_addr is fixed. +#If it isn't, well, what the heck are you doing!?!? + +my ($ip_addr, $ip_netmask) = ($svc_broadband->ip_addr, + $svc_broadband->ip_netmask); + +print 'IP address/Mask'; +if ( $part_svc->part_svc_column('ip_addr')->columnflag eq 'F' ) { + print qq!! . + qq!! . + qq!${ip_addr}/${ip_netmask}!; +} else { + $ip_addr =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; + print <. + . + . + / + + + +

    Leave the IP address and netmask blank for automatic assignment of a /32 address. Specifing the netmask and not the address will force assignment of a larger block.

    + +END +} + +#mac_addr +my $mac_addr = $svc_broadband->mac_addr; + +unless (( $part_svc->part_svc_column('mac_addr')->columnflag eq 'F' ) and + ( $mac_addr eq '' )) { + print 'MAC Address'; + if ( $part_svc->part_svc_column('mac_addr')->columnflag eq 'F' ) { #Why? + print qq!! . + qq!${mac_addr}!; + } else { + #Ewwww + $mac_addr =~ /^([a-f0-9]{2}):([a-f0-9]{2}):([a-f0-9]{2}):([a-f0-9]{2}):([a-f0-9]{2}):([a-f0-9]{2})$/i; + print <: + : + : + : + : + + +END + + } +} + +#location +my $location = $svc_broadband->location; + +print 'Location'; +if ( $part_svc->part_svc_column('location')->columnflag eq 'F' ) { + print qq!
    ${location}
    !; +} else { + print qq!!; +} + +print '
    '; + +print < + + +END +%> diff --git a/httemplate/index.html b/httemplate/index.html index dce020b1b..2cb707326 100644 --- a/httemplate/index.html +++ b/httemplate/index.html @@ -194,6 +194,10 @@ into counties and assign different tax rates to each.
  • View/Edit Access Numbers - Points of Presence +
  • View/Edit AC Types + - Broadband service access concentrator types. +
  • View/Edit AC + - Broadband service access concentrators.
  • View/Edit invoice events - Actions for overdue invoices
  • View/Edit message catalog - Change error messages and other customizable labels. diff --git a/httemplate/view/svc_broadband.cgi b/httemplate/view/svc_broadband.cgi new file mode 100644 index 000000000..156edfaec --- /dev/null +++ b/httemplate/view/svc_broadband.cgi @@ -0,0 +1,75 @@ + +<% + +my($query) = $cgi->keywords; +$query =~ /^(\d+)$/; +my $svcnum = $1; +my $svc_broadband = qsearchs( 'svc_broadband', { 'svcnum' => $svcnum } ) + or die "svc_broadband: Unknown svcnum $svcnum"; + +#false laziness w/all svc_*.cgi +my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } ); +my $pkgnum = $cust_svc->getfield('pkgnum'); +my($cust_pkg, $custnum); +if ($pkgnum) { + $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $pkgnum } ); + $custnum = $cust_pkg->custnum; +} else { + $cust_pkg = ''; + $custnum = ''; +} +#eofalse + +my $ac = qsearchs('ac', { acnum => $svc_broadband->getfield('acnum') }); + +my ( + $acname, + $acnum, + $speed_down, + $speed_up, + $ip_addr, + $ip_netmask, + $mac_addr, + $location + ) = ( + $ac->getfield('acname'), + $ac->getfield('acnum'), + $svc_broadband->getfield('speed_down'), + $svc_broadband->getfield('speed_up'), + $svc_broadband->getfield('ip_addr'), + $svc_broadband->getfield('ip_netmask'), + $svc_broadband->getfield('mac_addr'), + $svc_broadband->getfield('location') + ); + +print header('Broadband Service View', menubar( + ( ( $custnum ) + ? ( "View this package (#$pkgnum)" => "${p}view/cust_pkg.cgi?$pkgnum", + "View this customer (#$custnum)" => "${p}view/cust_main.cgi?$custnum", + ) + : ( "Cancel this (unaudited) website" => + "${p}misc/cancel-unaudited.cgi?$svcnum" ) + ), + "Main menu" => $p, +)). + qq!Edit this information
    !. + ntable("#cccccc"). ''. ntable("#cccccc",2). + qq!Service number!. + qq!$svcnum!. + qq!AC!. + qq!$acnum: $acname!. + qq!Download Speed!. + qq!$speed_down!. + qq!Upload Speed!. + qq!$speed_up!. + qq!IP Address/Mask!. + qq!$ip_addr/$ip_netmask!. + qq!MAC Address!. + qq!$mac_addr!. + qq!Location!. + qq!
    $location
    !. + ''. + '
    '. joblisting({'svcnum'=>$svcnum}, 1). + '' +; +%> -- cgit v1.2.1