X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FMisc.pm;h=a1d41e0a4ff677594f42b35a2e2ef6dd4674279a;hb=4e35589e637aa3a3615a780d4086085c5ecb1782;hp=06fa51f5461244362e0960305250c3ce634e3c95;hpb=7517eaa583bcb213b62dfd0c11288aa50a350e8a;p=freeside.git diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index 06fa51f54..a1d41e0a4 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -5,9 +5,15 @@ use vars qw ( @ISA @EXPORT_OK $DEBUG ); use Exporter; use Carp; use Data::Dumper; +#do NOT depend on any FS:: modules here, causes weird (sometimes unreproducable +#until on client machine) dependancy loops. put them in FS::Misc::Something +#instead @ISA = qw( Exporter ); -@EXPORT_OK = qw( send_email send_fax states_hash state_label ); +@EXPORT_OK = qw( send_email send_fax + states_hash counties state_label + card_types + ); $DEBUG = 0; @@ -359,13 +365,12 @@ sub states_hash { # sort map { s/[\n\r]//g; $_; } map { $_->state; } - qsearch({ - 'select' => 'state', - 'table' => 'cust_main_county', - 'hashref' => { 'country' => $country }, - 'extra_sql' => 'GROUP BY state', - }) - ; + qsearch({ + 'select' => 'state', + 'table' => 'cust_main_county', + 'hashref' => { 'country' => $country }, + 'extra_sql' => 'GROUP BY state', + }); #it could throw a fatal "Invalid country code" error (for example "AX") my $subcountry = eval { new Locale::SubCountry($country) } @@ -378,6 +383,26 @@ sub states_hash { @states; } +=item counties STATE COUNTRY + +Returns a list of counties for this state and country. + +=cut + +sub counties { + my( $state, $country ) = @_; + + sort map { s/[\n\r]//g; $_; } + map { $_->county } + qsearch({ + 'select' => 'DISTINCT county', + 'table' => 'cust_main_county', + 'hashref' => { 'state' => $state, + 'country' => $country, + }, + }); +} + =item state_label STATE COUNTRY_OR_LOCALE_SUBCOUNRY_OBJECT =cut @@ -405,6 +430,47 @@ sub state_label { } +=item card_types + +Returns a hash reference of the accepted credit card types. Keys are shorter +identifiers and values are the longer strings used by the system (see +L). + +=cut + +#$conf from above + +sub card_types { + my $conf = new FS::Conf; + + my %card_types = ( + #displayname #value (Business::CreditCard) + "VISA" => "VISA card", + "MasterCard" => "MasterCard", + "Discover" => "Discover card", + "American Express" => "American Express card", + "Diner's Club/Carte Blanche" => "Diner's Club/Carte Blanche", + "enRoute" => "enRoute", + "JCB" => "JCB", + "BankCard" => "BankCard", + "Switch" => "Switch", + "Solo" => "Solo", + ); + my @conf_card_types = grep { ! /^\s*$/ } $conf->config('card-types'); + if ( @conf_card_types ) { + #perhaps the hash is backwards for this, but this way works better for + #usage in selfservice + %card_types = map { $_ => $card_types{$_} } + grep { + my $d = $_; + grep { $card_types{$d} eq $_ } @conf_card_types + } + keys %card_types; + } + + \%card_types; +} + =back =head1 BUGS