X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=site_perl%2Fcust_main.pm;h=6c9c0b109a4c602549abf7c73e75a54465cf4d54;hb=f57f15482187e6fe502d4569dcd698d3205abd81;hp=ec282731eff299577a53265db5b42afac0da4cb4;hpb=57ec0f19ef5202f425f9ad2c459069fb3b88e28a;p=freeside.git diff --git a/site_perl/cust_main.pm b/site_perl/cust_main.pm index ec282731e..6c9c0b109 100644 --- a/site_perl/cust_main.pm +++ b/site_perl/cust_main.pm @@ -19,44 +19,53 @@ use FS::cust_pkg; use FS::cust_bill; use FS::cust_bill_pkg; use FS::cust_pay; -#use FS::cust_pay_batch; +use FS::cust_credit; +use FS::cust_pay_batch; +use FS::part_referral; +use FS::cust_main_county; +use FS::agent; +use FS::cust_main_invoice; @ISA = qw(FS::Record Exporter); @EXPORT_OK = qw(hfields); -$conf = new FS::Conf; -$lpr = $conf->config('lpr'); - -if ( $conf->exists('cybercash3.2') ) { - require CCMckLib3_2; - #qw($MCKversion %Config InitConfig CCError CCDebug CCDebug2); - require CCMckDirectLib3_2; - #qw(SendCC2_1Server); - require CCMckErrno3_2; - #qw(MCKGetErrorMessage $E_NoErr); - import CCMckErrno3_2 qw($E_NoErr); - my $merchant_conf; - ($merchant_conf,$xaction)= $conf->config('cybercash3.2'); - my $status = &CCMckLib3_2::InitConfig($merchant_conf); - if ( $status != $E_NoErr ) { - warn "CCMckLib3_2::InitConfig error:\n"; - foreach my $key (keys %CCMckLib3_2::Config) { - warn " $key => $CCMckLib3_2::Config{$key}\n" +#ask FS::UID to run this stuff for us later +$FS::UID::callback{'FS::cust_main'} = sub { + $conf = new FS::Conf; + $lpr = $conf->config('lpr'); + + if ( $conf->exists('cybercash3.2') ) { + require CCMckLib3_2; + #qw($MCKversion %Config InitConfig CCError CCDebug CCDebug2); + require CCMckDirectLib3_2; + #qw(SendCC2_1Server); + require CCMckErrno3_2; + #qw(MCKGetErrorMessage $E_NoErr); + import CCMckErrno3_2 qw($E_NoErr); + + my $merchant_conf; + ($merchant_conf,$xaction)= $conf->config('cybercash3.2'); + my $status = &CCMckLib3_2::InitConfig($merchant_conf); + if ( $status != $E_NoErr ) { + warn "CCMckLib3_2::InitConfig error:\n"; + foreach my $key (keys %CCMckLib3_2::Config) { + warn " $key => $CCMckLib3_2::Config{$key}\n" + } + my($errmsg) = &CCMckErrno3_2::MCKGetErrorMessage($status); + die "CCMckLib3_2::InitConfig fatal error: $errmsg\n"; } - my($errmsg) = &CCMckErrno3_2::MCKGetErrorMessage($status); - die "CCMckLib3_2::InitConfig fatal error: $errmsg\n"; + $processor='cybercash3.2'; + } elsif ( $conf->exists('cybercash2') ) { + require CCLib; + #qw(sendmserver); + ( $main::paymentserverhost, + $main::paymentserverport, + $main::paymentserversecret, + $xaction, + ) = $conf->config('cybercash2'); + $processor='cybercash2'; } - $processor='cybercash3.2'; -} elsif ( $conf->exists('cybercash2') ) { - require CCLib; - #qw(sendmserver); - ( $main::paymentserverhost, - $main::paymentserverport, - $main::paymentserversecret, - $xaction, - ) = $conf->config('cybercash2'); - $processor='cybercash2'; -} +}; =head1 NAME @@ -275,20 +284,24 @@ sub check { $self->ss("$1-$2-$3"); } - return "Unknown state/county/country" - unless qsearchs('cust_main_county',{ - 'state' => $self->state, - 'county' => $self->county, - } ); + $self->country =~ /^(\w\w)$/ or return "Illegal country"; + $self->country($1); + unless ( qsearchs('cust_main_county', { + 'country' => $self->country, + 'state' => '', + } ) ) { + return "Unknown state/county/country" + #" state ". $self->state. " county ". $self->county. " country ". $self->country + unless qsearchs('cust_main_county',{ + 'state' => $self->state, + 'county' => $self->county, + 'country' => $self->country, + } ); + } - #int'l zips? - $self->zip =~ /^(\d{5}(-\d{4})?)$/ or return "Illegal zip"; + $self->zip =~ /^([\w\-]{10})$/ or return "Illegal zip"; $self->zip($1); - #int'l countries! - $self->country =~ /^(US)$/ or return "Illegal country"; - $self->country($1); - $self->payby =~ /^(CARD|BILL|COMP)$/ or return "Illegal payby"; $self->payby($1); @@ -600,6 +613,8 @@ sub collect { 'custnum' => $self->getfield('custnum'), } ) ) { + bless($cust_bill,"FS::cust_bill"); + #this has to be before next's my($amount) = sprintf("%.2f", $total_owed < $cust_bill->owed ? $total_owed @@ -624,7 +639,7 @@ sub collect { && ( $cust_bill->printed * 2592000 ) <= $since ) { - open(LPR,$lpr) or die "Can't open $lpr: $!"; + open(LPR,"|$lpr") or die "Can't open $lpr: $!"; print LPR $cust_bill->print_text; #( date ) close LPR or die $! ? "Error closing $lpr: $!" @@ -807,7 +822,64 @@ Returns the balance for this customer (total owed minus total credited). sub balance { my($self) = @_; - sprintf("%.2f",$self->total_bill - $self->total_credit); + sprintf("%.2f",$self->total_owed - $self->total_credited); +} + +=item invoicing_list [ ITEM, ITEM, ... ] + +If arguements are given, sets these email addresses as invoice recipients +(see L). Errors are not fatal and are not reported +(except as warnings), so use check_invoicing_list first. + +Returns a list of email addresses (with svcnum entries expanded). + +=cut + +sub invoicing_list { + my($self, @addresses) = @_; + if ( @addresses ) { + my @cust_main_invoice = + qsearch('cust_main_invoice', { 'custnum' => $self->custnum } ); + foreach my $cust_main_invoice ( @cust_main_invoice ) { + unless ( grep { $cust_main_invoice->address eq $_ } @addresses ) { + $cust_main_invoice->delete; + } + } + @cust_main_invoice = + qsearch('cust_main_invoice', { 'custnum' => $self->custnum } ); + foreach my $address ( @addresses ) { + unless ( grep { $address eq $_->address } @cust_main_invoice ) { + my $cust_main_invoice = create FS::cust_main_invoice ( + 'custnum' => $self->custnum, + 'dest' => $address, + ); + my $error = $cust_main_invoice->insert; + warn $error if $error; + } + } + } + map { $_->address } + qsearch('cust_main_invoice', { 'custnum' => $self->custnum } ); +} + +=item check_invoicing_list ITEM, ITEM + +Checks these arguements as valid input for the invoicing_list method. If there +is an error, returns the error, otherwise returns false. + +=cut + +sub check_invoicing_list { + my($self, @addresses) = @_; + foreach my $address ( @addresses ) { + my $cust_main_invoice = create FS::cust_main_invoice ( + 'custnum' => $self->custnum, + 'dest' => $address, + ); + my $error = $cust_main_invoice->check; + return $error if $error; + } + ''; } =back @@ -829,7 +901,8 @@ CyberCash v2 forces us to define some variables in package main. L, L, L, L L, L, L, -L, L, schema.html from the base documentation. +L, L, +L, schema.html from the base documentation. =head1 HISTORY @@ -861,6 +934,28 @@ methods, cleaned collect method, source modifications no longer necessary to enable cybercash, cybercash v3 support, don't need to import FS::UID::{datasrc,checkruid} ivan@sisd.com 98-sep-19-21 +$Log: cust_main.pm,v $ +Revision 1.7 1998-12-16 09:58:52 ivan +library support for editing email invoice destinations (not in sub collect yet) + +Revision 1.6 1998/11/18 09:01:42 ivan +i18n! i18n! + +Revision 1.5 1998/11/15 11:23:14 ivan +use FS::table_name for all searches to eliminate warnings, +emit state/county when they don't match + +Revision 1.4 1998/11/15 05:30:48 ivan +bugfix for new config layout + +Revision 1.3 1998/11/13 09:56:54 ivan +change configuration file layout to support multiple distinct databases (with +own set of config files, export, etc.) + +Revision 1.2 1998/11/07 10:24:25 ivan +don't use depriciated FS::Bill and FS::Invoice, other miscellania + + =cut 1;