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 {
@@ -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|