update tgl 19 april2

This commit is contained in:
whywdd 2025-04-19 03:57:38 +07:00
parent 8358bb46b8
commit 3c5f96f420
10 changed files with 911 additions and 183 deletions

View File

@ -2,12 +2,87 @@
namespace App\Http\Controllers;
use App\Models\HomeModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
class HomeController extends Controller
{
public function index()
{
return view('home'); // This will return the home view
// Get current month data
$currentMonth = Carbon::now()->month;
$currentYear = Carbon::now()->year;
// Calculate total saldo
$totalSaldo = HomeModel::selectRaw('SUM(uang_masuk - uang_keluar) as saldo')->first()->saldo ?? 0;
// Calculate total uang masuk dan uang keluar
$totalUangMasuk = HomeModel::sum('uang_masuk');
$totalUangKeluar = HomeModel::sum('uang_keluar');
// Calculate current month's income and expenses
$currentMonthUangMasuk = HomeModel::whereMonth('Tanggal', $currentMonth)
->whereYear('Tanggal', $currentYear)
->sum('uang_masuk');
$currentMonthUangKeluar = HomeModel::whereMonth('Tanggal', $currentMonth)
->whereYear('Tanggal', $currentYear)
->sum('uang_keluar');
// Calculate profit/loss
$labaRugiTotal = $totalUangMasuk - $totalUangKeluar;
$labaRugiBulanIni = $currentMonthUangMasuk - $currentMonthUangKeluar;
// Get monthly totals for chart
$monthlyTotals = HomeModel::selectRaw('
DATE_FORMAT(Tanggal, "%Y-%m") as periode,
SUM(uang_masuk) as total_debit,
SUM(uang_keluar) as total_kredit,
SUM(uang_masuk - uang_keluar) as laba_rugi
')
->groupBy('periode')
->orderBy('periode')
->get();
// Get category breakdown
$categoryTotals = HomeModel::selectRaw('
kategori,
SUM(uang_masuk) as total_debit,
SUM(uang_keluar) as total_kredit,
SUM(uang_masuk - uang_keluar) as laba_rugi
')
->groupBy('kategori')
->orderBy('total_debit', 'desc')
->get();
// Get recent transactions
$recentTransactions = HomeModel::orderBy('Tanggal', 'desc')
->limit(10)
->get();
// Calculate month-over-month growth
$lastMonthTotal = HomeModel::whereMonth('Tanggal', Carbon::now()->subMonth()->month)
->whereYear('Tanggal', Carbon::now()->subMonth()->year)
->sum('uang_masuk');
$growthPercentage = $lastMonthTotal != 0
? (($currentMonthUangMasuk - $lastMonthTotal) / $lastMonthTotal) * 100
: 0;
return view('home', compact(
'totalSaldo',
'totalUangMasuk',
'totalUangKeluar',
'currentMonthUangMasuk',
'currentMonthUangKeluar',
'labaRugiTotal',
'labaRugiBulanIni',
'monthlyTotals',
'categoryTotals',
'recentTransactions',
'growthPercentage'
));
}
}

View File

@ -0,0 +1,139 @@
<?php
namespace App\Http\Controllers;
use App\Models\LabarugiModel;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class LabarugiController extends Controller
{
public function index(Request $request)
{
// Default periode adalah bulan ini
$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();
// Helper function untuk menjumlahkan uang masuk
$sumUangMasuk = "COALESCE(uang_masuk, 0) + COALESCE(uang_masuk2, 0) + COALESCE(uang_masuk3, 0) + COALESCE(uang_masuk4, 0) + COALESCE(uang_masuk5, 0)";
// Helper function untuk menjumlahkan uang keluar
$sumUangKeluar = "COALESCE(uang_keluar, 0) + COALESCE(uang_keluar2, 0) + COALESCE(uang_keluar3, 0) + COALESCE(uang_keluar4, 0) + COALESCE(uang_keluar5, 0)";
// Mengambil data pendapatan operasional (41)
$pendapatanPenjualan = $model->where('kode', '241001')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
$pendapatanJasa = $model->where('kode', '241002')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
// Mengambil data pendapatan non-operasional (42)
$pendapatanBunga = $model->where('kode', '242001')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
$pendapatanSewa = $model->where('kode', '242002')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
$pendapatanKomisi = $model->where('kode', '242003')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
$pendapatanLain = $model->where('kode', '242004')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangMasuk) as total"))
->value('total') ?? 0;
// Mengambil data beban operasional (51)
$bebanGaji = $model->where('kode', '251001')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
$bebanSewa = $model->where('kode', '251002')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
$bebanUtilitas = $model->where('kode', '251003')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
$bebanPenyusutan = $model->where('kode', '251004')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
$bebanSupplies = $model->where('kode', '251005')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
$bebanIklan = $model->where('kode', '251006')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
// Mengambil data beban non-operasional (52)
$bebanBunga = $model->where('kode', '252001')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
$bebanLain = $model->where('kode', '252002')
->whereBetween('Tanggal', [$startDate, $endDate])
->select(DB::raw("SUM($sumUangKeluar) as total"))
->value('total') ?? 0;
// Menghitung total pendapatan
$totalPendapatanOperasional = $pendapatanPenjualan + $pendapatanJasa;
$totalPendapatanNonOperasional = $pendapatanBunga + $pendapatanSewa + $pendapatanKomisi + $pendapatanLain;
$totalPendapatan = $totalPendapatanOperasional + $totalPendapatanNonOperasional;
// Menghitung total beban
$totalBebanOperasional = $bebanGaji + $bebanSewa + $bebanUtilitas + $bebanPenyusutan + $bebanSupplies + $bebanIklan;
$totalBebanNonOperasional = $bebanBunga + $bebanLain;
$totalBeban = $totalBebanOperasional + $totalBebanNonOperasional;
// Menghitung laba rugi
$totalLabaRugi = $totalPendapatan - $totalBeban;
return view('Labarugi', compact(
'startDate',
'endDate',
'pendapatanPenjualan',
'pendapatanJasa',
'pendapatanBunga',
'pendapatanSewa',
'pendapatanKomisi',
'pendapatanLain',
'bebanGaji',
'bebanSewa',
'bebanUtilitas',
'bebanPenyusutan',
'bebanSupplies',
'bebanIklan',
'bebanBunga',
'bebanLain',
'totalPendapatanOperasional',
'totalPendapatanNonOperasional',
'totalBebanOperasional',
'totalBebanNonOperasional',
'totalPendapatan',
'totalBeban',
'totalLabaRugi'
));
}
}

17
app/Models/HomeModel.php Normal file
View File

@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class HomeModel extends Model
{
protected $table = 'laporan_transaksis';
protected $guarded = [];
protected $casts = [
'Tanggal' => 'date',
'uang_masuk' => 'decimal:2',
'uang_keluar' => 'decimal:2'
];
}

View File

@ -0,0 +1,89 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
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'
]
];
// 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

