number_format((float) $val, $val == floor($val) ? 0 : 2, ',', '.'); // 1. Count customers $countPelanggan = Customer::count(); // 2. Count total eggs (by unit) $totalEggsByUnit = EggCollectionItem::query() ->join('egg_collections', 'egg_collection_items.egg_collection_id', '=', 'egg_collections.id') ->join('units', 'egg_collection_items.unit_id', '=', 'units.id') ->whereNull('egg_collections.deleted_at') ->selectRaw('units.name as unit_name, sum(case when is_broken = 0 then quantity else 0 end) as total_good, sum(case when is_broken = 1 then quantity else 0 end) as total_broken') ->groupBy('units.name') ->get() ->map(fn ($item) => [ 'unit_name' => $item->unit_name, 'total_good' => $formatNumber($item->total_good), 'total_broken' => $formatNumber($item->total_broken), ]); // 3. Count total orders $countPesanan = Order::count(); // 4. Count total delayed goods (by unit) $totalDelayedByUnit = DelayedGood::query() ->join('units', 'delayed_goods.unit_id', '=', 'units.id') ->selectRaw('units.name as unit_name, sum(quantity) as total') ->groupBy('units.name') ->get() ->map(fn ($item) => [ 'unit_name' => $item->unit_name, 'total' => $formatNumber($item->total), ]); // 5. Revenue (from orders and delayed goods) $pendapatanPesanan = Order::sum('total_amount'); $pendapatanTertunda = DelayedGood::sum('total_amount'); $totalPendapatan = $pendapatanPesanan + $pendapatanTertunda; // 6. Expenses $totalPengeluaran = Expense::sum('amount'); // 7. Payroll $totalPenggajian = Payroll::sum('total_salary'); // 8. Feed purchases $totalBelanjaPakan = FeedPurchase::sum('total_price'); // 9. Gross profit (Revenue - COGS/Feed) $labaKotor = $totalPendapatan - $totalBelanjaPakan; // 10. Net profit (Gross Profit - Expenses - Payroll) $labaBersih = $labaKotor - $totalPengeluaran - $totalPenggajian; // 11. Unpaid accounts receivable (delayed goods) $totalPiutang = DelayedGood::sum('total_amount') - DelayedGood::sum('paid_amount'); $mainStats = [ ['label' => 'Total Pelanggan', 'desc' => 'Jumlah pelanggan terdaftar', 'value' => $countPelanggan, 'prefix' => ''], ['label' => 'Total Pesanan', 'desc' => 'Jumlah transaksi pesanan', 'value' => $countPesanan, 'prefix' => ''], ['label' => 'Laba Bersih', 'desc' => 'Setelah dikurangi beban operasional', 'value' => $formatNumber($labaBersih), 'prefix' => 'Rp'], ['label' => 'Total Piutang', 'desc' => 'Piutang barang tertunda', 'value' => $formatNumber($totalPiutang), 'prefix' => 'Rp'], ['label' => 'Total Pendapatan', 'desc' => 'Akumulasi semua pemasukan', 'value' => $formatNumber($totalPendapatan), 'prefix' => 'Rp'], ['label' => 'Laba Kotor', 'desc' => 'Pendapatan dikurangi biaya pakan', 'value' => $formatNumber($labaKotor), 'prefix' => 'Rp'], ['label' => 'Total Pengeluaran', 'desc' => 'Biaya operasional & umum', 'value' => $formatNumber($totalPengeluaran), 'prefix' => 'Rp'], ['label' => 'Total Penggajian', 'desc' => 'Total gaji karyawan', 'value' => $formatNumber($totalPenggajian), 'prefix' => 'Rp'], ['label' => 'Belanja Pakan', 'desc' => 'Total pembelian pakan ayam', 'value' => $formatNumber($totalBelanjaPakan), 'prefix' => 'Rp'], ]; return [ 'mainStats' => $mainStats, 'totalEggsByUnit' => $totalEggsByUnit, 'totalDelayedByUnit' => $totalDelayedByUnit, ]; } }