diff --git a/docs/upgrades/packages-7.5.3/root_import_ems.wgpkg b/docs/upgrades/packages-7.5.3/root_import_ems.wgpkg new file mode 100644 index 000000000..594f282f3 Binary files /dev/null and b/docs/upgrades/packages-7.5.3/root_import_ems.wgpkg differ diff --git a/docs/upgrades/upgrade_7.5.2-7.5.3.pl b/docs/upgrades/upgrade_7.5.2-7.5.3.pl index becbd1c7a..c0b7049a7 100644 --- a/docs/upgrades/upgrade_7.5.2-7.5.3.pl +++ b/docs/upgrades/upgrade_7.5.2-7.5.3.pl @@ -70,7 +70,7 @@ sub upgradeEMS { $db->write("alter table EventManagementSystem drop column ticketPrinterTemplateId"); $db->write("alter table EventManagementSystem add column timezone varchar(30) not null default 'America/Chicago'"); $db->write("alter table EventManagementSystem add column templateId varchar(22) binary not null"); - $db->write("alter table EventManagementSystem add column extrasTemplateId varchar(22) binary not null"); + $db->write("alter table EventManagementSystem add column badgeBuilderTemplateId varchar(22) binary not null default 'BMybD3cEnmXVk2wQ_qEsRQ'"); $db->write("alter table EventManagementSystem add column badgeInstructions mediumtext"); $db->write("alter table EventManagementSystem add column ribbonInstructions mediumtext"); $db->write("alter table EventManagementSystem add column ticketInstructions mediumtext"); @@ -93,6 +93,7 @@ sub upgradeEMS { phoneNumber varchar(35), organization varchar(35), email varchar(255), + notes mediumtext, purchaseComplete boolean, hasCheckedIn boolean, index badgeAssetId_purchaseComplete (badgeAssetId,purchaseComplete) @@ -128,7 +129,7 @@ sub upgradeEMS { price float not null default 0.00, seatsAvailable int not null default 100, startDate datetime, - endDate datetime, + duration float not null default 1.0, eventNumber int, location varchar(100), relatedBadges mediumtext, diff --git a/lib/WebGUI/Asset/Sku/EMSBadge.pm b/lib/WebGUI/Asset/Sku/EMSBadge.pm index 408b660bb..6f3cdb66c 100644 --- a/lib/WebGUI/Asset/Sku/EMSBadge.pm +++ b/lib/WebGUI/Asset/Sku/EMSBadge.pm @@ -348,7 +348,7 @@ sub www_addToCart { # add it to the cart $self->addToCart(\%badgeInfo); - return $self->getParent->www_viewExtras($self->getOptions->{badgeId}); + return $self->getParent->www_buildBadge($self->getOptions->{badgeId}); } diff --git a/lib/WebGUI/Asset/Sku/EMSRibbon.pm b/lib/WebGUI/Asset/Sku/EMSRibbon.pm index 4f0ac174a..03964f974 100644 --- a/lib/WebGUI/Asset/Sku/EMSRibbon.pm +++ b/lib/WebGUI/Asset/Sku/EMSRibbon.pm @@ -189,7 +189,7 @@ sub www_addToCart { return $self->session->privilege->noAccess() unless $self->getParent->canView; my $badgeId = $self->session->form->get('badgeId'); $self->addToCart({badgeId=>$badgeId}); - return $self->getParent->www_viewExtras($badgeId); + return $self->getParent->www_buildBadge($badgeId); } #------------------------------------------------------------------- @@ -222,21 +222,21 @@ sub www_edit { |); my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem"); my $form = $self->getEditForm; - $form->hidden({name=>'proceed', value=>'viewAllRibbons'}); + $form->hidden({name=>'proceed', value=>'viewAll'}); return $self->processStyle('
Add a badge + • View Events + • View Cart
|.$self->get('badgeInstructions').q|
@@ -278,6 +281,7 @@ STOP return $self->processTemplate(\%var,undef,$self->{_viewTemplate}); } + #------------------------------------------------------------------- =head2 www_addRibbonToBadge () @@ -342,6 +346,124 @@ sub www_addTokenToBadge { return $self->www_getRegistrantAsJson(); } +#------------------------------------------------------------------- + +=head2 www_buildBadge ( [badgeId, whichTab] ) + +Displays available ribbons, tokens, and tickets for the current badge. + +=cut + +sub www_buildBadge { + my ($self, $badgeId, $whichTab) = @_; + 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 $i18n = WebGUI::International->new($session, "Asset_EventManagementSystem"); + my %var = ( + %{$self->get}, + addTicketUrl => $self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSTicket'), + importTicketsUrl => undef, + exportTicketsUrl => undef, + getTicketsUrl => $self->getUrl('func=getTicketsAsJson;badgeId='.$badgeId), + canEdit => $self->canEdit, + hasBadge => $hasBadge, + badgeId => $badgeId, + whichTab => $whichTab, + addRibbonUrl => $self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSRibbon'), + getRibbonsUrl => $self->getUrl('func=getRibbonsAsJson'), + getTokensUrl => $self->getUrl('func=getTokensAsJson'), + addTokenUrl => $self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSToken'), + lookupBadgeUrl => $self->getUrl('func=lookupRegistrant'), + url => $self->getUrl, + viewCartUrl => $self->getUrl('shop=cart'), + customRequestUrl => $self->getUrl('badgeId='.$badgeId), + ); + my @otherBadges =(); + my $cart = WebGUI::Shop::Cart->getCartBySession($session); + foreach my $item (@{$cart->getItems}) { + my $id = $item->get('options')->{badgeId}; + next if ($id eq $badgeId); + next unless ($item->getSku->isa("WebGUI::Asset::Sku::EMSBadge")); + my $name = $session->db->quickScalar("select name from EMSRegistrant where badgeId=?",[$id]); + push(@otherBadges, { + badgeUrl => $self->getUrl('func=buildBadge;badgeId='.$id), + badgeLabel => sprintf($i18n->get('switch to badge for'), $name), + }); + } + $var{otherBadgesInCart} = \@otherBadges; + #return JSON->new->pretty->encode(\@otherBadges); + + # render + return $self->processStyle($self->processTemplate(\%var,$self->get('badgeBuilderTemplateId'))); +} + +#------------------------------------------------------------------- + +=head2 www_deleteBadgeGroup () + +Deletes a badge group. + +=cut + +sub www_deleteBadgeGroup { + my $self = shift; + return $self->www_manageBadgeGroups; +} + + +#------------------------------------------------------------------- + +=head2 www_editBadgeGroup () + +Displays an edit screen for a badge group. + +=cut + +sub www_editBadgeGroup { + my $self = shift; + my ($form, $db) = $self->session->quick(qw(form db)); + my $f = WebGUI::HTMLForm->new($self->session, action=>$self->getUrl); + my $badgeGroup = $db->getRow("EMSBadgeGroup","badgeGroupId",$form->get('badgeGroupId')); + my $i18n = WebGUI::International->new($self->session, "Asset_EventManagementSystem"); + $f->hidden(name=>'func', value=>'editBadgeGroupSave'); + $f->hidden(name=>'badgeGroupId', value=>$form->get('badgeGroupId')); + $f->text( + name => 'name', + value => $badgeGroup->{name}, + label =>, + hoverHelp =>, + ); + $f->checkList( + name => 'badgeList', + value => JSON::decode_json($badgeGroup->{badgeList}), + options => $db->buildHashRef("select asset.assetId,assetData.title from asset left join assetData + using (assetId) where asset.parentId=? and assetData.revisionDate= + (SELECT max(revisionDate) from assetData where assetData.assetId=asset.assetId)", + [$self->getId]), + label => , + hoverHelp =>, + ); + return $self->processStyle($f->print); +} + + +#------------------------------------------------------------------- + +=head2 www_editBadgeGroupSave () + +Saves a badge group. + +=cut + +sub www_editBadgeGroupSave { + my $self = shift; + return $self->www_manageBadgeGroups; +} + + #------------------------------------------------------------------- =head2 www_getBadgesAsJson () @@ -378,149 +500,6 @@ sub www_getBadgesAsJson { #------------------------------------------------------------------- -=head2 www_getRibbonsAsJson () - -Retrieves a list of ribbons for the www_viewExtras() method. - -=cut - -sub www_getRibbonsAsJson { - my ($self) = @_; - my $session = $self->session; - return $session->privilege->insufficient() unless $self->canView; - my ($db, $form) = $session->quick(qw(db form)); - my %results = (); - foreach my $ribbon (@{$self->getLineage(['children'],{returnObjects=>1, includeOnlyClasses=>['WebGUI::Asset::Sku::EMSRibbon']})}) { - push(@{$results{records}}, { - title => $ribbon->getTitle, - description => $ribbon->get('description'), - price => $ribbon->getPrice+0, - url => $ribbon->getUrl, - editUrl => $ribbon->getUrl('func=edit'), - deleteUrl => $ribbon->getUrl('func=delete'), - assetId => $ribbon->getId, - }); - } - $results{totalRecords} = $results{recordsReturned} = scalar(@{$results{records}}); - $results{'startIndex'} = 0; - $results{'sort'} = undef; - $results{'dir'} = "asc"; - $session->http->setMimeType('text/json'); - return JSON::to_json(\%results); -} - - -#------------------------------------------------------------------- - -=head2 www_getTicketsAsJson () - -Retrieves a list of tickets for the www_viewExtras() method. - -=cut - -sub www_getTicketsAsJson { - my ($self) = @_; - 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 = (); - 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, - quantityAvailable => $ticket->getQuantityAvailable, - url => $ticket->getUrl, - 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++; - } - - # 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); -} - - -#------------------------------------------------------------------- - -=head2 www_getTokensAsJson () - -Retrieves a list of tokens for the www_viewExtras() method. - -=cut - -sub www_getTokensAsJson { - my ($self) = @_; - my $session = $self->session; - return $session->privilege->insufficient() unless $self->canView; - my ($db, $form) = $session->quick(qw(db form)); - my %results = (); - foreach my $token (@{$self->getLineage(['children'],{returnObjects=>1, includeOnlyClasses=>['WebGUI::Asset::Sku::EMSToken']})}) { - push(@{$results{records}}, { - title => $token->getTitle, - description => $token->get('description'), - price => $token->getPrice+0, - url => $token->getUrl, - editUrl => $token->getUrl('func=edit'), - deleteUrl => $token->getUrl('func=delete'), - assetId => $token->getId, - }); - } - $results{totalRecords} = $results{recordsReturned} = scalar(@{$results{records}}); - $results{'startIndex'} = 0; - $results{'sort'} = undef; - $results{'dir'} = "asc"; - $session->http->setMimeType('text/json'); - return JSON::to_json(\%results); -} - -#------------------------------------------------------------------- - =head2 www_getRegistrantAsJson ( ) Retrieves the properties of the current badge and the items attached to it. @@ -635,7 +614,7 @@ sub www_getRegistrantAsJson { }); } # it's this badge - elsif ($sku->isa('WebGUI::Asset::Sku::EMSRibbon')) { + elsif ($sku->isa('WebGUI::Asset::Sku::EMSBadge')) { $badgeInfo->{hasPurchased} = 0; $badgeInfo->{itemId} = $item->getId; $badgeInfo->{price} = $sku->getPrice+0; @@ -652,521 +631,209 @@ sub www_getRegistrantAsJson { #------------------------------------------------------------------- +=head2 www_getRibbonsAsJson () -=head2 www_viewExtras ( [badgeId, whichTab] ) - -Displays available ribbons, tokens, and tickets for the current badge. +Retrieves a list of ribbons for the www_buildBadge() method. =cut -sub www_viewExtras { - my ($self, $badgeId, $whichTab) = @_; +sub www_getRibbonsAsJson { + my ($self) = @_; 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)); - $style->setLink($url->extras('/yui/build/reset-fonts-grids/reset-fonts-grids.css'), {rel=>'stylesheet', type=>'text/css'}); - $style->setLink($url->extras('/yui/build/tabview/assets/skins/sam/tabview.css'), {rel=>'stylesheet', type=>'text/css'}); - $style->setLink($url->extras('/yui/build/datatable/assets/skins/sam/datatable.css'), {rel=>'stylesheet', type=>'text/css'}); - $style->setLink($url->extras('/yui/build/container/assets/skins/sam/container.css'), {rel=>'stylesheet', type=>'text/css'}); - $style->setScript($url->extras('/yui/build/utilities/utilities.js'), {type=>'text/javascript'}); - $style->setScript($url->extras('/yui/build/json/json-min.js'), {type=>'text/javascript'}); - $style->setScript($url->extras('/yui/build/datasource/datasource-beta-min.js'), {type=>'text/javascript'}); - $style->setScript($url->extras('/yui/build/datatable/datatable-beta-min.js'), {type=>'text/javascript'}); - $style->setScript($url->extras('/yui/build/container/container-min.js'), {type=>'text/javascript'}); - $style->setScript($url->extras('/yui/build/tabview/tabview-min.js'), {type=>'text/javascript'}); - $style->setScript($url->extras('/yui-webgui/build/string/string.js'), {type=>'text/javascript'}); - $style->setRawHeadTags(q| - - |); - - my $output = q| - -- Add a ticket - • - Import - • - Export -
-|.$self->get('ticketInstructions').q|
-
|.$self->get('ribbonInstructions').q|
- - - - -|.$self->get('tokenInstructions').q|
- - - - -