update tgl 20 april

This commit is contained in:
whywdd 2025-04-20 03:39:21 +07:00
parent 3c5f96f420
commit 70aadac250
8 changed files with 588 additions and 454 deletions

View File

@ -6,83 +6,235 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
class HomeController extends Controller
{
public function index()
private function getKodeAkun($kategori)
{
// Get current month data
$currentMonth = Carbon::now()->month;
$currentYear = Carbon::now()->year;
$kategori = trim(strtolower($kategori));
// Calculate total saldo
$totalSaldo = HomeModel::selectRaw('SUM(uang_masuk - uang_keluar) as saldo')->first()->saldo ?? 0;
// Pendapatan Operasional (41)
if (str_contains($kategori, 'pendapatan penjualan')) return '241001';
if (str_contains($kategori, 'pendapatan jasa')) return '241002';
// Calculate total uang masuk dan uang keluar
$totalUangMasuk = HomeModel::sum('uang_masuk');
$totalUangKeluar = HomeModel::sum('uang_keluar');
// Pendapatan Non-Operasional (42)
if (str_contains($kategori, 'pendapatan bunga')) return '242001';
if (str_contains($kategori, 'pendapatan sewa')) return '242002';
if (str_contains($kategori, 'pendapatan komisi')) return '242003';
if (str_contains($kategori, 'pendapatan lain')) return '242004';
// Calculate current month's income and expenses
$currentMonthUangMasuk = HomeModel::whereMonth('Tanggal', $currentMonth)
->whereYear('Tanggal', $currentYear)
->sum('uang_masuk');
// Beban Operasional (51)
if (str_contains($kategori, 'beban gaji')) return '251001';
if (str_contains($kategori, 'beban sewa')) return '251002';
if (str_contains($kategori, 'beban utilitas')) return '251003';
if (str_contains($kategori, 'beban penyusutan')) return '251004';
if (str_contains($kategori, 'beban supplies')) return '251005';
if (str_contains($kategori, 'beban iklan')) return '251006';
$currentMonthUangKeluar = HomeModel::whereMonth('Tanggal', $currentMonth)
->whereYear('Tanggal', $currentYear)
->sum('uang_keluar');
// Beban Non-Operasional (52)
if (str_contains($kategori, 'beban bunga')) return '252001';
if (str_contains($kategori, 'beban lain')) return '252002';
// Calculate profit/loss
$labaRugiTotal = $totalUangMasuk - $totalUangKeluar;
$labaRugiBulanIni = $currentMonthUangMasuk - $currentMonthUangKeluar;
return null;
}
private function prosesKategori($kategori, $uang_masuk, $uang_keluar, &$pendapatan, &$beban)
{
$kodeAkun = $this->getKodeAkun($kategori);
if ($kodeAkun) {
if (str_starts_with($kodeAkun, '24')) {
// Untuk pendapatan
$nominal = $uang_masuk;
$data = [
'kategori' => $kategori,
'kode_akun' => $kodeAkun,
'nominal' => $nominal
];
if (isset($pendapatan[$kategori])) {
$pendapatan[$kategori]['nominal'] += $nominal;
} else {
$pendapatan[$kategori] = $data;
}
} elseif (str_starts_with($kodeAkun, '25')) {
// Untuk beban
$nominal = $uang_keluar;
$data = [
'kategori' => $kategori,
'kode_akun' => $kodeAkun,
'nominal' => $nominal
];
if (isset($beban[$kategori])) {
$beban[$kategori]['nominal'] += $nominal;
} else {
$beban[$kategori] = $data;
}
}
}
}
public function index(Request $request)
{
// Default date range
$startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d'));
$endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d'));
// Inisialisasi array untuk menyimpan data
$pendapatan = [];
$beban = [];
try {
// Ambil semua transaksi dalam periode
$transaksis = DB::table('laporan_transaksis')
->whereBetween('Tanggal', [$startDate, $endDate])
->get();
// Reset total
$totalUangMasuk = 0;
$totalUangKeluar = 0;
foreach ($transaksis as $transaksi) {
// Proses kategori1
if (!empty($transaksi->kategori)) {
$this->prosesKategori(
$transaksi->kategori,
$transaksi->uang_masuk ?? 0,
$transaksi->uang_keluar ?? 0,
$pendapatan,
$beban
);
// Tambahkan ke total
$totalUangMasuk += $transaksi->uang_masuk ?? 0;
$totalUangKeluar += $transaksi->uang_keluar ?? 0;
}
// Proses kategori2-5
for ($i = 2; $i <= 5; $i++) {
$kategori = $transaksi->{"kategori$i"};
if (!empty($kategori)) {
$this->prosesKategori(
$kategori,
$transaksi->{"uang_masuk$i"} ?? 0,
$transaksi->{"uang_keluar$i"} ?? 0,
$pendapatan,
$beban
);
// Tambahkan ke total
$totalUangMasuk += $transaksi->{"uang_masuk$i"} ?? 0;
$totalUangKeluar += $transaksi->{"uang_keluar$i"} ?? 0;
}
}
}
// Calculate current month totals
$currentMonthUangMasuk = $totalUangMasuk;
$currentMonthUangKeluar = $totalUangKeluar;
// Calculate last month totals for growth percentage
$lastMonthStart = Carbon::parse($startDate)->subMonth()->startOfMonth();
$lastMonthEnd = Carbon::parse($startDate)->subMonth()->endOfMonth();
$lastMonthTransaksis = DB::table('laporan_transaksis')
->whereBetween('Tanggal', [$lastMonthStart, $lastMonthEnd])
->get();
$lastMonthUangMasuk = 0;
$lastMonthUangKeluar = 0;
foreach ($lastMonthTransaksis as $transaksi) {
$lastMonthUangMasuk += $transaksi->uang_masuk ?? 0;
$lastMonthUangKeluar += $transaksi->uang_keluar ?? 0;
for ($i = 2; $i <= 5; $i++) {
$lastMonthUangMasuk += $transaksi->{"uang_masuk$i"} ?? 0;
$lastMonthUangKeluar += $transaksi->{"uang_keluar$i"} ?? 0;
}
}
$lastMonthTotal = $lastMonthUangMasuk - $lastMonthUangKeluar;
$currentMonthTotal = $totalUangMasuk - $totalUangKeluar;
// Calculate growth percentage
$growthPercentage = $lastMonthTotal != 0 ?
(($currentMonthTotal - $lastMonthTotal) / abs($lastMonthTotal)) * 100 :
100;
// Calculate total saldo dan laba rugi sesuai format di Labarugi blade
$totalSaldo = -($totalUangMasuk) - $totalUangKeluar;
$labaRugiTotal = -($totalUangMasuk) - $totalUangKeluar;
$labaRugiBulanIni = -($currentMonthUangMasuk) - $currentMonthUangKeluar;
// Get category breakdown
$categoryTotals = collect($pendapatan)->map(function($item) {
return [
'kategori' => $item['kategori'],
'total_debit' => $item['nominal'],
'total_kredit' => 0
];
})->merge(
collect($beban)->map(function($item) {
return [
'kategori' => $item['kategori'],
'total_debit' => 0,
'total_kredit' => $item['nominal']
];
})
)->values();
// 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
')
$monthlyTotals = DB::table('laporan_transaksis')
->select(
DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'),
DB::raw('SUM(uang_masuk) + SUM(COALESCE(uang_masuk2, 0)) + SUM(COALESCE(uang_masuk3, 0)) + SUM(COALESCE(uang_masuk4, 0)) + SUM(COALESCE(uang_masuk5, 0)) as total_debit'),
DB::raw('SUM(uang_keluar) + SUM(COALESCE(uang_keluar2, 0)) + SUM(COALESCE(uang_keluar3, 0)) + SUM(COALESCE(uang_keluar4, 0)) + SUM(COALESCE(uang_keluar5, 0)) as total_kredit')
)
->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')
$recentTransactions = DB::table('laporan_transaksis')
->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;
// Debug log untuk memeriksa nilai
Log::info("Total Uang Masuk: " . $totalUangMasuk);
Log::info("Total Uang Keluar: " . $totalUangKeluar);
Log::info("Total Saldo: " . $totalSaldo);
Log::info("Laba Rugi Total: " . $labaRugiTotal);
Log::info("Laba Rugi Bulan Ini: " . $labaRugiBulanIni);
return view('home', compact(
'totalSaldo',
'startDate',
'endDate',
'totalUangMasuk',
'totalUangKeluar',
'currentMonthUangMasuk',
'currentMonthUangKeluar',
'totalSaldo',
'growthPercentage',
'labaRugiTotal',
'labaRugiBulanIni',
'monthlyTotals',
'categoryTotals',
'recentTransactions',
'growthPercentage'
'pendapatan',
'beban'
));
} catch (\Exception $e) {
Log::error("Error in HomeController: " . $e->getMessage());
throw $e;
}
}
public function filter(Request $request)
{
return $this->index($request);
}
}

