added production line stop count chart

This commit is contained in:
dhanabalan
2025-04-26 09:23:51 +05:30
parent 2a17b020b4
commit c716a1fba9

View File

@@ -79,40 +79,56 @@ class ProductionLineStopChart extends ChartWidget
$backgroundColors = []; $backgroundColors = [];
$borderColors = []; $borderColors = [];
function generateColor(string $key, float $opacity): string {
// Use a stable hash of the key, no randomness
$hash = md5($key);
// Get the RGB components from the hash
$r = hexdec(substr($hash, 0, 2)); // Red component
$g = hexdec(substr($hash, 2, 2)); // Green component
$b = hexdec(substr($hash, 4, 2)); // Blue component
// Avoid deep green colors for the `code`
if ($g > 150 && $g < 255) {
// Adjust green component if it's in the deep green range
$g = 150; // Assign a fixed, safe value for green
}
// Return the color as rgba with the specified opacity
return "rgba($r, $g, $b, $opacity)";
}
$totalStopMinutes = 0;
foreach ($query as $row) { foreach ($query as $row) {
// --- STOP TIME (HH.MM format) --- $code = $row->code;
$reason = $row->reason;
$stopHours = $row->total_stop_hours; $stopHours = $row->total_stop_hours;
$stopMinutes = $row->total_stop_minutes; $stopMinutes = $row->total_stop_minutes;
$visualTotal = $stopHours + ($stopMinutes / 100); // e.g., 0.15 (15 mins), 1.30 (1h 30m) $visualTotal = $stopHours + ($stopMinutes / 100);
// --- RUNTIME (HH.MM format) --- $codeLabel = "$code - $reason";
// 1. Convert stop time to total minutes $labels[] = $codeLabel;
$totalStopMinutes = ($stopHours * 60) + $stopMinutes;// Using 60 for minutes conversion $data[] = $visualTotal;
$backgroundColors[] = generateColor($code, 0.7); // Unique color for each stop code
$borderColors[] = generateColor($code, 1.0);
// Calculate remaining minutes (1440 = 24 hours) // Accumulate total stop time (in minutes)
$totalStopMinutes += ($stopHours * 60) + $stopMinutes;
}
// Calculate remaining time (1440 minutes = 24 hours)
$remainingMinutes = 1440 - $totalStopMinutes; $remainingMinutes = 1440 - $totalStopMinutes;
// Convert back to "HH.MM" format (e.g., 22.59 = 22 hours 59 minutes)
$runtimeHours = floor($remainingMinutes / 60); $runtimeHours = floor($remainingMinutes / 60);
$runtimeMinutes = $remainingMinutes % 60; $runtimeMinutes = $remainingMinutes % 60;
$runtime = $runtimeHours + ($runtimeMinutes / 100); // Remaining hours correctly calculated $runtimeVisual = $runtimeHours + ($runtimeMinutes / 100);
// Labels for stop and runtime // Add runtime slice with green color (either light or dark green)
$stopLabel = $row->code . ' - ' . $row->reason . ' (Stop)'; $labels[] = 'Available Runtime';
$runtimeLabel = $row->code . ' - ' . $row->reason . ' (Runtime)'; $data[] = $runtimeVisual;
$backgroundColors[] = 'rgba(47, 218, 47, 0.94)'; // Green for runtime
// Red bar = visual format using stop time
$labels[] = $stopLabel;
$data[] = $visualTotal;
$backgroundColors[] = 'rgba(255, 99, 132, 0.7)';
$borderColors[] = 'rgba(255, 99, 132, 1)';
// Green bar = correct runtime math
$labels[] = $runtimeLabel;
$data[] = $runtime;
$backgroundColors[] = 'rgba(75, 192, 75, 0.4)';
$borderColors[] = 'rgba(75, 192, 75, 1)'; $borderColors[] = 'rgba(75, 192, 75, 1)';
}
return [ return [
'datasets' => [[ 'datasets' => [[
@@ -126,10 +142,9 @@ class ProductionLineStopChart extends ChartWidget
]; ];
} }
protected function getType(): string protected function getType(): string
{ {
return 'doughnut'; return 'pie';
} }
protected function getFilters(): ?array protected function getFilters(): ?array
@@ -137,8 +152,53 @@ class ProductionLineStopChart extends ChartWidget
return [ return [
'today' => 'Today', 'today' => 'Today',
'yesterday' => 'Yesterday', 'yesterday' => 'Yesterday',
'this_week'=> 'This Week', ];
'this_month'=> 'This Month', }
protected function getOptions(): array
{
return [
'responsive' => true,
'plugins' => [
'legend' => [
'position' => 'bottom',
],
'tooltip' => [
'enabled' => true, // Tooltips enabled on hover
],
],
'scales' => [
'x' => [
'display' => false, // Disable x-axis
],
'y' => [
'display' => false, // Disable y-axis
],
],
'elements' => [
'arc' => [
'hover' => [
'scale' => 1.1, // Increase the slice size by 10% on hover
'borderWidth' => 3, // Optionally increase border width on hover
'offset' => 10, // Make the slice move outside of the pie chart on hover
],
// This ensures that animation and hover effects work as expected
'animation' => [
'duration' => 500, // Duration for the hover animation (smooth pop)
'easing' => 'easeOutQuad', // Smooth easing for pop-up effect
],
],
],
'hover' => [
'mode' => 'nearest', // Hover mode: nearest slice
'intersect' => true, // Only trigger hover if intersecting a slice
'animationDuration' => 500, // Duration of hover animation
],
'animation' => [
'duration' => 1000, // Overall animation duration
'easing' => 'easeInOutQuart', // Easing function for smooth transition
],
'maintainAspectRatio' => false,
]; ];
} }