selectRaw(" COALESCE(SUM( CASE WHEN jenis_mutasi.tipe = 'tambah' THEN jumlah WHEN jenis_mutasi.tipe IN ('kurang','transfer') THEN -jumlah ELSE 0 END ),0) as total ") ->value('total'); $produksiHariIni = ProduksiTelur::whereDate('tanggal_produksi', $today) ->sum(DB::raw('berat_telur_layak + berat_telur_rusak')); // total stok pakan global (yang lama) $stokPakan = InventoriKandang::where('jenis_transaksi', 'masuk')->sum('jumlah') - InventoriKandang::where('jenis_transaksi', 'keluar')->sum('jumlah'); // stok per barang + deteksi stok menipis $stok = InventoriKandang::selectRaw(" nama_barang, SUM(CASE WHEN jenis_transaksi = 'masuk' THEN jumlah ELSE 0 END) - SUM(CASE WHEN jenis_transaksi = 'keluar' THEN jumlah ELSE 0 END) AS stok ") ->groupBy('nama_barang') ->get(); $batasMinimum = [ 'Jagung' => 5, 'Katul' => 5, 'Konsentrat' => 5, 'Pakan Layer' => 5, 'Pakan Starter' => 5, ]; $stokMenipis = $stok->filter(function ($item) use ($batasMinimum) { $min = $batasMinimum[$item->nama_barang] ?? 5; return $item->stok <= $min; }); // untuk Admin & Karyawan $pendapatanHariIni = Penjualan::whereDate('tanggal_penjualan', $today) ->sum('total_penjualan'); $bulan = request('bulan', now()->month); $minggu = request('minggu', ceil(now()->day / 7)); $tahun = request('tahun', now()->year); $query = ProduksiTelur::select( DB::raw('DATE(tanggal_produksi) as tanggal'), DB::raw('SUM(berat_telur_layak + berat_telur_rusak) as total') ) ->whereYear('tanggal_produksi', $tahun) ->whereMonth('tanggal_produksi', $bulan); if ($minggu) { $query->whereRaw('CEIL(DAY(tanggal_produksi) / 7) = ?', [$minggu]); } $produksiMingguan = $query ->groupBy('tanggal') ->orderBy('tanggal') ->get(); $chartProduksiLabels = $produksiMingguan->pluck('tanggal') ->map(fn($tgl) => Carbon::parse($tgl)->format('d M')); $chartProduksiData = $produksiMingguan->pluck('total'); /* CHART KEUANGAN (ADMIN ONLY)*/ if ($user->isAdmin()) { $finance = DB::table('penjualan') ->selectRaw(' CEIL(DAY(tanggal_penjualan)/7) as minggu, SUM(total_penjualan) as pemasukan ') ->whereYear('tanggal_penjualan', $tahun) ->whereMonth('tanggal_penjualan', $bulan) ->groupBy('minggu') ->orderBy('minggu') ->get(); /* PENGELUARAN INVENTORI */ $pengeluaranInventori = DB::table('inventori_kandang') ->selectRaw(' CEIL(DAY(created_at)/7) as minggu, SUM(total_harga) as total ') ->whereYear('created_at', $tahun) ->whereMonth('created_at', $bulan) ->where('jenis_transaksi', 'masuk') ->groupBy('minggu') ->pluck('total', 'minggu'); /* GAJI KARYAWAN (dibagi rata per minggu) */ $gajiBulanan = DB::table('gaji_karyawan') ->where('tahun', $tahun) ->where('bulan', $bulan) ->sum('gaji_pokok'); $gajiMingguan = $gajiBulanan / 4; $chartFinanceLabels = []; $chartFinancePemasukan = []; $chartFinancePengeluaran = []; foreach ($finance as $row) { $minggu = $row->minggu; $chartFinanceLabels[] = 'Minggu ' . $minggu; $chartFinancePemasukan[] = $row->pemasukan; $pengeluaranInventoriMinggu = $pengeluaranInventori[$minggu] ?? 0; $chartFinancePengeluaran[] = $pengeluaranInventoriMinggu + $gajiMingguan; } } else { $chartFinanceLabels = []; $chartFinancePemasukan = []; $chartFinancePengeluaran = []; } return view('home', compact( 'jumlahAyam', 'produksiHariIni', 'stokPakan', 'stokMenipis', 'pendapatanHariIni', 'chartProduksiLabels', 'chartProduksiData', 'chartFinanceLabels', 'chartFinancePemasukan', 'chartFinancePengeluaran' )); } }