View File

@ -2,138 +2,136 @@
namespace App\Http\Controllers;
use App\Models\LabarugiModel;
use Illuminate\Http\Request;
use App\Models\LabarugiModel;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class LabarugiController extends Controller
{
private function getKodeAkun($kategori)
{
$kategori = trim(strtolower($kategori));
// Pendapatan Operasional (41)
if (str_contains($kategori, 'pendapatan penjualan')) return '241001';
if (str_contains($kategori, 'pendapatan jasa')) return '241002';
// Pendapatan Non-Operasional (42)
if (str_contains($kategori, 'pendapatan bunga')) return '242001';
if (str_contains($kategori, 'pendapatan sewa')) return '242002';
if (str_contains($kategori, 'pendapatan komisi')) return '242003';
if (str_contains($kategori, 'pendapatan lain')) return '242004';
// Beban Operasional (51)
if (str_contains($kategori, 'beban gaji')) return '251001';
if (str_contains($kategori, 'beban sewa')) return '251002';
if (str_contains($kategori, 'beban utilitas')) return '251003';
if (str_contains($kategori, 'beban penyusutan')) return '251004';
if (str_contains($kategori, 'beban supplies')) return '251005';
if (str_contains($kategori, 'beban iklan')) return '251006';
// Beban Non-Operasional (52)
if (str_contains($kategori, 'beban bunga')) return '252001';
if (str_contains($kategori, 'beban lain')) return '252002';
return null;
}
public function index(Request $request)
{
// Default periode adalah bulan ini
// Default date range
$startDate = $request->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();
// Inisialisasi array untuk menyimpan data
$pendapatan = [];
$beban = [];
// 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')
try {
// Ambil semua transaksi dalam periode
$transaksis = DB::table('laporan_transaksis')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
->get();
$pendapatanJasa = $model->where('kode', '241002')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
foreach ($transaksis as $transaksi) {
// Proses kategori1
if (!empty($transaksi->kategori)) {
$this->prosesKategori(
$transaksi->kategori,
$transaksi->uang_masuk ?? 0,
$transaksi->uang_keluar ?? 0,
$pendapatan,
$beban
);
}
// 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'
));
// Proses kategori2-5
for ($i = 2; $i <= 5; $i++) {
$kategori = $transaksi->{"kategori$i"};
if (!empty($kategori)) {
$this->prosesKategori(
$kategori,
$transaksi->{"uang_masuk$i"} ?? 0,
$transaksi->{"uang_keluar$i"} ?? 0,
$pendapatan,
$beban
);
}
}
}
// Hitung total
$total_pendapatan = array_sum(array_column($pendapatan, 'nominal'));
$total_beban = abs(array_sum(array_column($beban, 'nominal')));
$laba_rugi = $total_pendapatan - $total_beban;
return view('Labarugi', [
'startDate' => $startDate,
'endDate' => $endDate,
'pendapatan' => $pendapatan,
'beban' => $beban,
'total_pendapatan' => $total_pendapatan,
'total_beban' => $total_beban,
'laba_rugi' => $laba_rugi
]);
} catch (\Exception $e) {
Log::error("Error in LabarugiController: " . $e->getMessage());
throw $e;
}
}
private function prosesKategori($kategori, $uang_masuk, $uang_keluar, &$pendapatan, &$beban)
{
$kodeAkun = $this->getKodeAkun($kategori);
if ($kodeAkun) {
$nominal = $uang_masuk - $uang_keluar;
$data = [
'kategori' => $kategori,
'kode_akun' => $kodeAkun,
'nominal' => $nominal
];
if (str_starts_with($kodeAkun, '24')) {
if (isset($pendapatan[$kategori])) {
$pendapatan[$kategori]['nominal'] += $nominal;
} else {
$pendapatan[$kategori] = $data;
}
} elseif (str_starts_with($kodeAkun, '25')) {
if (isset($beban[$kategori])) {
$beban[$kategori]['nominal'] += $nominal;
} else {
$beban[$kategori] = $data;
}
}
}
}
public function filter(Request $request)
{
return $this->index($request);
}
}

