From 7e248a8bf3fbe2cbb13db8487cb477e935cc5d55 Mon Sep 17 00:00:00 2001 From: Nathan Coad Date: Sun, 26 Jun 2016 21:34:28 +1000 Subject: [PATCH] add travel summary report --- booking.module | 8 ++++ booking.reports.inc | 114 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 97 insertions(+), 25 deletions(-) diff --git a/booking.module b/booking.module index 18e4856..1ad9dd5 100644 --- a/booking.module +++ b/booking.module @@ -324,6 +324,14 @@ function booking_menu() { 'access arguments' => array('access reports'), 'type' => MENU_NORMAL_ITEM, ); + + $items['admin/booking/travel'] = array( + 'title' => 'Travel Summary', + 'description' => "List people's travel details", + 'page callback' => 'booking_report_travel', + 'access arguments' => array('access reports'), + 'type' => MENU_NORMAL_ITEM, + ); $items['admin/booking/manual-email'] = array( 'title' => 'Manually Email People', diff --git a/booking.reports.inc b/booking.reports.inc index c04d1ca..6d82061 100644 --- a/booking.reports.inc +++ b/booking.reports.inc @@ -427,6 +427,84 @@ function booking_report_flight_details() { return $result; } +/** + * List everyone's travel info + */ +function booking_report_travel() { + global $event; + $form = array(); + $prefix = t("

Travel Details

"); + + //define sorting information with the header + //as per http://www.drup-all.com/blog/table-sort-pagination-drupal-7 + $header = array(); + $header[] = array('data' => t('Id'), 'field' => 'nid', 'sort' => 'asc'); + $header[] = array('data' => t('Name'), 'field' => 'booking_lastname'); + $header[] = array('data' => t('Booking Status'), 'field' => 'booking_status'); + $header[] = array('data' => t('Transport Type'), 'field' => 'booking_transport_type'); + $header[] = array('data' => t('Catching Train?'), 'field' => 'booking_transport_from_morriset_reqd'); + $header[] = array('data' => t('Inbound Flight Number'), 'field' => 'booking_flightnum_inbound'); + $header[] = array('data' => t('Inbound Flight Time'), 'field' => 'booking_flight_datetime_inbound'); + $header[] = array('data' => t('Outbound Flight Number'), 'field' => 'booking_flightnum_outbound'); + $header[] = array('data' => t('Outbound Flight Time'), 'field' => 'booking_flight_datetime_outbound'); + $header[] = array('data' => t('Accommodation Before?'), 'field' => 'booking_accom_before_reqd'); + $header[] = array('data' => t('Accommodation After?'), 'field' => 'booking_accom_after_reqd'); + + //get travel info from database + $query = db_select('booking_person', 'p'); + $query->leftJoin('booking_travel', 't', 'p.nid = t.booking_person_nid'); + $query->condition('p.booking_eventid', $event->eid, '=') + ->fields('p') + ->fields('t'); + //allow user to sort columns + $table_sort = $query->extend('TableSort')->orderbyHeader($header); + $result = $table_sort->execute(); + + foreach ($result as $person) { + $this_row = array(); + + //define the row for this person + $this_row[] = l(t('Edit !id', array('!id' => $person->nid)), t('node/!id/edit', array('!id' => $person->nid))); + $this_row[] = l(t('!first !last', array('!first' => ucwords($person->booking_firstname), '!last' => ucwords($person->booking_lastname))), + t('node/!id', array('!id' => $person->nid)) + ); + $this_row[] = _booking_status_generate($person->booking_status); + + //calculate the travel link + if ($person->tid > 0) { + //$travel_link = l(t('Travel'), t('node/!id/edit', array('!id' => $person->tid))); + $this_row[] = t('!transport', array('!transport' => $person->booking_transport_type)); + $this_row[] = t('!train', array('!train' => $person->booking_transport_from_morriset_reqd == 1 ? 'Yes' : 'No')); + $this_row[] = t('!inflightnum', array('!transport' => $person->booking_flightnum_inbound)); + $this_row[] = t('!inflighttime', array('!inflighttime' => + $person->booking_flight_datetime_inbound == 0 ? '' : format_date($person->booking_flight_datetime_inbound, 'custom', 'd/m/Y H:i')); + $this_row[] = t('!outflightnum', array('!outflightnum' => $person->booking_flightnum_outbound)); + $this_row[] = t('!outflighttime', array('!outflighttime' => + $person->booking_flight_datetime_outbound == 0 ? '' : format_date($person->booking_flight_datetime_outbound, 'custom', 'd/m/Y H:i')); + $this_row[] = t('!beforeaccom', array('!beforeaccom' => $person->booking_accom_before_reqd == 1 ? 'Yes' : 'No')); + $this_row[] = t('!afteraccom', array('!afteraccom' => $person->booking_accom_after_reqd == 1 ? 'Yes' : 'No')); + } + + $rows[] = $this_row; + } + + $result = array ( + 'first_para' => array ( + '#type' => 'markup', + '#markup' => $prefix, + ), + 'table' => array ( + '#theme' => 'table', + '#header' => $header, + '#rows' => $rows, + '#attributes' => array('id' => 'sort-table'), + //'#sticky' => FALSE, + ) + ); + + return $result; +} + function booking_coming_page() { global $event; @@ -437,21 +515,17 @@ function booking_coming_page() { $rows = array(); //work out whether to include the team colour in this page - if (variable_get('booking_publish_readinggroups', 0) == 1) - { + if (variable_get('booking_publish_readinggroups', 0) == 1) { $header = array('Name', 'Team Colour', 'State'); } - else - { + else { $header = array('Name', 'State'); } //if configuration is set to show on lists even when no payment has been made, then include booking status of 0 (unpaid) or 1 (booked in) //also ensure any committee members always show - if (variable_get('booking_auto_show_on_lists', 1) == 1) - { + if (variable_get('booking_auto_show_on_lists', 1) == 1) { $or = db_or()->condition('p.booking_status', 0)->condition('p.booking_status', 1)>condition('p.booking_committee_member', 'Y'); - $result = db_select('booking_person', 'p') ->fields('p', array('booking_firstname', 'booking_lastname', 'booking_state', 'booking_readinggroup', 'booking_country')) ->condition($or) @@ -461,13 +535,10 @@ function booking_coming_page() { ->orderBy('booking_lastname') ->orderBy('booking_firstname') ->execute(); - } - else - { + else { //payment must be made before someone will show up as booked in, but also include any committee member that might not have paid $or = db_or()->condition('p.booking_status', 1)->condition('p.booking_committee_member', 'Y'); - $result = db_select('booking_person', 'p') ->fields('p', array('booking_firstname', 'booking_lastname', 'booking_state', 'booking_readinggroup', 'booking_country')) ->condition($or) @@ -479,13 +550,11 @@ function booking_coming_page() { ->execute(); } - foreach ($result as $person) - { + foreach ($result as $person) { $state = $person->booking_country === variable_get('booking_default_country') ? $person->booking_state : $person->booking_country; //if we're allowed to publish reading groups, specify them in the array element - if (variable_get('booking_publish_readinggroups', 0) == 1) - { + if (variable_get('booking_publish_readinggroups', 0) == 1) { $rows[] = array( t('!first !last', array('!first' => ucwords($person->booking_firstname), '!last' => ucwords($person->booking_lastname))), @@ -494,8 +563,7 @@ function booking_coming_page() { ); } //don't publish reading group information - else - { + else { $rows[] = array( t('!first !last', array('!first' => ucwords($person->booking_firstname), '!last' => ucwords($person->booking_lastname))), @@ -508,15 +576,12 @@ function booking_coming_page() { //output the results //check there were some bookings - if (count($rows) > 0) - { - if (count($rows) >= $booking_limit) - { + if (count($rows) > 0) { + if (count($rows) >= $booking_limit) { //there is a waiting list $output .= token_replace(variable_get('booking_whoscoming_pre_waitlist_text'), booking_define_tokens()); } - else - { + else { //there's no waiting list $output .= token_replace(variable_get('booking_whoscoming_pre_text'), booking_define_tokens()); } @@ -524,8 +589,7 @@ function booking_coming_page() { //theme the table of registrations $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => $attributes)); } - else - { + else { //no bookings $output .= token_replace(variable_get('booking_whoscoming_pre_noregistrations_text'), booking_define_tokens()); }