@ -141,11 +141,31 @@
<span>Data Karyawan</span>
</a>
</li>
<li class="mb-4">
<a href="{{ route('Laporan.index') }}" class="nav-link flex items-center p-2 rounded-lg hover:bg-blue-700 transition-colors">
<i class="fas fa-file-alt mr-3"></i>
<span>Laporan</span>
</a>
<li class="mb-4 relative group">
<button class="nav-link w-full flex items-center justify-between p-2 rounded-lg hover:bg-blue-700 transition-colors">
<div class="flex items-center">
<i class="fas fa-file-alt mr-3"></i>
<span>Laporan</span>
</div>
<i class="fas fa-chevron-down"></i>
</button>
<ul class="dropdown-menu hidden absolute left-0 mt-2 w-full bg-blue-600 rounded-lg shadow-lg">
<li>
<a href="{{ route('Laporan.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Jurnal Umum
</a>
</li>
<li>
<a href="{{ route('rekening.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Rekening
</a>
</li>
<li>
<a href="{{ route('neracasaldo.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Neraca Saldo
</a>
</li>
</ul>
</li>
<li class="mb-4">
<a href="{{ route('User.index') }}" class="nav-link flex items-center p-2 rounded-lg hover:bg-blue-700 transition-colors">
@ -167,11 +187,31 @@
<span>Uang Keluar</span>
</a>
</li> -->
<li class="mb-4">
<a href="{{ route('Laporan.index') }}" class="nav-link flex items-center p-2 rounded-lg hover:bg-blue-700 transition-colors">
<i class="fas fa-file-alt mr-3"></i>
<span>Laporan</span>
</a>
<li class="mb-4 relative group">
<button class="nav-link w-full flex items-center justify-between p-2 rounded-lg hover:bg-blue-700 transition-colors">
<div class="flex items-center">
<i class="fas fa-file-alt mr-3"></i>
<span>Laporan</span>
</div>
<i class="fas fa-chevron-down"></i>
</button>
<ul class="dropdown-menu hidden absolute left-0 mt-2 w-full bg-blue-600 rounded-lg shadow-lg">
<li>
<a href="{{ route('Laporan.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Jurnal Umum
</a>
</li>
<li>
<a href="{{ route('rekening.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Rekening
</a>
</li>
<li>
<a href="{{ route('neracasaldo.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Neraca Saldo
</a>
</li>
</ul>
</li>
<li class="mb-4">
<a href="{{ route('User.index') }}" class="nav-link flex items-center p-2 rounded-lg hover:bg-blue-700 transition-colors">
@ -272,6 +312,24 @@
}
});
// Dropdown menu functionality
document.querySelectorAll('.group').forEach(dropdown => {
const button = dropdown.querySelector('button');
const menu = dropdown.querySelector('.dropdown-menu');
button.addEventListener('click', (e) => {
e.preventDefault();
menu.classList.toggle('hidden');
});
// Close dropdown when clicking outside
document.addEventListener('click', (e) => {
if (!dropdown.contains(e.target)) {
menu.classList.add('hidden');
}
});
});
// Close mobile menu when clicking outside
document.addEventListener('click', (e) => {
if (!sidebar.contains(e.target) && !mobileMenuButton.contains(e.target)) {

View File

@ -1,197 +1,334 @@
@extends('Core.Sidebar')
@section('content')
<style>
.chart-container {
position: relative;
height: 300px;
width: 100%;
}
</style>
<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">
<!-- Menambahkan elemen select di atas tampilan dengan desain yang lebih menarik -->
<!-- Filter Section -->
<div class="flex justify-between items-center mb-6">
<h2 class="text-xl font-bold text-indigo-700 dark:text-white">Dashboard</h2>
<select 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">Daily</option>
<option value="weekly">Weekly</option>
<option value="monthly">Monthly</option>
<option value="yearly">Yearly</option>
<option value="custom-date">Custom Date</option>
<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>
</div>
<!-- Card dengan desain yang lebih modern dan berwarna -->
<div class="flex justify-between pb-4 mb-4 border-b border-indigo-100 dark:border-gray-700 bg-white rounded-xl p-4 shadow-sm">
<div class="flex items-center">
<div class="w-12 h-12 rounded-lg bg-indigo-100 dark:bg-indigo-700 flex items-center justify-center me-3">
<svg class="w-6 h-6 text-indigo-600 dark:text-indigo-300" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 19">
<path d="M14.5 0A3.987 3.987 0 0 0 11 2.1a4.977 4.977 0 0 1 3.9 5.858A3.989 3.989 0 0 0 14.5 0ZM9 13h2a4 4 0 0 1 4 4v2H5v-2a4 4 0 0 1 4-4Z"/>
<path d="M5 19h10v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2ZM5 7a5.008 5.008 0 0 1 4-4.9 3.988 3.988 0 1 0-3.9 5.859A4.974 4.974 0 0 1 5 7Zm5 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm5-1h-.424a5.016 5.016 0 0 1-1.942 2.232A6.007 6.007 0 0 1 17 17h2a1 1 0 0 0 1-1v-2a5.006 5.006 0 0 0-5-5ZM5.424 9H5a5.006 5.006 0 0 0-5 5v2a1 1 0 0 0 1 1h2a6.007 6.007 0 0 1 4.366-5.768A5.016 5.016 0 0 1 5.424 9Z"/>
</svg>
</div>
<div>
<h5 class="leading-none text-2xl font-bold text-indigo-800 dark:text-white pb-1">3.4k</h5>
<p class="text-sm font-medium text-indigo-500 dark:text-indigo-300">Leads generated per week</p>
<!-- 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="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">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
</svg>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">Total Saldo</p>
<h3 class="text-2xl font-bold text-gray-800">Rp {{ number_format($totalSaldo, 0, ',', '.') }}</h3>
<p class="text-sm {{ $growthPercentage >= 0 ? 'text-green-500' : 'text-red-500' }}">
{{ $growthPercentage >= 0 ? '↑' : '↓' }} {{ abs(round($growthPercentage, 1)) }}% dari bulan lalu
</p>
</div>
</div>
</div>
<div>
<span class="bg-emerald-100 text-emerald-600 text-xs font-bold inline-flex items-center px-3 py-1.5 rounded-lg dark:bg-emerald-900 dark:text-emerald-300">
<svg class="w-3 h-3 me-1.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 10 14">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13V1m0 0L1 5m4-4 4 4"/>
</svg>
42.5%
</span>
<!-- Total Debit 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">
<svg class="w-6 h-6 text-green-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6"></path>
</svg>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">Total Debit</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>
</div>
</div>
</div>
<!-- Total Kredit 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">
<svg class="w-6 h-6 text-red-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 12H4"></path>
</svg>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">Total Kredit</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>
</div>
</div>
</div>
</div>
<!-- Grid dengan cards metrics yang lebih menarik -->
<div class="grid grid-cols-2 gap-4 mb-6">
<div class="bg-gradient-to-r from-purple-50 to-indigo-50 p-4 rounded-xl shadow-sm">
<dl class="flex items-center">
<dt class="text-purple-500 dark:text-purple-300 text-sm font-medium me-1">Money spent:</dt>
<dd class="text-purple-700 text-sm dark:text-white font-bold">$3,232</dd>
</dl>
<!-- Profit/Loss Section -->
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 mb-6">
<!-- Total Profit/Loss 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>
<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">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="{{ $labaRugiTotal >= 0 ? 'M5 10l7-7m0 0l7 7m-7-7v18' : 'M19 14l-7 7m0 0l-7-7m7 7V3' }}"></path>
</svg>
</div>
<div>
<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>
</div>
</div>
</div>
<div class="bg-gradient-to-r from-blue-50 to-cyan-50 p-4 rounded-xl shadow-sm">
<dl class="flex items-center justify-end">
<dt class="text-blue-500 dark:text-blue-300 text-sm font-medium me-1">Conversion rate:</dt>
<dd class="text-blue-700 text-sm dark:text-white font-bold">1.2%</dd>
</dl>
<!-- Current Month Balance 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>
<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">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="{{ $labaRugiBulanIni >= 0 ? 'M5 10l7-7m0 0l7 7m-7-7v18' : 'M19 14l-7 7m0 0l-7-7m7 7V3' }}"></path>
</svg>
</div>
<div>
<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>
</div>
</div>
</div>
</div>
<div class="flex mt-6 flex-col md:flex-row gap-4">
<!-- Chart dengan background yang lebih menarik -->
<div class="flex-1 bg-white p-4 rounded-xl shadow-sm">
<h4 class="text-lg font-bold text-gray-700 mb-2">Sales Analytics</h4>
<canvas id="vertical-bar-chart-widget" height="200" class="mt-4"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const ctx = document.getElementById('vertical-bar-chart-widget').getContext('2d');
const myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Sales',
data: [12, 19, 14, 24, 16, 28],
backgroundColor: [
'rgba(79, 70, 229, 0.7)',
'rgba(59, 130, 246, 0.7)',
'rgba(16, 185, 129, 0.7)',
'rgba(236, 72, 153, 0.7)',
'rgba(245, 158, 11, 0.7)',
'rgba(139, 92, 246, 0.7)'
],
borderColor: [
'rgba(79, 70, 229, 1)',
'rgba(59, 130, 246, 1)',
'rgba(16, 185, 129, 1)',
'rgba(236, 72, 153, 1)',
'rgba(245, 158, 11, 1)',
'rgba(139, 92, 246, 1)'
],
borderWidth: 1,
borderRadius: 6
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
}
},
scales: {
y: {
beginAtZero: true,
grid: {
drawBorder: false,
color: 'rgba(226, 232, 240, 0.7)'
}
},
x: {
grid: {
display: false
}
}
}
}
});
});
</script>
<!-- Charts Section -->
<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>
<div class="chart-container">
<canvas id="financial-trend-chart"></canvas>
</div>
</div>
<!-- Card laporan penjualan dengan design yang lebih menarik -->
<div class="md:w-1/3 bg-gradient-to-br from-blue-600 to-indigo-700 rounded-xl p-6 flex flex-col justify-center text-white shadow-lg">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather feather-shopping-bag w-12 h-12 text-white/80 mb-4">
<path d="M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z"></path>
<line x1="3" y1="6" x2="21" y2="6"></line>
<path d="M16 10a4 4 0 0 1-8 0"></path>
</svg>
<div class="relative text-4xl font-bold mb-2">
<span class="absolute text-2xl font-medium top-0 left-0 -ml-1">$</span> 54.143
<!-- Category Chart -->
<div class="bg-white p-6 rounded-xl shadow-sm">
<h4 class="text-lg font-semibold text-gray-700 mb-4">Distribusi per Kategori</h4>
<div class="chart-container">
<canvas id="category-distribution-chart"></canvas>
</div>
<div class="bg-white/20 text-white px-3 py-1 rounded-full inline-flex items-center text-sm font-bold mt-2 w-fit">
47%
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-up w-4 h-4 ml-1">
<polyline points="18 15 12 9 6 15"></polyline>
</svg>
</div>
<div class="mt-4 text-white/80 text-sm">Sales earnings this month after associated author fees, &amp; before taxes.</div>
<button class="bg-white text-indigo-700 hover:bg-indigo-50 font-bold px-6 py-3 rounded-full mt-6 transition flex items-center justify-between">
Download Reports
<span class="w-8 h-8 flex justify-center items-center bg-indigo-600 text-white rounded-full ml-2">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right w-4 h-4">
<line x1="5" y1="12" x2="19" y2="12"></line>
<polyline points="12 5 19 12 12 19"></polyline>
</svg>
</span>
</button>
</div>
</div>
<!-- Footer element dengan design yang lebih baik -->
<div class="grid grid-cols-1 items-center border-gray-200 border-t dark:border-gray-700 justify-between mt-6 pt-4">
<div class="flex justify-between items-center">
<!-- Button dengan design yang lebih menarik -->
<button
id="dropdownDefaultButton"
data-dropdown-toggle="lastDaysdropdown"
data-dropdown-placement="bottom"
class="text-sm font-medium text-indigo-600 dark:text-indigo-400 hover:text-indigo-800 text-center inline-flex items-center dark:hover:text-white bg-indigo-50 px-4 py-2 rounded-lg hover:bg-indigo-100 transition"
type="button">
Last 7 days
<svg class="w-3 h-3 ms-2" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 10 6">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 4 4 4-4"/>
</svg>
</button>
<!-- Dropdown menu -->
<div id="lastDaysdropdown" class="z-10 hidden bg-white divide-y divide-gray-100 rounded-lg shadow-md w-44 dark:bg-gray-700">
<ul class="py-2 text-sm text-gray-700 dark:text-gray-200" aria-labelledby="dropdownDefaultButton">
<li>
<a href="#" class="block px-4 py-2 hover:bg-indigo-50 dark:hover:bg-indigo-600 dark:hover:text-white">Yesterday</a>
</li>
<li>
<a href="#" class="block px-4 py-2 hover:bg-indigo-50 dark:hover:bg-indigo-600 dark:hover:text-white">Today</a>
</li>
<li>
<a href="#" class="block px-4 py-2 hover:bg-indigo-50 dark:hover:bg-indigo-600 dark:hover:text-white">Last 7 days</a>
</li>
<li>
<a href="#" class="block px-4 py-2 hover:bg-indigo-50 dark:hover:bg-indigo-600 dark:hover:text-white">Last 30 days</a>
</li>
<li>
<a href="#" class="block px-4 py-2 hover:bg-indigo-50 dark:hover:bg-indigo-600 dark:hover:text-white">Last 90 days</a>
</li>
</ul>
</div>
<a
href="#"
class="uppercase text-sm font-bold inline-flex items-center rounded-lg text-indigo-600 hover:text-indigo-700 dark:hover:text-indigo-400 bg-indigo-50 hover:bg-indigo-100 dark:hover:bg-indigo-700 dark:bg-indigo-800 px-4 py-2 transition">
Leads Report
<svg class="w-3 h-3 ms-2 rtl:rotate-180" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 6 10">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 9 4-4-4-4"/>
</svg>
</a>
<!-- Recent Transactions Table -->
<div class="bg-white rounded-xl shadow-sm overflow-hidden">
<div class="p-6 border-b border-gray-100">
<h4 class="text-lg font-semibold text-gray-700">Transaksi Terbaru</h4>
</div>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Tanggal</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">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>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
@foreach($recentTransactions as $transaction)
<tr>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{{ date('d/m/Y', strtotime($transaction->Tanggal)) }}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{{ $transaction->kode }}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{{ $transaction->kategori }}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">
{{ $transaction->keterangan }}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-green-600">
{{ $transaction->uang_masuk > 0 ? 'Rp ' . number_format($transaction->uang_masuk, 0, ',', '.') : '-' }}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-red-600">
{{ $transaction->uang_keluar > 0 ? 'Rp ' . number_format($transaction->uang_keluar, 0, ',', '.') : '-' }}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@push('scripts')
<!-- Chart.js -->
<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, ".");
}
try {
// Financial Trend Chart
const trendCtx = document.getElementById('financial-trend-chart');
console.log('Trend Chart Element:', trendCtx);
if (trendCtx) {
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);
new Chart(trendCtx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'Debit',
data: debitData,
backgroundColor: 'rgba(34, 197, 94, 0.5)',
borderColor: 'rgb(34, 197, 94)',
borderWidth: 1,
order: 2
}, {
label: 'Kredit',
data: kreditData,
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]),
type: 'line',
borderColor: 'rgb(59, 130, 246)',
borderWidth: 2,
fill: false,
order: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
interaction: {
intersect: false,
mode: 'index'
},
scales: {
y: {
beginAtZero: true,
ticks: {
callback: function(value) {
return formatRupiah(value);
}
}
}
},
plugins: {
tooltip: {
callbacks: {
label: function(context) {
return context.dataset.label + ': ' + formatRupiah(context.parsed.y);
}
}
}
}
}
});
}
// Category Distribution Chart
const categoryCtx = document.getElementById('category-distribution-chart');
console.log('Category Chart Element:', categoryCtx);
if (categoryCtx) {
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);
new Chart(categoryCtx, {
type: 'bar',
data: {
labels: categories,
datasets: [{
label: 'Debit',
data: totalDebitPerCategory,
backgroundColor: 'rgba(34, 197, 94, 0.5)',
borderColor: 'rgb(34, 197, 94)',
borderWidth: 1
}, {
label: 'Kredit',
data: totalKreditPerCategory,
backgroundColor: 'rgba(239, 68, 68, 0.5)',
borderColor: 'rgb(239, 68, 68)',
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
indexAxis: 'y',
scales: {
x: {
beginAtZero: true,
ticks: {
callback: function(value) {
return formatRupiah(value);
}
}
}
},
plugins: {
legend: {
position: 'bottom'
},
tooltip: {
callbacks: {
label: function(context) {
return context.dataset.label + ': ' + formatRupiah(context.parsed.x);
}
}
}
}
}
});
}
} catch (error) {
console.error('Error creating charts:', error);
}
});
</script>
@endpush
@endsection