View File

@ -9,81 +9,17 @@ class LabarugiModel extends Model
protected $table = 'laporan_transaksis';
protected $guarded = ['id'];
// Konstanta untuk kode akun pendapatan (uang masuk)
const KODE_PENDAPATAN = [
'OPERASIONAL' => [
'241001' => 'pendapatan penjualan',
'241002' => 'pendapatan jasa'
],
'NON_OPERASIONAL' => [
'242001' => 'pendapatan bunga',
'242002' => 'pendapatan sewa',
'242003' => 'pendapatan komisi',
'242004' => 'pendapatan lain'
]
protected $casts = [
'Tanggal' => 'date',
'uang_masuk' => 'decimal:2',
'uang_masuk2' => 'decimal:2',
'uang_masuk3' => 'decimal:2',
'uang_masuk4' => 'decimal:2',
'uang_masuk5' => 'decimal:2',
'uang_keluar' => 'decimal:2',
'uang_keluar2' => 'decimal:2',
'uang_keluar3' => 'decimal:2',
'uang_keluar4' => 'decimal:2',
'uang_keluar5' => 'decimal:2',
];
// 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'])
));
}
}

View File

@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('transaksi', function (Blueprint $table) {
$table->id();
$table->date('tanggal');
$table->string('kode_akun');
$table->enum('jenis', ['masuk', 'keluar']);
$table->decimal('nominal', 15, 2);
$table->string('keterangan')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('transaksi');
}
};

