From 987b49fbf7754b4954018e258d27a6ea72499f84 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 10 Oct 2008 01:15:50 +0000 Subject: [PATCH] add options to auto-generate agent_custid and display it as the customer number, RT#4099 --- FS/FS/Conf.pm | 17 +++++++++++++ FS/FS/UI/Web.pm | 5 +++- FS/FS/UI/Web/small_custview.pm | 2 +- FS/FS/cust_main.pm | 49 ++++++++++++++++++++++++++++++++++++ httemplate/edit/cust_main.cgi | 2 +- httemplate/index.html | 2 +- httemplate/search/cust_main.cgi | 15 ++++++++--- httemplate/view/cust_main/misc.html | 50 ++++++++++++++++++------------------- 8 files changed, 109 insertions(+), 33 deletions(-) diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 610d590d1..46e636b68 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -2423,6 +2423,23 @@ worry that config_items is freeside-specific and icky. }, { + 'key' => 'cust_main-default_agent_custid', + 'section' => 'UI', + 'description' => 'Display the agent_custid field instead of the custnum field.', + 'type' => 'checkbox', + }, + + { + 'key' => 'cust_main-auto_agent_custid', + 'section' => 'UI', + 'description' => 'Automatically assign an agent_custid - select format', + 'type' => 'select', + 'select_hash' => [ '' => 'No', + '1YMMXXXXXXXX' => '1YMMXXXXXXXX', + ], + }, + + { 'key' => 'cust_main-default_areacode', 'section' => 'UI', 'description' => 'Default area code for customers.', diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm index 2e9261bc0..744d5f793 100644 --- a/FS/FS/UI/Web.pm +++ b/FS/FS/UI/Web.pm @@ -214,6 +214,8 @@ sub cust_header { warn "FS::UI:Web::cust_header called" if $DEBUG; + my $conf = new FS::Conf; + my %header2method = ( 'Customer' => 'name', 'Cust. Status' => 'ucfirst_cust_status', @@ -239,6 +241,8 @@ sub cust_header { 'Payment Type' => 'payby', 'Current Balance' => 'current_balance', ); + $header2method{'Cust#'} = 'display_custnum' + if $conf->exists('cust_main-default_agent_custid'); my %header2colormethod = ( 'Cust. Status' => 'cust_statuscolor', @@ -261,7 +265,6 @@ sub cust_header { } else { - my $conf = new FS::Conf; if ( $conf->exists('cust-fields') && $conf->config('cust-fields') =~ /^([\w\. \|\#\(\)]+):?/ ) diff --git a/FS/FS/UI/Web/small_custview.pm b/FS/FS/UI/Web/small_custview.pm index 079ae9368..f8e202092 100644 --- a/FS/FS/UI/Web/small_custview.pm +++ b/FS/FS/UI/Web/small_custview.pm @@ -33,7 +33,7 @@ sub small_custview { $html = qq!View ' if $url; - $html .= 'Customer #'. $cust_main->custnum. ''. + $html .= 'Customer #'. $cust_main->display_custnum. ''. ' - '. ucfirst($cust_main->status). ''. ntable('#e8e8e8'). ''. ntable("#cccccc",2). diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 225854c06..c048482df 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -343,6 +343,9 @@ sub insert { $self->signupdate(time) unless $self->signupdate; + $self->auto_agent_custid() + if $conf->config('cust_main-auto_agent_custid') && ! $self->agent_custid; + my $error = $self->SUPER::insert; if ( $error ) { $dbh->rollback if $oldAutoCommit; @@ -419,6 +422,35 @@ sub insert { } +use File::CounterFile; +sub auto_agent_custid { + my $self = shift; + + my $format = $conf->config('cust_main-auto_agent_custid'); + my $agent_custid; + if ( $format eq '1YMMXXXXXXXX' ) { + + my $counter = new File::CounterFile 'cust_main.agent_custid'; + $counter->lock; + + my $ym = 100000000000 + time2str('%y%m00000000', time); + if ( $ym > $counter->value ) { + $counter->{'value'} = $agent_custid = $ym; + $counter->{'updated'} = 1; + } else { + $agent_custid = $counter->inc; + } + + $counter->unlock; + + } else { + die "Unknown cust_main-auto_agent_custid format: $format"; + } + + $self->agent_custid($agent_custid); + +} + sub start_copy_skel { my $self = shift; @@ -1233,6 +1265,7 @@ sub check { || $self->ut_textn('stateid_state') || $self->ut_textn('invoice_terms') ; + #barf. need message catalogs. i18n. etc. $error .= "Please select an advertising source." if $error =~ /^Illegal or empty \(numeric\) refnum: /; @@ -5051,6 +5084,22 @@ sub cust_refund { qsearch( 'cust_refund', { 'custnum' => $self->custnum } ) } +=item display_custnum + +Returns the displayed customer number for this customer: agent_custid if +cust_main-default_agent_custid is set and it has a value, custnum otherwise. + +=cut + +sub display_custnum { + my $self = shift; + if ( $conf->exists('cust_main-default_agent_custid') && $self->agent_custid ){ + return $self->agent_custid; + } else { + return $self->custnum; + } +} + =item name Returns a name string for this customer, either "Company (Last, First)" or diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index 10086a4dd..8de73c513 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -12,7 +12,7 @@ % if ( $custnum ) { - Customer #<% $custnum %> - + Customer #<% $cust_main->display_custnum %> - <% ucfirst($cust_main->status) %> diff --git a/httemplate/index.html b/httemplate/index.html index 60ab26f86..c813991f9 100644 --- a/httemplate/index.html +++ b/httemplate/index.html @@ -36,7 +36,7 @@ % next unless $cust_main; - <% $custnum %>: <% $cust_main->name %> + <% $cust_main->display_custnum %>: <% $cust_main->name %> % if ( $bgcolor eq $bgcolor1 ) { diff --git a/httemplate/search/cust_main.cgi b/httemplate/search/cust_main.cgi index 1ddafae0b..36e4374ee 100755 --- a/httemplate/search/cust_main.cgi +++ b/httemplate/search/cust_main.cgi @@ -62,8 +62,13 @@ % if ( $cgi->param('browse') ) { % my $query = $cgi->param('browse'); % if ( $query eq 'custnum' ) { -% $sortby=\*custnum_sort; -% $orderby = "ORDER BY custnum"; +% if ( $conf->exists('cust_main-default_agent_custid') ) { +% $sortby=\*display_custnum_sort; +% $orderby = "ORDER BY CASE WHEN agent_custid IS NOT NULL AND agent_custid != '' THEN CAST(agent_custid AS BIGINT) ELSE custnum END"; +% } else { +% $sortby=\*custnum_sort; +% $orderby = "ORDER BY custnum"; +% } % } elsif ( $query eq 'last' ) { % $sortby=\*last_sort; % $orderby = "ORDER BY LOWER(last || ' ' || first)"; @@ -379,7 +384,7 @@ % my $statuscol = $cust_main->statuscolor; - ><% $custnum %> + ><% $cust_main->display_custnum %> ><% ucfirst($status) %> ><% "$last, $first" %> ><% $pcompany %> @@ -538,6 +543,10 @@ % || lc($a->first) cmp lc($b->first);; %} % +%sub display_custnum_sort { +% $a->display_custnum <=> $b->display_custnum; +%} +% %sub custnum_sort { % $a->getfield('custnum') <=> $b->getfield('custnum'); %} diff --git a/httemplate/view/cust_main/misc.html b/httemplate/view/cust_main/misc.html index 9528db243..060da87dd 100644 --- a/httemplate/view/cust_main/misc.html +++ b/httemplate/view/cust_main/misc.html @@ -1,41 +1,29 @@ -% -% my( $cust_main ) = @_; -% my $conf = new FS::Conf; -% my $date_format = ($conf->config('date_format') || "%m/%d/%Y"); -% - - <% ntable("#cccccc") %><% &ntable("#cccccc",2) %> Customer number - <% $cust_main->custnum %> + <% $cust_main->display_custnum %> Status <% ucfirst($cust_main->status) %> -% -% my @agents = qsearch( 'agent', {} ); -% my $agent; -% unless ( scalar(@agents) == 1 ) { -% $agent = qsearchs('agent',{ 'agentnum' => $cust_main->agentnum } ); -% +%my $agent; +%if ( $num_agents == 1 ) { +% my @agents = qsearchs( 'agent', {} ); +% $agent = $agents[0]; +%} else { +% $agent = qsearchs('agent',{ 'agentnum' => $cust_main->agentnum } ); + + Agent + <% $agent->agentnum %>: <% $agent->agent %> + +% } - - Agent - <% $agent->agentnum %>: <% $agent->agent %> - -% -% } else { -% $agent = $agents[0]; -% } -% -% if ( $cust_main->agent_custid ) { -% - +% if ( $cust_main->agent_custid +% && ! $conf->exists('cust_main-default_agent_custid') ) { Agent customer ref# @@ -109,4 +97,14 @@ % } +<%init> + +my( $cust_main ) = @_; +my $conf = new FS::Conf; +my $date_format = ($conf->config('date_format') || "%m/%d/%Y"); + +my $sth = dbh->prepare('SELECT COUNT(*) FROM agent') or die dbh->errstr; +$sth->execute or die $sth->errstr; +my $num_agents = $sth->fetchrow_arrayref->[0]; + -- 2.11.0