X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FUI%2FWeb.pm;h=031a0e67a61f095a40f4819e8681af5172a47391;hb=f80515a9803e46e644a52391db8bdd73b65d5f35;hp=18c2dfe8ca7f7a685c1d9bb7f345d9e4fe533518;hpb=34e738b5b65449b79a34dba9ff1fd742e278e6d5;p=freeside.git diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm index 18c2dfe8c..031a0e67a 100644 --- a/FS/FS/UI/Web.pm +++ b/FS/FS/UI/Web.pm @@ -1,11 +1,123 @@ package FS::UI::Web; +use vars qw($DEBUG); +use FS::Conf; +use FS::Record qw(dbdef); + #use vars qw(@ISA); #use FS::UI #@ISA = qw( FS::UI ); +use Date::Parse; +sub parse_beginning_ending { + my($cgi) = @_; + + $cgi->param('beginning') =~ /^([ 0-9\-\/]{0,10})$/; + my $beginning = str2time($1) || 0; + + #need an option to turn off the + 86399 ??? + $cgi->param('ending') =~ /^([ 0-9\-\/]{0,10})$/; + my $ending = ( $1 ? str2time($1) : 4294880896 ) + 86399; + + ( $beginning, $ending ); +} + +### +# cust_main report methods +### + +=item cust_header + +Returns an array of customer information headers according to the +B configuration setting. + +=cut + +use vars qw( @cust_fields ); + +sub cust_sql_fields { + my @fields = qw( last first company ); + push @fields, map "ship_$_", @fields + if dbdef->table('cust_main')->column('ship_last'); + map "cust_main.$_", @fields; +} + +sub cust_header { + + warn "FS::svc_Common::cust_header called" + if $DEBUG; + + my $conf = new FS::Conf; + + my %header2method = ( + 'Customer' => 'name', + 'Cust#' => 'custnum', + 'Name' => 'contact', + 'Company' => 'company', + '(bill) Customer' => 'name', + '(service) Customer' => 'ship_name', + '(bill) Name' => 'contact', + '(service) Name' => 'ship_contact', + '(bill) Company' => 'company', + '(service) Company' => 'ship_company', + ); + + my @cust_header; + if ( $conf->exists('cust-fields') + && $conf->config('cust-fields') =~ /^([\w \|\#\(\)]+):/ + ) + { + warn " found cust-fields configuration value" + if $DEBUG; + + my $cust_fields = $1; + @cust_header = split(/ \| /, $cust_fields); + @cust_fields = map { $header2method{$_} } @cust_header; + } else { + warn " no cust-fields configuration value found; using default 'Customer'" + if $DEBUG; + @cust_header = ( 'Customer' ); + @cust_fields = ( 'name' ); + } + #my $svc_x = shift; + @cust_header; +} + +=item cust_fields + +Given a svc_ object that contains fields from cust_main (say, from a +JOINed search. See httemplate/search/svc_* for examples), returns an array +of customer information according to the cust-fields configuration +setting, or "(unlinked)" if this service is not linked to a customer. + +=cut + +sub cust_fields { + my $svc_x = shift; + warn "FS::svc_Common::cust_fields called for $svc_x ". + "(cust_fields: @cust_fields)" + if $DEBUG > 1; + + cust_header() unless @cust_fields; + + my $seen_unlinked = 0; + map { + if ( $svc_x->custnum ) { + warn " $svc_x -> $_" + if $DEBUG > 1; + $svc_x->$_(@_); + } else { + warn " ($svc_x unlinked)" + if $DEBUG > 1; + $seen_unlinked++ ? '' : '(unlinked)'; + } + } @cust_fields; +} + +### # begin JSRPC code... +### package FS::UI::Web::JSRPC; @@ -36,9 +148,27 @@ sub new { sub start_job { my $self = shift; - my %param = @_; + warn "FS::UI::Web::start_job: ". join(', ', @_) if $DEBUG; +# my %param = @_; + my %param = (); + while ( @_ ) { + my( $field, $value ) = splice(@_, 0, 2); + unless ( exists( $param{$field} ) ) { + $param{$field} = $value; + } elsif ( ! ref($param{$field}) ) { + $param{$field} = [ $param{$field}, $value ]; + } else { + push @{$param{$field}}, $value; + } + } warn "FS::UI::Web::start_job\n". - join('', map " $_ => $param{$_}\n", keys %param ) + join('', map { + if ( ref($param{$_}) ) { + " $_ => [ ". join(', ', @{$param{$_}}). " ]\n"; + } else { + " $_ => $param{$_}\n"; + } + } keys %param ) if $DEBUG; #first get the CGI params shipped off to a job ASAP so an id can be returned