update tgl 20 april
This commit is contained in:
parent
3c5f96f420
commit
70aadac250
|
@ -6,83 +6,235 @@
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class HomeController extends Controller
|
class HomeController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
private function getKodeAkun($kategori)
|
||||||
{
|
{
|
||||||
// Get current month data
|
$kategori = trim(strtolower($kategori));
|
||||||
$currentMonth = Carbon::now()->month;
|
|
||||||
$currentYear = Carbon::now()->year;
|
|
||||||
|
|
||||||
// Calculate total saldo
|
// Pendapatan Operasional (41)
|
||||||
$totalSaldo = HomeModel::selectRaw('SUM(uang_masuk - uang_keluar) as saldo')->first()->saldo ?? 0;
|
if (str_contains($kategori, 'pendapatan penjualan')) return '241001';
|
||||||
|
if (str_contains($kategori, 'pendapatan jasa')) return '241002';
|
||||||
|
|
||||||
// Calculate total uang masuk dan uang keluar
|
// Pendapatan Non-Operasional (42)
|
||||||
$totalUangMasuk = HomeModel::sum('uang_masuk');
|
if (str_contains($kategori, 'pendapatan bunga')) return '242001';
|
||||||
$totalUangKeluar = HomeModel::sum('uang_keluar');
|
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
|
// Beban Operasional (51)
|
||||||
$currentMonthUangMasuk = HomeModel::whereMonth('Tanggal', $currentMonth)
|
if (str_contains($kategori, 'beban gaji')) return '251001';
|
||||||
->whereYear('Tanggal', $currentYear)
|
if (str_contains($kategori, 'beban sewa')) return '251002';
|
||||||
->sum('uang_masuk');
|
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)
|
// Beban Non-Operasional (52)
|
||||||
->whereYear('Tanggal', $currentYear)
|
if (str_contains($kategori, 'beban bunga')) return '252001';
|
||||||
->sum('uang_keluar');
|
if (str_contains($kategori, 'beban lain')) return '252002';
|
||||||
|
|
||||||
// Calculate profit/loss
|
return null;
|
||||||
$labaRugiTotal = $totalUangMasuk - $totalUangKeluar;
|
}
|
||||||
$labaRugiBulanIni = $currentMonthUangMasuk - $currentMonthUangKeluar;
|
|
||||||
|
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
|
// Get monthly totals for chart
|
||||||
$monthlyTotals = HomeModel::selectRaw('
|
$monthlyTotals = DB::table('laporan_transaksis')
|
||||||
DATE_FORMAT(Tanggal, "%Y-%m") as periode,
|
->select(
|
||||||
SUM(uang_masuk) as total_debit,
|
DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'),
|
||||||
SUM(uang_keluar) as total_kredit,
|
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'),
|
||||||
SUM(uang_masuk - uang_keluar) as laba_rugi
|
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')
|
->groupBy('periode')
|
||||||
->orderBy('periode')
|
->orderBy('periode')
|
||||||
->get();
|
->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
|
// Get recent transactions
|
||||||
$recentTransactions = HomeModel::orderBy('Tanggal', 'desc')
|
$recentTransactions = DB::table('laporan_transaksis')
|
||||||
|
->orderBy('Tanggal', 'desc')
|
||||||
->limit(10)
|
->limit(10)
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
// Calculate month-over-month growth
|
// Debug log untuk memeriksa nilai
|
||||||
$lastMonthTotal = HomeModel::whereMonth('Tanggal', Carbon::now()->subMonth()->month)
|
Log::info("Total Uang Masuk: " . $totalUangMasuk);
|
||||||
->whereYear('Tanggal', Carbon::now()->subMonth()->year)
|
Log::info("Total Uang Keluar: " . $totalUangKeluar);
|
||||||
->sum('uang_masuk');
|
Log::info("Total Saldo: " . $totalSaldo);
|
||||||
|
Log::info("Laba Rugi Total: " . $labaRugiTotal);
|
||||||
$growthPercentage = $lastMonthTotal != 0
|
Log::info("Laba Rugi Bulan Ini: " . $labaRugiBulanIni);
|
||||||
? (($currentMonthUangMasuk - $lastMonthTotal) / $lastMonthTotal) * 100
|
|
||||||
: 0;
|
|
||||||
|
|
||||||
return view('home', compact(
|
return view('home', compact(
|
||||||
'totalSaldo',
|
'startDate',
|
||||||
|
'endDate',
|
||||||
'totalUangMasuk',
|
'totalUangMasuk',
|
||||||
'totalUangKeluar',
|
'totalUangKeluar',
|
||||||
'currentMonthUangMasuk',
|
'currentMonthUangMasuk',
|
||||||
'currentMonthUangKeluar',
|
'currentMonthUangKeluar',
|
||||||
|
'totalSaldo',
|
||||||
|
'growthPercentage',
|
||||||
'labaRugiTotal',
|
'labaRugiTotal',
|
||||||
'labaRugiBulanIni',
|
'labaRugiBulanIni',
|
||||||
'monthlyTotals',
|
'monthlyTotals',
|
||||||
'categoryTotals',
|
'categoryTotals',
|
||||||
'recentTransactions',
|
'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);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,138 +2,136 @@
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\LabarugiModel;
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\LabarugiModel;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class LabarugiController extends Controller
|
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)
|
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'));
|
$startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d'));
|
||||||
$endDate = $request->input('end_date', Carbon::now()->endOfMonth()->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
|
try {
|
||||||
$sumUangMasuk = "COALESCE(uang_masuk, 0) + COALESCE(uang_masuk2, 0) + COALESCE(uang_masuk3, 0) + COALESCE(uang_masuk4, 0) + COALESCE(uang_masuk5, 0)";
|
// Ambil semua transaksi dalam periode
|
||||||
|
$transaksis = DB::table('laporan_transaksis')
|
||||||
// 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])
|
->whereBetween('Tanggal', [$startDate, $endDate])
|
||||||
->select(DB::raw("SUM($sumUangMasuk) as total"))
|
->get();
|
||||||
->value('total') ?? 0;
|
|
||||||
|
|
||||||
$pendapatanJasa = $model->where('kode', '241002')
|
foreach ($transaksis as $transaksi) {
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
// Proses kategori1
|
||||||
->select(DB::raw("SUM($sumUangMasuk) as total"))
|
if (!empty($transaksi->kategori)) {
|
||||||
->value('total') ?? 0;
|
$this->prosesKategori(
|
||||||
|
$transaksi->kategori,
|
||||||
|
$transaksi->uang_masuk ?? 0,
|
||||||
|
$transaksi->uang_keluar ?? 0,
|
||||||
|
$pendapatan,
|
||||||
|
$beban
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Mengambil data pendapatan non-operasional (42)
|
// Proses kategori2-5
|
||||||
$pendapatanBunga = $model->where('kode', '242001')
|
for ($i = 2; $i <= 5; $i++) {
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
$kategori = $transaksi->{"kategori$i"};
|
||||||
->select(DB::raw("SUM($sumUangMasuk) as total"))
|
if (!empty($kategori)) {
|
||||||
->value('total') ?? 0;
|
$this->prosesKategori(
|
||||||
|
$kategori,
|
||||||
|
$transaksi->{"uang_masuk$i"} ?? 0,
|
||||||
|
$transaksi->{"uang_keluar$i"} ?? 0,
|
||||||
|
$pendapatan,
|
||||||
|
$beban
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$pendapatanSewa = $model->where('kode', '242002')
|
// Hitung total
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
$total_pendapatan = array_sum(array_column($pendapatan, 'nominal'));
|
||||||
->select(DB::raw("SUM($sumUangMasuk) as total"))
|
$total_beban = abs(array_sum(array_column($beban, 'nominal')));
|
||||||
->value('total') ?? 0;
|
$laba_rugi = $total_pendapatan - $total_beban;
|
||||||
|
|
||||||
$pendapatanKomisi = $model->where('kode', '242003')
|
return view('Labarugi', [
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
'startDate' => $startDate,
|
||||||
->select(DB::raw("SUM($sumUangMasuk) as total"))
|
'endDate' => $endDate,
|
||||||
->value('total') ?? 0;
|
'pendapatan' => $pendapatan,
|
||||||
|
'beban' => $beban,
|
||||||
|
'total_pendapatan' => $total_pendapatan,
|
||||||
|
'total_beban' => $total_beban,
|
||||||
|
'laba_rugi' => $laba_rugi
|
||||||
|
]);
|
||||||
|
|
||||||
$pendapatanLain = $model->where('kode', '242004')
|
} catch (\Exception $e) {
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
Log::error("Error in LabarugiController: " . $e->getMessage());
|
||||||
->select(DB::raw("SUM($sumUangMasuk) as total"))
|
throw $e;
|
||||||
->value('total') ?? 0;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Mengambil data beban operasional (51)
|
private function prosesKategori($kategori, $uang_masuk, $uang_keluar, &$pendapatan, &$beban)
|
||||||
$bebanGaji = $model->where('kode', '251001')
|
{
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
$kodeAkun = $this->getKodeAkun($kategori);
|
||||||
->select(DB::raw("SUM($sumUangKeluar) as total"))
|
if ($kodeAkun) {
|
||||||
->value('total') ?? 0;
|
$nominal = $uang_masuk - $uang_keluar;
|
||||||
|
$data = [
|
||||||
|
'kategori' => $kategori,
|
||||||
|
'kode_akun' => $kodeAkun,
|
||||||
|
'nominal' => $nominal
|
||||||
|
];
|
||||||
|
|
||||||
$bebanSewa = $model->where('kode', '251002')
|
if (str_starts_with($kodeAkun, '24')) {
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
if (isset($pendapatan[$kategori])) {
|
||||||
->select(DB::raw("SUM($sumUangKeluar) as total"))
|
$pendapatan[$kategori]['nominal'] += $nominal;
|
||||||
->value('total') ?? 0;
|
} else {
|
||||||
|
$pendapatan[$kategori] = $data;
|
||||||
|
}
|
||||||
|
} elseif (str_starts_with($kodeAkun, '25')) {
|
||||||
|
if (isset($beban[$kategori])) {
|
||||||
|
$beban[$kategori]['nominal'] += $nominal;
|
||||||
|
} else {
|
||||||
|
$beban[$kategori] = $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$bebanUtilitas = $model->where('kode', '251003')
|
public function filter(Request $request)
|
||||||
->whereBetween('Tanggal', [$startDate, $endDate])
|
{
|
||||||
->select(DB::raw("SUM($sumUangKeluar) as total"))
|
return $this->index($request);
|
||||||
->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'
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,81 +9,17 @@ class LabarugiModel extends Model
|
||||||
protected $table = 'laporan_transaksis';
|
protected $table = 'laporan_transaksis';
|
||||||
protected $guarded = ['id'];
|
protected $guarded = ['id'];
|
||||||
|
|
||||||
// Konstanta untuk kode akun pendapatan (uang masuk)
|
protected $casts = [
|
||||||
const KODE_PENDAPATAN = [
|
'Tanggal' => 'date',
|
||||||
'OPERASIONAL' => [
|
'uang_masuk' => 'decimal:2',
|
||||||
'241001' => 'pendapatan penjualan',
|
'uang_masuk2' => 'decimal:2',
|
||||||
'241002' => 'pendapatan jasa'
|
'uang_masuk3' => 'decimal:2',
|
||||||
],
|
'uang_masuk4' => 'decimal:2',
|
||||||
'NON_OPERASIONAL' => [
|
'uang_masuk5' => 'decimal:2',
|
||||||
'242001' => 'pendapatan bunga',
|
'uang_keluar' => 'decimal:2',
|
||||||
'242002' => 'pendapatan sewa',
|
'uang_keluar2' => 'decimal:2',
|
||||||
'242003' => 'pendapatan komisi',
|
'uang_keluar3' => 'decimal:2',
|
||||||
'242004' => 'pendapatan lain'
|
'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'])
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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');
|
||||||
|
}
|
||||||
|
};
|
|
@ -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">
|
<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 -->
|
<!-- 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>
|
<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">
|
<form action="{{ route('home.filter') }}" method="GET" class="flex flex-wrap items-center gap-4 sm:ml-auto">
|
||||||
<option value="daily">Harian</option>
|
<div class="flex items-center gap-2">
|
||||||
<option value="weekly">Mingguan</option>
|
<span class="text-sm text-gray-600">Tanggal Awal</span>
|
||||||
<option value="monthly" selected>Bulanan</option>
|
<input type="date" name="start_date" class="form-input box bg-white border border-indigo-200 rounded-lg text-gray-600" value="{{ $startDate }}">
|
||||||
<option value="yearly">Tahunan</option>
|
</div>
|
||||||
</select>
|
<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>
|
</div>
|
||||||
|
|
||||||
<!-- Main Metrics -->
|
<!-- Main Metrics -->
|
||||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
|
||||||
<!-- Total Saldo Card -->
|
<!-- 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="flex items-center">
|
||||||
<div class="w-12 h-12 rounded-lg bg-indigo-100 flex items-center justify-center me-3">
|
<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">
|
<svg class="w-6 h-6 text-indigo-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||||
|
@ -39,9 +46,9 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
||||||
<!-- Total Debit Card -->
|
<!-- Total Pendapatan 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="flex items-center">
|
||||||
<div class="w-12 h-12 rounded-lg bg-green-100 flex items-center justify-center me-3">
|
<div class="w-12 h-12 rounded-lg bg-green-100 flex items-center justify-center me-3">
|
||||||
|
@ -50,14 +57,14 @@
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<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>
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Total Kredit Card -->
|
<!-- Total Beban 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="flex items-center">
|
||||||
<div class="w-12 h-12 rounded-lg bg-red-100 flex items-center justify-center me-3">
|
<div class="w-12 h-12 rounded-lg bg-red-100 flex items-center justify-center me-3">
|
||||||
|
@ -66,9 +73,52 @@
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<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>
|
<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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -76,9 +126,9 @@
|
||||||
|
|
||||||
<!-- Profit/Loss Section -->
|
<!-- Profit/Loss Section -->
|
||||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
|
<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">
|
<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="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">
|
<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">
|
<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' }}">
|
<h3 class="text-2xl font-bold {{ $labaRugiTotal >= 0 ? 'text-green-600' : 'text-red-600' }}">
|
||||||
Rp {{ number_format(abs($labaRugiTotal), 0, ',', '.') }}
|
Rp {{ number_format(abs($labaRugiTotal), 0, ',', '.') }}
|
||||||
</h3>
|
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Current Month Balance Card -->
|
<!-- Laba/Rugi Bulan Ini Card -->
|
||||||
<div class="bg-white rounded-xl p-6 shadow-sm">
|
<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="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">
|
<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">
|
<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' }}">
|
<h3 class="text-2xl font-bold {{ $labaRugiBulanIni >= 0 ? 'text-green-600' : 'text-red-600' }}">
|
||||||
Rp {{ number_format(abs($labaRugiBulanIni), 0, ',', '.') }}
|
Rp {{ number_format(abs($labaRugiBulanIni), 0, ',', '.') }}
|
||||||
</h3>
|
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -117,7 +167,7 @@
|
||||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
|
||||||
<!-- Bar Chart -->
|
<!-- Bar Chart -->
|
||||||
<div class="bg-white p-6 rounded-xl shadow-sm">
|
<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">
|
<div class="chart-container">
|
||||||
<canvas id="financial-trend-chart"></canvas>
|
<canvas id="financial-trend-chart"></canvas>
|
||||||
</div>
|
</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">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">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">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">Pendapatan</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">Beban</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="bg-white divide-y divide-gray-200">
|
<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 src="https://cdn.jsdelivr.net/npm/chart.js@3.9.1/dist/chart.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
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
|
// Format number to Rupiah
|
||||||
function formatRupiah(number) {
|
function formatRupiah(number) {
|
||||||
return 'Rp ' + number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
return 'Rp ' + number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
||||||
|
@ -199,38 +241,37 @@ function formatRupiah(number) {
|
||||||
try {
|
try {
|
||||||
// Financial Trend Chart
|
// Financial Trend Chart
|
||||||
const trendCtx = document.getElementById('financial-trend-chart');
|
const trendCtx = document.getElementById('financial-trend-chart');
|
||||||
console.log('Trend Chart Element:', trendCtx);
|
|
||||||
|
|
||||||
if (trendCtx) {
|
if (trendCtx) {
|
||||||
|
const monthlyData = @json($monthlyTotals);
|
||||||
const labels = monthlyData.map(item => {
|
const labels = monthlyData.map(item => {
|
||||||
const [year, month] = item.periode.split('-');
|
const [year, month] = item.periode.split('-');
|
||||||
const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Ags', 'Sep', 'Okt', 'Nov', 'Des'];
|
const monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Ags', 'Sep', 'Okt', 'Nov', 'Des'];
|
||||||
return `${monthNames[parseInt(month)-1]} ${year}`;
|
return `${monthNames[parseInt(month)-1]} ${year}`;
|
||||||
});
|
});
|
||||||
const debitData = monthlyData.map(item => parseFloat(item.total_debit) || 0);
|
const pendapatanData = monthlyData.map(item => parseFloat(item.total_debit) || 0);
|
||||||
const kreditData = monthlyData.map(item => parseFloat(item.total_kredit) || 0);
|
const bebanData = monthlyData.map(item => parseFloat(item.total_kredit) || 0);
|
||||||
|
|
||||||
new Chart(trendCtx, {
|
new Chart(trendCtx, {
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
data: {
|
data: {
|
||||||
labels: labels,
|
labels: labels,
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Debit',
|
label: 'Pendapatan',
|
||||||
data: debitData,
|
data: pendapatanData,
|
||||||
backgroundColor: 'rgba(34, 197, 94, 0.5)',
|
backgroundColor: 'rgba(34, 197, 94, 0.5)',
|
||||||
borderColor: 'rgb(34, 197, 94)',
|
borderColor: 'rgb(34, 197, 94)',
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
order: 2
|
order: 2
|
||||||
}, {
|
}, {
|
||||||
label: 'Kredit',
|
label: 'Beban',
|
||||||
data: kreditData,
|
data: bebanData,
|
||||||
backgroundColor: 'rgba(239, 68, 68, 0.5)',
|
backgroundColor: 'rgba(239, 68, 68, 0.5)',
|
||||||
borderColor: 'rgb(239, 68, 68)',
|
borderColor: 'rgb(239, 68, 68)',
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
order: 2
|
order: 2
|
||||||
}, {
|
}, {
|
||||||
label: 'Selisih',
|
label: 'Laba/Rugi',
|
||||||
data: debitData.map((debit, index) => debit - kreditData[index]),
|
data: pendapatanData.map((pendapatan, index) => pendapatan - bebanData[index]),
|
||||||
type: 'line',
|
type: 'line',
|
||||||
borderColor: 'rgb(59, 130, 246)',
|
borderColor: 'rgb(59, 130, 246)',
|
||||||
borderWidth: 2,
|
borderWidth: 2,
|
||||||
|
@ -270,26 +311,25 @@ function formatRupiah(number) {
|
||||||
|
|
||||||
// Category Distribution Chart
|
// Category Distribution Chart
|
||||||
const categoryCtx = document.getElementById('category-distribution-chart');
|
const categoryCtx = document.getElementById('category-distribution-chart');
|
||||||
console.log('Category Chart Element:', categoryCtx);
|
|
||||||
|
|
||||||
if (categoryCtx) {
|
if (categoryCtx) {
|
||||||
|
const categoryData = @json($categoryTotals);
|
||||||
const categories = categoryData.map(item => item.kategori);
|
const categories = categoryData.map(item => item.kategori);
|
||||||
const totalDebitPerCategory = categoryData.map(item => parseFloat(item.total_debit) || 0);
|
const pendapatanPerKategori = categoryData.map(item => parseFloat(item.total_debit) || 0);
|
||||||
const totalKreditPerCategory = categoryData.map(item => parseFloat(item.total_kredit) || 0);
|
const bebanPerKategori = categoryData.map(item => parseFloat(item.total_kredit) || 0);
|
||||||
|
|
||||||
new Chart(categoryCtx, {
|
new Chart(categoryCtx, {
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
data: {
|
data: {
|
||||||
labels: categories,
|
labels: categories,
|
||||||
datasets: [{
|
datasets: [{
|
||||||
label: 'Debit',
|
label: 'Pendapatan',
|
||||||
data: totalDebitPerCategory,
|
data: pendapatanPerKategori,
|
||||||
backgroundColor: 'rgba(34, 197, 94, 0.5)',
|
backgroundColor: 'rgba(34, 197, 94, 0.5)',
|
||||||
borderColor: 'rgb(34, 197, 94)',
|
borderColor: 'rgb(34, 197, 94)',
|
||||||
borderWidth: 1
|
borderWidth: 1
|
||||||
}, {
|
}, {
|
||||||
label: 'Kredit',
|
label: 'Beban',
|
||||||
data: totalKreditPerCategory,
|
data: bebanPerKategori,
|
||||||
backgroundColor: 'rgba(239, 68, 68, 0.5)',
|
backgroundColor: 'rgba(239, 68, 68, 0.5)',
|
||||||
borderColor: 'rgb(239, 68, 68)',
|
borderColor: 'rgb(239, 68, 68)',
|
||||||
borderWidth: 1
|
borderWidth: 1
|
||||||
|
|
|
@ -9,166 +9,91 @@
|
||||||
<!-- CSRF Token -->
|
<!-- CSRF Token -->
|
||||||
<meta name="csrf-token" content="{{ 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="box p-4 intro-y mt-5">
|
||||||
<div class="intro-y">
|
<div class="intro-y">
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div class="mb-4 bg-blue-600 text-white p-4 rounded-lg shadow-md">
|
<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>
|
<h1 class="text-2xl font-bold">Laporan Laba Rugi</h1>
|
||||||
<h2 class="text-xl font-semibold text-center mt-2">Laporan Laba Rugi</h2>
|
<p class="text-sm mt-1">PT EXAMPLE</p>
|
||||||
<p class="text-center">Periode: {{ date('d F Y', strtotime($startDate)) }} - {{ date('d F Y', strtotime($endDate)) }}</p>
|
<p class="text-sm">Periode: {{ date('F Y', strtotime($startDate)) }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Filter Tanggal -->
|
<div class="p-4">
|
||||||
<!-- <div class="mb-4">
|
<!-- Header Controls -->
|
||||||
<form method="GET" action="{{ url('/laporan-laba-rugi') }}" class="flex gap-4">
|
<form action="{{ route('labarugi.filter') }}" method="GET" class="flex items-center gap-4 mb-4">
|
||||||
<div>
|
<div class="flex items-center gap-2">
|
||||||
<label class="block text-sm font-medium text-gray-700">Tanggal Awal</label>
|
<span>Tanggal Awal</span>
|
||||||
<input type="date" name="start_date" value="{{ $startDate }}" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm">
|
<input type="date" name="start_date" class="border rounded px-2 py-1" value="{{ $startDate }}">
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="flex items-center gap-2">
|
||||||
<label class="block text-sm font-medium text-gray-700">Tanggal Akhir</label>
|
<span>Tanggal Akhir</span>
|
||||||
<input type="date" name="end_date" value="{{ $endDate }}" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm">
|
<input type="date" name="end_date" class="border rounded px-2 py-1" value="{{ $endDate }}">
|
||||||
</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>
|
</div>
|
||||||
|
<button type="submit" class="bg-blue-500 text-white px-4 py-1 rounded">Filter</button>
|
||||||
</form>
|
</form>
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<!-- Tabel Laporan Laba Rugi -->
|
<!-- Table -->
|
||||||
<div class="overflow-x-auto">
|
<div class="overflow-x-auto">
|
||||||
<table class="min-w-full bg-white border-collapse">
|
<table class="w-full border-collapse border border-gray-300">
|
||||||
<!-- Pendapatan Operasional -->
|
<tr class="bg-purple-600 text-white">
|
||||||
<tr class="bg-gray-100 font-bold">
|
<th class="text-left p-2 border border-gray-300">Keterangan</th>
|
||||||
<td colspan="3" class="border p-2">Pendapatan Operasional</td>
|
<th class="text-right p-2 border border-gray-300">Nominal</th>
|
||||||
</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>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<!-- Pendapatan Non-Operasional -->
|
<!-- Pendapatan -->
|
||||||
<tr class="bg-gray-100 font-bold">
|
<tr class="bg-gray-100">
|
||||||
<td colspan="3" class="border p-2">Pendapatan Non-Operasional</td>
|
<td class="p-2 border border-gray-300 font-bold" colspan="2">Pendapatan</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
@foreach($pendapatan as $item)
|
||||||
<td class="border p-2 pl-4">Pendapatan Bunga</td>
|
<tr class="border-b border-gray-300">
|
||||||
<td class="border p-2 text-right">{{ number_format($pendapatanBunga ?? 0, 0, ',', '.') }}</td>
|
<td class="p-2 border border-gray-300 pl-8">{{ ucwords($item['kategori']) }} ({{ $item['kode_akun'] }})</td>
|
||||||
<td class="border p-2"></td>
|
<td class="text-right p-2 border border-gray-300">
|
||||||
|
{{ number_format(abs($item['nominal']), 0, ',', '.') }}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
@endforeach
|
||||||
<td class="border p-2 pl-4">Pendapatan Sewa</td>
|
<tr class="border-b border-gray-300 font-semibold bg-gray-50">
|
||||||
<td class="border p-2 text-right">{{ number_format($pendapatanSewa ?? 0, 0, ',', '.') }}</td>
|
<td class="p-2 border border-gray-300">Total Pendapatan</td>
|
||||||
<td class="border p-2"></td>
|
<td class="text-right p-2 border border-gray-300">{{ number_format(abs($total_pendapatan), 0, ',', '.') }}</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>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<!-- Total Seluruh Pendapatan -->
|
<!-- Beban -->
|
||||||
<tr class="font-bold bg-blue-50">
|
<tr class="bg-gray-100">
|
||||||
<td class="border p-2">Total Pendapatan</td>
|
<td class="p-2 border border-gray-300 font-bold" colspan="2">Beban</td>
|
||||||
<td class="border p-2"></td>
|
</tr>
|
||||||
<td class="border p-2 text-right">{{ number_format($totalPendapatan ?? 0, 0, ',', '.') }}</td>
|
@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>
|
</tr>
|
||||||
|
|
||||||
<!-- Beban Operasional -->
|
<!-- Laba/Rugi -->
|
||||||
<tr class="bg-gray-100 font-bold">
|
<tr class="bg-purple-100">
|
||||||
<td colspan="3" class="border p-2">Beban Operasional</td>
|
<td class="p-2 border border-gray-300 font-bold">Laba/Rugi Bersih</td>
|
||||||
</tr>
|
<td class="text-right p-2 border border-gray-300 font-bold">
|
||||||
<tr>
|
{{ number_format(-($total_pendapatan) - $total_beban, 0, ',', '.') }}
|
||||||
<td class="border p-2 pl-4">Beban Gaji</td>
|
</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>
|
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -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>
|
|
@ -53,6 +53,7 @@
|
||||||
Route::get('laporan/export-pdf', [LaporanController::class, 'exportPDF'])->name('laporan.export-pdf');
|
Route::get('laporan/export-pdf', [LaporanController::class, 'exportPDF'])->name('laporan.export-pdf');
|
||||||
Route::delete('/laporan/{id}', [LaporanController::class, 'destroy'])->name('laporan.destroy');
|
Route::delete('/laporan/{id}', [LaporanController::class, 'destroy'])->name('laporan.destroy');
|
||||||
Route::get('/home', [HomeController::class, 'index'])->name('home');
|
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', [UserController::class, 'index'])->name('User.index');
|
||||||
Route::get('/User/create', [UserController::class, 'create'])->name('User.create');
|
Route::get('/User/create', [UserController::class, 'create'])->name('User.create');
|
||||||
Route::post('/User', [UserController::class, 'store'])->name('User.store');
|
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-excel', [RekeningController::class, 'exportExcel'])->name('rekening.export-excel');
|
||||||
Route::get('/rekening/export-pdf', [RekeningController::class, 'exportPDF'])->name('rekening.export-pdf');
|
Route::get('/rekening/export-pdf', [RekeningController::class, 'exportPDF'])->name('rekening.export-pdf');
|
||||||
Route::resource('neracasaldo', NeracasaldoController::class);
|
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');
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue