diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index 5708bb6bd..7aa6838b0 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -19,8 +19,8 @@ use base 'WebGUI::Asset::Wobject'; use Tie::IxHash; use WebGUI::HTMLForm; use WebGUI::International; - - +use WebGUI::Commerce::ShoppingCart; +use WebGUI::Commerce::Item; #------------------------------------------------------------------- =head2 checkRequiredFields ( requiredFields ) @@ -326,6 +326,27 @@ sub validateEditEventForm { #------------------------------------------------------------------- +=head2 www_addToCart ( ) + +Method that will add an event to the users shopping cart. + +=cut + +sub www_addToCart { + my $self = shift; + my $eventId = $self->session->form->get("pid"); + + #my $cart = WebGUI::Commerce::ShoppingCart->new($self->session); + #$cart->add($eventId, 'Event'); + + my $item = WebGUI::Commerce::Item->new($self->session, $eventId, 'Event'); + $self->session->errorHandler->warn($item->{_eventData}->{available}); + + return $self->www_view; +} + +#------------------------------------------------------------------- + =head2 www_approveEvent ( ) Method that will set the status of an event to approved. @@ -504,6 +525,11 @@ sub www_editEvent { -hoverHelp => $i18n->get('add/edit event maximum attendees description'), -label => $i18n->get('add/edit event maximum attendees') ); + + $f->hidden( + -name => "approved", + -value => 0 || $event->{approved} + ); my $prerequisiteList = $self->getPrerequisiteEventList($pid); if ( scalar(keys %{$prerequisiteList}) > 0) { @@ -593,7 +619,7 @@ sub www_editEventSave { startDate => $self->session->datetime->humanToEpoch($self->session->form->get("startDate")), endDate => $self->session->datetime->humanToEpoch($self->session->form->get("endDate")), maximumAttendees => $self->session->form->get("maximumAttendees"), - approved => "0" + approved => $self->session->form->get("approved") },1,1 ); @@ -761,7 +787,8 @@ sub view { from products as p, EventManagementSystem_products as e where p.productId = e.productId and approved=1 - and e.assetId =".$self->session->db->quote($self->get("assetId")); + and e.assetId =".$self->session->db->quote($self->get("assetId"))." + and p.productId not in (select distinct(productId) from EventManagementSystem_prerequisites)"; my $p = WebGUI::Paginator->new($self->session,$self->getUrl,$self->get("paginateAfter")); $p->setDataByQuery($sql); @@ -777,6 +804,8 @@ sub view { $eventFields{'title'} = $event->{'title'}; $eventFields{'description'} = $event->{'description'}; $eventFields{'price'} = $event->{'price'}; + $eventFields{'purchase.url'} = $self->getUrl('func=addToCart;pid='.$event->{'productId'}); + $eventFields{'purchase.label'} = "Add To Cart"; push (@events, {'event' => $self->processTemplate(\%eventFields, $event->{'templateId'}) }); } diff --git a/lib/WebGUI/Commerce/Item.pm b/lib/WebGUI/Commerce/Item.pm index d98c052fd..45733cc4f 100644 --- a/lib/WebGUI/Commerce/Item.pm +++ b/lib/WebGUI/Commerce/Item.pm @@ -155,20 +155,21 @@ The type (namespace) of the item you want. =cut sub new { - my ($class, $namespace, $load, $cmd, $plugin); + my ($class, $session, $namespace, $load, $cmd, $plugin); $class = shift; + $session = shift; $id = shift; $namespace = shift; - $self->session->errorHandler->fatal('No namespace') unless ($namespace); - $self->session->errorHandler->fatal('No ID') unless ($id); + $session->errorHandler->fatal('No namespace') unless ($namespace); + $session->errorHandler->fatal('No ID') unless ($id); $cmd = "WebGUI::Commerce::Item::$namespace"; $load = "use $cmd"; eval($load); - $self->session->errorHandler->warn("Item plugin failed to compile: $cmd.".$@) if($@); - $plugin = eval($cmd."->new('$id', '$namespace')"); - $self->session->errorHandler->warn("Couldn't instantiate Item plugin: $cmd.".$@) if($@); + $session->errorHandler->warn("Item plugin failed to compile: $cmd.".$@) if($@); + $plugin = eval($cmd."->new('$session', '$id', '$namespace')"); + $session->errorHandler->warn("Couldn't instantiate Item plugin: $cmd.".$@) if($@); return $plugin; } diff --git a/lib/WebGUI/Commerce/Item/Event.pm b/lib/WebGUI/Commerce/Item/Event.pm new file mode 100644 index 000000000..34009f5f8 --- /dev/null +++ b/lib/WebGUI/Commerce/Item/Event.pm @@ -0,0 +1,67 @@ +package WebGUI::Commerce::Item::Event; + +use strict; + +our @ISA = qw(WebGUI::Commerce::Item); + +#------------------------------------------------------------------- +sub available { + return $_[0]->{_event}->{available}; +} + +#------------------------------------------------------------------- +sub description { + return $_[0]->{_event}{description}; +} + +#------------------------------------------------------------------- +sub id { + return $_[0]->{_event}{productId}; +} + +#------------------------------------------------------------------- +sub isRecurring { + return 0; +} + +#------------------------------------------------------------------- +sub name { + return $_[0]->{_event}->{title}; +} + +#------------------------------------------------------------------- +sub new { + my ($class, $session, $eventId, $eventData); + $class = shift; + $session = shift; + $eventId = shift; + + my $eventData = $session->db->quickHashRef("select p.productId, p.title, p.description, p.price, e.available + from EventManagementSystem_products as e, products as p + where p.productId = e.productId and p.productId=".$session->db->quote($eventId)); + + bless {_event => $eventData}, $class; +} + +#------------------------------------------------------------------- +sub needsShipping { + return 0; +} + +#------------------------------------------------------------------- +sub price { + return $_[0]->{_event}->{price}; +} + +#------------------------------------------------------------------- +sub type { + return 'Event'; +} + +#------------------------------------------------------------------- +sub weight { + return 0; +} + +1; +