From 36245fa05ae5d9fb0ef893cdfe5ad98f88fd7e77 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Tue, 31 May 2016 23:53:17 -0500 Subject: [PATCH] RT#42380: Show usage for broadband services in selfservice portal --- FS/FS/ClientAPI/MyAccount.pm | 14 +++ FS/FS/cust_svc.pm | 12 ++- fs_selfservice/FS-SelfService/cgi/selfservice.cgi | 2 +- fs_selfservice/FS-SelfService/cgi/view_usage.html | 100 +++++++++++----------- 4 files changed, 71 insertions(+), 57 deletions(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index ecac223da..986306524 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -1856,6 +1856,20 @@ sub list_svcs { # would it make sense to put this in a svc_* method? + if (!$hide_usage and grep(/^$svcdb$/, qw(svc_acct svc_broadband)) and $part_svc->part_export_usage) { + my $last_bill = $cust_pkg->last_bill || 0; + my $now = time; + my $up_used = $cust_svc->attribute_since_sqlradacct($last_bill,$now,'AcctInputOctets'); + my $down_used = $cust_svc->attribute_since_sqlradacct($last_bill,$now,'AcctOutputOctets'); + %hash = ( + %hash, + 'seconds_used' => $cust_svc->seconds_since_sqlradacct($last_bill,$now), + 'upbytes_used' => display_bytecount($up_used), + 'downbytes_used' => display_bytecount($down_used), + 'totalbytes_used' => display_bytecount($up_used + $down_used) + ); + } + if ( $svcdb eq 'svc_acct' ) { foreach (qw(username email finger seconds)) { $hash{$_} = $svc_x->$_; diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index 9d9ecdd50..3f7348321 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -823,13 +823,12 @@ sub seconds_since { 'internal session db deprecated'; }; =item seconds_since_sqlradacct TIMESTAMP_START TIMESTAMP_END -See L. Equivalent to -$cust_svc->svc_x->seconds_since_sqlradacct, but more efficient. Meaningless -for records where B is not "svc_acct". +Equivalent to $cust_svc->svc_x->seconds_since_sqlradacct, but +more efficient. Meaningless for records where B is not +svc_acct or svc_broadband. =cut -#note: implementation here, POD in FS::svc_acct sub seconds_since_sqlradacct { my($self, $start, $end) = @_; @@ -968,12 +967,11 @@ sub seconds_since_sqlradacct { =item attribute_since_sqlradacct TIMESTAMP_START TIMESTAMP_END ATTRIBUTE See L. Equivalent to -$cust_svc->svc_x->attribute_since_sqlradacct, but more efficient. Meaningless -for records where B is not "svc_acct". +$cust_svc->svc_x->attribute_since_sqlradacct, but more efficient. +Meaningless for records where B is not svc_acct or svc_broadband. =cut -#note: implementation here, POD in FS::svc_acct #(false laziness w/seconds_since_sqlradacct above) sub attribute_since_sqlradacct { my($self, $start, $end, $attrib) = @_; diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi index 1054e6a00..2407361f0 100755 --- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi +++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi @@ -998,7 +998,7 @@ sub delete_svc { sub view_usage { my $res = list_svcs( 'session_id' => $session_id, - 'svcdb' => [ 'svc_acct', 'svc_phone', 'svc_port', 'svc_pbx' ], + 'svcdb' => [ 'svc_acct', 'svc_broadband', 'svc_phone', 'svc_port', 'svc_pbx' ], 'ncancelled' => 1, ); if ($res->{hide_usage}) { diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage.html b/fs_selfservice/FS-SelfService/cgi/view_usage.html index 4099a57f5..07ccfedf1 100644 --- a/fs_selfservice/FS-SelfService/cgi/view_usage.html +++ b/fs_selfservice/FS-SelfService/cgi/view_usage.html @@ -1,21 +1,27 @@ <%= $url = "$selfurl?action="; %by_pkg_label = (); # not used yet, but I'm sure it will be... - @svc_acct = (); @svc_phone = (); @svc_port = (); @svc_pbx = (); - - foreach (@svcs) { - $by_pkg_label{ $_->{pkg_label} } ||= []; - push @{ $by_pkg_label{ $_->{pkg_label} } }, $_; - if ( $_->{svcdb} eq 'svc_acct' ) { - push @svc_acct, $_; - } elsif ( $_->{svcdb} eq 'svc_phone' ) { - push @svc_phone, $_; - } elsif ( $_->{svcdb} eq 'svc_port' ) { - push @svc_port, $_; - } elsif ( $_->{svcdb} eq 'svc_pbx' ) { - push @svc_pbx, $_; + @bytes_svcs = (); # contains svc_acct and svc_broadband + @bytes_cols = qw(seconds_used seconds upbytes_used upbytes downbytes_used downbytes totalbytes_used totalbytes); + %bytes_show = map { $_ => 0 } @bytes_cols; + + foreach my $svc (@svcs) { + $by_pkg_label{ $svc->{pkg_label} } ||= []; + push @{ $by_pkg_label{ $svc->{pkg_label} } }, $svc; + + if (( $svc->{svcdb} eq 'svc_acct' ) || ( $svc->{svcdb} eq 'svc_broadband' )) { + foreach my $field (@bytes_cols) { + $bytes_show{$field} = 1 if length($svc->{$field}) or (($field !~ /_used$/) && $svc->{'recharge_'.$field}); + } + push @bytes_svcs, $svc; + } elsif ( $svc->{svcdb} eq 'svc_phone' ) { + push @svc_phone, $svc; + } elsif ( $svc->{svcdb} eq 'svc_port' ) { + push @svc_port, $svc; + } elsif ( $svc->{svcdb} eq 'svc_pbx' ) { + push @svc_pbx, $svc; } } ''; @@ -26,56 +32,52 @@ $OUT .= qq!$error

