From: ivan Date: Tue, 23 Dec 2003 02:36:38 +0000 (+0000) Subject: add svc_external X-Git-Tag: NET_WHOIS_RAW_0_31~212 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=31d6d0e8d0d624cd051440acf322cd8893c1026e;hp=d20581bcbf2809d5c2969d773b16a0c8714a6dec add svc_external --- diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm index 17e5cf908..1b46841ec 100644 --- a/FS/FS/part_export.pm +++ b/FS/FS/part_export.pm @@ -1076,6 +1076,10 @@ tie my %forward_shellcommands_options, 'Tie::IxHash', 'notes' => '', }, }, + + 'svc_external' => { + }, + ); =back diff --git a/FS/MANIFEST b/FS/MANIFEST index 877f3ce0d..3cbf0e91f 100644 --- a/FS/MANIFEST +++ b/FS/MANIFEST @@ -102,6 +102,7 @@ FS/svc_acct.pm FS/svc_acct_pop.pm FS/svc_broadband.pm FS/svc_domain.pm +FS/svc_external.pm FS/router.pm FS/type_pkgs.pm FS/nas.pm @@ -184,8 +185,10 @@ t/radius_usergroup.t t/session.t t/svc_acct.t t/svc_acct_pop.t +t/svc_broadband.t t/svc_Common.t t/svc_domain.t +t/svc_external.t t/svc_forward.t t/svc_www.t t/type_pkgs.t diff --git a/FS/t/svc_broadband.t b/FS/t/svc_broadband.t new file mode 100644 index 000000000..02dc1124a --- /dev/null +++ b/FS/t/svc_broadband.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::svc_broadband; +$loaded=1; +print "ok 1\n"; diff --git a/FS/t/svc_external.t b/FS/t/svc_external.t new file mode 100644 index 000000000..20a676784 --- /dev/null +++ b/FS/t/svc_external.t @@ -0,0 +1,5 @@ +BEGIN { $| = 1; print "1..1\n" } +END {print "not ok 1\n" unless $loaded;} +use FS::svc_external; +$loaded=1; +print "ok 1\n"; diff --git a/htetc/global.asa b/htetc/global.asa index 2e31be394..f550560ee 100644 --- a/htetc/global.asa +++ b/htetc/global.asa @@ -56,6 +56,7 @@ use FS::svc_www; use FS::router; use FS::addr_block; use FS::svc_broadband; +use FS::svc_external; use FS::type_pkgs; use FS::part_export; use FS::part_export_option; diff --git a/htetc/handler.pl b/htetc/handler.pl index ba73bcfaf..c5f685f85 100644 --- a/htetc/handler.pl +++ b/htetc/handler.pl @@ -114,6 +114,7 @@ sub handler use FS::router; use FS::addr_block; use FS::svc_broadband; + use FS::svc_external; use FS::type_pkgs; use FS::part_export; use FS::part_export_option; diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi index 18319b341..10e89288f 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_forward - mail forwarding
  • svc_www - Virtual domain website
  • svc_broadband - Broadband/High-speed Internet service +
  • svc_external - Externally-tracked service @@ -129,6 +130,10 @@ my %defs = ( 'ip_addr' => 'IP address. Leave blank for automatic assignment.', 'blocknum' => 'Address block.', }, + 'svc_external' => { + #'id' => '', + #'title' => '', + }, ); foreach my $svcdb (grep dbdef->table($_), keys %defs ) { @@ -151,7 +156,7 @@ my %defs = ( my @dbs = $hashref->{svcdb} ? ( $hashref->{svcdb} ) - : qw( svc_acct svc_domain svc_forward svc_www svc_broadband ); + : qw( svc_acct svc_domain svc_forward svc_www svc_broadband svc_external ); tie my %svcdb, 'Tie::IxHash', map { $_=>$_ } grep dbdef->table($_), @dbs; my $widget = new HTML::Widgets::SelectLayers( diff --git a/httemplate/edit/process/svc_external.cgi b/httemplate/edit/process/svc_external.cgi new file mode 100755 index 000000000..728cd2189 --- /dev/null +++ b/httemplate/edit/process/svc_external.cgi @@ -0,0 +1,29 @@ +<% + +$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!"; +my $svcnum =$1; + +my $old = qsearchs('svc_external',{'svcnum'=>$svcnum}) if $svcnum; + +my $new = new FS::svc_external ( { + map { + ($_, scalar($cgi->param($_))); + } ( fields('svc_external'), qw( pkgnum svcpart ) ) +} ); + +my $error = ''; +if ( $svcnum ) { + $error = $new->replace($old); +} else { + $error = $new->insert; + $svcnum = $new->getfield('svcnum'); +} + +if ($error) { + $cgi->param('error', $error); + print $cgi->redirect(popurl(2). "svc_external.cgi?". $cgi->query_string ); +} else { + print $cgi->redirect(popurl(3). "view/svc_external.cgi?$svcnum"); +} + +%> diff --git a/httemplate/edit/svc_external.cgi b/httemplate/edit/svc_external.cgi new file mode 100644 index 000000000..bcfc85e3f --- /dev/null +++ b/httemplate/edit/svc_external.cgi @@ -0,0 +1,105 @@ + +<% + +my( $svcnum, $pkgnum, $svcpart, $part_svc, $svc_external ); +if ( $cgi->param('error') ) { + $svc_external = new FS::svc_external ( { + map { $_, scalar($cgi->param($_)) } fields('svc_external') + } ); + $svcnum = $svc_external->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_external=qsearchs('svc_external',{'svcnum'=>$svcnum}) + or die "Unknown (svc_external) 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 + + foreach $_ (split(/-/,$query)) { #get & untaint pkgnum & svcpart + $pkgnum=$1 if /^pkgnum(\d+)$/; + $svcpart=$1 if /^svcpart(\d+)$/; + } + $svc_external = new FS::svc_external { svcpart => $svcpart }; + + $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_external->setfield( $part_svc_column->columnname, + $part_svc_column->columnvalue, + ); + } + + } +} +my $action = $svc_external->svcnum ? 'Edit' : 'Add'; + +my $p1 = popurl(1); +print header("External 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!!; + +my($id,$title)=( + $svc_external->id, + $svc_external->title, +); + +print &ntable("#cccccc",2), + 'External ID'. + qq!!. + ''. + 'Title'. + qq!!. + ''; + +foreach my $field ($svc_external->virtual_fields) { + if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) { + # If the flag is X, it won't even show up in $svc_acct->virtual_fields. + print $svc_external->pvf($field)->widget('HTML', 'edit', + $svc_external->getfield($field)); + } +} + +%> + +
    +
    + + + diff --git a/httemplate/view/svc_external.cgi b/httemplate/view/svc_external.cgi new file mode 100644 index 000000000..e5c977f13 --- /dev/null +++ b/httemplate/view/svc_external.cgi @@ -0,0 +1,52 @@ + +<% + +my($query) = $cgi->keywords; +$query =~ /^(\d+)$/; +my $svcnum = $1; +my $svc_external = qsearchs( 'svc_external', { 'svcnum' => $svcnum } ) + or die "svc_external: 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 + +%> + +<%= header('External 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) external service" => + "${p}misc/cancel-unaudited.cgi?$svcnum" ) + ), + "Main menu" => $p, +)) %> + +Edit this information
    +<%= ntable("#cccccc") %><%= ntable("#cccccc",2) %> + +Service number + <%= $svcnum %> +External ID + <%= $svc_external->id %> +Title + <%= $svc_external->title %> + +<% foreach (sort { $a cmp $b } $svc_external->virtual_fields) { %> + <%= $svc_external->pvf($_)->widget('HTML', 'view', $svc_external->getfield($_)) %> +<% } %> + + +
    <%= joblisting({'svcnum'=>$svcnum}, 1) %> +