sackey e839d40a99
Some checks are pending
linter / quality (push) Waiting to run
tests / ci (push) Waiting to run
Initial commit
2025-07-30 17:15:50 +00:00

191 lines
5.6 KiB
PHP

<?php
namespace App\Livewire\Reports;
use Livewire\Component;
use App\Models\Report;
use App\Models\ServiceOrder;
use App\Models\Customer;
use App\Models\Appointment;
use App\Models\TechnicianPerformance;
use Carbon\Carbon;
class Dashboard extends Component
{
public $dateRange = 'last_30_days';
public $startDate;
public $endDate;
public $selectedReport = 'overview';
// Data properties
public $overviewStats = [];
public $revenueData = [];
public $customerAnalytics = [];
public $serviceTrends = [];
public $performanceMetrics = [];
public function mount()
{
$this->setDateRange();
$this->loadAllData();
}
public function updatedDateRange()
{
$this->setDateRange();
$this->loadAllData();
}
public function updatedSelectedReport()
{
$this->loadAllData();
}
public function setDateRange()
{
switch ($this->dateRange) {
case 'today':
$this->startDate = now()->startOfDay();
$this->endDate = now()->endOfDay();
break;
case 'yesterday':
$this->startDate = now()->subDay()->startOfDay();
$this->endDate = now()->subDay()->endOfDay();
break;
case 'last_7_days':
$this->startDate = now()->subDays(7)->startOfDay();
$this->endDate = now()->endOfDay();
break;
case 'last_30_days':
$this->startDate = now()->subDays(30)->startOfDay();
$this->endDate = now()->endOfDay();
break;
case 'this_month':
$this->startDate = now()->startOfMonth();
$this->endDate = now()->endOfMonth();
break;
case 'last_month':
$this->startDate = now()->subMonth()->startOfMonth();
$this->endDate = now()->subMonth()->endOfMonth();
break;
case 'this_quarter':
$this->startDate = now()->startOfQuarter();
$this->endDate = now()->endOfQuarter();
break;
case 'this_year':
$this->startDate = now()->startOfYear();
$this->endDate = now()->endOfYear();
break;
case 'last_year':
$this->startDate = now()->subYear()->startOfYear();
$this->endDate = now()->subYear()->endOfYear();
break;
}
}
public function loadAllData()
{
$this->loadOverviewStats();
if ($this->selectedReport === 'revenue' || $this->selectedReport === 'overview') {
$this->loadRevenueData();
}
if ($this->selectedReport === 'customer_analytics' || $this->selectedReport === 'overview') {
$this->loadCustomerAnalytics();
}
if ($this->selectedReport === 'service_trends' || $this->selectedReport === 'overview') {
$this->loadServiceTrends();
}
if ($this->selectedReport === 'performance_metrics' || $this->selectedReport === 'overview') {
$this->loadPerformanceMetrics();
}
}
public function loadOverviewStats()
{
$this->overviewStats = [
'total_revenue' => 125000.50,
'total_orders' => 1248,
'completed_orders' => 1156,
'new_customers' => 47,
'total_customers' => 892,
'total_appointments' => 1248,
'confirmed_appointments' => 1156,
'avg_order_value' => 285.50,
'customer_satisfaction' => 4.3
];
}
public function loadRevenueData()
{
$this->revenueData = Report::getRevenueData($this->startDate, $this->endDate);
}
public function loadCustomerAnalytics()
{
$this->customerAnalytics = Report::getCustomerAnalytics($this->startDate, $this->endDate);
}
public function loadServiceTrends()
{
$this->serviceTrends = Report::getServiceTrends($this->startDate, $this->endDate);
}
public function loadPerformanceMetrics()
{
$this->performanceMetrics = Report::getPerformanceMetrics($this->startDate, $this->endDate);
}
private function getGroupByFromDateRange()
{
return in_array($this->dateRange, ['this_month', 'last_month', 'this_quarter', 'this_year', 'last_year'])
? 'month'
: 'day';
}
public function exportReport($type = 'pdf')
{
// TODO: Implement export functionality
$this->dispatch('notify', [
'type' => 'info',
'message' => 'Export functionality will be implemented soon.'
]);
}
public function getDateRangeOptions()
{
return [
'today' => 'Today',
'yesterday' => 'Yesterday',
'last_7_days' => 'Last 7 Days',
'last_30_days' => 'Last 30 Days',
'this_month' => 'This Month',
'last_month' => 'Last Month',
'this_quarter' => 'This Quarter',
'this_year' => 'This Year',
'last_year' => 'Last Year'
];
}
public function getReportOptions()
{
return [
'overview' => 'Overview',
'revenue' => 'Revenue Analysis',
'customer_analytics' => 'Customer Analytics',
'service_trends' => 'Service Trends',
'performance_metrics' => 'Performance Metrics'
];
}
public function render()
{
return view('livewire.reports.dashboard')->layout('components.layouts.app', [
'title' => 'Reports & Analytics'
]);
}
}