/usr/local/CPAN/XAO-Commerce/XAO/DO/Web/PayMethod.pm
package XAO::DO::Web::PayMethod;
use XAO::Utils;
use XAO::Errors qw(XAO::DO::Web::PayMethod);
use XAO::Objects;
use base XAO::Objects->load(objname => 'Web::FS');
use vars qw($VERSION);
$VERSION=(0+sprintf('%u.%03u',(q$Id: PayMethod.pm,v 1.3 2005/01/14 02:15:53 am Exp $ =~ /\s(\d+)\.(\d+)\s/))) || die "Bad VERSION";
###############################################################################
sub check_mode ($%) {
my $self=shift;
my $args=get_args(\@_);
$self->SUPER::check_mode($args);
}
###############################################################################
sub edit_object ($%) {
my $self=shift;
my $args=get_args(\@_);
my $list=$self->get_object($args);
my @fields=@{$self->form_fields};
my @fnames=map { $_->{name} } @fields;
##
# If we have ID then we're editing this pm otherwise we're
# creating a new one.
#
my $id=$args->{id};
my %values;
if($id) {
my $pm=$list->get($id);
@values{@fnames}=$pm->get(@fnames);
}
my $form=$self->object(objname => 'Web::FilloutForm');
$form->setup(
fields => \@fields,
values => \%values,
submit_name => $id ? 'done' : undef,
check_form => sub {
my $form=shift;
##
# Checking uniqueness of Reference Name
#
my $ref_name=$form->field_desc('ref_name')->{value};
my $sr=$list->search('ref_name', 'eq', $ref_name);
if(($id && @$sr>1) || (!$id && @$sr)) {
return ('Payment method with this reference name already exists','ref_name');
}
##
# Checking credit card number if this is a credit card.
#
my $method=$form->field_desc('method')->{value};
my $number=$form->field_desc('number')->{value};
if($method ne 'Credit') {
my $errstr=$form->cc_validate(
number => $number,
type => $method,
);
if($errstr) {
return ($errstr,'number');
}
}
return '';
},
form_ok => sub {
my $form=shift;
my $pm=$list->get_new();
foreach my $name (map { $_->{name} } @fields) {
my $value=$form->field_desc($name)->{value};
$value=substr($value,0,2) if $name eq 'state';
$pm->put($name => $value);
}
if($id) { $list->put($id => $pm); }
else { $list->put($pm); }
$self->object->display(path => $args->{'success.path'});
},
);
$form->display('form.path' => $args->{'form.path'});
}
###############################################################################
sub form_fields {
my $self=shift;
return [
{ name => 'ref_name',
required => 1,
unique => 1,
style => 'text',
maxlength => 50,
minlength => 3,
param => 'REF_NAME',
text => 'Reference Name',
},
{ name => 'method',
required => 1,
style => 'selection',
options => {
'Visa' => 'VISA',
'American Express' => 'American Express',
'MasterCard' => 'MasterCard',
'Discover' => 'Discover',
},
param => 'METHOD',
text => 'Payment Method',
},
{ name => 'number',
required => 1,
style => 'text',
minlength => 1,
maxlength => 16,
param => 'NUMBER',
text => 'Pay Number',
encrypt => 1,
},
{ name => 'expire_month',
required => 1,
style => 'month',
param => 'EXPIRE_MONTH',
text => 'Expiration Month',
encrypt => 1,
},
{ name => 'expire_year',
required => 1,
style => 'year',
minyear => 2001,
maxyear => 2011,
param => 'EXPIRE_YEAR',
text => 'Expiration Year',
encrypt => 1,
},
{ name => 'name',
required => 1,
style => 'text',
maxlength => 50,
minlength => 3,
param => 'NAME',
text => 'Name',
},
{ name => 'line_1',
required => 1,
style => 'text',
maxlength => 100,
minlength => 5,
param => 'LINE_1',
text => 'Address (line 1)',
},
{ name => 'line_2',
style => 'text',
maxlength => 100,
param => 'LINE_2',
text => 'Address (line 2)',
},
{ name => 'city',
required => 1,
style => 'text',
maxlength => 50,
minlength => 2,
param => 'CITY',
text => 'City',
},
{ name => 'state',
required => 1,
style => 'uscontst',
param => 'STATE',
text => 'State',
},
{ name => 'zipcode',
required => 1,
style => 'text',
maxlength => 20,
minlength => 5,
param => 'ZIPCODE',
text => 'Zip-Code',
},
{ name => 'phone',
style => 'usphone',
param => 'PHONE',
text => 'Phone',
},
];
}
###############################################################################
1;