X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FUI%2FWeb.pm;h=a05a667b36325b2a32fcac704db035122a49c51f;hb=0dd05e9ff98263d2d42b419b1e278a5a3bc594b2;hp=23f0e83c4958c2371df75e193513652a21988d81;hpb=6af586392aef95c6fe35326ced1a9073b068a78c;p=freeside.git
diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm
index 23f0e83c4..a05a667b3 100644
--- a/FS/FS/UI/Web.pm
+++ b/FS/FS/UI/Web.pm
@@ -4,6 +4,7 @@ use strict;
use vars qw($DEBUG $me);
use FS::Conf;
use FS::Record qw(dbdef);
+use Number::Format;
#use vars qw(@ISA);
#use FS::UI
@@ -18,19 +19,20 @@ $me = '[FS::UID::Web]';
use Date::Parse;
sub parse_beginning_ending {
- my($cgi) = @_;
+ my($cgi, $prefix) = @_;
+ $prefix .= '_' if $prefix;
my $beginning = 0;
- if ( $cgi->param('begin') =~ /^(\d+)$/ ) {
+ if ( $cgi->param($prefix.'begin') =~ /^(\d+)$/ ) {
$beginning = $1;
- } elsif ( $cgi->param('beginning') =~ /^([ 0-9\-\/]{1,64})$/ ) {
+ } elsif ( $cgi->param($prefix.'beginning') =~ /^([ 0-9\-\/]{1,64})$/ ) {
$beginning = str2time($1) || 0;
}
my $ending = 4294967295; #2^32-1
- if ( $cgi->param('end') =~ /^(\d+)$/ ) {
+ if ( $cgi->param($prefix.'end') =~ /^(\d+)$/ ) {
$ending = $1 - 1;
- } elsif ( $cgi->param('ending') =~ /^([ 0-9\-\/]{1,64})$/ ) {
+ } elsif ( $cgi->param($prefix.'ending') =~ /^([ 0-9\-\/]{1,64})$/ ) {
#probably need an option to turn off the + 86399
$ending = str2time($1) + 86399;
}
@@ -185,6 +187,31 @@ sub bytecount_unexact {
return(sprintf("%.2f Gbytes", $bc/1000000000));
}
+sub parse_bytecount {
+ my $bc = shift;
+ return $bc if (($bc =~ tr/.//) > 1);
+ $bc =~ /^\s*([\d.]*)\s*([kKmMgGtT]?)[bB]?\s*$/ or return $bc;
+ my $base = $1;
+ return $bc unless length $base;
+ my $exponent = index ' kmgt', lc($2);
+ return $bc if ($exponent < 0 && $2);
+ $exponent = 0 if ($exponent < 0);
+ return $base * 1024 ** $exponent;
+}
+
+sub display_bytecount {
+ my $bc = shift;
+ return $bc unless ($bc =~ /^(\d+)$/);
+ my $conf = new FS::Conf;
+ my $f = new Number::Format;
+ my $precision = $conf->exists('datavolume-significantdigits')
+ ? $conf->config('datavolume-significantdigits')
+ : 3;
+ my $unit = $conf->exists('datavolume-forcemegabytes') ? 'M' : 'A';
+
+ return $f->format_bytes($bc, precision => $precision, unit => $unit);
+}
+
###
# cust_main report subroutines
###
@@ -198,15 +225,16 @@ configuration value.
=cut
-use vars qw( @cust_fields );
+use vars qw( @cust_fields @cust_colors @cust_styles @cust_aligns );
sub cust_header {
- warn "FS::svc_Common::cust_header called"
+ warn "FS::UI:Web::cust_header called"
if $DEBUG;
my %header2method = (
'Customer' => 'name',
+ 'Cust. Status' => 'ucfirst_cust_status',
'Cust#' => 'custnum',
'Name' => 'contact',
'Company' => 'company',
@@ -227,6 +255,16 @@ sub cust_header {
'Invoicing email(s)' => 'invoicing_list_emailonly_scalar',
);
+ my %header2colormethod = (
+ 'Cust. Status' => 'cust_statuscolor',
+ );
+ my %header2style = (
+ 'Cust. Status' => 'b',
+ );
+ my %header2align = (
+ 'Cust. Status' => 'c',
+ );
+
my $cust_fields;
my @cust_header;
if ( @_ && $_[0] ) {
@@ -240,22 +278,31 @@ sub cust_header {
my $conf = new FS::Conf;
if ( $conf->exists('cust-fields')
- && $conf->config('cust-fields') =~ /^([\w \|\#\(\)]+):?/
+ && $conf->config('cust-fields') =~ /^([\w\. \|\#\(\)]+):?/
)
{
warn " found cust-fields configuration value"
if $DEBUG;
$cust_fields = $1;
} else {
- warn " no cust-fields configuration value found; using default 'Customer'"
+ warn " no cust-fields configuration value found; using default 'Cust. Status | Customer'"
if $DEBUG;
- $cust_fields = 'Customer';
+ $cust_fields = 'Cust. Status | Customer';
}
}
@cust_header = split(/ \| /, $cust_fields);
@cust_fields = map { $header2method{$_} } @cust_header;
+ @cust_colors = map { exists $header2colormethod{$_}
+ ? $header2colormethod{$_}
+ : ''
+ }
+ @cust_header;
+ @cust_styles = map { exists $header2style{$_} ? $header2style{$_} : '' }
+ @cust_header;
+ @cust_aligns = map { exists $header2align{$_} ? $header2align{$_} : 'l' }
+ @cust_header;
#my $svc_x = shift;
@cust_header;
@@ -286,9 +333,9 @@ sub cust_sql_fields {
map "cust_main.$_", @fields;
}
-=item cust_fields SVC_OBJECT [ CUST_FIELDS_VALUE ]
+=item cust_fields OBJECT [ CUST_FIELDS_VALUE ]
-Given a svc_ object that contains fields from cust_main (say, from a
+Given an object that contains fields from cust_main (say, from a
JOINed search. See httemplate/search/svc_* for examples), returns an array
of customer information, or "(unlinked)" if this service is not linked to a
customer.
@@ -301,7 +348,7 @@ setting is supplied, the cust-fields configuration value.
sub cust_fields {
my $svc_x = shift;
- warn "FS::svc_Common::cust_fields called for $svc_x ".
+ warn "FS::UI::Web::cust_fields called for $svc_x ".
"(cust_fields: @cust_fields)"
if $DEBUG > 1;
@@ -322,6 +369,67 @@ sub cust_fields {
} @cust_fields;
}
+=item cust_colors
+
+Returns an array of subroutine references (or empty strings) for returning
+customer information colors.
+
+As with L, the fields returned are
+defined by the supplied customer fields setting, or if no customer fields
+setting is supplied, the cust-fields configuration value.
+
+=cut
+
+sub cust_colors {
+ map {
+ my $method = $_;
+ if ( $method ) {
+ sub { shift->$method(@_) };
+ } else {
+ '';
+ }
+ } @cust_colors;
+}
+
+=item cust_styles
+
+Returns an array of customer information styles.
+
+As with L, the fields returned are
+defined by the supplied customer fields setting, or if no customer fields
+setting is supplied, the cust-fields configuration value.
+
+=cut
+
+sub cust_styles {
+ map {
+ if ( $_ ) {
+ $_;
+ } else {
+ '';
+ }
+ } @cust_styles;
+}
+
+=item cust_aligns
+
+Returns an array or scalar (depending on context) of customer information
+alignments.
+
+As with L, the fields returned are
+defined by the supplied customer fields setting, or if no customer fields
+setting is supplied, the cust-fields configuration value.
+
+=cut
+
+sub cust_aligns {
+ if ( wantarray ) {
+ @cust_aligns;
+ } else {
+ join('', @cust_aligns);
+ }
+}
+
###
# begin JSRPC code...
###