diff options
Diffstat (limited to 'httemplate/view/svc_acct.cgi')
-rwxr-xr-x | httemplate/view/svc_acct.cgi | 87 |
1 files changed, 74 insertions, 13 deletions
diff --git a/httemplate/view/svc_acct.cgi b/httemplate/view/svc_acct.cgi index f6c1b026c..58591fcb5 100755 --- a/httemplate/view/svc_acct.cgi +++ b/httemplate/view/svc_acct.cgi @@ -2,7 +2,6 @@ <% my $conf = new FS::Conf; -my $mydomain = $conf->config('domain'); my($query) = $cgi->keywords; $query =~ /^(\d+)$/; @@ -32,11 +31,7 @@ if ( $svc_acct->domsvc ) { die "Unknown domain" unless $svc_domain; $domain = $svc_domain->domain; } else { - unless ( $mydomain ) { - die "No legacy domain config file and no svc_domain.svcnum record ". - "for svc_acct.domsvc: ". $cust_svc->domsvc; - } - $domain = $mydomain; + die "No svc_domain.svcnum record for svc_acct.domsvc: ". $cust_svc->domsvc; } %> @@ -61,6 +56,57 @@ function areyousure(href) { <% +#if ( $cust_pkg && $cust_pkg->part_pkg->plan eq 'sqlradacct_hour' ) { +if ( $part_svc->part_export('sqlradius') + || $part_svc->part_export('sqlradius_withdomain') +) { + + my $last_bill; + my %plandata; + if ( $cust_pkg ) { + #false laziness w/httemplate/edit/part_pkg... this stuff doesn't really + #belong in plan data + %plandata = map { /^(\w+)=(.*)$/; ( $1 => $2 ); } + split("\n", $cust_pkg->part_pkg->plandata ); + + $last_bill = $cust_pkg->last_bill; + } else { + $last_bill = 0; + %plandata = (); + } + + my $seconds = $svc_acct->seconds_since_sqlradacct( $last_bill, time ); + my $hour = int($seconds/3600); + my $min = int( ($seconds%3600) / 60 ); + my $sec = $seconds%60; + + my $input = $svc_acct->attribute_since_sqlradacct( + $last_bill, time, 'AcctInputOctets' + ) / 1048576; + my $output = $svc_acct->attribute_since_sqlradacct( + $last_bill, time, 'AcctOutputOctets' + ) / 1048576; + + if ( $seconds ) { + print "Online <B>$hour</B>h <B>$min</B>m <B>$sec</B>s"; + } else { + print 'Has not logged on'; + } + + if ( $cust_pkg ) { + print ' since last bill ('. time2str("%C", $last_bill). ') - '. + $plandata{recur_included_hours}. ' total hours in plan<BR>'; + } else { + print ' (no billing cycle available for unaudited account)<BR>'; + } + + print 'Input: <B>'. sprintf("%.3f", $input). '</B> megabytes<BR>'; + print 'Output: <B>'. sprintf("%.3f", $output). '</B> megabytes<BR>'; + + print '<BR>'; + +} + #print qq!<BR><A HREF="../misc/sendconfig.cgi?$svcnum">Send account information</A>!; print qq!<A HREF="${p}edit/svc_acct.cgi?$svcnum">Edit this information</A><BR>!. @@ -83,7 +129,7 @@ if ( $password =~ /^\*\w+\* (.*)$/ ) { print "<I>(login disabled)</I> "; } if ( $conf->exists('showpasswords') ) { - print "$password"; + print '<PRE>'. encode_entities($password). '</PRE>'; } else { print "<I>(hidden)</I>"; } @@ -96,7 +142,9 @@ if ( $conf->exists('security_phrase') ) { $svc_acct->sec_phrase. '</TD></TR>'; } -my $svc_acct_pop = qsearchs('svc_acct_pop',{'popnum'=>$svc_acct->popnum}); +my $svc_acct_pop = $svc_acct->popnum + ? qsearchs('svc_acct_pop',{'popnum'=>$svc_acct->popnum}) + : ''; print "<TR><TD ALIGN=\"right\">Access number</TD>". "<TD BGCOLOR=\"#ffffff\">". $svc_acct_pop->text. '</TD></TR>' if $svc_acct_pop; @@ -126,7 +174,7 @@ if ($svc_acct->slipip) { : $svc_acct->slipip ). "</TD>"; my($attribute); - foreach $attribute ( grep /^radius_/, fields('svc_acct') ) { + foreach $attribute ( grep /^radius_/, $svc_acct->fields ) { #warn $attribute; $attribute =~ /^radius_(.*)$/; my $pattribute = $FS::raddb::attrib{$1}; @@ -134,7 +182,7 @@ if ($svc_acct->slipip) { "<TD BGCOLOR=\"#ffffff\">". $svc_acct->getfield($attribute). "</TD></TR>"; } - foreach $attribute ( grep /^rc_/, fields('svc_acct') ) { + foreach $attribute ( grep /^rc_/, $svc_acct->fields ) { #warn $attribute; $attribute =~ /^rc_(.*)$/; my $pattribute = $FS::raddb::attrib{$1}; @@ -149,8 +197,21 @@ if ($svc_acct->slipip) { print '<TR><TD ALIGN="right">RADIUS groups</TD><TD BGCOLOR="#ffffff">'. join('<BR>', $svc_acct->radius_groups). '</TD></TR>'; -print "</TABLE></TD></TR></TABLE>". - '<BR>'. joblisting({'svcnum'=>$svcnum}, 1). - "</BODY></HTML>"; +# Can this be abstracted further? Maybe a library function like +# widget('HTML', 'view', $svc_acct) ? It would definitely make UI +# style management easier. + +foreach (sort { $a cmp $b } $svc_acct->virtual_fields) { + print $svc_acct->pvf($_)->widget('HTML', 'view', $svc_acct->getfield($_)), + "\n"; +} +%> +</TABLE></TD></TR></TABLE> +<% + +print '<BR><BR>'; + +print join("\n", $conf->config('svc_acct-notes') ). '<BR><BR>'. + joblisting({'svcnum'=>$svcnum}, 1). '</BODY></HTML>'; %> |