/home2/mshostin/farms.ms-hostingladz.com/app/Http/Controllers/DashboardController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Farm;
use App\Models\Animal;
use App\Models\MilkProduction;
use Carbon\Carbon;
class DashboardController extends Controller
{
public function index()
{
$user = auth()->user();
$today = Carbon::today();
$yesterday = Carbon::yesterday();
// --- Superadmin: global stats ---
if ($user->hasRole('super_admin')) {
$userCount = User::count();
$farmCount = Farm::count();
$animalCount = Animal::count();
// Milk Production
$milkToday = MilkProduction::whereDate('recorded_at', $today)->sum('litres');
$milkYesterday = MilkProduction::whereDate('recorded_at', $yesterday)->sum('litres');
// Growth charts
$usersLast7Days = User::selectRaw('DATE(created_at) as date, COUNT(*) as count')
->where('created_at', '>=', now()->subDays(7))
->groupBy('date')
->pluck('count', 'date');
$farmsLast7Days = Farm::selectRaw('DATE(created_at) as date, COUNT(*) as count')
->where('created_at', '>=', now()->subDays(7))
->groupBy('date')
->pluck('count', 'date');
$milkLast7Days = MilkProduction::selectRaw('DATE(recorded_at) as date, SUM(litres) as litres')
->where('recorded_at', '>=', now()->subDays(7))
->groupBy('date')
->orderBy('date')
->pluck('litres', 'date');
// Milk Sales Stats
$salesToday = \App\Models\MilkSale::whereDate('sold_at', $today)->sum('quantity');
$revenueToday = \App\Models\MilkSale::whereDate('sold_at', $today)->sum('total_amount');
$recentSales = \App\Models\MilkSale::with('vendor', 'farm')->latest('sold_at')->take(5)->get();
} else {
// --- Farm Admin: farm-specific stats ---
$farm = $user->farm; // Assuming each user is linked to a farm
$userCount = $farm->users()->count();
$farmCount = null; // Not shown to farm admin
$animalCount = $farm->animals()->count();
$milkToday = MilkProduction::where('farm_id', $farm->id)
->whereDate('recorded_at', $today)
->sum('litres');
$milkYesterday = MilkProduction::where('farm_id', $farm->id)
->whereDate('recorded_at', $yesterday)
->sum('litres');
$usersLast7Days = $farm->users()
->selectRaw('DATE(created_at) as date, COUNT(*) as count')
->where('created_at', '>=', now()->subDays(7))
->groupBy('date')
->pluck('count', 'date');
$farmsLast7Days = collect(); // Not shown
$milkLast7Days = MilkProduction::where('farm_id', $farm->id)
->selectRaw('DATE(recorded_at) as date, SUM(litres) as litres')
->where('recorded_at', '>=', now()->subDays(7))
->groupBy('date')
->orderBy('date')
->pluck('litres', 'date');
// Milk Sales Stats
$salesToday = $farm->milkSales()->whereDate('sold_at', $today)->sum('quantity');
$revenueToday = $farm->milkSales()->whereDate('sold_at', $today)->sum('total_amount');
$recentSales = $farm->milkSales()->with('vendor')->latest('sold_at')->take(5)->get();
}
// Calculate milk change %
if ($milkYesterday > 0) {
$milkChangePercent = round((($milkToday - $milkYesterday) / $milkYesterday) * 100, 2);
} else {
$milkChangePercent = 0;
}
$milkTrend = $milkChangePercent > 0 ? 'up' : ($milkChangePercent < 0 ? 'down' : 'equal');
return view('dashboard.index', compact(
'userCount',
'farmCount',
'animalCount',
'usersLast7Days',
'farmsLast7Days',
'milkToday',
'milkYesterday',
'milkChangePercent',
'milkTrend',
'milkLast7Days',
'salesToday',
'revenueToday',
'recentSales'
));
}
}