From 29b95c45eea207d5363e1e1cbc206a7a6eef9cbb Mon Sep 17 00:00:00 2001 From: JT Smith Date: Thu, 27 Mar 2008 21:19:50 +0000 Subject: [PATCH] user interface mostly working for ems --- lib/WebGUI/Asset/Sku.pm | 1 + lib/WebGUI/Asset/Sku/EMSTicket.pm | 17 ++ .../Asset/Wobject/EventManagementSystem.pm | 173 ++++++++++++++---- 3 files changed, 155 insertions(+), 36 deletions(-) diff --git a/lib/WebGUI/Asset/Sku.pm b/lib/WebGUI/Asset/Sku.pm index 97cc4139f..1cc20d85a 100644 --- a/lib/WebGUI/Asset/Sku.pm +++ b/lib/WebGUI/Asset/Sku.pm @@ -289,6 +289,7 @@ sub indexContent { my $self = shift; my $indexer = $self->SUPER::indexContent; $indexer->addKeywords($self->get('sku')); + return $indexer; } diff --git a/lib/WebGUI/Asset/Sku/EMSTicket.pm b/lib/WebGUI/Asset/Sku/EMSTicket.pm index c82b8ec8e..cc888d660 100644 --- a/lib/WebGUI/Asset/Sku/EMSTicket.pm +++ b/lib/WebGUI/Asset/Sku/EMSTicket.pm @@ -186,6 +186,23 @@ sub getQuantityAvailable { return $self->get("seatsAvailable") - $seatsTaken; } +#------------------------------------------------------------------- + +=head2 indexContent ( ) + +Adding location and eventNumber as a keyword. See WebGUI::Asset::indexContent() for additonal details. + +=cut + +sub indexContent { + my $self = shift; + my $indexer = $self->SUPER::indexContent; + $indexer->addKeywords($self->get('location').' '.$self->get('eventNumber')); + return $indexer; +} + + + #------------------------------------------------------------------- =head2 onCompletePurchase diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index e9aa8c3bc..a0f73a2ef 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -182,6 +182,7 @@ sub view {

Add a badge

|.$self->get('badgeInstructions').q|

+
@@ -208,7 +209,7 @@ STOP # paginator in case there are a lot of badges $output .= <session; + return $session->privilege->insufficient() unless $self->canView; + my $form = $session->form; + my @ids = $form->param('assetId'); + foreach my $id (@ids) { + my $ticket = WebGUI::Asset->new($session, $id, 'WebGUI::Asset::Sku::EMSTicket'); + if (defined $ticket) { + $ticket->addToCart({badgeId=>$form->get('badgeId')}); + } + } + return $self->www_getRegistrantAsJson(); +} + +#------------------------------------------------------------------- + =head2 www_addTokenToBadge () Adds a token to a badge. Expects three form parameters, assetId, quantity, and badgeId, where assetId represents the token, quantity is the amount to add, and badgeId represents the badge. @@ -399,9 +423,40 @@ sub www_getTicketsAsJson { my $session = $self->session; return $session->privilege->insufficient() unless $self->canView; my ($db, $form) = $session->quick(qw(db form)); + my $startIndex = $form->get('startIndex') || 0; + my $numberOfResults = $form->get('results') || 25; my %results = (); - foreach my $ticket (@{$self->getLineage(['children'],{returnObjects=>1, includeOnlyClasses=>['WebGUI::Asset::Sku::EMSTicket']})}) { - push(@{$results{records}}, { + my @ids = (); + my $keywords = $form->get('keywords'); + + # looking for specific events + if ($keywords =~ m{^[\d+,*\s*]+$}) { + @ids = $db->buildArray("select EMSTicket.assetId from EMSTicket left join asset using (assetId) where + asset.parentId=? and EMSTicket.eventNumber in (".$keywords.")",[$self->getId]); + } + + # looking for keywords + elsif ($keywords ne "") { + @ids = @{WebGUI::Search->new($session)->search({ + keywords => $keywords, + lineage => [$self->get('lineage')], + classes => ['WebGUI::Asset::Sku::EMSTicket'], + })->getAssetIds}; + } + + # just get all tickets + else { + @ids = $db->buildArray("select assetId from asset where parentId=? and className='WebGUI::Asset::Sku::EMSTicket'", [$self->getId]); + } + + # get assets + my $counter = 0; + my @records = (); + foreach my $id (@ids) { + next unless ($counter >= $startIndex); + my $ticket = WebGUI::Asset->new($session, $id, 'WebGUI::Asset::Sku::EMSTicket'); + next unless defined $ticket; + push(@records, { title => $ticket->getTitle, description => $ticket->get('description'), price => $ticket->getPrice+0, @@ -410,12 +465,22 @@ sub www_getTicketsAsJson { editUrl => $ticket->getUrl('func=edit'), deleteUrl => $ticket->getUrl('func=delete'), assetId => $ticket->getId, + eventNumber => $ticket->get('eventNumber'), + location => $ticket->get('location'), + startDate => $ticket->get('startDate'), + endDate => $ticket->get('endDate'), }); + last unless (scalar(@records) < $numberOfResults); + $counter++; } - $results{totalRecords} = $results{recordsReturned} = scalar(@{$results{records}}); - $results{'startIndex'} = 0; - $results{'sort'} = undef; - $results{'dir'} = "asc"; + + # build json + $results{records} = \@records; + $results{totalRecords} = scalar(@ids); + $results{recordsReturned} = scalar(@records); + $results{'startIndex'} = $startIndex; + $results{'sort'} = undef; + $results{'dir'} = "asc"; $session->http->setMimeType('text/json'); return JSON::to_json(\%results); } @@ -599,6 +664,7 @@ sub www_viewExtras { my $session = $self->session; return $session->privilege->noAccess() unless $self->canView; $badgeId = $session->form->get("badgeId") if ($badgeId eq ""); + my $hasBadge = ($badgeId ne ""); $whichTab ||= "tickets"; my ($style, $url) = $session->quick(qw(style url)); @@ -687,6 +753,7 @@ sub www_viewExtras {