!; } ''; %> -<%= if ( @svc_acct ) { - $OUT.= ' - - - - - - - '; - } else { - $OUT .= ''; +<%= if ( @bytes_svcs ) { + $OUT .= '
AccountTime remainingUpload remainingDownload remainingTotal remaining
'; + $OUT .= ''; + $OUT .= '' if $bytes_show{'seconds_used'}; + $OUT .= '' if $bytes_show{'seconds'}; + $OUT .= '' if $bytes_show{'upbytes_used'}; + $OUT .= '' if $bytes_show{'upbytes'}; + $OUT .= '' if $bytes_show{'downbytes_used'}; + $OUT .= '' if $bytes_show{'downbytes'}; + $OUT .= '' if $bytes_show{'totalbytes_used'}; + $OUT .= '' if $bytes_show{'totalbytes'}; + $OUT .= ''; } %> -<%= foreach my $svc ( @svc_acct ) { - my $link = "${url}view_usage_details;". - "svcnum=$svc->{'svcnum'};beginning=0;ending=0"; +<%= foreach my $svc ( @bytes_svcs ) { + my $link = "${url}view_usage_details;". + "svcnum=$svc->{'svcnum'};beginning=0;ending=0"; my $username = $svc->{'value'}; $username =~ s/@.*?$//g if $view_usage_nodomain; - $OUT .= ''; + $OUT .= ''; + $OUT .= ''; + foreach my $field (@bytes_cols) { + $OUT .= '' if $bytes_show{$field}; + } if ( $svc->{'recharge_amount'} ) { my $link = "${url}process_order_recharge;". "svcnum=$svc->{'svcnum'}"; - $OUT .= ''; + $OUT .= ''; + foreach my $field ( qw(seconds upbytes downbytes totalbytes) ) { + $OUT .= '' if $bytes_show{$field.'_used'}; + if ($bytes_show{$field}) { + $OUT .= ''; + } + } + $OUT .= ''; } } %> -<%= scalar(@svc_acct) ? '
AccountTime usedTime remainingUpload usedUpload remainingDownload usedDownload remainingTotal usedTotal remaining
'; - $OUT .= qq!!. $svc->{'label'}. ': '. $username .''; - $OUT .= ''; - $OUT .= $svc->{'seconds'}; - $OUT .= ''; - $OUT .= $svc->{'upbytes'}; - $OUT .= ''; - $OUT .= $svc->{'downbytes'}; - $OUT .= ''; - $OUT .= $svc->{'totalbytes'}; - $OUT .= '
' . qq!!. $svc->{'label'}. ': '. $username .'' . $svc->{$field} . '
'; + $OUT .= '
'; $OUT .= qq!!.'Recharge for $'; $OUT .= $svc->{'recharge_amount'} . ' with'; - $OUT .= ''; - $OUT .= $svc->{'recharge_seconds'} if $svc->{'recharge_seconds'}; - $OUT .= ''; - $OUT .= $svc->{'recharge_upbytes'} if $svc->{'recharge_upbytes'}; - $OUT .= ''; - $OUT .= $svc->{'recharge_downbytes'} if $svc->{'recharge_downbytes'}; - $OUT .= ''; - $OUT .= $svc->{'recharge_totalbytes'} if $svc->{'recharge_totalbytes'}; - $OUT .= '
'; + $OUT .= $svc->{'recharge_'.$field} if $svc->{'recharge_'.$field}; + $OUT .= '


' : '' %> +<%= scalar(@bytes_svcs) ? '

' : '' %> <%= if ( @svc_phone or @svc_pbx ) { %any = (); -- 2.11.0