the badge/ticket relationships through badge groups now work
This commit is contained in:
parent
87cf7c26f5
commit
4ca80ad734
6 changed files with 85 additions and 36 deletions
|
|
@ -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 (
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue