diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index 1c7e9904c..db11d506a 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -57,6 +57,60 @@ sub checkRequiredFields { return \@errors; } +#------------------------------------------------------------------ +# +# Returns prerequisiteId of every prerequisite grouping assigned to eventId passed in. +# +sub getAssignedPrerequisites { + my $self = shift; + my $eventId = shift; + + my $sql = "select prerequisiteId, operator from EventManagementSystem_prerequisites + where productId=".$self->session->db->quote($eventId); + + return $self->session->db->buildHashRef($sql); +} + +#------------------------------------------------------------------ +# +# Returns names of every event assigned to the prerequisite grouping of the prerequisite group id passed in +# +sub getRequiredEventNames { + my $self = shift; + my $prerequisiteId = shift; + + my $sql = "select title from products as p, EventManagementSystem_prerequisites as pr, EventManagementSystem_prerequisiteEvents as pe + where + pe.requiredProductId = p.productId + and pr.prerequisiteId = pe.prerequisiteId + and pr.prerequisiteId=".$self->session->db->quote($prerequisiteId); + + return $self->session->db->buildArrayRef($sql); +} + +#------------------------------------------------------------------ +# +# This method returns all events except for +# a) the event matching the eventId parameter passed in AND +# b) any events currently assigned as a prerequisite to the eventId parameter passed in +# as a hash reference with the productId, and title +# +sub getPrerequisiteEventList { + my $self = shift; + my $eventId = shift; + + my $sql = "select p.productId, p.title from products as p, EventManagementSystem_products as e + where p.productId = e.productId + and p.productId !=".$self->session->db->quote($eventId)." + and p.productId not in + (select requiredProductId from EventManagementSystem_prerequisites as p, + EventManagementSystem_prerequisiteEvents as pe + where p.prerequisiteId = pe.prerequisiteId + and p.productId=".$self->session->db->quote($eventId).")"; + + return $self->session->db->buildHashRef($sql); +} + #------------------------------------------------------------------ sub validateEditEventForm { my $self = shift; @@ -155,7 +209,7 @@ sub www_editEvent { where p.productId = e.productId and p.productId=".$self->session->db->quote($pid) ); - + my $f = WebGUI::HTMLForm->new($self->session,-action=>$self->getUrl); # Errors @@ -228,10 +282,59 @@ sub www_editEvent { -defaultValue => 100, -hoverHelp => $i18n->get('add/edit event maximum attendees description'), -label => "Maximum Attendees" #$i18n->get('add/edit event maximum attendees') - ); + ); + + my $prerequisiteList = $self->getPrerequisiteEventList($pid); + if ( scalar(keys %{$prerequisiteList}) > 0) { + $f->checkList( + -name => "eventList", + -options => $prerequisiteList, + -vertical => 1, + -label => "Required Events", + -sortByValue => 1 + ); + + $f->radioList( + -name => "requirement", + -options => { "and" => "And", + "or" => "Or", + }, + -label => "Operator", + -defaultValue => "and" + ); + + $f->selectBox( + -name => "whatNext", + -label => "What Next", + -options => { + "addAnotherPrereq" => "Add Another Prerequisite", + "return" => "Return to Manage Events" + }, + -defaultValue => "return" + ); + + } $f->submit; + #Display Currently Assigned Prerequisites if any + $f->readOnly( -value => "
Assigned Prerequisites

" ); + + my $list = $self->getAssignedPrerequisites($pid); + foreach my $prerequisiteId (keys %{$list}) { + + my $line = $self->session->icon->delete('func=deletePrerequisite;id='.$prerequisiteId, + $self->getUrl, "Are you sure you want to delete this prerequisite?")." "; + + my $eventNames = $self->getRequiredEventNames($prerequisiteId); + my $events; + foreach my $event (@$eventNames) { + $events .= "$event ".$list->{$prerequisiteId}." "; + } + + $f->readOnly( -value => $line.$events ); + } + my $output = $f->print; return $self->getAdminConsole->render($output, "Add/Edit Event"); } @@ -276,7 +379,32 @@ sub www_editEventSave { else { # Updating the row $self->session->db->setRow("products", "productId", $event); } + + # Save the prerequisites + my $prerequisiteList = $self->session->form->process("eventList", "checkList"); + unless ($prerequisiteList eq "") { + my $prerequisiteId = $self->setCollateral("EventManagementSystem_prerequisites", "prerequisiteId", + { + prerequisiteId => "new", + productId => $pid, + operator => $self->session->form->get("requirement") + },0,0 + ); + + my @list = split(/\n/, $prerequisiteList); + foreach my $requiredEvent (@list) { + $self->setCollateral("EventManagementSystem_prerequisiteEvents", "prerequisiteEventId", + { + prerequisiteEventId => "new", + prerequisiteId => $prerequisiteId, + requiredProductId => $requiredEvent + },0,0 + ); + } + } + + return $self->www_editEvent if ($self->session->form->get("whatNext") eq "addAnotherPrereq"); return $self->www_view; }