diff options
| -rw-r--r-- | FS/FS/Conf.pm | 17 | ||||
| -rw-r--r-- | FS/FS/UI/Web.pm | 5 | ||||
| -rw-r--r-- | FS/FS/UI/Web/small_custview.pm | 2 | ||||
| -rw-r--r-- | FS/FS/cust_main.pm | 49 | ||||
| -rwxr-xr-x | httemplate/edit/cust_main.cgi | 2 | ||||
| -rw-r--r-- | httemplate/index.html | 2 | ||||
| -rwxr-xr-x | httemplate/search/cust_main.cgi | 15 | ||||
| -rw-r--r-- | 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 <A HREF="$url?! . $cust_main->custnum . '">'      if $url; -  $html .= 'Customer #<B>'. $cust_main->custnum. '</B></A>'. +  $html .= 'Customer #<B>'. $cust_main->display_custnum. '</B></A>'.      ' - <B><FONT COLOR="#'. $cust_main->statuscolor. '">'.      ucfirst($cust_main->status). '</FONT></B>'.      ntable('#e8e8e8'). '<TR><TD VALIGN="top">'. 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 @@  <INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">  % if ( $custnum ) {  -  Customer #<B><% $custnum %></B> -  +  Customer #<B><% $cust_main->display_custnum %></B> -     <B><FONT COLOR="#<% $cust_main->statuscolor %>">      <% ucfirst($cust_main->status) %>    </FONT></B> 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;       <TR> -      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><A HREF="view/cust_main.cgi?<% $custnum %>"><% $custnum %>: <% $cust_main->name %></A></TD> +      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><A HREF="view/cust_main.cgi?<% $custnum %>"><% $cust_main->display_custnum %>: <% $cust_main->name %></A></TD>      </TR>  %       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;      <TR> -      <TD CLASS="grid" ALIGN="right" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><A HREF="<% $view %>"><FONT SIZE=-1><% $custnum %></FONT></A></TD> +      <TD CLASS="grid" ALIGN="right" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><A HREF="<% $view %>"><FONT SIZE=-1><% $cust_main->display_custnum %></FONT></A></TD>        <TD CLASS="grid" ALIGN="center" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><FONT SIZE="-1" COLOR="#<% $statuscol %>"><B><% ucfirst($status) %></B></FONT></TD>        <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><A HREF="<% $view %>"><FONT SIZE=-1><% "$last, $first" %></FONT></A></TD>        <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><% $pcompany %></TD> @@ -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") %><TR><TD><% &ntable("#cccccc",2) %>  <TR>    <TD ALIGN="right">Customer number</TD> -  <TD BGCOLOR="#ffffff"><% $cust_main->custnum %></TD> +  <TD BGCOLOR="#ffffff"><% $cust_main->display_custnum %></TD>  </TR>  <TR>    <TD ALIGN="right">Status</TD>    <TD BGCOLOR="#ffffff"><FONT COLOR="#<% $cust_main->statuscolor %>"><B><% ucfirst($cust_main->status) %></B></FONT></TD>  </TR> -% -%  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 } ); +   <TR> +     <TD ALIGN="right">Agent</TD> +     <TD BGCOLOR="#ffffff"><% $agent->agentnum %>: <% $agent->agent %></TD> +   </TR> +% } -<TR> -  <TD ALIGN="right">Agent</TD> -  <TD BGCOLOR="#ffffff"><% $agent->agentnum %>: <% $agent->agent %></TD> -</TR> -% -%  } else { -%    $agent = $agents[0]; -%  } -% -%  if ( $cust_main->agent_custid ) { -% - +%  if ( $cust_main->agent_custid +%       && ! $conf->exists('cust_main-default_agent_custid') ) {  <TR>    <TD ALIGN="right">Agent customer ref#</TD> @@ -109,4 +97,14 @@  % }  </TABLE></TD></TR></TABLE> +<%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]; +</%init>  | 