View File

@ -0,0 +1,177 @@
@extends('Core.Sidebar')
@section('content')
<title>Laporan Laba Rugi</title>
<!-- Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<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>
</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>
<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>
</form>
</div> -->
<!-- Tabel Laporan Laba Rugi -->
<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>
</tr>
<!-- Pendapatan Non-Operasional -->
<tr class="bg-gray-100 font-bold">
<td colspan="3" class="border p-2">Pendapatan Non-Operasional</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>
</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>
</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>
</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>
</tr>
</table>
</div>
</div>
</div>
@endsection

View File

@ -18,11 +18,11 @@
<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">Laporan Keuangan</h1>
<p class="text-sm mt-1">Halaman ini menampilkan semua laporan keuangan.</p>
<h1 class="text-2xl font-bold">Jurnal Umum</h1>
<p class="text-sm mt-1">Halaman ini menampilkan jurnal umum.</p>
</div>
<!-- Summary Cards -->
<!-- Summary Cards
<div class="grid grid-cols-1 md:grid-cols-4 gap-4 mb-6">
<div class="bg-white p-4 rounded-lg shadow">
<h3 class="text-gray-500 text-sm">Total Pendapatan</h3>
@ -51,7 +51,7 @@
<p class="text-2xl font-bold text-gray-700">Rp {{ number_format(($saldo < 0) ? $saldo : 0, 0, ',', '.') }}</p>
<p class="text-sm text-gray-400">Data realtime keuangan</p>
</div>
</div>
</div> -->
<!-- Enhanced Filter Section -->
<div class="flex flex-wrap gap-4 px-6 py-4 border-b border-gray-200">

