From a054c9de73ba2114ce7956ae81f6afc370c4c18b Mon Sep 17 00:00:00 2001 From: David Delikat Date: Sun, 24 May 2009 22:51:39 +0000 Subject: [PATCH] added date pagination to EMS schedule table also improved formatting of table --- docs/changelog/7.x.x.txt | 1 + ...rt_ems_ems-schedule-listing-default2.wgpkg | Bin 0 -> 4547 bytes .../Asset/Wobject/EventManagementSystem.pm | 42 ++++++++++++------ .../English/Asset_EventManagementSystem.pm | 2 +- t/Asset/Wobject/EventManagementSystem.t | 38 ++++++++++------ 5 files changed, 55 insertions(+), 28 deletions(-) create mode 100644 docs/upgrades/packages-7.7.8/root_import_ems_ems-schedule-listing-default2.wgpkg diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index aa2af9ec0..055415eb1 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,5 @@ 7.7.8 + - added date pagination, and some formatting to EMS Schedule table - Removed dubious 3px padding around image based ads in an adspace. 7.7.7 diff --git a/docs/upgrades/packages-7.7.8/root_import_ems_ems-schedule-listing-default2.wgpkg b/docs/upgrades/packages-7.7.8/root_import_ems_ems-schedule-listing-default2.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..b7f72a68fc828cf53a4a3e2d030acc73c2238ecf GIT binary patch literal 4547 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 literal 0 HcmV?d00001 diff --git a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm index b37066451..38cc95400 100644 --- a/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm +++ b/lib/WebGUI/Asset/Wobject/EventManagementSystem.pm @@ -277,22 +277,28 @@ sub getEventFieldsForImport { =head2 getLocations () -Returns an array of all locations for this EMS -SQL optimized for quick access +Returns an array of all locations & dates for this EMS +may be SQL optimized for quick access =cut sub getLocations { my $self = shift; + my $dateRef = shift || [ ]; my %hash; + my %hashDate; my $tickets = $self->getTickets; for my $ticket ( @$tickets ) { my $name = $ticket->get('location'); - next if not defined $name; - $hash{$name} = 1; + my $date = $ticket->get('startDate'); + $hash{$name} = 1 if defined $name; + # cut off the time from the startDate. + $date =~ s/\s*\d+:\d+(:\d+)?// if defined $date; + $hashDate{$date} = 1 if defined $date; } my @locations = sort keys %hash; + push @$dateRef, sort keys %hashDate ; # @locations = $self->session->db->read(q{ # select distinct(EMSTicket.location) # from EMSTicket join asset using (assetId) @@ -1147,19 +1153,23 @@ sub www_getScheduleDataJSON { my $locationsPerPage = $self->get('scheduleColumnsPerPage'); my ($db, $form) = $session->quick(qw(db form)); - my $pageNumber = $form->get('pageNumber') || 1; - my @ticketLocations = $self->getLocations(); + my $locationPageNumber = $form->get('locationPage') || 1; + my $datePageNumber = $form->get('datePage') || 1; + my @dateRecords; + my @ticketLocations = $self->getLocations( \@dateRecords ); # the total number of pages is the number of locations divided by the number of locations per page - my $numberOfPages = int( .9 + scalar(@ticketLocations) / $locationsPerPage ); + my $numberOfLocationPages = int( .9 + scalar(@ticketLocations) / $locationsPerPage ); # skip everything else if there are no locations/pages return JSON->new->encode( { records => [ ], totalRecords => 0, recordsReturned => 0, startIndex => 0, - currentPage => 0, totalPages => 0, + currentLocationPage => 0, totalLocationPages => 0, + currentDatePage => 0, totalDatePages => 0, dateRecords => [ ], sort => undef, dir => 'asc', pageSize => 0, - }) if $numberOfPages == 0; + }) if $numberOfLocationPages == 0; # now we pick out the locations to be displayed on this page - my $indexFirstLocation = ($pageNumber-1)*$locationsPerPage; - my $indexLastLocation = $pageNumber*$locationsPerPage - 1; + my $indexFirstLocation = ($locationPageNumber-1)*$locationsPerPage; + my $indexLastLocation = $locationPageNumber*$locationsPerPage - 1; + my $currentDate = $dateRecords[$datePageNumber-1]; @ticketLocations = @ticketLocations[$indexFirstLocation..$indexLastLocation]; my $tickets = $db->read( q{ select assetData.assetId, sku.description, assetData.title, EMSTicket.startDate, EMSTicket.location @@ -1168,6 +1178,7 @@ sub www_getScheduleDataJSON { join assetData using (assetId,revisionDate) join asset using (assetId) where asset.parentId = ? + and DATE_FORMAT( EMSTicket.startDate, '%Y-%m-%d' ) = ? and EMSTicket.location in ( } . join( ',', (map { $db->quote($_) } (@ticketLocations))) . q{ ) @@ -1179,7 +1190,7 @@ sub www_getScheduleDataJSON { or assetData.tagId = ? ) ) order by EMSTicket.startDate - },[ $self->getId, + },[ $self->getId, $currentDate, $session->scratch->get("versionTag") ]); my %hash; @@ -1220,8 +1231,11 @@ sub www_getScheduleDataJSON { $results{dir} = "asc"; $results{pageSize} = 10; # these next two are used to configure the paginator - $results{totalPages} = $numberOfPages; - $results{currentPage} = $pageNumber; + $results{totalLocationPages} = $numberOfLocationPages; + $results{currentLocationPage} = $locationPageNumber; + $results{totalDatePages} = scalar(@dateRecords); + $results{currentDatePage} = $datePageNumber; + $results{dateRecords} = \@dateRecords; $session->http->setMimeType('application/json'); return JSON->new->encode(\%results); } diff --git a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm index af3edcedd..c8145bf3a 100644 --- a/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm +++ b/lib/WebGUI/i18n/English/Asset_EventManagementSystem.pm @@ -1867,7 +1867,7 @@ normal templates.|, }, 'schedule number of columns' => { - message => q|Number of columns per page|, + message => q|Schedule Locations Per Page|, lastUpdated => 1147050475, context => q|the number of columns per page in the schedule table|, }, diff --git a/t/Asset/Wobject/EventManagementSystem.t b/t/Asset/Wobject/EventManagementSystem.t index 5fa427fa5..7b2d82df1 100644 --- a/t/Asset/Wobject/EventManagementSystem.t +++ b/t/Asset/Wobject/EventManagementSystem.t @@ -110,8 +110,14 @@ ok(scalar(@$badges) == 2, 'Two Badges exist'); # Add tickets my @tickets; -push(@tickets, $ems->addChild({className=>'WebGUI::Asset::Sku::EMSTicket'})); -push(@tickets, $ems->addChild({className=>'WebGUI::Asset::Sku::EMSTicket'})); +push(@tickets, $ems->addChild({ + className=>'WebGUI::Asset::Sku::EMSTicket', + startDate => '2009-01-01 14:00:00', +})); +push(@tickets, $ems->addChild({ + className=>'WebGUI::Asset::Sku::EMSTicket', + startDate => '2009-01-01 14:00:00', +})); foreach my $ticket(@tickets) { ok(ref($ticket) eq 'WebGUI::Asset::Sku::EMSTicket', 'Ticket added'); @@ -142,15 +148,18 @@ ok( $html !~ /REPLACE/, 'tags were successfully replaced'); my $data = $ems->www_getScheduleDataJSON(); cmp_deeply( JSON::from_json($data), { - 'totalPages' => 0, - 'records' => [], - 'pageSize' => 0, - 'dir' => 'asc', - 'recordsReturned' => 0, - 'currentPage' => 0, - 'sort' => undef, - 'startIndex' => 0, - 'totalRecords' => 0 + records => [], + pageSize => 0, + dir => 'asc', + recordsReturned => 0, + totalRecords => 0, + totalLocationPages => 0, + currentLocationPage => 0, + totalDatePages => 0, + currentDatePage => 0, + dateRecords => [ ], + sort => undef, + startIndex => 0, }, 'empty set: schedule data looks good' ); @@ -307,9 +316,12 @@ cmp_deeply( JSON::from_json($data), { startIndex => 0, sort => undef, dir => 'asc', - totalPages => 2, + totalLocationPages => 2, + currentLocationPage => 1, + totalDatePages => 1, + currentDatePage => 1, + dateRecords => [ '2009-01-01' ], pageSize => 10, - currentPage => 1, rowsPerPage => 6, }, 'twelve tickets: schedule data looks good' );