From: ivan Date: Sun, 15 Nov 1998 05:19:58 +0000 (+0000) Subject: long overdue X-Git-Tag: freeside_1_2_0~169 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=e87d3cbbe4bc0737003a24647d431f72fc25f225 long overdue --- diff --git a/site_perl/cust_pay_batch.pm b/site_perl/cust_pay_batch.pm new file mode 100644 index 000000000..186b4c154 --- /dev/null +++ b/site_perl/cust_pay_batch.pm @@ -0,0 +1,267 @@ +package FS::cust_pay_batch; + +use strict; +use vars qw (@ISA); +use Exporter; +#use FS::UID qw(getotaker); +use FS::Record qw(hfields qsearch qsearchs); +use Business::CreditCard; + +@ISA = qw(FS::Record); + +=head1 NAME + +FS::cust_pay_batdh - Object methods for batch cards + +=head1 SYNOPSIS + + use FS::cust_pay_batch; + + $record = create FS::cust_pay_batch \%hash; + $record = create FS::cust_pay_batch { 'column' => 'value' }; + + $error = $record->insert; + + $error = $new_record->replace($old_record); + + $error = $record->delete; + + $error = $record->check; + +=head1 DESCRIPTION + +An FS::cust_pay_batch object represents a credit card transaction ready to be +batched (sent to a processor). FS::cust_pay_batch inherits from FS::Record. +Typically called by the collect method of an FS::cust_main object. The +following fields are currently supported: + +=over 4 + +=item trancode - 77 for charges + +=item cardnum + +=item exp - card expiration + +=item amount + +=item invnum - invoice + +=item custnum - customer + +=item payname - name on card + +=item first - name + +=item last - name + +=item address1 + +=item address2 + +=item city + +=item state + +=item zip + +=item country + +=back + +=head1 METHODS + +=over 4 + +=item create HASHREF + +Creates a new record. To add the record to the database, see L<"insert">. + +Note that this stores the hash reference, not a distinct copy of the hash it +points to. You can ask the object for a copy with the I method. + +=cut + +sub create { + my($proto,$hashref)=@_; + + $proto->new('cust_pay_batch',$hashref); + +} + +=item insert + +Adds this record to the database. If there is an error, returns the error, +otherwise returns false. + +=cut + +sub insert { + my($self)=@_; + + #local $SIG{HUP} = 'IGNORE'; + #local $SIG{INT} = 'IGNORE'; + #local $SIG{QUIT} = 'IGNORE'; + #local $SIG{TERM} = 'IGNORE'; + #local $SIG{TSTP} = 'IGNORE'; + + $self->check or + $self->add; +} + +=item delete + +#inactive +# +#Delete this record from the database. + +=cut + +sub delete { + my($self)=@_; + + #$self->del; + + return "Can't (yet?) delete batched transactions!"; +} + +=item replace OLD_RECORD + +#inactive +# +#Replaces the OLD_RECORD with this one in the database. If there is an error, +#returns the error, otherwise returns false. + +=cut + +sub replace { + my($new,$old)=@_; + #return "(Old) Not a table_name record!" unless $old->table eq "table_name"; + # + #return "Can't change keyfield!" + # unless $old->getfield('keyfield') eq $new->getfield('keyfield'); + # + #$new->check or + #$new->rep($old); + + return "Can't (yet?) replace batched transactions!"; +} + +=item check + +Checks all fields to make sure this is a valid example. If there is +an error, returns the error, otherwise returns false. Called by the insert +and repalce methods. + +=cut + +sub check { + my($self)=@_; + return "Not a cust_pay_batch record!" unless $self->table eq "cust_pay_batch"; + + my $error = + $self->ut_numbern('trancode') + or $self->ut_number('cardnum') + or $self->ut_money('amount') + or $self->ut_number('invnum') + or $self->ut_number('custnum') + or $self->ut_text('address1') + or $self->ut_textn('address2') + or $self->ut_text('city') + or $self->ut_text('state') + ; + + return $error if $error; + + $self->getfield('last') =~ /^([\w \,\.\-\']+)$/ or return "Illegal last name"; + $self->setfield('last',$1); + + $self->first =~ /^([\w \,\.\-\']+)$/ or return "Illegal first name"; + $self->first($1); + + my $cardnum = $self->cardnum; + $cardnum =~ s/\D//g; + $cardnum =~ /^(\d{13,16})$/ + or return "Illegal credit card number"; + $cardnum = $1; + $self->cardnum($cardnum); + validate($cardnum) or return "Illegal credit card number"; + my $type = cardtype($cardnum); + return "Unknown credit card type" + unless ( $type =~ /^VISA/ || + $type =~ /^MasterCard/ || + $type =~ /^American Express/ || + $type =~ /^Discover/ ); + + if ( $self->exp eq '' ) { + return "Expriation date required"; + $self->exp(''); + } else { + $self->exp =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ + or return "Illegal expiration date"; + if ( length($2) == 4 ) { + $self->exp("$2-$1-01"); + } elsif ( $2 > 98 ) { #should pry change to check for "this year" + $self->exp("19$2-$1-01"); + } else { + $self->exp("20$2-$1-01"); + } + } + + if ( $self->payname eq '' ) { + $self->payname( $self->first. " ". $self->getfield('last') ); + } else { + $self->payname =~ /^([\w \,\.\-\']+)$/ + or return "Illegal billing name"; + $self->payname($1); + } + + #int'l zips? + $self->zip =~ /^(\d{5}(-\d{4})?)$/ or return "Illegal zip"; + $self->zip($1); + + #int'l countries! + $self->country =~ /^(US)$/ or return "Illegal country"; + $self->country($1); + + #check invnum, custnum, ? + + ''; #no error +} + +=back + +=head1 VERSION + +$Id: cust_pay_batch.pm,v 1.1 1998-11-15 05:19:58 ivan Exp $ + +=head1 BUGS + +The author forgot to customize this manpage. + +=head1 SEE ALSO + +L, L + +=head1 HISTORY + +ivan@voicenet.com 97-jul-1 + +added hfields +ivan@sisd.com 97-nov-13 + +$Log: cust_pay_batch.pm,v $ +Revision 1.1 1998-11-15 05:19:58 ivan +long overdue + +Revision 1.3 1998/11/15 04:33:00 ivan +updates for newest versoin + +Revision 1.2 1998/11/15 03:48:49 ivan +update for current version + + +=cut + +1; +