Update EMSTicket for Moose. Needs custom draw method work.

This commit is contained in:
Colin Kuskie 2010-02-15 11:44:08 -08:00
parent 6c26c2ee3b
commit 4723f2d175

View file

@ -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');