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 -
  • - - - Laporan - +
  • + +
  • @@ -167,11 +187,31 @@ Uang Keluar
  • --> -
  • - - - Laporan - +
  • + +
  • @@ -272,6 +312,24 @@ } }); + // Dropdown menu functionality + document.querySelectorAll('.group').forEach(dropdown => { + const button = dropdown.querySelector('button'); + const menu = dropdown.querySelector('.dropdown-menu'); + + button.addEventListener('click', (e) => { + e.preventDefault(); + menu.classList.toggle('hidden'); + }); + + // Close dropdown when clicking outside + document.addEventListener('click', (e) => { + if (!dropdown.contains(e.target)) { + menu.classList.add('hidden'); + } + }); + }); + // Close mobile menu when clicking outside document.addEventListener('click', (e) => { if (!sidebar.contains(e.target) && !mobileMenuButton.contains(e.target)) { diff --git a/resources/views/Home.blade.php b/resources/views/Home.blade.php index afe705b..1fb2632 100644 --- a/resources/views/Home.blade.php +++ b/resources/views/Home.blade.php @@ -1,197 +1,334 @@ @extends('Core.Sidebar') @section('content') +
    - +
    -

    Dashboard

    - + + + +
    - -
    -
    -
    - -
    -
    -
    3.4k
    -

    Leads generated per week

    + +
    + +
    +
    +
    + + + +
    +
    +

    Total Saldo

    +

    Rp {{ number_format($totalSaldo, 0, ',', '.') }}

    +

    + {{ $growthPercentage >= 0 ? '↑' : '↓' }} {{ abs(round($growthPercentage, 1)) }}% dari bulan lalu +

    +
    -
    - - - 42.5% - + + +
    +
    +
    + + + +
    +
    +

    Total Debit

    +

    Rp {{ number_format($totalUangMasuk, 0, ',', '.') }}

    +

    Bulan Ini: Rp {{ number_format($currentMonthUangMasuk, 0, ',', '.') }}

    +
    +
    +
    + + +
    +
    +
    + + + +
    +
    +

    Total Kredit

    +

    Rp {{ number_format($totalUangKeluar, 0, ',', '.') }}

    +

    Bulan Ini: Rp {{ number_format($currentMonthUangKeluar, 0, ',', '.') }}

    +
    +
    - -
    -
    -
    -
    Money spent:
    -
    $3,232
    -
    + +
    + +
    +

    Selisih Total (Debit - Kredit)

    +
    +
    + + + +
    +
    +

    + Rp {{ number_format(abs($labaRugiTotal), 0, ',', '.') }} +

    +

    {{ $labaRugiTotal >= 0 ? 'Debit Lebih Besar' : 'Kredit Lebih Besar' }}

    +
    +
    -
    -
    -
    Conversion rate:
    -
    1.2%
    -
    + + +
    +

    Selisih Bulan Ini

    +
    +
    + + + +
    +
    +

    + Rp {{ number_format(abs($labaRugiBulanIni), 0, ',', '.') }} +

    +

    {{ $labaRugiBulanIni >= 0 ? 'Debit Lebih Besar' : 'Kredit Lebih Besar' }}

    +
    +
    -
    - -
    -

    Sales Analytics

    - - - + +
    + +
    +

    Tren Debit & Kredit

    +
    + +
    - -
    - - - - - -
    - $ 54.143 + +
    +

    Distribusi per Kategori

    +
    +
    -
    - 47% - - - -
    -
    Sales earnings this month after associated author fees, & before taxes.
    -
    - -
    -
    - - - - - - Leads Report - - + +
    +
    +

    Transaksi Terbaru

    +
    +
    + + + + + + + + + + + + + @foreach($recentTransactions as $transaction) + + + + + + + + + @endforeach + +
    TanggalKodeKategoriKeteranganDebitKredit
    + {{ 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, ',', '.') : '-' }} +
    +@push('scripts') + + + +@endpush + @endsection \ No newline at end of file diff --git a/resources/views/Labarugi.blade.php b/resources/views/Labarugi.blade.php new file mode 100644 index 0000000..46bb6f8 --- /dev/null +++ b/resources/views/Labarugi.blade.php @@ -0,0 +1,177 @@ +@extends('Core.Sidebar') + +@section('content') + Laporan Laba Rugi + + + + + + + +
    +
    + +
    +

    CV. Budivespaendut

    +

    Laporan Laba Rugi

    +

    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, ',', '.') }}
    +
    +
    +
    +@endsection diff --git a/resources/views/Laporan.blade.php b/resources/views/Laporan.blade.php index dcbfbb4..bf84767 100644 --- a/resources/views/Laporan.blade.php +++ b/resources/views/Laporan.blade.php @@ -18,11 +18,11 @@
    -

    Laporan Keuangan

    -

    Halaman ini menampilkan semua laporan keuangan.

    +

    Jurnal Umum

    +

    Halaman ini menampilkan jurnal umum.

    - +
    diff --git a/resources/views/Neracasaldo.blade.php b/resources/views/Neracasaldo.blade.php index 864908a..2b1d2b8 100644 --- a/resources/views/Neracasaldo.blade.php +++ b/resources/views/Neracasaldo.blade.php @@ -68,4 +68,38 @@
    +
    + +
    + + +
    + + +
    + + Page 1 + +
    +
    + + + @endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index a6c0e4e..58e4f37 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,6 +16,7 @@ use App\Http\Controllers\AuthController; use App\Http\Controllers\RekeningController; use App\Http\Controllers\NeracasaldoController; +use App\Http\Controllers\LabarugiController; /* |-------------------------------------------------------------------------- | Web Routes @@ -69,4 +70,5 @@ Route::get('/rekening/export-excel', [RekeningController::class, 'exportExcel'])->name('rekening.export-excel'); Route::get('/rekening/export-pdf', [RekeningController::class, 'exportPDF'])->name('rekening.export-pdf'); Route::resource('neracasaldo', NeracasaldoController::class); + Route::get('/laporan-laba-rugi', [LabarugiController::class, 'index'])->name('labarugi.index'); });