rework arrival stat graphs and tables

This commit is contained in:
Philip Häusler 2015-08-16 23:08:02 +02:00
parent 9d7389baeb
commit c4ee004095
3 changed files with 136 additions and 56 deletions

View File

@ -38,6 +38,7 @@ require_once realpath(__DIR__ . '/../includes/controller/shifttypes_controller.p
require_once realpath(__DIR__ . '/../includes/controller/users_controller.php'); require_once realpath(__DIR__ . '/../includes/controller/users_controller.php');
require_once realpath(__DIR__ . '/../includes/controller/user_angeltypes_controller.php'); require_once realpath(__DIR__ . '/../includes/controller/user_angeltypes_controller.php');
require_once realpath(__DIR__ . '/../includes/helper/graph_helper.php');
require_once realpath(__DIR__ . '/../includes/helper/internationalization_helper.php'); require_once realpath(__DIR__ . '/../includes/helper/internationalization_helper.php');
require_once realpath(__DIR__ . '/../includes/helper/message_helper.php'); require_once realpath(__DIR__ . '/../includes/helper/message_helper.php');
require_once realpath(__DIR__ . '/../includes/helper/error_helper.php'); require_once realpath(__DIR__ . '/../includes/helper/error_helper.php');

View File

@ -0,0 +1,39 @@
<?php
/**
* Renders a bargraph
* @param string $key keyname of the x-axis
* @param array $row_names keynames for the data rows
* @param unknown $colors colors for the data rows
* @param unknown $data the data
*/
function bargraph($id, $key, $row_names, $colors, $data) {
$labels = [];
foreach ($data as $dataset)
$labels[] = $dataset[$key];
$datasets = [];
foreach ($row_names as $row_key => $name) {
$values = [];
foreach ($data as $dataset)
$values[] = $dataset[$row_key];
$datasets[] = [
'label' => $name,
'fillColor' => $colors[$row_key],
'data' => $values
];
}
return '<canvas id="' . $id . '" style="width: 100%; height: 300px;"></canvas>
<script type="text/javascript">
$(function(){
var ctx = $("#' . $id . '").get(0).getContext("2d");
var chart = new Chart(ctx).Bar(' . json_encode([
'labels' => $labels,
'datasets' => $datasets
]) . ');
});
</script>';
}
?>

View File