View File

@ -11,20 +11,27 @@
<div class="max-w-full bg-gradient-to-br from-indigo-50 to-blue-50 rounded-lg shadow-md dark:bg-gray-800 p-6">
<!-- Filter Section -->
<div class="flex justify-between items-center mb-6">
<div class="flex flex-wrap items-center gap-4 mb-6">
<h2 class="text-xl font-bold text-indigo-700 dark:text-white">Dashboard Keuangan</h2>
<select id="period-selector" class="sm:ml-auto mt-3 sm:mt-0 sm:w-auto form-select box bg-white border border-indigo-200 rounded-lg text-indigo-600 font-medium focus:ring-2 focus:ring-indigo-300 focus:border-indigo-300">
<option value="daily">Harian</option>
<option value="weekly">Mingguan</option>
<option value="monthly" selected>Bulanan</option>
<option value="yearly">Tahunan</option>
</select>
<form action="{{ route('home.filter') }}" method="GET" class="flex flex-wrap items-center gap-4 sm:ml-auto">
<div class="flex items-center gap-2">
<span class="text-sm text-gray-600">Tanggal Awal</span>
<input type="date" name="start_date" class="form-input box bg-white border border-indigo-200 rounded-lg text-gray-600" value="{{ $startDate }}">
</div>
<div class="flex items-center gap-2">
<span class="text-sm text-gray-600">Tanggal Akhir</span>
<input type="date" name="end_date" class="form-input box bg-white border border-indigo-200 rounded-lg text-gray-600" value="{{ $endDate }}">
</div>
<button type="submit" class="btn bg-indigo-500 text-white px-4 py-2 rounded-lg hover:bg-indigo-600">
Filter
</button>
</form>
</div>
<!-- Main Metrics -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
<!-- Total Saldo Card -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<!-- <div class="bg-white rounded-xl p-6 shadow-sm">
<div class="flex items-center">
<div class="w-12 h-12 rounded-lg bg-indigo-100 flex items-center justify-center me-3">
<svg class="w-6 h-6 text-indigo-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@ -39,9 +46,9 @@
</p>
</div>
</div>
</div>
</div> -->
<!-- Total Debit Card -->
<!-- Total Pendapatan Card -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<div class="flex items-center">
<div class="w-12 h-12 rounded-lg bg-green-100 flex items-center justify-center me-3">
@ -50,14 +57,14 @@
</svg>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">Total Debit</p>
<p class="text-sm text-gray-500 mb-1">Total Pendapatan</p>
<h3 class="text-2xl font-bold text-gray-800">Rp {{ number_format($totalUangMasuk, 0, ',', '.') }}</h3>
<p class="text-sm text-gray-500">Bulan Ini: Rp {{ number_format($currentMonthUangMasuk, 0, ',', '.') }}</p>
<p class="text-sm text-gray-500">Periode: {{ date('d/m/Y', strtotime($startDate)) }} - {{ date('d/m/Y', strtotime($endDate)) }}</p>
</div>
</div>
</div>
<!-- Total Kredit Card -->
<!-- Total Beban Card -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<div class="flex items-center">
<div class="w-12 h-12 rounded-lg bg-red-100 flex items-center justify-center me-3">
@ -66,9 +73,52 @@
</svg>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">Total Kredit</p>
<p class="text-sm text-gray-500 mb-1">Total Beban</p>
<h3 class="text-2xl font-bold text-gray-800">Rp {{ number_format($totalUangKeluar, 0, ',', '.') }}</h3>
<p class="text-sm text-gray-500">Bulan Ini: Rp {{ number_format($currentMonthUangKeluar, 0, ',', '.') }}</p>
<p class="text-sm text-gray-500">Periode: {{ date('d/m/Y', strtotime($startDate)) }} - {{ date('d/m/Y', strtotime($endDate)) }}</p>
</div>
</div>
</div>
</div>
<!-- Detail Section -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
<!-- Rincian Pendapatan -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<h4 class="text-lg font-semibold text-gray-700 mb-4">Rincian Pendapatan</h4>
@foreach($pendapatan as $item)
<div class="flex justify-between items-center mb-2">
<div class="flex items-center">
<span class="text-sm text-gray-600">{{ ucwords($item['kategori']) }}</span>
<span class="text-xs text-gray-400 ml-2">({{ $item['kode_akun'] }})</span>
</div>
<span class="text-sm font-medium text-green-600">Rp {{ number_format(abs($item['nominal']), 0, ',', '.') }}</span>
</div>
@endforeach
<div class="mt-4 pt-4 border-t">
<div class="flex justify-between items-center">
<span class="font-semibold">Total Pendapatan</span>
<span class="font-semibold text-green-600">Rp {{ number_format($totalUangMasuk, 0, ',', '.') }}</span>
</div>
</div>
</div>
<!-- Rincian Beban -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<h4 class="text-lg font-semibold text-gray-700 mb-4">Rincian Beban</h4>
@foreach($beban as $item)
<div class="flex justify-between items-center mb-2">
<div class="flex items-center">
<span class="text-sm text-gray-600">{{ ucwords($item['kategori']) }}</span>
<span class="text-xs text-gray-400 ml-2">({{ $item['kode_akun'] }})</span>
</div>
<span class="text-sm font-medium text-red-600">Rp {{ number_format(abs($item['nominal']), 0, ',', '.') }}</span>
</div>
@endforeach
<div class="mt-4 pt-4 border-t">
<div class="flex justify-between items-center">
<span class="font-semibold">Total Beban</span>
<span class="font-semibold text-red-600">Rp {{ number_format($totalUangKeluar, 0, ',', '.') }}</span>
</div>
</div>
</div>
@ -76,9 +126,9 @@
<!-- Profit/Loss Section -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
<!-- Total Profit/Loss Card -->
<!-- Total Laba/Rugi Card -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<h4 class="text-lg font-semibold text-gray-700 mb-4">Selisih Total (Debit - Kredit)</h4>
<h4 class="text-lg font-semibold text-gray-700 mb-4">Laba/Rugi Total</h4>
<div class="flex items-center">
<div class="w-12 h-12 rounded-lg {{ $labaRugiTotal >= 0 ? 'bg-green-100' : 'bg-red-100' }} flex items-center justify-center me-3">
<svg class="w-6 h-6 {{ $labaRugiTotal >= 0 ? 'text-green-600' : 'text-red-600' }}" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@ -89,14 +139,14 @@
<h3 class="text-2xl font-bold {{ $labaRugiTotal >= 0 ? 'text-green-600' : 'text-red-600' }}">
Rp {{ number_format(abs($labaRugiTotal), 0, ',', '.') }}
</h3>
<p class="text-sm text-gray-500">{{ $labaRugiTotal >= 0 ? 'Debit Lebih Besar' : 'Kredit Lebih Besar' }}</p>
<p class="text-sm text-gray-500">{{ $labaRugiTotal >= 0 ? 'Laba' : 'Rugi' }}</p>
</div>
</div>
</div>
<!-- Current Month Balance Card -->
<!-- Laba/Rugi Bulan Ini Card -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<h4 class="text-lg font-semibold text-gray-700 mb-4">Selisih Bulan Ini</h4>
<h4 class="text-lg font-semibold text-gray-700 mb-4">Laba/Rugi Periode Ini</h4>
<div class="flex items-center">
<div class="w-12 h-12 rounded-lg {{ $labaRugiBulanIni >= 0 ? 'bg-green-100' : 'bg-red-100' }} flex items-center justify-center me-3">
<svg class="w-6 h-6 {{ $labaRugiBulanIni >= 0 ? 'text-green-600' : 'text-red-600' }}" fill="none" stroke="currentColor" viewBox="0 0 24 24">
@ -107,7 +157,7 @@
<h3 class="text-2xl font-bold {{ $labaRugiBulanIni >= 0 ? 'text-green-600' : 'text-red-600' }}">
Rp {{ number_format(abs($labaRugiBulanIni), 0, ',', '.') }}
</h3>
<p class="text-sm text-gray-500">{{ $labaRugiBulanIni >= 0 ? 'Debit Lebih Besar' : 'Kredit Lebih Besar' }}</p>
<p class="text-sm text-gray-500">{{ $labaRugiBulanIni >= 0 ? 'Laba' : 'Rugi' }}</p>
</div>
</div>
</div>
@ -117,7 +167,7 @@
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
<!-- Bar Chart -->
<div class="bg-white p-6 rounded-xl shadow-sm">
<h4 class="text-lg font-semibold text-gray-700 mb-4">Tren Debit & Kredit</h4>
<h4 class="text-lg font-semibold text-gray-700 mb-4">Tren Pendapatan & Beban</h4>
<div class="chart-container">
<canvas id="financial-trend-chart"></canvas>
</div>
@ -145,8 +195,8 @@
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Kode</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Kategori</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Keterangan</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Debit</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Kredit</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Pendapatan</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Beban</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
@ -183,14 +233,6 @@
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.9.1/dist/chart.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
console.log('DOM Loaded');
// Debug data
const monthlyData = @json($monthlyTotals);
const categoryData = @json($categoryTotals);
console.log('Monthly Data:', monthlyData);
console.log('Category Data:', categoryData);
// Format number to Rupiah
function formatRupiah(number) {
return 'Rp ' + number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
@ -199,38 +241,37 @@ function formatRupiah(number) {
try {
// Financial Trend Chart
const trendCtx = document.getElementById('financial-trend-chart');
console.log('Trend Chart Element:', trendCtx);
if (trendCtx) {
const monthlyData = @json($monthlyTotals);
const labels = monthlyData.map(item => {
const [year, month] = item.periode.split('-');
const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Ags', 'Sep', 'Okt', 'Nov', 'Des'];
return `${monthNames[parseInt(month)-1]} ${year}`;
});
const debitData = monthlyData.map(item => parseFloat(item.total_debit) || 0);
const kreditData = monthlyData.map(item => parseFloat(item.total_kredit) || 0);
const pendapatanData = monthlyData.map(item => parseFloat(item.total_debit) || 0);
const bebanData = monthlyData.map(item => parseFloat(item.total_kredit) || 0);
new Chart(trendCtx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'Debit',
data: debitData,
label: 'Pendapatan',
data: pendapatanData,
backgroundColor: 'rgba(34, 197, 94, 0.5)',
borderColor: 'rgb(34, 197, 94)',
borderWidth: 1,
order: 2
}, {
label: 'Kredit',
data: kreditData,
label: 'Beban',
data: bebanData,
backgroundColor: 'rgba(239, 68, 68, 0.5)',
borderColor: 'rgb(239, 68, 68)',
borderWidth: 1,
order: 2
}, {
label: 'Selisih',
data: debitData.map((debit, index) => debit - kreditData[index]),
label: 'Laba/Rugi',
data: pendapatanData.map((pendapatan, index) => pendapatan - bebanData[index]),
type: 'line',
borderColor: 'rgb(59, 130, 246)',
borderWidth: 2,
@ -270,26 +311,25 @@ function formatRupiah(number) {
// Category Distribution Chart
const categoryCtx = document.getElementById('category-distribution-chart');
console.log('Category Chart Element:', categoryCtx);
if (categoryCtx) {
const categoryData = @json($categoryTotals);
const categories = categoryData.map(item => item.kategori);
const totalDebitPerCategory = categoryData.map(item => parseFloat(item.total_debit) || 0);
const totalKreditPerCategory = categoryData.map(item => parseFloat(item.total_kredit) || 0);
const pendapatanPerKategori = categoryData.map(item => parseFloat(item.total_debit) || 0);
const bebanPerKategori = categoryData.map(item => parseFloat(item.total_kredit) || 0);
new Chart(categoryCtx, {
type: 'bar',
data: {
labels: categories,
datasets: [{
label: 'Debit',
data: totalDebitPerCategory,
label: 'Pendapatan',
data: pendapatanPerKategori,
backgroundColor: 'rgba(34, 197, 94, 0.5)',
borderColor: 'rgb(34, 197, 94)',
borderWidth: 1
}, {
label: 'Kredit',
data: totalKreditPerCategory,
label: 'Beban',
data: bebanPerKategori,
backgroundColor: 'rgba(239, 68, 68, 0.5)',
borderColor: 'rgb(239, 68, 68)',
borderWidth: 1

View File

@ -9,166 +9,91 @@
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<!-- <div class="p-4"> -->
<!-- Header Controls -->
<!-- <form action="{{ route('labarugi.filter') }}" method="GET" class="flex items-center gap-4 mb-4">
<div class="flex items-center gap-2">
<span>Tanggal Awal</span>
<input type="date" name="start_date" class="border rounded px-2 py-1" value="{{ $startDate }}">
</div>
<div class="flex items-center gap-2">
<span>Tanggal Akhir</span>
<input type="date" name="end_date" class="border rounded px-2 py-1" value="{{ $endDate }}">
</div>
<button type="submit" class="bg-blue-500 text-white px-4 py-1 rounded">Filter</button>
</form> -->
<div class="box p-4 intro-y mt-5">
<div class="intro-y">
<!-- Header -->
<div class="mb-4 bg-blue-600 text-white p-4 rounded-lg shadow-md">
<h1 class="text-2xl font-bold text-center">CV. Budivespaendut</h1>
<h2 class="text-xl font-semibold text-center mt-2">Laporan Laba Rugi</h2>
<p class="text-center">Periode: {{ date('d F Y', strtotime($startDate)) }} - {{ date('d F Y', strtotime($endDate)) }}</p>
<h1 class="text-2xl font-bold">Laporan Laba Rugi</h1>
<p class="text-sm mt-1">PT EXAMPLE</p>
<p class="text-sm">Periode: {{ date('F Y', strtotime($startDate)) }}</p>
</div>
<!-- Filter Tanggal -->
<!-- <div class="mb-4">
<form method="GET" action="{{ url('/laporan-laba-rugi') }}" class="flex gap-4">
<div>
<label class="block text-sm font-medium text-gray-700">Tanggal Awal</label>
<input type="date" name="start_date" value="{{ $startDate }}" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm">
<div class="p-4">
<!-- Header Controls -->
<form action="{{ route('labarugi.filter') }}" method="GET" class="flex items-center gap-4 mb-4">
<div class="flex items-center gap-2">
<span>Tanggal Awal</span>
<input type="date" name="start_date" class="border rounded px-2 py-1" value="{{ $startDate }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700">Tanggal Akhir</label>
<input type="date" name="end_date" value="{{ $endDate }}" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm">
</div>
<div class="self-end">
<button type="submit" class="bg-blue-500 text-white px-4 py-2 rounded-md hover:bg-blue-600">
Filter
</button>
<div class="flex items-center gap-2">
<span>Tanggal Akhir</span>
<input type="date" name="end_date" class="border rounded px-2 py-1" value="{{ $endDate }}">
</div>
<button type="submit" class="bg-blue-500 text-white px-4 py-1 rounded">Filter</button>
</form>
</div> -->
<!-- Tabel Laporan Laba Rugi -->
<!-- Table -->
<div class="overflow-x-auto">
<table class="min-w-full bg-white border-collapse">
<!-- Pendapatan Operasional -->
<tr class="bg-gray-100 font-bold">
<td colspan="3" class="border p-2">Pendapatan Operasional</td>
</tr>
<tr>
<td class="border p-2 pl-4">Pendapatan Penjualan</td>
<td class="border p-2 text-right">{{ number_format($pendapatanPenjualan ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Pendapatan Jasa</td>
<td class="border p-2 text-right">{{ number_format($pendapatanJasa ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr class="font-bold bg-gray-50">
<td class="border p-2">Total Pendapatan Operasional</td>
<td class="border p-2"></td>
<td class="border p-2 text-right">{{ number_format($totalPendapatanOperasional ?? 0, 0, ',', '.') }}</td>
<table class="w-full border-collapse border border-gray-300">
<tr class="bg-purple-600 text-white">
<th class="text-left p-2 border border-gray-300">Keterangan</th>
<th class="text-right p-2 border border-gray-300">Nominal</th>
</tr>
<!-- Pendapatan Non-Operasional -->
<tr class="bg-gray-100 font-bold">
<td colspan="3" class="border p-2">Pendapatan Non-Operasional</td>
<!-- Pendapatan -->
<tr class="bg-gray-100">
<td class="p-2 border border-gray-300 font-bold" colspan="2">Pendapatan</td>
</tr>
<tr>
<td class="border p-2 pl-4">Pendapatan Bunga</td>
<td class="border p-2 text-right">{{ number_format($pendapatanBunga ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
@foreach($pendapatan as $item)
<tr class="border-b border-gray-300">
<td class="p-2 border border-gray-300 pl-8">{{ ucwords($item['kategori']) }} ({{ $item['kode_akun'] }})</td>
<td class="text-right p-2 border border-gray-300">
{{ number_format(abs($item['nominal']), 0, ',', '.') }}
</td>
</tr>
<tr>
<td class="border p-2 pl-4">Pendapatan Sewa</td>
<td class="border p-2 text-right">{{ number_format($pendapatanSewa ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Pendapatan Komisi</td>
<td class="border p-2 text-right">{{ number_format($pendapatanKomisi ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Pendapatan Lain</td>
<td class="border p-2 text-right">{{ number_format($pendapatanLain ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr class="font-bold bg-gray-50">
<td class="border p-2">Total Pendapatan Non-Operasional</td>
<td class="border p-2"></td>
<td class="border p-2 text-right">{{ number_format($totalPendapatanNonOperasional ?? 0, 0, ',', '.') }}</td>
@endforeach
<tr class="border-b border-gray-300 font-semibold bg-gray-50">
<td class="p-2 border border-gray-300">Total Pendapatan</td>
<td class="text-right p-2 border border-gray-300">{{ number_format(abs($total_pendapatan), 0, ',', '.') }}</td>
</tr>
<!-- Total Seluruh Pendapatan -->
<tr class="font-bold bg-blue-50">
<td class="border p-2">Total Pendapatan</td>
<td class="border p-2"></td>
<td class="border p-2 text-right">{{ number_format($totalPendapatan ?? 0, 0, ',', '.') }}</td>
<!-- Beban -->
<tr class="bg-gray-100">
<td class="p-2 border border-gray-300 font-bold" colspan="2">Beban</td>
</tr>
@foreach($beban as $item)
<tr class="border-b border-gray-300">
<td class="p-2 border border-gray-300 pl-8">{{ ucwords($item['kategori']) }} ({{ $item['kode_akun'] }})</td>
<td class="text-right p-2 border border-gray-300">
{{ number_format(abs($item['nominal']), 0, ',', '.') }}
</td>
</tr>
@endforeach
<tr class="border-b border-gray-300 font-semibold bg-gray-50">
<td class="p-2 border border-gray-300">Total Beban</td>
<td class="text-right p-2 border border-gray-300">{{ number_format($total_beban, 0, ',', '.') }}</td>
</tr>
<!-- Beban Operasional -->
<tr class="bg-gray-100 font-bold">
<td colspan="3" class="border p-2">Beban Operasional</td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Gaji</td>
<td class="border p-2 text-right">{{ number_format($bebanGaji ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Sewa</td>
<td class="border p-2 text-right">{{ number_format($bebanSewa ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Utilitas</td>
<td class="border p-2 text-right">{{ number_format($bebanUtilitas ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Penyusutan</td>
<td class="border p-2 text-right">{{ number_format($bebanPenyusutan ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Supplies</td>
<td class="border p-2 text-right">{{ number_format($bebanSupplies ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Iklan</td>
<td class="border p-2 text-right">{{ number_format($bebanIklan ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr class="font-bold bg-gray-50">
<td class="border p-2">Total Beban Operasional</td>
<td class="border p-2"></td>
<td class="border p-2 text-right">{{ number_format($totalBebanOperasional ?? 0, 0, ',', '.') }}</td>
</tr>
<!-- Beban Non-Operasional -->
<tr class="bg-gray-100 font-bold">
<td colspan="3" class="border p-2">Beban Non-Operasional</td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Bunga</td>
<td class="border p-2 text-right">{{ number_format($bebanBunga ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr>
<td class="border p-2 pl-4">Beban Lain</td>
<td class="border p-2 text-right">{{ number_format($bebanLain ?? 0, 0, ',', '.') }}</td>
<td class="border p-2"></td>
</tr>
<tr class="font-bold bg-gray-50">
<td class="border p-2">Total Beban Non-Operasional</td>
<td class="border p-2"></td>
<td class="border p-2 text-right">{{ number_format($totalBebanNonOperasional ?? 0, 0, ',', '.') }}</td>
</tr>
<!-- Total Seluruh Beban -->
<tr class="font-bold bg-red-50">
<td class="border p-2">Total Beban</td>
<td class="border p-2"></td>
<td class="border p-2 text-right">{{ number_format($totalBeban ?? 0, 0, ',', '.') }}</td>
</tr>
<!-- Total Laba/Rugi -->
<tr class="font-bold text-lg {{ $totalLabaRugi >= 0 ? 'bg-green-100' : 'bg-red-100' }}">
<td class="border p-2">Total Laba/Rugi</td>
<td class="border p-2"></td>
<td class="border p-2 text-right">{{ number_format($totalLabaRugi ?? 0, 0, ',', '.') }}</td>
<!-- Laba/Rugi -->
<tr class="bg-purple-100">
<td class="p-2 border border-gray-300 font-bold">Laba/Rugi Bersih</td>
<td class="text-right p-2 border border-gray-300 font-bold">
{{ number_format(-($total_pendapatan) - $total_beban, 0, ',', '.') }}
</td>
</tr>
</table>
</div>

View File

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@yield('title') - Sistem Laporan Keuangan</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom CSS -->
<style>
body {
background-color: #f8f9fa;
padding-top: 20px;
}
.card {
box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
}
.table td {
vertical-align: middle;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary mb-4">
<div class="container">
<a class="navbar-brand" href="#">Sistem Laporan Keuangan</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/labarugi">Laporan Laba Rugi</a>
</li>
</ul>
</div>
</div>
</nav>
<main>
@yield('content')
</main>
<!-- Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View File

@ -53,6 +53,7 @@
Route::get('laporan/export-pdf', [LaporanController::class, 'exportPDF'])->name('laporan.export-pdf');
Route::delete('/laporan/{id}', [LaporanController::class, 'destroy'])->name('laporan.destroy');
Route::get('/home', [HomeController::class, 'index'])->name('home');
Route::get('/home/filter', [HomeController::class, 'filter'])->name('home.filter');
Route::get('/User', [UserController::class, 'index'])->name('User.index');
Route::get('/User/create', [UserController::class, 'create'])->name('User.create');
Route::post('/User', [UserController::class, 'store'])->name('User.store');
@ -70,5 +71,6 @@
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');
Route::get('/labarugi', [LabarugiController::class, 'index'])->name('labarugi.index');
Route::get('/labarugi/filter', [LabarugiController::class, 'filter'])->name('labarugi.filter');
});