|.$self->get('ticketInstructions').q|

+
@@ -703,7 +770,7 @@ YAHOO.util.Event.onDOMReady(function () { mySource.responseSchema = { resultsList : 'records', totalRecords: 'totalRecords', - fields : [ 'url', 'title', 'description', 'price', 'quantityAvailable', 'deleteUrl', 'editUrl', 'assetId'] + fields : [ 'location', 'startDate', 'endDate', 'eventNumber', 'url', 'title', 'description', 'price', 'quantityAvailable', 'deleteUrl', 'editUrl', 'assetId'] }; var buildQueryString = function (state,dt) { @@ -714,7 +781,7 @@ YAHOO.util.Event.onDOMReady(function () { // paginator in case there are a lot of tickets var myPaginator = new Paginator({ - containers : ['paging'], + containers : ['emsTicketPaging'], pageLinks : 5, rowsPerPage : 25, rowsPerPageOptions : [25,50,100], @@ -757,46 +824,56 @@ YAHOO.util.Event.onDOMReady(function () { if ($session->var->isAdminOn) { $output .= '{key:"editUrl", label:"Manage", formatter:formatManageTicket},'; } + if ($hasBadge) { + $output .= '{key:"assetId", label:"Buy", formatter:formatAddToCart},'; + } $output .= q| - {key:"assetId", label:"Buy", formatter:formatAddToCart}, + {key:"eventNumber", label:"Event #",sortable:true}, {key:"title", label:"Title",sortable:true,formatter:formatViewTicketDescription}, {key:"price", label:"Price",sortable:true,formatter:YAHOO.widget.DataTable.formatCurrency}, - {key:"quantityAvailable",sortable:true,label:"Quantity Available", formatter:formatQuantityAvailable} + {key:"quantityAvailable",sortable:true,label:"# Available", formatter:formatQuantityAvailable}, + {key:"startDate", label:"Start",sortable:true}, + {key:"endDate", label:"End",sortable:true} ]; var myTable = new DataTable('emsTicketList', myColumnDefs, mySource, myTableConfig); - - var buyButtonAction = function () { - onclick="populateRegistrantBadge({func:'addTicketsToBadge',assetId:\'' +assetId+ '\'});" - } - + + |; + if ($hasBadge) { + $output .= q| // buy button in header var thead = myTable.getTbodyEl().parentNode.createTHead(); var tr = thead.insertRow(-1); var th = tr.appendChild(document.createElement('th')); - th.colSpan = 4; - var buyButton = th.appendChild(document.createElement('input')); - buyButton.type = 'button'; - buyButton.value = 'Buy'; - buyButton.onclick = buyButtonAction; - buyButton.className = 'forwardButton'; + th.colSpan = 7; + th.innerHTML = ''; // buy button in footer var tfoot = myTable.getTbodyEl().parentNode.createTFoot(); var tr = tfoot.insertRow(-1); var th = tr.appendChild(document.createElement('th')); - th.colSpan = 4; - var buyButton = th.appendChild(document.createElement('input')); - buyButton.type = 'button'; - buyButton.value = 'Buy'; - buyButton.onclick = buyButtonAction; - buyButton.className = 'forwardButton'; - + th.colSpan = 7; + th.innerHTML = ''; + |; + } + $output .= q| Dom.get('keywordSearchForm').onsubmit = function () { mySource.sendRequest(';keywords=' + Dom.get('keywordsField').value + ';startIndex=0', myTable.onDataReturnInitializeTable, myTable); return false; }; }); + + function submitTicketsToBadge (form) { + var field = form.assetId; + var assetIds = new Array(); + for (i = 0; i < field.length; i++) { + if (field[i].checked == true) { + assetIds.push(field[i].value) + } + } + populateRegistrantBadge({func:'addTicketsToBadge',assetIds: assetIds}); + } + @@ -827,7 +904,7 @@ YAHOO.util.Event.onDOMReady(function () { // paginator in case there are a lot of ribbons var myPaginator = new Paginator({ - containers : ['paging'], + containers : ['emsRibbonPaging'], pageLinks : 5, rowsPerPage : 25, rowsPerPageOptions : [25,50,100], @@ -863,8 +940,10 @@ YAHOO.util.Event.onDOMReady(function () { if ($session->var->isAdminOn) { $output .= '{key:"editUrl", label:"Manage", formatter:formatManageRibbon},'; } - $output .= q| - {key:"assetId", label:"Buy", formatter:formatAddToCart}, + if ($hasBadge) { + $output .= '{key:"assetId", label:"Buy", formatter:formatAddToCart},'; + } + $output .= q| {key:"title", label:"Title",sortable:true,formatter:formatViewRibbonDescription}, {key:"price", label:"Price",sortable:true,formatter:YAHOO.widget.DataTable.formatCurrency} ]; @@ -900,7 +979,7 @@ YAHOO.util.Event.onDOMReady(function () { // paginator in case there are a lot of tokens var myPaginator = new Paginator({ - containers : ['paging'], + containers : ['emsTokenPaging'], pageLinks : 5, rowsPerPage : 25, rowsPerPageOptions : [25,50,100], @@ -926,7 +1005,7 @@ YAHOO.util.Event.onDOMReady(function () { var i=1; while (i<101) { selector += ''; - if (i>=5) { + if (i>=20) { i += 5; } else { @@ -953,8 +1032,10 @@ YAHOO.util.Event.onDOMReady(function () { if ($session->var->isAdminOn) { $output .= '{key:"editUrl", label:"Manage", formatter:formatManageToken},'; } + if ($hasBadge) { + $output .= '{key:"assetId", label:"Buy", formatter:formatAddToCart},'; + } $output .= q| - {key:"assetId", label:"Buy", formatter:formatAddToCart}, {key:"title", label:"Title",sortable:true,formatter:formatViewTokenDescription}, {key:"price", label:"Price",sortable:true,formatter:YAHOO.widget.DataTable.formatCurrency} ]; @@ -966,6 +1047,9 @@ YAHOO.util.Event.onDOMReady(function () { + |; + if ($hasBadge) { + $output .= q|
|.$self->getTitle.q| @@ -975,6 +1059,12 @@ YAHOO.util.Event.onDOMReady(function () {
+
+ |; + } + $output .= q|