my $cust_main = $_;
my $hashref = $cust_main->hashref;
$hashref->{$_} = $cust_main->$_()
- foreach qw(name status statuscolor);
+ foreach qw(name status statuscolor status_label);
delete $hashref->{$_} foreach qw( payinfo paycvv );
$hashref;
} @cust_main
);
$return{has_ship_address} = $cust_main->has_ship_address;
- $return{status} = $cust_main->status;
+ $return{status} = $cust_main->status_label; #$cust_main->status; #better to break anyone obscurely testing for strings in self-service than to have to upgrade every front-end to get the new status to display
$return{statuscolor} = $cust_main->statuscolor;
+ $return{status_label} = $cust_main->status_label;
# compatibility: some places in selfservice use this to determine
# if there's a ship address
my %header2method = (
'Customer' => 'name',
- 'Cust. Status' => 'ucfirst_cust_status',
+ 'Cust. Status' => 'cust_status_label',
'Cust#' => 'custnum',
'Name' => 'contact',
'Company' => 'company',
$html .= 'Customer #<B>'. $cust_main->display_custnum. '</B></A>'.
' - <B><FONT COLOR="#'. $cust_main->statuscolor. '">'.
- ucfirst($cust_main->status). '</FONT></B>';
+ $cust_main->status_label. '</FONT></B>';
my @part_tag = $cust_main->part_tag;
if ( @part_tag ) {
}
local($FS::cust_main::ignore_expired_card) = 1;
- local($FS::cust_main::ignore_illegal_zip) = 1;
+ #this is long-gone... would need to set an equivalent in cust_location #local($FS::cust_main::ignore_illegal_zip) = 1;
local($FS::cust_main::ignore_banned_card) = 1;
local($FS::cust_main::skip_fuzzyfiles) = 1;
require 5.006;
use strict;
-use vars qw( $DEBUG $me $conf
- @encrypted_fields
- $import
- $ignore_expired_card $ignore_banned_card $ignore_illegal_zip
- $ignore_invalid_card
- $skip_fuzzyfiles
- @paytypes
- );
use Carp;
use Scalar::Util qw( blessed );
use Time::Local qw(timelocal);
# 1 is mostly method/subroutine entry and options
# 2 traces progress of some operations
# 3 is even more information including possibly sensitive data
-$DEBUG = 0;
-$me = '[FS::cust_main]';
+our $DEBUG = 0;
+our $me = '[FS::cust_main]';
+
+our $import = 0;
+our $ignore_expired_card = 0;
+our $ignore_banned_card = 0;
+our $ignore_invalid_card = 0;
-$import = 0;
-$ignore_expired_card = 0;
-$ignore_banned_card = 0;
-$ignore_invalid_card = 0;
+our $skip_fuzzyfiles = 0;
-$skip_fuzzyfiles = 0;
+our $ucfirst_nowarn = 0;
-@encrypted_fields = ('payinfo', 'paycvv');
+our @encrypted_fields = ('payinfo', 'paycvv');
sub nohistory_fields { ('payinfo', 'paycvv'); }
-@paytypes = ('', 'Personal checking', 'Personal savings', 'Business checking', 'Business savings');
+our @paytypes = ('', 'Personal checking', 'Personal savings', 'Business checking', 'Business savings');
+our $conf;
#ask FS::UID to run this stuff for us later
#$FS::UID::callback{'FS::cust_main'} = sub {
install_callback FS::UID sub {
=over 4
-=item prospect - No packages have ever been ordered
+=item prospect
+
+No packages have ever been ordered. Displayed as "No packages".
+
+=item ordered
+
+Recurring packages all are new (not yet billed).
-=item ordered - Recurring packages all are new (not yet billed).
+=item active
-=item active - One or more recurring packages is active
+One or more recurring packages is active.
-=item inactive - No active recurring packages, but otherwise unsuspended/uncancelled (the inactive status is new - previously inactive customers were mis-identified as cancelled)
+=item inactive
-=item suspended - All non-cancelled recurring packages are suspended
+No active recurring packages, but otherwise unsuspended/uncancelled (the inactive status is new - previously inactive customers were mis-identified as cancelled).
-=item cancelled - All recurring packages are cancelled
+=item suspended
+
+All non-cancelled recurring packages are suspended.
+
+=item cancelled
+
+All recurring packages are cancelled.
=back
=item ucfirst_status
+Deprecated, use the cust_status_label method instead.
+
Returns the status with the first character capitalized.
=cut
-sub ucfirst_status { shift->ucfirst_cust_status(@_); }
+sub ucfirst_status {
+ carp "ucfirst_status deprecated, use cust_status_label" unless $ucfirst_nowarn;
+ local($ucfirst_nowarn) = 1;
+ shift->ucfirst_cust_status(@_);
+}
sub ucfirst_cust_status {
+ carp "ucfirst_cust_status deprecated, use cust_status_label" unless $ucfirst_nowarn;
my $self = shift;
ucfirst($self->cust_status);
}
+=item cust_status_label
+
+Returns the display label for this status.
+
+=cut
+
+sub cust_status_label {
+ my $self = shift;
+ __PACKAGE__->statuslabels->{$self->cust_status};
+}
+
=item statuscolor
Returns a hex triplet color string for this customer's status.
}
+sub statuslabels {
+ #my $self = shift; #i guess i'm a class method
+
+ my %statuslabels = (
+ 'prospect' => 'No packages',
+ 'active' => 'Active',
+ 'ordered' => 'Ordered',
+ 'inactive' => 'Inactive',
+ 'suspended' => 'Suspended',
+ 'cancelled' => 'Cancelled',
+ );
+
+ \%statuslabels;
+}
+
=item cancelled_sql
=cut
=cut
sub ucfirst_cust_status {
+ carp "ucfirst_cust_status deprecated, use cust_status_label";
my $self = shift;
$self->cust_linked
? ucfirst( $self->cust_status(@_) )
: $self->cust_unlinked_msg;
}
+=item cust_status_label
+
+=cut
+
+sub cust_status_label {
+ my $self = shift;
+
+ $self->cust_linked
+ ? FS::cust_main::cust_status_label($self)
+ : $self->cust_unlinked_msg;
+}
+
=item cust_statuscolor
Given an object that contains fields from cust_main (say, from a JOINed
balance
credit_limit
invoicing_list_emailonly
- cust_status ucfirst_cust_status cust_statuscolor
+ cust_status ucfirst_cust_status cust_statuscolor cust_status_label
signupdate dundate
packages recurdates
$OUT .=
'<TR>'.
"$td<FONT COLOR=\"". $customer->{'statuscolor'}. '">'.
- ucfirst($customer->{'status'}). "</TD>". "$td</TD>".
+ $customer->{'status_label'}. "</TD>". "$td</TD>".
"$td$a". $customer->{'name'}. "</A></TD>".
'</TR>';
#"$td</TD>".
<DIV ID="fs_small_custview">
Customer #<B><%= $display_custnum %></B>
- - <B><FONT COLOR="#<%= $statuscolor %>"><%= ucfirst($status)%></FONT></B>
+ - <B><FONT COLOR="#<%= $statuscolor %>"><%= $status_label %></FONT></B>
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=2 BGCOLOR="<%= $box_bgcolor ||= '#c0c0c0' %>">
<TR>
% if ( $custnum ) {
<% mt('Customer #') |h %><B><% $cust_main->display_custnum %></B> -
<B><FONT COLOR="#<% $cust_main->statuscolor %>">
- <% ucfirst($cust_main->status) %>
+ <% $cust_main->status_label %>
</FONT></B>
<BR><BR>
% }
'$balance' => 'Current balance',
'$credit_limit' => 'Credit limit',
'$invoicing_list_emailonly' => 'Billing email address',
- '$cust_status' => 'Status',
- '$ucfirst_cust_status' => 'Status, capitalized',
- '$cust_statuscolor' => 'Status color code',
+ #'$cust_status' => 'Status (raw internal label)',
+ '$cust_status_label' => 'Status (display label)',
+ '$cust_statuscolor' => 'Status color code',
'$company_name' => 'Our company name',
'$company_address'=> 'Our company address',
'$company_phonenum' => 'Our phone number',
<TR>
<TD ALIGN="right" VALIGN="top"><B><% $custnum %>: </B></TD>
<TD ALIGN="left">
- <% $_->name |h %>—<B><FONT COLOR="#<%$_->statuscolor%>"><%$_->ucfirst_cust_status%></FONT></B><BR>
+ <% $_->name |h %>—<B><FONT COLOR="#<%$_->statuscolor%>"><%$_->cust_status_label%></FONT></B><BR>
<% $_->address1 |h %><BR>
<% $_->city |h %>, <% $_->state %> <% $_->zip %>
</TD>
% my $return = [ map [ $_->custnum,
% $_->name,
% $_->balance,
-% $_->ucfirst_status,
+% $_->status_label,
% $_->statuscolor,
% scalar($_->open_cust_bill),
% $_->display_custnum,
[ $c->custnum,
$c->name,
$c->balance,
- $c->ucfirst_status,
+ $c->status_label,
$c->statuscolor,
scalar($c->open_cust_bill),
$c->display_custnum,
[ map [ $_->custnum,
$_->name,
$_->balance,
- $_->ucfirst_status,
+ $_->status_label,
$_->statuscolor,
scalar($_->open_cust_bill),
$_->display_custnum,
'color' => [ ('') x (5 + $x),
sub {
my $cust_pkg = shift->cust_pkg;
- $cust_pkg ? ucfirst($cust_pkg->statuscolor) : '';
+ $cust_pkg ? $cust_pkg->statuscolor : '';
},
('') x 6,
],
% ? qq!<A HREF="$view"><FONT SIZE=-1>!. encode_entities($company). '</FONT></A>'
% : '<FONT SIZE=-1> </FONT>';
%
-% my $status = $cust_main->status;
-% my $statuscol = $cust_main->statuscolor;
+% my $status_label = $cust_main->status_label;
+% my $statuscolor = $cust_main->statuscolor;
<TR>
<TD CLASS="grid" ALIGN="right" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan %>>
<A HREF="<% $view %>"><FONT SIZE=-1><% $cust_main->display_custnum %></FONT></A>
</TD>
<TD CLASS="grid" ALIGN="center" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan %>>
- <FONT SIZE="-1" COLOR="#<% $statuscol %>"><B><% ucfirst($status) %></B></FONT>
+ <FONT SIZE="-1" COLOR="#<% $statuscolor %>"><B><% $status_label %></B></FONT>
</TD>
<TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan %>>
<A HREF="<% $view %>"><FONT SIZE=-1><% "$last, $first" |h %></FONT></A>
<TR>
<TD ALIGN="right"><% mt('Status') |h %></TD>
- <TD BGCOLOR="#ffffff"><FONT COLOR="#<% $cust_main->statuscolor %>"><B><% ucfirst($cust_main->status) %></B></FONT></TD>
+ <TD BGCOLOR="#ffffff"><FONT COLOR="#<% $cust_main->statuscolor %>"><B><% $cust_main->status_label %></B></FONT></TD>
</TR>
% my @part_tag = $cust_main->part_tag;