X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main.pm;h=997eceaccb69ab6bd19e3922cfae25877297718f;hb=840121c8e483108d435744ae684502c558972644;hp=b45540095e127f602545f793d78783fafa6f9c0d;hpb=3464d4c767130711e724fbd96e391e03fa3a1796;p=freeside.git diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index b45540095..997eceacc 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -2,13 +2,14 @@ package FS::cust_main; use strict; use vars qw( @ISA $conf $Debug $import ); +use vars qw( $realtime_bop_decline_quiet ); #ugh use Safe; use Carp; BEGIN { eval "use Time::Local;"; die "Time::Local version 1.05 required with Perl versions before 5.6" if $] < 5.006 && !defined($Time::Local::VERSION); - eval "use Time::Local qw(timelocal_nocheck);"; + eval "use Time::Local qw(timelocal timelocal_nocheck);"; } use Date::Format; #use Date::Manip; @@ -38,6 +39,8 @@ use FS::Msgcat qw(gettext); @ISA = qw( FS::Record ); +$realtime_bop_decline_quiet = 0; + $Debug = 1; #$Debug = 1; @@ -372,7 +375,7 @@ returns false. This will completely remove all traces of the customer record. This is not what you want when a customer cancels service; for that, cancel all of the -customer's packages (see L). +customer's packages (see L). If the customer has any uncancelled packages, you need to pass a new (valid) customer number for those packages to be transferred to. Cancelled packages @@ -490,6 +493,12 @@ sub replace { local $SIG{TSTP} = 'IGNORE'; local $SIG{PIPE} = 'IGNORE'; + if ( $self->payby eq 'COMP' && $self->payby ne $old->payby + && $conf->config('users-allow_comp') ) { + return "You are not permitted to create complimentary accounts." + unless grep { $_ eq getotaker } $conf->config('users-allow_comp'); + } + my $oldAutoCommit = $FS::UID::AutoCommit; local $FS::UID::AutoCommit = 0; my $dbh = dbh; @@ -603,7 +612,7 @@ sub check { || $self->ut_numbern('referral_custnum') ; #barf. need message catalogs. i18n. etc. - $error .= "Please select a advertising source." + $error .= "Please select an advertising source." if $error =~ /^Illegal or empty \(numeric\) refnum: /; return $error if $error; @@ -746,6 +755,11 @@ sub check { } elsif ( $self->payby eq 'COMP' ) { + if ( !$self->custnum && $conf->config('users-allow_comp') ) { + return "You are not permitted to create complimentary accounts." + unless grep { $_ eq getotaker } $conf->config('users-allow_comp'); + } + $error = $self->ut_textn('payinfo'); return "Illegal comp account issuer: ". $self->payinfo if $error; @@ -798,7 +812,7 @@ sub check { #warn "AFTER: \n". $self->_dump; - ''; #no error + $self->SUPER::check; } =item all_pkgs @@ -1288,6 +1302,8 @@ report_badcard - This option is deprecated. force_print - This option is deprecated; see the invoice events web interface. +quiet - set true to surpress email card/ACH decline notices. + =cut sub collect { @@ -1364,7 +1380,12 @@ sub collect { warn "calling invoice event (". $part_bill_event->eventcode. ")\n" if $Debug; my $cust_main = $self; #for callback - my $error = eval $part_bill_event->eventcode; + + my $error; + { + local $realtime_bop_decline_quiet = 1 if $options{'quiet'}; + $error = eval $part_bill_event->eventcode; + } my $status = ''; my $statustext = ''; @@ -1447,11 +1468,11 @@ sub retry_realtime { grep { #$_->part_bill_event->plan eq 'realtime-card' $_->part_bill_event->eventcode =~ - /\$cust_bill\->realtime_(card|ach|lec)$/ + /\$cust_bill\->realtime_(card|ach|lec)/ && $_->status eq 'done' && $_->statustext } - $_->cust_bill_event; + $cust_bill->cust_bill_event; next unless @cust_bill_event; my $error = $cust_bill_event[0]->retry; if ( $error ) { @@ -1556,6 +1577,10 @@ sub realtime_bop { ( $content{account_number}, $content{routing_code} ) = split('@', $self->payinfo); $content{bank_name} = $self->payname; + $content{account_type} = 'CHECKING'; + $content{account_name} = $payname; + $content{customer_org} = $self->company ? 'B' : 'I'; + $content{customer_ssn} = $self->ss; } elsif ( $method eq 'LEC' ) { $content{phone} = $self->payinfo; } @@ -1665,7 +1690,8 @@ sub realtime_bop { my $perror = "$processor error: ". $transaction->error_message; - if ( !$options{'quiet'} && $conf->exists('emaildecline') + if ( !$options{'quiet'} && !$realtime_bop_decline_quiet + && $conf->exists('emaildecline') && grep { $_ ne 'POST' } $self->invoicing_list ) { my @templ = $conf->config('declinetemplate');