the badge/ticket relationships through badge groups now work

This commit is contained in:
JT Smith 2008-04-03 23:22:03 +00:00
parent 87cf7c26f5
commit 4ca80ad734
6 changed files with 85 additions and 36 deletions

View file

@ -119,14 +119,14 @@ sub upgradeEMS {
$db->write("create table EMSBadgeGroup ( $db->write("create table EMSBadgeGroup (
badgeGroupId varchar(22) binary not null primary key, badgeGroupId varchar(22) binary not null primary key,
emsAssetId varchar(22) binary not null, emsAssetId varchar(22) binary not null,
name varchar(100), name varchar(100)
badgeList text
)"); )");
$db->write("create table EMSBadge ( $db->write("create table EMSBadge (
assetId varchar(22) binary not null, assetId varchar(22) binary not null,
revisionDate bigint not null, revisionDate bigint not null,
price float not null default 0.00, price float not null default 0.00,
seatsAvailable int not null default 100, seatsAvailable int not null default 100,
relatedBadgeGroups mediumtext,
primary key (assetId, revisionDate) primary key (assetId, revisionDate)
)"); )");
$db->write("create table EMSTicket ( $db->write("create table EMSTicket (

View file

@ -88,6 +88,13 @@ sub definition {
label => $i18n->get("seats available"), label => $i18n->get("seats available"),
hoverHelp => $i18n->get("seats available help"), hoverHelp => $i18n->get("seats available help"),
}, },
relatedBadgeGroups => {
tab => "properties",
fieldType => "checkList",
customDrawMethod=> 'drawRelatedBadgeGroupsField',
label => $i18n->get("related badge groups"),
hoverHelp => $i18n->get("related badge groups badge help"),
},
); );
push(@{$definition}, { push(@{$definition}, {
assetName => $i18n->get('ems badge'), assetName => $i18n->get('ems badge'),
@ -100,6 +107,24 @@ sub definition {
return $class->SUPER::definition($session, $definition); return $class->SUPER::definition($session, $definition);
} }
#-------------------------------------------------------------------
=head2 drawRelatedBadgeGroupsField ()
Draws the field for the relatedBadgeGroups property.
=cut
sub drawRelatedBadgeGroupsField {
my ($self, $params) = @_;
return WebGUI::Form::checkList($self->session, {
name => $params->{name},
value => $self->get($params->{name}),
vertical => 1,
options => $self->getParent->getBadgeGroups,
});
}
#------------------------------------------------------------------- #-------------------------------------------------------------------

View file

@ -117,7 +117,7 @@ sub definition {
fieldType => "checkList", fieldType => "checkList",
customDrawMethod=> 'drawRelatedBadgeGroupsField', customDrawMethod=> 'drawRelatedBadgeGroupsField',
label => $i18n->get("related badge groups"), label => $i18n->get("related badge groups"),
hoverHelp => $i18n->get("related badge groups help"), hoverHelp => $i18n->get("related badge groups ticket help"),
}, },
relatedRibbons => { relatedRibbons => {
tab => "properties", tab => "properties",

View file

@ -427,8 +427,6 @@ sub www_buildBadge {
my $session = $self->session; my $session = $self->session;
return $session->privilege->noAccess() unless $self->canView; return $session->privilege->noAccess() unless $self->canView;
$badgeId = $session->form->get("badgeId") if ($badgeId eq ""); $badgeId = $session->form->get("badgeId") if ($badgeId eq "");
my $hasBadge = ($badgeId ne "");
$whichTab ||= "tickets";
my $i18n = WebGUI::International->new($session, "Asset_EventManagementSystem"); my $i18n = WebGUI::International->new($session, "Asset_EventManagementSystem");
my %var = ( my %var = (
%{$self->get}, %{$self->get},
@ -437,9 +435,9 @@ sub www_buildBadge {
exportTicketsUrl => undef, exportTicketsUrl => undef,
getTicketsUrl => $self->getUrl('func=getTicketsAsJson;badgeId='.$badgeId), getTicketsUrl => $self->getUrl('func=getTicketsAsJson;badgeId='.$badgeId),
canEdit => $self->canEdit, canEdit => $self->canEdit,
hasBadge => $hasBadge, hasBadge => ($badgeId ne ""),
badgeId => $badgeId, badgeId => $badgeId,
whichTab => $whichTab, whichTab => $whichTab || "tickets",
addRibbonUrl => $self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSRibbon'), addRibbonUrl => $self->getUrl('func=add;class=WebGUI::Asset::Sku::EMSRibbon'),
getRibbonsUrl => $self->getUrl('func=getRibbonsAsJson'), getRibbonsUrl => $self->getUrl('func=getRibbonsAsJson'),
getTokensUrl => $self->getUrl('func=getTokensAsJson'), getTokensUrl => $self->getUrl('func=getTokensAsJson'),
@ -507,17 +505,6 @@ sub www_editBadgeGroup {
label => $i18n->get('badge group name'), label => $i18n->get('badge group name'),
hoverHelp => $i18n->get('badge group name help'), hoverHelp => $i18n->get('badge group name help'),
); );
$f->checkList(
name => 'badgeList',
value => $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)
and asset.className='WebGUI::Asset::Sku::EMSBadge'", [$self->getId]),
vertical => 1,
label => $i18n->get('badge list'),
hoverHelp => $i18n->get('badge list help'),
);
$f->submit; $f->submit;
return $self->processStyle('<h1>'.$i18n->get('badge groups').'</h1>'.$f->print); return $self->processStyle('<h1>'.$i18n->get('badge groups').'</h1>'.$f->print);
} }
@ -536,12 +523,10 @@ sub www_editBadgeGroupSave {
return $self->session->privilege->insufficient() unless $self->canEdit; return $self->session->privilege->insufficient() unless $self->canEdit;
my $form = $self->session->form; my $form = $self->session->form;
my $id = $form->get("badgeGroupId") || "new"; my $id = $form->get("badgeGroupId") || "new";
my @badgeList = $form->get("badgeList",'checkList');
$self->session->db->setRow("EMSBadgeGroup","badgeGroupId",{ $self->session->db->setRow("EMSBadgeGroup","badgeGroupId",{
badgeGroupId => $id, badgeGroupId => $id,
emsAssetId => $self->getId, emsAssetId => $self->getId,
name => $form->get('name'), name => $form->get('name'),
badgeList => JSON::encode_json(\@badgeList),
}); });
return $self->www_manageBadgeGroups; return $self->www_manageBadgeGroups;
} }
@ -785,13 +770,57 @@ sub www_getTicketsAsJson {
@ids = $db->buildArray("select assetId from asset where parentId=? and className='WebGUI::Asset::Sku::EMSTicket'", [$self->getId]); @ids = $db->buildArray("select assetId from asset where parentId=? and className='WebGUI::Asset::Sku::EMSTicket'", [$self->getId]);
} }
# get badge's badge groups
my $badgeId = $form->get('badgeId');
my @badgeGroups = ();
if (defined $badgeId) {
my $assetId = $db->quickScalar("select badgeAssetId from EMSRegistrant where badgeId=?",[$badgeId]);
my $badge = WebGUI::Asset->new($session, $assetId, 'WebGUI::Asset::Sku::EMSBadge');
@badgeGroups = split("\n",$badge->get('relatedBadgeGroups')) if (defined $badge);
}
# get assets # get assets
my $counter = 0; my $counter = 0;
my $totalTickets = scalar(@ids);
my @records = (); my @records = ();
foreach my $id (@ids) { foreach my $id (@ids) {
next unless ($counter >= $startIndex); next unless ($counter >= $startIndex);
my $ticket = WebGUI::Asset->new($session, $id, 'WebGUI::Asset::Sku::EMSTicket'); my $ticket = WebGUI::Asset->new($session, $id, 'WebGUI::Asset::Sku::EMSTicket');
next unless defined $ticket;
# skip borked tickets
unless (defined $ticket) {
$session->errorHandler->warn("EMSTicket $id couldn't be instanciated by EMS ".$self->getId.".");
$totalTickets--;
next;
}
# skip tickets we can't view
unless ($ticket->canView) {
$totalTickets--;
next;
}
# skip tickets not in our badge's badge groups
if (scalar(@badgeGroups) > 0 && $ticket->get('relatedBadgeGroups') ne '') { # skip check if it has no badge groups
my @groups = split("\n",$ticket->get('relatedBadgeGroups'));
my $found = 0;
BADGE: {
foreach my $a (@badgeGroups) {
foreach my $b (@groups) {
if ($a eq $b) {
$found = 1;
last BADGE;
}
}
}
}
unless ($found) {
$totalTickets--;
next;
}
}
# publish the data for this ticket
my $date = WebGUI::DateTime->new($session, $ticket->get('startDate')); my $date = WebGUI::DateTime->new($session, $ticket->get('startDate'));
push(@records, { push(@records, {
title => $ticket->getTitle, title => $ticket->getTitle,
@ -813,7 +842,7 @@ sub www_getTicketsAsJson {
# build json # build json
$results{records} = \@records; $results{records} = \@records;
$results{totalRecords} = scalar(@ids); $results{totalRecords} = $totalTickets;
$results{recordsReturned} = scalar(@records); $results{recordsReturned} = scalar(@records);
$results{'startIndex'} = $startIndex; $results{'startIndex'} = $startIndex;
$results{'sort'} = undef; $results{'sort'} = undef;

View file

@ -282,6 +282,7 @@ An array reference of assetIds to look for.
sub getItemsByAssetId { sub getItemsByAssetId {
my ($self, $assetIds) = @_; my ($self, $assetIds) = @_;
return [] unless (scalar(@{$assetIds}) > 0);
my @itemsObjects = (); my @itemsObjects = ();
my $items = $self->session->db->read("select itemId from cartItem where cartId=? and assetId in (".$self->session->db->quoteAndJoin($assetIds).")",[$self->getId]); my $items = $self->session->db->read("select itemId from cartItem where cartId=? and assetId in (".$self->session->db->quoteAndJoin($assetIds).")",[$self->getId]);
while (my ($itemId) = $items->array) { while (my ($itemId) = $items->array) {

View file

@ -21,19 +21,7 @@ our $I18N = {
}, },
'badge group name help' => { 'badge group name help' => {
message => q|Enter a name to group these badges under.|, message => q|Enter a name to be used to link badges with tickets under.|,
lastUpdated => 0,
context => q|help for a badge group property label|,
},
'badge list' => {
message => q|Badge List|,
lastUpdated => 0,
context => q|a badge group property label|,
},
'badge list help' => {
message => q|Select the badges that belong to this group.|,
lastUpdated => 0, lastUpdated => 0,
context => q|help for a badge group property label|, context => q|help for a badge group property label|,
}, },
@ -362,12 +350,18 @@ our $I18N = {
context => q|a ticket property label|, context => q|a ticket property label|,
}, },
'related badge groups help' => { 'related badge groups ticket help' => {
message => q|Check the badge groups that can act as a prerequisite to being able to attend this event. If none are checked, then any badge will do.|, message => q|Check the badge groups that can act as a prerequisite to being able to attend this event. If none are checked, then any badge will do.|,
lastUpdated => 0, lastUpdated => 0,
context => q|help for a ticket property label|, context => q|help for a ticket property label|,
}, },
'related badge groups badge help' => {
message => q|Check the badge groups that related to this badge, so that tickets can be assigned prerequisite badges.|,
lastUpdated => 0,
context => q|help for a ticket property label|,
},
'related ribbons' => { 'related ribbons' => {
message => q|Related Ribbons|, message => q|Related Ribbons|,
lastUpdated => 0, lastUpdated => 0,