Update EMSTicket for Moose. Needs custom draw method work.
This commit is contained in:
parent
6c26c2ee3b
commit
4723f2d175
1 changed files with 91 additions and 87 deletions
|
|
@ -15,8 +15,81 @@ package WebGUI::Asset::Sku::EMSTicket;
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use base 'WebGUI::Asset::Sku';
|
use WebGUI::Definition::Asset;
|
||||||
use Tie::IxHash;
|
extends 'WebGUI::Asset::Sku';
|
||||||
|
aspect assetName => ['ems ticket', 'Asset_EMSTicket'];
|
||||||
|
aspect icon => 'EMSTicket.gif';
|
||||||
|
aspect tableName => 'EMSTicket';
|
||||||
|
property price => (
|
||||||
|
tab => "shop",
|
||||||
|
fieldType => "float",
|
||||||
|
default => 0.00,
|
||||||
|
label => ["price", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["price help", 'Asset_EMSTicket'],
|
||||||
|
);
|
||||||
|
property seatsAvailable => (
|
||||||
|
tab => "shop",
|
||||||
|
fieldType => "integer",
|
||||||
|
default => 25,
|
||||||
|
label => ["seats available", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["seats available help", 'Asset_EMSTicket'],
|
||||||
|
);
|
||||||
|
property eventNumber => (
|
||||||
|
tab => "properties",
|
||||||
|
fieldType => "integer",
|
||||||
|
customDrawMethod=> 'drawEventNumberField',
|
||||||
|
label => ["event number", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["event number help", 'Asset_EMSTicket'],
|
||||||
|
);
|
||||||
|
property startDate => (
|
||||||
|
noFormPost => 1,
|
||||||
|
fieldType => "hidden",
|
||||||
|
builder => '_startDate_builder',
|
||||||
|
lazy => 1,
|
||||||
|
label => ["add/edit event start date", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["add/edit event start date help", 'Asset_EMSTicket'],
|
||||||
|
autoGenerate => 0,
|
||||||
|
);
|
||||||
|
sub _startDate_builder {
|
||||||
|
my $session = shift->session;
|
||||||
|
my $date = WebGUI::DateTime->new($session, time());
|
||||||
|
return $date->toDatabase,
|
||||||
|
}
|
||||||
|
property duration => (
|
||||||
|
tab => "properties",
|
||||||
|
fieldType => "float",
|
||||||
|
default => 1.0,
|
||||||
|
subtext => ['hours', 'Asset_EMSTicket'],
|
||||||
|
label => ["duration", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["duration help", 'Asset_EMSTicket'],
|
||||||
|
);
|
||||||
|
property location => (
|
||||||
|
fieldType => "combo",
|
||||||
|
tab => "properties",
|
||||||
|
customDrawMethod=> 'drawLocationField',
|
||||||
|
label => ["location", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["location help", 'Asset_EMSTicket'],
|
||||||
|
);
|
||||||
|
property relatedBadgeGroups => (
|
||||||
|
tab => "properties",
|
||||||
|
fieldType => "checkList",
|
||||||
|
customDrawMethod=> 'drawRelatedBadgeGroupsField',
|
||||||
|
label => ["related badge groups", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["related badge groups ticket help", 'Asset_EMSTicket'],
|
||||||
|
);
|
||||||
|
property relatedRibbons => (
|
||||||
|
tab => "properties",
|
||||||
|
fieldType => "checkList",
|
||||||
|
customDrawMethod=> 'drawRelatedRibbonsField',
|
||||||
|
label => ["related ribbons", 'Asset_EMSTicket'],
|
||||||
|
hoverHelp => ["related ribbons help", 'Asset_EMSTicket'],
|
||||||
|
);
|
||||||
|
property eventMetaData => (
|
||||||
|
noFormPost => 1,
|
||||||
|
fieldType => "hidden",
|
||||||
|
default => '{}',
|
||||||
|
);
|
||||||
|
|
||||||
use JSON ();
|
use JSON ();
|
||||||
use WebGUI::Utility;
|
use WebGUI::Utility;
|
||||||
|
|
||||||
|
|
@ -70,79 +143,10 @@ sub definition {
|
||||||
my $session = shift;
|
my $session = shift;
|
||||||
my $definition = shift;
|
my $definition = shift;
|
||||||
my %properties;
|
my %properties;
|
||||||
tie %properties, 'Tie::IxHash';
|
|
||||||
my $i18n = WebGUI::International->new($session, "Asset_EventManagementSystem");
|
my $i18n = WebGUI::International->new($session, "Asset_EventManagementSystem");
|
||||||
my $date = WebGUI::DateTime->new($session, time());
|
|
||||||
%properties = (
|
%properties = (
|
||||||
price => {
|
|
||||||
tab => "shop",
|
|
||||||
fieldType => "float",
|
|
||||||
defaultValue => 0.00,
|
|
||||||
label => $i18n->get("price"),
|
|
||||||
hoverHelp => $i18n->get("price help"),
|
|
||||||
},
|
|
||||||
seatsAvailable => {
|
|
||||||
tab => "shop",
|
|
||||||
fieldType => "integer",
|
|
||||||
defaultValue => 25,
|
|
||||||
label => $i18n->get("seats available"),
|
|
||||||
hoverHelp => $i18n->get("seats available help"),
|
|
||||||
},
|
|
||||||
eventNumber => {
|
|
||||||
tab => "properties",
|
|
||||||
fieldType => "integer",
|
|
||||||
customDrawMethod=> 'drawEventNumberField',
|
|
||||||
label => $i18n->get("event number"),
|
|
||||||
hoverHelp => $i18n->get("event number help"),
|
|
||||||
},
|
|
||||||
startDate => {
|
|
||||||
noFormPost => 1,
|
|
||||||
fieldType => "hidden",
|
|
||||||
defaultValue => $date->toDatabase,
|
|
||||||
label => $i18n->get("add/edit event start date"),
|
|
||||||
hoverHelp => $i18n->get("add/edit event start date help"),
|
|
||||||
autoGenerate => 0,
|
|
||||||
},
|
|
||||||
duration => {
|
|
||||||
tab => "properties",
|
|
||||||
fieldType => "float",
|
|
||||||
defaultValue => 1.0,
|
|
||||||
subtext => $i18n->get('hours'),
|
|
||||||
label => $i18n->get("duration"),
|
|
||||||
hoverHelp => $i18n->get("duration help"),
|
|
||||||
},
|
|
||||||
location => {
|
|
||||||
fieldType => "combo",
|
|
||||||
tab => "properties",
|
|
||||||
customDrawMethod=> 'drawLocationField',
|
|
||||||
label => $i18n->get("location"),
|
|
||||||
hoverHelp => $i18n->get("location help"),
|
|
||||||
},
|
|
||||||
relatedBadgeGroups => {
|
|
||||||
tab => "properties",
|
|
||||||
fieldType => "checkList",
|
|
||||||
customDrawMethod=> 'drawRelatedBadgeGroupsField',
|
|
||||||
label => $i18n->get("related badge groups"),
|
|
||||||
hoverHelp => $i18n->get("related badge groups ticket help"),
|
|
||||||
},
|
|
||||||
relatedRibbons => {
|
|
||||||
tab => "properties",
|
|
||||||
fieldType => "checkList",
|
|
||||||
customDrawMethod=> 'drawRelatedRibbonsField',
|
|
||||||
label => $i18n->get("related ribbons"),
|
|
||||||
hoverHelp => $i18n->get("related ribbons help"),
|
|
||||||
},
|
|
||||||
eventMetaData => {
|
|
||||||
noFormPost => 1,
|
|
||||||
fieldType => "hidden",
|
|
||||||
defaultValue => '{}',
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
push(@{$definition}, {
|
push(@{$definition}, {
|
||||||
assetName => $i18n->get('ems ticket'),
|
|
||||||
icon => 'EMSTicket.gif',
|
|
||||||
autoGenerateForms => 1,
|
|
||||||
tableName => 'EMSTicket',
|
|
||||||
className => 'WebGUI::Asset::Sku::EMSTicket',
|
className => 'WebGUI::Asset::Sku::EMSTicket',
|
||||||
properties => \%properties
|
properties => \%properties
|
||||||
});
|
});
|
||||||
|
|
@ -160,7 +164,7 @@ Draws the field for the eventNumber property.
|
||||||
sub drawEventNumberField {
|
sub drawEventNumberField {
|
||||||
my ($self, $params) = @_;
|
my ($self, $params) = @_;
|
||||||
my $default = $self->session->db->quickScalar("select max(eventNumber)+1 from EMSTicket left join asset using (assetId)
|
my $default = $self->session->db->quickScalar("select max(eventNumber)+1 from EMSTicket left join asset using (assetId)
|
||||||
where parentId=?",[$self->get('parentId')]);
|
where parentId=?",[$self->parentId]);
|
||||||
return WebGUI::Form::integer($self->session, {
|
return WebGUI::Form::integer($self->session, {
|
||||||
name => $params->{name},
|
name => $params->{name},
|
||||||
value => $self->get($params->{name}),
|
value => $self->get($params->{name}),
|
||||||
|
|
@ -179,10 +183,10 @@ Draws the field for the location property.
|
||||||
sub drawLocationField {
|
sub drawLocationField {
|
||||||
my ($self, $params) = @_;
|
my ($self, $params) = @_;
|
||||||
my $options = $self->session->db->buildHashRef("select distinct(location) from EMSTicket left join asset using (assetId)
|
my $options = $self->session->db->buildHashRef("select distinct(location) from EMSTicket left join asset using (assetId)
|
||||||
where parentId=? order by location",[$self->get('parentId')]);
|
where parentId=? order by location",[$self->parentId]);
|
||||||
return WebGUI::Form::combo($self->session, {
|
return WebGUI::Form::combo($self->session, {
|
||||||
name => 'location',
|
name => 'location',
|
||||||
value => $self->get('location'),
|
value => $self->location,
|
||||||
options => $options,
|
options => $options,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -291,7 +295,7 @@ sub getEditForm {
|
||||||
hoverHelp => $i18n->get("add/edit event start date help"),
|
hoverHelp => $i18n->get("add/edit event start date help"),
|
||||||
timeZone => $self->getParent->get("timezone"),
|
timeZone => $self->getParent->get("timezone"),
|
||||||
defaultValue => $date->toDatabase,
|
defaultValue => $date->toDatabase,
|
||||||
value => $self->get("startDate"),
|
value => $self->startDate,
|
||||||
);
|
);
|
||||||
return $form;
|
return $form;
|
||||||
}
|
}
|
||||||
|
|
@ -312,7 +316,7 @@ If specified, returns a single value for the key specified.
|
||||||
sub getEventMetaData {
|
sub getEventMetaData {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $key = shift;
|
my $key = shift;
|
||||||
my $metadata = JSON->new->decode($self->get("eventMetaData") || '{}');
|
my $metadata = JSON->new->decode($self->eventMetaData || '{}');
|
||||||
if (defined $key) {
|
if (defined $key) {
|
||||||
return $metadata->{$key};
|
return $metadata->{$key};
|
||||||
}
|
}
|
||||||
|
|
@ -341,20 +345,20 @@ Returns the value of the price field, after applying ribbon discounts.
|
||||||
|
|
||||||
sub getPrice {
|
sub getPrice {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my @ribbonIds = split("\n", $self->get('relatedRibbons'));
|
my @ribbonIds = split("\n", $self->relatedRibbons);
|
||||||
my $price = $self->get("price");
|
my $price = $self->price;
|
||||||
my $discount = 0;
|
my $discount = 0;
|
||||||
my $badgeId = $self->getOptions->{badgeId};
|
my $badgeId = $self->getOptions->{badgeId};
|
||||||
my $ribbonId = $self->session->db->quickScalar("select ribbonAssetId from EMSRegistrantRibbon where badgeId=? limit 1",[$badgeId]);
|
my $ribbonId = $self->session->db->quickScalar("select ribbonAssetId from EMSRegistrantRibbon where badgeId=? limit 1",[$badgeId]);
|
||||||
if (defined $ribbonId && isIn($ribbonId, @ribbonIds)) {
|
if (defined $ribbonId && isIn($ribbonId, @ribbonIds)) {
|
||||||
my $ribbon = WebGUI::Asset->new($self->session,$ribbonId,'WebGUI::Asset::Sku::EMSRibbon');
|
my $ribbon = WebGUI::Asset->new($self->session,$ribbonId,'WebGUI::Asset::Sku::EMSRibbon');
|
||||||
$discount = $ribbon->get('percentageDiscount');
|
$discount = $ribbon->percentageDiscount;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
foreach my $item (@{$self->getCart->getItemsByAssetId(\@ribbonIds)}) {
|
foreach my $item (@{$self->getCart->getItemsByAssetId(\@ribbonIds)}) {
|
||||||
if ($item->get('options')->{badgeId} eq $badgeId) {
|
if ($item->get('options')->{badgeId} eq $badgeId) {
|
||||||
my $ribbon = $item->getSku;
|
my $ribbon = $item->getSku;
|
||||||
$discount = $ribbon->get('percentageDiscount');
|
$discount = $ribbon->percentageDiscount;
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -374,7 +378,7 @@ Returns seatsAvailable minus the count from the EMSRegistrantTicket table.
|
||||||
sub getQuantityAvailable {
|
sub getQuantityAvailable {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $seatsTaken = $self->session->db->quickScalar("select count(*) from EMSRegistrantTicket where ticketAssetId=?",[$self->getId]);
|
my $seatsTaken = $self->session->db->quickScalar("select count(*) from EMSRegistrantTicket where ticketAssetId=?",[$self->getId]);
|
||||||
return $self->get("seatsAvailable") - $seatsTaken;
|
return $self->seatsAvailable - $seatsTaken;
|
||||||
}
|
}
|
||||||
|
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
@ -388,7 +392,7 @@ Adding location and eventNumber as a keyword. See WebGUI::Asset::indexContent()
|
||||||
sub indexContent {
|
sub indexContent {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $indexer = $self->SUPER::indexContent;
|
my $indexer = $self->SUPER::indexContent;
|
||||||
$indexer->addKeywords($self->get('location').' '.$self->get('eventNumber'));
|
$indexer->addKeywords($self->location.' '.$self->eventNumber);
|
||||||
return $indexer;
|
return $indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -456,7 +460,7 @@ sub processPropertiesFromFormPost {
|
||||||
}
|
}
|
||||||
my $date = WebGUI::DateTime->new($self->session, time())->toDatabase;
|
my $date = WebGUI::DateTime->new($self->session, time())->toDatabase;
|
||||||
my $startDate = $form->process('startDate', "dateTime", $date,
|
my $startDate = $form->process('startDate', "dateTime", $date,
|
||||||
{ defaultValue => $date, timeZone => $self->getParent->get("timezone")});
|
{ defaultValue => $date, timeZone => $self->getParent->timezone});
|
||||||
$self->update({eventMetaData => JSON->new->encode(\%metadata), startDate => $startDate});
|
$self->update({eventMetaData => JSON->new->encode(\%metadata), startDate => $startDate});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -509,9 +513,9 @@ sub view {
|
||||||
|
|
||||||
|
|
||||||
# render the page;
|
# render the page;
|
||||||
my $output = '<h1>'.$self->getTitle.' ('.$self->get('eventNumber').')</h1>'
|
my $output = '<h1>'.$self->getTitle.' ('.$self->eventNumber.')</h1>'
|
||||||
.'<p>'.$self->get('description').'</p>'
|
.'<p>'.$self->description.'</p>'
|
||||||
.'<p>'.$self->get('startDate').'</p>';
|
.'<p>'.$self->startDate.'</p>';
|
||||||
|
|
||||||
# build the add to cart form
|
# build the add to cart form
|
||||||
if ($form->get('badgeId') ne '') {
|
if ($form->get('badgeId') ne '') {
|
||||||
|
|
@ -552,7 +556,7 @@ Override to return to appropriate page.
|
||||||
sub www_delete {
|
sub www_delete {
|
||||||
my ($self) = @_;
|
my ($self) = @_;
|
||||||
return $self->session->privilege->insufficient() unless ($self->canEdit && $self->canEditIfLocked);
|
return $self->session->privilege->insufficient() unless ($self->canEdit && $self->canEditIfLocked);
|
||||||
return $self->session->privilege->vitalComponent() if $self->get('isSystem');
|
return $self->session->privilege->vitalComponent() if $self->isSystem;
|
||||||
return $self->session->privilege->vitalComponent() if (isIn($self->getId, $self->session->setting->get("defaultPage"), $self->session->setting->get("notFoundPage")));
|
return $self->session->privilege->vitalComponent() if (isIn($self->getId, $self->session->setting->get("defaultPage"), $self->session->setting->get("notFoundPage")));
|
||||||
$self->trash;
|
$self->trash;
|
||||||
return $self->getParent->www_buildBadge(undef,'tickets');
|
return $self->getParent->www_buildBadge(undef,'tickets');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue