From c9153bc80ebfcff0b695db127f52a98a49edb32c Mon Sep 17 00:00:00 2001 From: JT Smith Date: Tue, 7 Oct 2008 18:05:04 +0000 Subject: [PATCH] - Updated WebGUI::Shop::PayDriver::processTransaction() to accept a transaction as a param. --- lib/WebGUI/Shop/PayDriver.pm | 38 ++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/WebGUI/Shop/PayDriver.pm b/lib/WebGUI/Shop/PayDriver.pm index cd5b85c77..cf931fb09 100644 --- a/lib/WebGUI/Shop/PayDriver.pm +++ b/lib/WebGUI/Shop/PayDriver.pm @@ -606,30 +606,42 @@ sub processPropertiesFromFormPost { #------------------------------------------------------------------- -=head2 processTransaction ( [ paymentAddress ] ) +=head2 processTransaction ( [ object ] ) This method is responsible for handling success or failure from the payment processor, completing or denying the transaction, and sending out notification and receipt emails. Returns a WebGUI::Shop::Transaction object. -=head3 paymentAddress +=head3 object -A reference to a WebGUI::Shop::Address object that should be attached as payment information. Not required. +Can be undef, in which case a WebGUI::Shop::Transaction object will be generated using the cart. Can also be a reference to a WebGUI::Shop::Address object that should be attached as payment information to the autogenerated WebGUI::Shop::Transaction. Or can be a WebGUI::Shop::Transaction that you've already constructed and then no transaction will be generated, but rather just updated. =cut sub processTransaction { - my ($self, $paymentAddress) = @_; + my ($self, $object) = @_; my $cart = $self->getCart; + + # determine object type + my $transaction; + my $paymentAddress; + if ($object->isa('WebGUI::Shop::Transaction')) { + $transaction = $object; + } + elsif ($object->isa('WebGUI::Shop::Address')) { + $paymentAddress = $object; + } - # Setup tranasction properties - my $transactionProperties; - $transactionProperties->{ paymentMethod } = $self; - $transactionProperties->{ cart } = $cart; - $transactionProperties->{ paymentAddress } = $paymentAddress if defined $paymentAddress; - $transactionProperties->{ isRecurring } = $cart->requiresRecurringPayment; - - # Create a transaction... - my $transaction = WebGUI::Shop::Transaction->create( $self->session, $transactionProperties ); + # Setup dynamic transaction + unless (defined $transaction) { + my $transactionProperties; + $transactionProperties->{ paymentMethod } = $self; + $transactionProperties->{ cart } = $cart; + $transactionProperties->{ paymentAddress } = $paymentAddress if defined $paymentAddress; + $transactionProperties->{ isRecurring } = $cart->requiresRecurringPayment; + + # Create a transaction... + $transaction = WebGUI::Shop::Transaction->create( $self->session, $transactionProperties ); + } # And handle the payment for it my ($success, $transactionCode, $statusCode, $statusMessage) = $self->processPayment( $transaction );