From 8288cfaa6b8e09c0b9b954ca78bc41003a5d4774 Mon Sep 17 00:00:00 2001 From: Roy Johnson Date: Mon, 20 Mar 2006 05:57:50 +0000 Subject: [PATCH] EMS Checkout code --- docs/upgrades/upgrade_6.8.7-6.99.0.pl | 2 +- .../Asset/Wobject/EventManagementSystem.pm | 61 +++++++++++++++---- lib/WebGUI/Commerce/Item/Event.pm | 23 +++++++ lib/WebGUI/Commerce/Transaction.pm | 3 +- 4 files changed, 76 insertions(+), 13 deletions(-) diff --git a/docs/upgrades/upgrade_6.8.7-6.99.0.pl b/docs/upgrades/upgrade_6.8.7-6.99.0.pl index c13ae87cc..0c916093a 100644 --- a/docs/upgrades/upgrade_6.8.7-6.99.0.pl +++ b/docs/upgrades/upgrade_6.8.7-6.99.0.pl @@ -541,7 +541,7 @@ my $sql4 = <session,{action=>$self->getUrl}) - .WebGUI::Form::hidden($self->session,{name=>"func",value=>"www_saveRegistration"}); + .WebGUI::Form::hidden($self->session,{name=>"func",value=>"saveRegistration"}); $var{'form.footer'} = WebGUI::Form::formFooter($self->session); $var{'form.submit'} = WebGUI::Form::submit($self->session); @@ -448,15 +448,15 @@ sub getRegistrationInfo { $var{'form.country.label'} = "Country"; $var{'form.phoneNumber.label'} = "Phone Number"; $var{'form.email.label'} = "Email Address"; - $var{'form.firstName'} = WebGUI::Form::Text($self->session,{}); - $var{'form.lastName'} = WebGUI::Form::Text($self->session,{}); - $var{'form.address'} = WebGUI::Form::Text($self->session,{}); - $var{'form.city'} = WebGUI::Form::Text($self->session,{}); - $var{'form.state'} = WebGUI::Form::Text($self->session,{}); - $var{'form.zipCode'} = WebGUI::Form::Text($self->session,{}); - $var{'form.country'} = WebGUI::Form::SelectList($self->session,{}); - $var{'form.phoneNumber'} = WebGUI::Form::Phone($self->session,{}); - $var{'form.email'} = WebGUI::Form::Email($self->session,{}); + $var{'form.firstName'} = WebGUI::Form::Text($self->session,{name=>'firstName'}); + $var{'form.lastName'} = WebGUI::Form::Text($self->session,{name=>'lastName'}); + $var{'form.address'} = WebGUI::Form::Text($self->session,{name=>'address'}); + $var{'form.city'} = WebGUI::Form::Text($self->session,{name=>'city'}); + $var{'form.state'} = WebGUI::Form::Text($self->session,{name=>'state'}); + $var{'form.zipCode'} = WebGUI::Form::Text($self->session,{name=>'zipCode'}); + $var{'form.country'} = WebGUI::Form::SelectList($self->session,{name=>'country', options => {'us' => 'UnitedStates'}}); + $var{'form.phoneNumber'} = WebGUI::Form::Phone($self->session,{name=>'phoneNumber'}); + $var{'form.email'} = WebGUI::Form::Email($self->session,{name=>'email'}); $var{'registration'} = 1; return \%var; } @@ -1149,6 +1149,44 @@ sub www_moveEventUp { return $self->www_manageEvents; } +#------------------------------------------------------------------- +sub www_saveRegistration { + my $self = shift; + my $eventsInCart = $self->getEventsInCart; + my $purchaseId = $self->session->id->generate; + + foreach my $eventId (@$eventsInCart) { + my $registrationId = $self->setCollateral("EventManagementSystem_registrations", "registrationId", + { + registrationId => "new", + purchaseId => $purchaseId, + productId => $eventId, + firstName => $self->session->form->get("firstName", "text"), + lastName => $self->session->form->get("lastName", "text"), + address => $self->session->form->get("address", "text"), + city => $self->session->form->get("city", "text"), + state => $self->session->form->get("state", "text"), + zipCode => $self->session->form->get("zipCode", "text"), + country => $self->session->form->get("country", "selectList"), + phone => $self->session->form->get("phoneNumber", "phone"), + email => $self->session->form->get("email", "email") + },0,0 + ); + } + + #Our item plug-in needs to be able to associate these records with the result of the payment attempt + my $counter = 0; + while (1) { + unless ($self->session->scratch->get("purchaseId".$counter)) { + $self->session->scratch->set("purchaseId".$counter, $purchaseId); + last; + } + $counter++; + } + #use Data::Dumper; print "
".Dumper($self->session)."
"; + return $self->www_view; +} + #------------------------------------------------------------------- =head2 prepareView ( ) @@ -1199,7 +1237,8 @@ sub view { push (@events, {'event' => $self->processTemplate(\%eventFields, $event->{'templateId'}) }); } - + $var{'checkout.url'} = $self->getUrl('op=viewCart'); + $var{'checkout.label'} = "Checkout"; $var{'events_loop'} = \@events; $var{'paginateBar'} = $p->getBarTraditional; $var{'manageEvents.url'} = $self->getUrl('func=manageEvents'); diff --git a/lib/WebGUI/Commerce/Item/Event.pm b/lib/WebGUI/Commerce/Item/Event.pm index 31108efa8..f2c8c771c 100644 --- a/lib/WebGUI/Commerce/Item/Event.pm +++ b/lib/WebGUI/Commerce/Item/Event.pm @@ -37,6 +37,23 @@ sub description { return $_[0]->{_event}->{description}; } +#------------------------------------------------------------------- +sub handler { + my $self = shift; + my $transactionId = shift; + #mark all purchaseIds as paid + my $counter = 0; + while (1) { + my $purchaseId; + if ($purchaseId = $self->session->scratch->get("purchaseId".$counter)) { + $self->session->db->setRow('EventManagementSystem_purchases', 'purchaseId', {'purchaseId'=>$purchaseId, 'transactionId'=>$transactionId}, $purchaseId); + $self->session->scratch->delete("purchaseId".$counter); + $counter++; + } + else { last; } + } +} + #------------------------------------------------------------------- sub id { return $_[0]->{_event}->{productId}; @@ -83,6 +100,12 @@ sub price { return $_[0]->{_event}->{price}; } +#------------------------------------------------------------------- +sub session { + my $self = shift; + return $self->{_session}; +} + #------------------------------------------------------------------- sub type { return 'Event'; diff --git a/lib/WebGUI/Commerce/Transaction.pm b/lib/WebGUI/Commerce/Transaction.pm index 27f58a12c..c8a884567 100644 --- a/lib/WebGUI/Commerce/Transaction.pm +++ b/lib/WebGUI/Commerce/Transaction.pm @@ -103,7 +103,8 @@ sub completeTransaction { foreach (@{$self->getItems}) { $item = WebGUI::Commerce::Item->new($self->session,$_->{itemId}, $_->{itemType}); - $item->handler; + $item->handler($_->{transactionId}); + #$item->handler; } $self->status('Completed');