@ -32,7 +32,8 @@ function admin_arrive() {
$users = sql_select("SELECT * FROM `User` ORDER BY `Nick`"); $users = sql_select("SELECT * FROM `User` ORDER BY `Nick`");
$arrival_count_at_day = []; $arrival_count_at_day = [];
$departure_count_at_day = []; $planned_arrival_count_at_day = [];
$planned_departure_count_at_day = [];
$table = ""; $table = "";
$users_matched = []; $users_matched = [];
if ($search == "") if ($search == "")
@ -62,39 +63,64 @@ function admin_arrive() {
$usr['arrived'] = $usr['Gekommen'] == 1 ? _("yes") : ""; $usr['arrived'] = $usr['Gekommen'] == 1 ? _("yes") : "";
$usr['actions'] = $usr['Gekommen'] == 1 ? '<a href="' . page_link_to('admin_arrive') . '&reset=' . $usr['UID'] . '&search=' . $search . '">' . _("reset") . '</a>' : '<a href="' . page_link_to('admin_arrive') . '&arrived=' . $usr['UID'] . '&search=' . $search . '">' . _("arrived") . '</a>'; $usr['actions'] = $usr['Gekommen'] == 1 ? '<a href="' . page_link_to('admin_arrive') . '&reset=' . $usr['UID'] . '&search=' . $search . '">' . _("reset") . '</a>' : '<a href="' . page_link_to('admin_arrive') . '&arrived=' . $usr['UID'] . '&search=' . $search . '">' . _("arrived") . '</a>';
$day = $usr['arrival_date'] > 0 ? date('Y-m-d', $usr['arrival_date']) : date('Y-m-d', $usr['planned_arrival_date']); if ($usr['arrival_date'] > 0) {
if (! isset($arrival_count_at_day[$day])) $day = date('Y-m-d', $usr['arrival_date']);
$arrival_count_at_day[$day] = 0;
if (! isset($departure_count_at_day[$day]))
$departure_count_at_day[$day] = 0;
$arrival_count_at_day[$day] ++;
if ($usr['planned_departure_date'] != null) {
$day = date('Y-m-d', $usr['planned_departure_date']);
if (! isset($arrival_count_at_day[$day])) if (! isset($arrival_count_at_day[$day]))
$arrival_count_at_day[$day] = 0; $arrival_count_at_day[$day] = 0;
if (! isset($departure_count_at_day[$day])) $arrival_count_at_day[$day] ++;
$departure_count_at_day[$day] = 0; }
$departure_count_at_day[$day] ++;
if ($usr['planned_arrival_date'] != null) {
$day = date('Y-m-d', $usr['planned_arrival_date']);
if (! isset($planned_arrival_count_at_day[$day]))
$planned_arrival_count_at_day[$day] = 0;
$planned_arrival_count_at_day[$day] ++;
}
if ($usr['planned_departure_date'] != null && $usr['Gekommen'] == 1) {
$day = date('Y-m-d', $usr['planned_departure_date']);
if (! isset($planned_departure_count_at_day[$day]))
$planned_departure_count_at_day[$day] = 0;
$planned_departure_count_at_day[$day] ++;
} }
$users_matched[] = $usr; $users_matched[] = $usr;
} }
ksort($arrival_count_at_day);
ksort($departure_count_at_day);
$arrival_count = []; ksort($arrival_count_at_day);
$arrival_sums = []; ksort($planned_arrival_count_at_day);
ksort($planned_departure_count_at_day);
$arrival_at_day = [];
$arrival_sum = 0; $arrival_sum = 0;
foreach ($arrival_count_at_day as $day => $count) { foreach ($arrival_count_at_day as $day => $count) {
$arrival_sum += $count - $departure_count_at_day[$day]; $arrival_sum += $count;
$arrival_sums[$day] = $arrival_sum; $arrival_at_day[$day] = [
$arrival_count[] = [
'day' => $day, 'day' => $day,
'count' => $count, 'count' => $count,
'sum' => $arrival_sum, 'sum' => $arrival_sum
'departure' => isset($departure_count_at_day[$day]) ? $departure_count_at_day[$day] : 0 ];
}
$planned_arrival_sum_at_day = [];
$planned_arrival_sum = 0;
foreach ($arrival_count_at_day as $day => $count) {
$planned_arrival_sum += $count;
$planned_arrival_at_day[$day] = [
'day' => $day,
'count' => $count,
'sum' => $planned_arrival_sum
];
}
$planned_departure_at_day = [];
$planned_departure_sum = 0;
foreach ($planned_departure_count_at_day as $day => $count) {
$planned_departure_sum += $count;
$planned_departure_at_day[$day] = [
'day' => $day,
'count' => $count,
'sum' => $planned_departure_sum
]; ];
} }
@ -112,39 +138,53 @@ function admin_arrive() {
'rendered_planned_departure_date' => _("Planned departure"), 'rendered_planned_departure_date' => _("Planned departure"),
'actions' => "" 'actions' => ""
), $users_matched), ), $users_matched),
heading(_("Arrival statistics"), 2), div('row', [
'<canvas id="daily_arrives" style="width: 100%; height: 300px;"></canvas> div('col-md-4', [
<script type="text/javascript"> heading(_("Planned arrival statistics"), 2),
$(function(){ bargraph('planned_arrives', 'day', [
var ctx = $("#daily_arrives").get(0).getContext("2d"); 'count' => _("arrived"),
var chart = new Chart(ctx).Bar(' . json_encode(array( 'sum' => _("arrived sum")
'labels' => array_keys($arrival_count_at_day), ], [
'datasets' => array( 'count' => '#090',
array( 'sum' => '#888'
'label' => _("arrived"), ], $planned_arrival_at_day),
'fillColor' => "#090", table([
'data' => array_values($arrival_count_at_day) 'day' => _("Date"),
), 'count' => _("Count"),
array( 'sum' => _("Sum")
'label' => _("arrived sum"), ], $planned_arrival_at_day)
'fillColor' => "#888", ]),
'data' => array_values($arrival_sums) div('col-md-4', [
), heading(_("Arrival statistics"), 2),
array( bargraph('arrives', 'day', [
'label' => _("planned departure"), 'count' => _("arrived"),
'fillColor' => "#900", 'sum' => _("arrived sum")
'data' => array_values($departure_count_at_day) ], [
) 'count' => '#090',
) 'sum' => '#888'
)) . '); ], $arrival_at_day),
}); table([
</script>', 'day' => _("Date"),
table(array( 'count' => _("Count"),
'day' => _("Date"), 'sum' => _("Sum")
'count' => _("arrived"), ], $arrival_at_day)
'sum' => _("arrived sum"), ]),
'departure' => _("planned departure") div('col-md-4', [
), $arrival_count) heading(_("Planned departure statistics"), 2),
bargraph('planned_departures', 'day', [
'count' => _("arrived"),
'sum' => _("arrived sum")
], [
'count' => '#090',
'sum' => '#888'
], $planned_departure_at_day),
table([
'day' => _("Date"),
'count' => _("Count"),
'sum' => _("Sum")
], $planned_departure_at_day)
])
])
)); ));
} }
?> ?>