View File

@ -68,4 +68,38 @@
</div>
</div>
</div>
<div class="intro-y col-span-12 flex flex-wrap sm:flex-row sm:flex-nowrap items-center py-5 px-4 bg-white rounded-md shadow-md">
<!-- Filter Rows per Page -->
<div class="flex items-center space-x-2 flex-grow">
<label for="rowsPerPage" class="text-sm font-medium">Rows per page:</label>
<select id="rowsPerPage" class="border rounded-md py-3 px-6 ml-1 text-sm focus:outline-none focus:ring focus:border-blue-300">
<option value="5" selected>5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="all">All</option>
</select>
</div>
<!-- Pagination Controls -->
<div class="flex items-center space-x-4 ml-2">
<button id="prevPage" class="text-sm px-3 py-2 border rounded-md bg-gray-100 hover:bg-gray-200 focus:outline-none">Previous</button>
<span id="pageIndicator" class="text-sm font-medium">Page 1</span>
<button id="nextPage" class="text-sm px-3 py-2 border rounded-md bg-gray-100 hover:bg-gray-200 focus:outline-none">Next</button>
</div>
</div>
<!-- Action Buttons -->
<div class="flex justify-between items-center mt-4 mb-4">
<div class="flex space-x-2">
<a href="{{ route('laporan.export-excel') }}" class="btn bg-green-500 text-white hover:bg-green-600">
<i class="fas fa-file-excel mr-2"></i>Export Excel
</a>
<a href="{{ route('laporan.export-pdf') }}" class="btn bg-red-500 text-white hover:bg-red-600">
<i class="fas fa-file-pdf mr-2"></i>Export PDF
</a>
<button onclick="window.print()" class="btn bg-gray-500 text-white hover:bg-gray-600">
<i class="fas fa-print mr-2"></i>Print
</button>
</div>
</div>
@endsection

View File

@ -16,6 +16,7 @@
use App\Http\Controllers\AuthController;
use App\Http\Controllers\RekeningController;
use App\Http\Controllers\NeracasaldoController;
use App\Http\Controllers\LabarugiController;
/*
|--------------------------------------------------------------------------
| Web Routes
@ -69,4 +70,5 @@
Route::get('/rekening/export-excel', [RekeningController::class, 'exportExcel'])->name('rekening.export-excel');
Route::get('/rekening/export-pdf', [RekeningController::class, 'exportPDF'])->name('rekening.export-pdf');
Route::resource('neracasaldo', NeracasaldoController::class);
Route::get('/laporan-laba-rugi', [LabarugiController::class, 'index'])->name('labarugi.index');
});