diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 9c353bc..c764a6f 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -2,12 +2,87 @@ namespace App\Http\Controllers; +use App\Models\HomeModel; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; +use Carbon\Carbon; class HomeController extends Controller { public function index() { - return view('home'); // This will return the home view + // Get current month data + $currentMonth = Carbon::now()->month; + $currentYear = Carbon::now()->year; + + // Calculate total saldo + $totalSaldo = HomeModel::selectRaw('SUM(uang_masuk - uang_keluar) as saldo')->first()->saldo ?? 0; + + // Calculate total uang masuk dan uang keluar + $totalUangMasuk = HomeModel::sum('uang_masuk'); + $totalUangKeluar = HomeModel::sum('uang_keluar'); + + // Calculate current month's income and expenses + $currentMonthUangMasuk = HomeModel::whereMonth('Tanggal', $currentMonth) + ->whereYear('Tanggal', $currentYear) + ->sum('uang_masuk'); + + $currentMonthUangKeluar = HomeModel::whereMonth('Tanggal', $currentMonth) + ->whereYear('Tanggal', $currentYear) + ->sum('uang_keluar'); + + // Calculate profit/loss + $labaRugiTotal = $totalUangMasuk - $totalUangKeluar; + $labaRugiBulanIni = $currentMonthUangMasuk - $currentMonthUangKeluar; + + // Get monthly totals for chart + $monthlyTotals = HomeModel::selectRaw(' + DATE_FORMAT(Tanggal, "%Y-%m") as periode, + SUM(uang_masuk) as total_debit, + SUM(uang_keluar) as total_kredit, + SUM(uang_masuk - uang_keluar) as laba_rugi + ') + ->groupBy('periode') + ->orderBy('periode') + ->get(); + + // Get category breakdown + $categoryTotals = HomeModel::selectRaw(' + kategori, + SUM(uang_masuk) as total_debit, + SUM(uang_keluar) as total_kredit, + SUM(uang_masuk - uang_keluar) as laba_rugi + ') + ->groupBy('kategori') + ->orderBy('total_debit', 'desc') + ->get(); + + // Get recent transactions + $recentTransactions = HomeModel::orderBy('Tanggal', 'desc') + ->limit(10) + ->get(); + + // Calculate month-over-month growth + $lastMonthTotal = HomeModel::whereMonth('Tanggal', Carbon::now()->subMonth()->month) + ->whereYear('Tanggal', Carbon::now()->subMonth()->year) + ->sum('uang_masuk'); + + $growthPercentage = $lastMonthTotal != 0 + ? (($currentMonthUangMasuk - $lastMonthTotal) / $lastMonthTotal) * 100 + : 0; + + return view('home', compact( + 'totalSaldo', + 'totalUangMasuk', + 'totalUangKeluar', + 'currentMonthUangMasuk', + 'currentMonthUangKeluar', + 'labaRugiTotal', + 'labaRugiBulanIni', + 'monthlyTotals', + 'categoryTotals', + 'recentTransactions', + 'growthPercentage' + )); } } \ No newline at end of file diff --git a/app/Http/Controllers/LabarugiController.php b/app/Http/Controllers/LabarugiController.php new file mode 100644 index 0000000..929122b --- /dev/null +++ b/app/Http/Controllers/LabarugiController.php @@ -0,0 +1,139 @@ +input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d')); + $endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d')); + + $model = new LabarugiModel(); + + // Helper function untuk menjumlahkan uang masuk + $sumUangMasuk = "COALESCE(uang_masuk, 0) + COALESCE(uang_masuk2, 0) + COALESCE(uang_masuk3, 0) + COALESCE(uang_masuk4, 0) + COALESCE(uang_masuk5, 0)"; + + // Helper function untuk menjumlahkan uang keluar + $sumUangKeluar = "COALESCE(uang_keluar, 0) + COALESCE(uang_keluar2, 0) + COALESCE(uang_keluar3, 0) + COALESCE(uang_keluar4, 0) + COALESCE(uang_keluar5, 0)"; + + // Mengambil data pendapatan operasional (41) + $pendapatanPenjualan = $model->where('kode', '241001') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangMasuk) as total")) + ->value('total') ?? 0; + + $pendapatanJasa = $model->where('kode', '241002') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangMasuk) as total")) + ->value('total') ?? 0; + + // Mengambil data pendapatan non-operasional (42) + $pendapatanBunga = $model->where('kode', '242001') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangMasuk) as total")) + ->value('total') ?? 0; + + $pendapatanSewa = $model->where('kode', '242002') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangMasuk) as total")) + ->value('total') ?? 0; + + $pendapatanKomisi = $model->where('kode', '242003') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangMasuk) as total")) + ->value('total') ?? 0; + + $pendapatanLain = $model->where('kode', '242004') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangMasuk) as total")) + ->value('total') ?? 0; + + // Mengambil data beban operasional (51) + $bebanGaji = $model->where('kode', '251001') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + $bebanSewa = $model->where('kode', '251002') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + $bebanUtilitas = $model->where('kode', '251003') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + $bebanPenyusutan = $model->where('kode', '251004') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + $bebanSupplies = $model->where('kode', '251005') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + $bebanIklan = $model->where('kode', '251006') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + // Mengambil data beban non-operasional (52) + $bebanBunga = $model->where('kode', '252001') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + $bebanLain = $model->where('kode', '252002') + ->whereBetween('Tanggal', [$startDate, $endDate]) + ->select(DB::raw("SUM($sumUangKeluar) as total")) + ->value('total') ?? 0; + + // Menghitung total pendapatan + $totalPendapatanOperasional = $pendapatanPenjualan + $pendapatanJasa; + $totalPendapatanNonOperasional = $pendapatanBunga + $pendapatanSewa + $pendapatanKomisi + $pendapatanLain; + $totalPendapatan = $totalPendapatanOperasional + $totalPendapatanNonOperasional; + + // Menghitung total beban + $totalBebanOperasional = $bebanGaji + $bebanSewa + $bebanUtilitas + $bebanPenyusutan + $bebanSupplies + $bebanIklan; + $totalBebanNonOperasional = $bebanBunga + $bebanLain; + $totalBeban = $totalBebanOperasional + $totalBebanNonOperasional; + + // Menghitung laba rugi + $totalLabaRugi = $totalPendapatan - $totalBeban; + + return view('Labarugi', compact( + 'startDate', + 'endDate', + 'pendapatanPenjualan', + 'pendapatanJasa', + 'pendapatanBunga', + 'pendapatanSewa', + 'pendapatanKomisi', + 'pendapatanLain', + 'bebanGaji', + 'bebanSewa', + 'bebanUtilitas', + 'bebanPenyusutan', + 'bebanSupplies', + 'bebanIklan', + 'bebanBunga', + 'bebanLain', + 'totalPendapatanOperasional', + 'totalPendapatanNonOperasional', + 'totalBebanOperasional', + 'totalBebanNonOperasional', + 'totalPendapatan', + 'totalBeban', + 'totalLabaRugi' + )); + } +} diff --git a/app/Models/HomeModel.php b/app/Models/HomeModel.php new file mode 100644 index 0000000..99189ee --- /dev/null +++ b/app/Models/HomeModel.php @@ -0,0 +1,17 @@ + 'date', + 'uang_masuk' => 'decimal:2', + 'uang_keluar' => 'decimal:2' + ]; +} diff --git a/app/Models/LabarugiModel.php b/app/Models/LabarugiModel.php new file mode 100644 index 0000000..7c7a04f --- /dev/null +++ b/app/Models/LabarugiModel.php @@ -0,0 +1,89 @@ + [ + '241001' => 'pendapatan penjualan', + '241002' => 'pendapatan jasa' + ], + 'NON_OPERASIONAL' => [ + '242001' => 'pendapatan bunga', + '242002' => 'pendapatan sewa', + '242003' => 'pendapatan komisi', + '242004' => 'pendapatan lain' + ] + ]; + + // Konstanta untuk kode akun beban (uang keluar) + const KODE_BEBAN = [ + 'OPERASIONAL' => [ + '251001' => 'beban gaji', + '251002' => 'beban sewa', + '251003' => 'beban utilitas', + '251004' => 'beban penyusutan', + '251005' => 'beban supplies', + '251006' => 'beban iklan' + ], + 'NON_OPERASIONAL' => [ + '252001' => 'beban bunga', + '252002' => 'beban lain' + ] + ]; + + // Scope untuk filter berdasarkan periode + public function scopePeriode($query, $startDate, $endDate) + { + return $query->whereBetween('Tanggal', [$startDate, $endDate]); + } + + // Scope untuk pendapatan operasional (uang masuk) + public function scopePendapatanOperasional($query) + { + return $query->whereIn('kode', array_keys(self::KODE_PENDAPATAN['OPERASIONAL'])); + } + + // Scope untuk pendapatan non-operasional (uang masuk) + public function scopePendapatanNonOperasional($query) + { + return $query->whereIn('kode', array_keys(self::KODE_PENDAPATAN['NON_OPERASIONAL'])); + } + + // Scope untuk beban operasional (uang keluar) + public function scopeBebanOperasional($query) + { + return $query->whereIn('kode', array_keys(self::KODE_BEBAN['OPERASIONAL'])); + } + + // Scope untuk beban non-operasional (uang keluar) + public function scopeBebanNonOperasional($query) + { + return $query->whereIn('kode', array_keys(self::KODE_BEBAN['NON_OPERASIONAL'])); + } + + // Helper untuk mengecek apakah kode termasuk pendapatan + public static function isPendapatan($kode) + { + return in_array($kode, array_merge( + array_keys(self::KODE_PENDAPATAN['OPERASIONAL']), + array_keys(self::KODE_PENDAPATAN['NON_OPERASIONAL']) + )); + } + + // Helper untuk mengecek apakah kode termasuk beban + public static function isBeban($kode) + { + return in_array($kode, array_merge( + array_keys(self::KODE_BEBAN['OPERASIONAL']), + array_keys(self::KODE_BEBAN['NON_OPERASIONAL']) + )); + } +} diff --git a/resources/views/Core/Sidebar.blade.php b/resources/views/Core/Sidebar.blade.php index c1b7efb..4ac188f 100644 --- a/resources/views/Core/Sidebar.blade.php +++ b/resources/views/Core/Sidebar.blade.php @@ -141,11 +141,31 @@ Data Karyawan -
Leads generated per week
+ +Total Saldo
++ {{ $growthPercentage >= 0 ? '↑' : '↓' }} {{ abs(round($growthPercentage, 1)) }}% dari bulan lalu +
+Total Debit
+Bulan Ini: Rp {{ number_format($currentMonthUangMasuk, 0, ',', '.') }}
+Total Kredit
+Bulan Ini: Rp {{ number_format($currentMonthUangKeluar, 0, ',', '.') }}
+{{ $labaRugiTotal >= 0 ? 'Debit Lebih Besar' : 'Kredit Lebih Besar' }}
+{{ $labaRugiBulanIni >= 0 ? 'Debit Lebih Besar' : 'Kredit Lebih Besar' }}
+Tanggal | +Kode | +Kategori | +Keterangan | +Debit | +Kredit | +
---|---|---|---|---|---|
+ {{ date('d/m/Y', strtotime($transaction->Tanggal)) }} + | ++ {{ $transaction->kode }} + | ++ {{ $transaction->kategori }} + | ++ {{ $transaction->keterangan }} + | ++ {{ $transaction->uang_masuk > 0 ? 'Rp ' . number_format($transaction->uang_masuk, 0, ',', '.') : '-' }} + | ++ {{ $transaction->uang_keluar > 0 ? 'Rp ' . number_format($transaction->uang_keluar, 0, ',', '.') : '-' }} + | +
Periode: {{ date('d F Y', strtotime($startDate)) }} - {{ date('d F Y', strtotime($endDate)) }}
+Pendapatan Operasional | +||
Pendapatan Penjualan | +{{ number_format($pendapatanPenjualan ?? 0, 0, ',', '.') }} | ++ |
Pendapatan Jasa | +{{ number_format($pendapatanJasa ?? 0, 0, ',', '.') }} | ++ |
Total Pendapatan Operasional | ++ | {{ number_format($totalPendapatanOperasional ?? 0, 0, ',', '.') }} | +
Pendapatan Non-Operasional | +||
Pendapatan Bunga | +{{ number_format($pendapatanBunga ?? 0, 0, ',', '.') }} | ++ |
Pendapatan Sewa | +{{ number_format($pendapatanSewa ?? 0, 0, ',', '.') }} | ++ |
Pendapatan Komisi | +{{ number_format($pendapatanKomisi ?? 0, 0, ',', '.') }} | ++ |
Pendapatan Lain | +{{ number_format($pendapatanLain ?? 0, 0, ',', '.') }} | ++ |
Total Pendapatan Non-Operasional | ++ | {{ number_format($totalPendapatanNonOperasional ?? 0, 0, ',', '.') }} | +
Total Pendapatan | ++ | {{ number_format($totalPendapatan ?? 0, 0, ',', '.') }} | +
Beban Operasional | +||
Beban Gaji | +{{ number_format($bebanGaji ?? 0, 0, ',', '.') }} | ++ |
Beban Sewa | +{{ number_format($bebanSewa ?? 0, 0, ',', '.') }} | ++ |
Beban Utilitas | +{{ number_format($bebanUtilitas ?? 0, 0, ',', '.') }} | ++ |
Beban Penyusutan | +{{ number_format($bebanPenyusutan ?? 0, 0, ',', '.') }} | ++ |
Beban Supplies | +{{ number_format($bebanSupplies ?? 0, 0, ',', '.') }} | ++ |
Beban Iklan | +{{ number_format($bebanIklan ?? 0, 0, ',', '.') }} | ++ |
Total Beban Operasional | ++ | {{ number_format($totalBebanOperasional ?? 0, 0, ',', '.') }} | +
Beban Non-Operasional | +||
Beban Bunga | +{{ number_format($bebanBunga ?? 0, 0, ',', '.') }} | ++ |
Beban Lain | +{{ number_format($bebanLain ?? 0, 0, ',', '.') }} | ++ |
Total Beban Non-Operasional | ++ | {{ number_format($totalBebanNonOperasional ?? 0, 0, ',', '.') }} | +
Total Beban | ++ | {{ number_format($totalBeban ?? 0, 0, ',', '.') }} | +
Total Laba/Rugi | ++ | {{ number_format($totalLabaRugi ?? 0, 0, ',', '.') }} | +
Halaman ini menampilkan semua laporan keuangan.
+Halaman ini menampilkan jurnal umum.