1 package FS::cust_pay_batch;
6 use Business::CreditCard;
8 @ISA = qw( FS::Record );
12 FS::cust_pay_batch - Object methods for batch cards
16 use FS::cust_pay_batch;
18 $record = new FS::cust_pay_batch \%hash;
19 $record = new FS::cust_pay_batch { 'column' => 'value' };
21 $error = $record->insert;
23 $error = $new_record->replace($old_record);
25 $error = $record->delete;
27 $error = $record->check;
31 An FS::cust_pay_batch object represents a credit card transaction ready to be
32 batched (sent to a processor). FS::cust_pay_batch inherits from FS::Record.
33 Typically called by the collect method of an FS::cust_main object. The
34 following fields are currently supported:
38 =item paybatchnum - primary key (automatically assigned)
40 =item trancode - 77 for charges
44 =item exp - card expiration
48 =item invnum - invoice
50 =item custnum - customer
52 =item payname - name on card
78 Creates a new record. To add the record to the database, see L<"insert">.
80 Note that this stores the hash reference, not a distinct copy of the hash it
81 points to. You can ask the object for a copy with the I<hash> method.
85 sub table { 'cust_pay_batch'; }
89 Adds this record to the database. If there is an error, returns the error,
90 otherwise returns false.
94 Delete this record from the database. If there is an error, returns the error,
95 otherwise returns false.
97 =item replace OLD_RECORD
101 #Replaces the OLD_RECORD with this one in the database. If there is an error,
102 #returns the error, otherwise returns false.
107 return "Can't (yet?) replace batched transactions!";
112 Checks all fields to make sure this is a valid transaction. If there is
113 an error, returns the error, otherwise returns false. Called by the insert
122 $self->ut_numbern('paybatchnum')
123 || $self->ut_numbern('trancode')
124 || $self->ut_number('cardnum')
125 || $self->ut_money('amount')
126 || $self->ut_number('invnum')
127 || $self->ut_number('custnum')
128 || $self->ut_text('address1')
129 || $self->ut_textn('address2')
130 || $self->ut_text('city')
131 || $self->ut_text('state')
134 return $error if $error;
136 $self->getfield('last') =~ /^([\w \,\.\-\']+)$/ or return "Illegal last name";
137 $self->setfield('last',$1);
139 $self->first =~ /^([\w \,\.\-\']+)$/ or return "Illegal first name";
142 my $cardnum = $self->cardnum;
144 $cardnum =~ /^(\d{13,16})$/
145 or return "Illegal credit card number";
147 $self->cardnum($cardnum);
148 validate($cardnum) or return "Illegal credit card number";
149 return "Unknown card type" if cardtype($cardnum) eq "Unknown";
151 if ( $self->exp eq '' ) {
152 return "Expriation date required"; #unless
155 if ( $self->exp =~ /^(\d{4})[\/\-](\d{1,2})[\/\-](\d{1,2})$/ ) {
156 $self->exp("$1-$2-$3");
157 } elsif ( $self->exp =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ ) {
158 if ( length($2) == 4 ) {
159 $self->exp("$2-$1-01");
160 } elsif ( $2 > 98 ) { #should pry change to check for "this year"
161 $self->exp("19$2-$1-01");
163 $self->exp("20$2-$1-01");
166 return "Illegal expiration date";
170 if ( $self->payname eq '' ) {
171 $self->payname( $self->first. " ". $self->getfield('last') );
173 $self->payname =~ /^([\w \,\.\-\']+)$/
174 or return "Illegal billing name";
178 $self->zip =~ /^\s*(\w[\w\-\s]{3,8}\w)\s*$/
179 or return "Illegal zip: ". $self->zip;
182 $self->country =~ /^(\w\w)$/ or return "Illegal country: ". $self->country;
185 #check invnum, custnum, ?
194 $Id: cust_pay_batch.pm,v 1.3 2001-10-02 16:00:30 jeff Exp $
198 There should probably be a configuration file with a list of allowed credit
203 L<FS::cust_main>, L<FS::Record>