package WebGUI::Commerce::Payment::Cash; =head1 LEGAL ------------------------------------------------------------------- WebGUI is Copyright 2001-2007 Plain Black Corporation. ------------------------------------------------------------------- Please read the legal notices (docs/legal.txt) and the license (docs/license.txt) that came with this distribution before using this software. ------------------------------------------------------------------- http://www.plainblack.com info@plainblack.com ------------------------------------------------------------------- =head1 NAME Package WebGUI::Payment::Cash =head1 DESCRIPTION Payment plug-in for cash transactions. =cut use strict; use WebGUI::HTMLForm; use WebGUI::Commerce::Payment; use WebGUI::Commerce::Item; use Tie::IxHash; use WebGUI::International; use WebGUI::SQL; our @ISA = qw(WebGUI::Commerce::Payment); #------------------------------------------------------------------- sub connectionError { return; } #------------------------------------------------------------------- sub checkoutForm { my ($self, $u, $f, %months, %years, $i18n); $self = shift; $i18n = $self->i18n; $u = WebGUI::User->new($self->session,$self->session->user->userId); $f = WebGUI::HTMLForm->new($self->session); $f->readOnly( -label=>$i18n->get("payment method"), -value=>ucfirst($self->getPaymentMethod), ); $f->text( -name => 'firstName', -label => $i18n->get('firstName'), -value => $self->session->form->process("firstName") || $u->profileField('firstName') ); $f->text( -name => 'lastName', -label => $i18n->get('lastName'), -value => $self->session->form->process("lastName") || $u->profileField('lastName') ); $f->text( -name => 'address', -label => $i18n->get('address'), -value => $self->session->form->process("address") || $u->profileField('homeAddress') ); $f->text( -name => 'city', -label => $i18n->get('city'), -value => $self->session->form->process("city") || $u->profileField('homeCity') ); $f->text( -name => 'state', -label => $i18n->get('state'), -value => $self->session->form->process("state") || $u->profileField('homeState') ); $f->zipcode( -name => 'zipcode', -label => $i18n->get('zipcode'), -value => $self->session->form->process("zipcode") || $u->profileField('homeZip') ); $f->country( -name=>"country", -label=>$i18n->get("country"), -value=>($self->session->form->process("country",'country') || $u->profileField("homeCountry") || 'United States') ); $f->phone( -name=>"phone", -label=>$i18n->get("phone"), -defaultValue=>$u->profileField("homePhone"), -value=>$self->session->form->process("phone",'phone'), ); $f->email( -name => 'email', -label => $i18n->get('email'), -value => $self->session->form->process("email",'email') || $u->profileField('email') ); return $f->printRowsOnly; } #------------------------------------------------------------------- sub configurationForm { my ($self, $f, $i18n); $self = shift; $i18n = $self->i18n; $f = WebGUI::HTMLForm->new($self->session); $f->textarea( -name => $self->prepend('emailMessage'), -label => $i18n->get('emailMessage'), -value => $self->get('emailMessage') ); $f->yesNo( -name => $self->prepend('completeTransaction'), -value => ($self->get('completeTransaction') eq "0" ? 0 : $self->get('completeTransaction') || 1), -label => $i18n->get('complete transaction'), -hoverHelp => $i18n->get('complete transaction description'), ); return $self->SUPER::configurationForm($f->printRowsOnly); } #------------------------------------------------------------------- sub confirmTransaction { return 0; } #------------------------------------------------------------------- sub i18n { my $self = shift; unless (exists $self->{_i18n}) { $self->{_i18n} = WebGUI::International->new($self->session,'CommercePaymentCash'); } return $self->{_i18n}; } #------------------------------------------------------------------- =head2 init ( namespace ) Constructor for the Cash plugin. =head3 session A copy of the session object =head3 namespace The namespace of the plugin. =cut sub init { my ($class, $self); $class = shift; my $session = shift; my $namespace = shift || 'Cash'; $self = $class->SUPER::init($session,$namespace); return $self; } #------------------------------------------------------------------- sub gatewayId { my $self = shift; return $self->getPaymentMethod.":".$self->session->id->generate; } #------------------------------------------------------------------- sub getPaymentMethod { my $self = shift; unless($self->{_paymentMethod}) { $self->{_paymentMethod} = "cash"; } return $self->{_paymentMethod}; } #------------------------------------------------------------------- sub errorCode { my $self = shift; return $self->{_error}->{code}; } #------------------------------------------------------------------- =head2 label ( ) Returns the label for the commerce plugin. =cut sub label { my $self = shift; my $i18n = $self->i18n; return $self->get("label") || $i18n->get("label"); } #------------------------------------------------------------------- sub name { return 'Cash'; } #------------------------------------------------------------------- sub namespace { my $self = shift; return $self->{_namespace}; } #------------------------------------------------------------------- sub normalTransaction { my ($self, $normal); $self = shift; $normal = shift; if ($normal) { my $i18n = $self->i18n; $self->{_transactionParams} = { AMT => sprintf('%.2f', $normal->{amount}), DESCRIPTION => $normal->{description} || $i18n->get('no description'), INVOICENUMBER => $normal->{invoiceNumber}, ORGID => $normal->{id}, }; } if ($self->get('completeTransaction')) { $self->{_transaction}->{status} = 'complete'; } else { $self->{_transaction}->{status} = 'pending'; $self->{_error}->{message} = 'Your transaction will be completed upon receipt of payment.'; $self->{_error}->{code} = 1; } } #------------------------------------------------------------------- sub shippingCost { my $self = shift; $self->{_shipping}->{cost} = shift; } #------------------------------------------------------------------- sub shippingDescription { my $self = shift; $self->{_shipping}->{description} = shift; } #------------------------------------------------------------------- sub supports { return { single => 1, recurring => 0, } } #------------------------------------------------------------------- sub transactionCompleted { my $self = shift; return 1 if $self->{_transaction}->{status} eq 'complete'; } #------------------------------------------------------------------- sub transactionError { my $self = shift; return $self->{_error}->{message}; } #------------------------------------------------------------------- sub transactionPending { my $self = shift; return 1 if $self->{_transaction}->{status} eq 'pending'; } #------------------------------------------------------------------- sub validateFormData { my ($self, @error, $i18n, $currentYear, $currentMonth); $self = shift; $i18n = $self->i18n; push (@error, $i18n->get('invalid firstName')) unless ($self->session->form->process("firstName")); push (@error, $i18n->get('invalid lastName')) unless ($self->session->form->process("lastName")); push (@error, $i18n->get('invalid address')) unless ($self->session->form->process("address")); push (@error, $i18n->get('invalid city')) unless ($self->session->form->process("city")); push (@error, $i18n->get('invalid zip')) if ($self->session->form->process("zipcode") eq "" && $self->session->form->process("country") eq "United States"); push (@error, $i18n->get('invalid email')) unless ($self->session->form->process("email")); unless (@error) { $self->{_paymentData} = { PAYMENTMETHOD => $self->getPaymentMethod, #$self->session->form->process("paymentMethod"), }; $self->{_userData} = { STREET => $self->session->form->process("address"), ZIP => $self->session->form->process("zipcode"), CITY => $self->session->form->process("city"), FIRSTNAME => $self->session->form->process("firstName"), LASTNAME => $self->session->form->process("lastName"), EMAIL => $self->session->form->process("email"), STATE => $self->session->form->process("state"), COUNTRY => $self->session->form->process("country"), PHONE => $self->session->form->process("phone"), }; return 0; } return \@error; } 1;