update tgl 22 april2

This commit is contained in:
whywdd 2025-04-22 04:23:05 +07:00
parent dbc6d467aa
commit 778db53716
12 changed files with 500 additions and 225 deletions

View File

@ -34,9 +34,12 @@ public function store(Request $request)
'gaji' => $gaji 'gaji' => $gaji
]); ]);
return redirect()->back()->with('success', 'Data karyawan berhasil ditambahkan!'); // Redirect ke halaman gaji dengan pesan sukses
return redirect()->route('gaji.index')
->with('success', 'Data karyawan berhasil ditambahkan!');
} catch (\Exception $e) { } catch (\Exception $e) {
return redirect()->back()->with('error', 'Gagal menambahkan data karyawan: ' . $e->getMessage()); return redirect()->back()
->with('error', 'Gagal menambahkan data karyawan: ' . $e->getMessage());
} }
} }
} }

View File

@ -33,15 +33,37 @@ public function edit($id)
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
try {
$karyawan = GajiModel::findOrFail($id); $karyawan = GajiModel::findOrFail($id);
// Bersihkan format angka dari gaji
$request->merge([
'gaji' => str_replace('.', '', $request->gaji)
]);
$karyawan->update($request->all()); $karyawan->update($request->all());
return redirect()->route('gaji.index')->with('success', 'Data gaji berhasil diperbarui'); return redirect()->route('gaji.index')
->with('success', 'Data gaji berhasil diperbarui!');
} catch (\Exception $e) {
return redirect()->back()
->with('error', 'Gagal memperbarui data gaji: ' . $e->getMessage());
}
} }
public function destroy($id) public function destroy($id)
{ {
try {
$karyawan = GajiModel::findOrFail($id); $karyawan = GajiModel::findOrFail($id);
$karyawan->delete(); $karyawan->delete();
return response()->json(['success' => true]); return response()->json([
'success' => true,
'message' => 'Data gaji berhasil dihapus!'
]);
} catch (\Exception $e) {
return response()->json([
'success' => false,
'message' => 'Gagal menghapus data gaji: ' . $e->getMessage()
]);
}
} }
} }

View File

@ -39,40 +39,42 @@ private function getKodeAkun($kategori)
return null; return null;
} }
private function prosesKategori($kategori, $uang_masuk, $uang_keluar, &$pendapatan, &$beban) private function getAccountType($kodeAkun) {
{ $kode = (string)$kodeAkun;
$kodeAkun = $this->getKodeAkun($kategori); if (str_starts_with($kode, '111') || str_starts_with($kode, '112')) {
if ($kodeAkun) { return 'AKTIVA';
if (str_starts_with($kodeAkun, '24')) { } else if (str_starts_with($kode, '121') || str_starts_with($kode, '122') || str_starts_with($kode, '131')) {
// Untuk pendapatan return 'PASIVA';
$nominal = $uang_masuk; } else if (str_starts_with($kode, '241') || str_starts_with($kode, '242')) {
$data = [ return 'PENDAPATAN';
'kategori' => $kategori, } else if (str_starts_with($kode, '251') || str_starts_with($kode, '252')) {
'kode_akun' => $kodeAkun, return 'BEBAN';
'nominal' => $nominal }
]; return 'UNKNOWN';
}
if (isset($pendapatan[$kategori])) { private function calculateBalance($previousBalance, $debit, $kredit, $accountType) {
$pendapatan[$kategori]['nominal'] += $nominal; $balance = $previousBalance;
} 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])) { switch($accountType) {
$beban[$kategori]['nominal'] += $nominal; case 'AKTIVA':
} else { // Aktiva: bertambah di debit, berkurang di kredit
$beban[$kategori] = $data; $balance = $balance + $debit - $kredit;
} break;
} case 'PASIVA':
case 'PENDAPATAN':
// Pasiva & Pendapatan: bertambah di kredit, berkurang di debit
$balance = $balance - $debit + $kredit;
break;
case 'BEBAN':
// Beban: bertambah di debit, berkurang di kredit
$balance = $balance + $debit - $kredit;
break;
default:
$balance = $balance + $debit - $kredit;
} }
return $balance;
} }
public function index(Request $request) public function index(Request $request)
@ -81,145 +83,173 @@ public function index(Request $request)
$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'));
// Inisialisasi array untuk menyimpan data
$pendapatan = [];
$beban = [];
try { try {
// Ambil semua transaksi dalam periode // Ambil semua transaksi dalam periode
$transaksis = DB::table('laporan_transaksis') $transaksis = DB::table('laporan_transaksis')
->whereBetween('Tanggal', [$startDate, $endDate]) ->whereBetween('Tanggal', [$startDate, $endDate])
->get(); ->get();
// Reset total // Array untuk menyimpan total per kategori
$totalUangMasuk = 0; $totalsPerAkun = [];
$totalUangKeluar = 0; $totalPendapatan = 0;
$totalBeban = 0;
// Fungsi untuk menambahkan atau memperbarui total per akun
$processAkun = function($kode, $kategori, $debit, $kredit) use (&$totalsPerAkun) {
if (!empty($kode) && !empty($kategori)) {
if (!isset($totalsPerAkun[$kategori])) {
$totalsPerAkun[$kategori] = [
'kode' => $kode,
'kategori' => $kategori,
'debit' => 0,
'kredit' => 0
];
}
$totalsPerAkun[$kategori]['debit'] += floatval($debit ?? 0);
$totalsPerAkun[$kategori]['kredit'] += floatval($kredit ?? 0);
}
};
foreach ($transaksis as $transaksi) { foreach ($transaksis as $transaksi) {
// Proses kategori1 // Proses untuk semua kategori
if (!empty($transaksi->kategori)) { for ($i = 1; $i <= 5; $i++) {
$this->prosesKategori( $kategoriField = $i === 1 ? 'kategori' : "kategori{$i}";
$transaksi->kategori, $uangMasukField = $i === 1 ? 'uang_masuk' : "uang_masuk{$i}";
$transaksi->uang_masuk ?? 0, $uangKeluarField = $i === 1 ? 'uang_keluar' : "uang_keluar{$i}";
$transaksi->uang_keluar ?? 0,
$pendapatan, if (!empty($transaksi->$kategoriField)) {
$beban $kodeAkun = $this->getKodeAkun($transaksi->$kategoriField);
if ($kodeAkun) {
$processAkun(
$kodeAkun,
$transaksi->$kategoriField,
$transaksi->$uangMasukField,
$transaksi->$uangKeluarField
); );
// Tambahkan ke total // Hitung total berdasarkan jenis akun
$totalUangMasuk += $transaksi->uang_masuk ?? 0; $accountType = $this->getAccountType($kodeAkun);
$totalUangKeluar += $transaksi->uang_keluar ?? 0; if ($accountType === 'PENDAPATAN') {
} $totalPendapatan = $this->calculateBalance(
$totalPendapatan,
// Proses kategori2-5 floatval($transaksi->$uangMasukField ?? 0),
for ($i = 2; $i <= 5; $i++) { floatval($transaksi->$uangKeluarField ?? 0),
$kategori = $transaksi->{"kategori$i"}; 'PENDAPATAN'
if (!empty($kategori)) { );
$this->prosesKategori( } elseif ($accountType === 'BEBAN') {
$kategori, $totalBeban = $this->calculateBalance(
$transaksi->{"uang_masuk$i"} ?? 0, $totalBeban,
$transaksi->{"uang_keluar$i"} ?? 0, floatval($transaksi->$uangMasukField ?? 0),
$pendapatan, floatval($transaksi->$uangKeluarField ?? 0),
$beban '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; // Hitung laba rugi
$currentMonthTotal = $totalUangMasuk - $totalUangKeluar; $labaRugiTotal = $totalPendapatan - $totalBeban;
$labaRugiBulanIni = $labaRugiTotal;
// Calculate growth percentage // Kelompokkan data untuk tampilan
$growthPercentage = $lastMonthTotal != 0 ? $pendapatan = [];
(($currentMonthTotal - $lastMonthTotal) / abs($lastMonthTotal)) * 100 : $beban = [];
100; foreach ($totalsPerAkun as $kategori => $data) {
$accountType = $this->getAccountType($data['kode']);
// Calculate total saldo dan laba rugi sesuai format di Labarugi blade if ($accountType === 'PENDAPATAN') {
$totalSaldo = -($totalUangMasuk) - $totalUangKeluar; $pendapatan[$kategori] = [
$labaRugiTotal = -($totalUangMasuk) - $totalUangKeluar; 'kategori' => $kategori,
$labaRugiBulanIni = -($currentMonthUangMasuk) - $currentMonthUangKeluar; 'kode_akun' => $data['kode'],
'nominal' => $this->calculateBalance(0, $data['debit'], $data['kredit'], 'PENDAPATAN')
// Get category breakdown
$categoryTotals = collect($pendapatan)->map(function($item) {
return [
'kategori' => $item['kategori'],
'total_debit' => $item['nominal'],
'total_kredit' => 0
]; ];
})->merge( } elseif ($accountType === 'BEBAN') {
collect($beban)->map(function($item) { $beban[$kategori] = [
return [ 'kategori' => $kategori,
'kategori' => $item['kategori'], 'kode_akun' => $data['kode'],
'total_debit' => 0, 'nominal' => $this->calculateBalance(0, $data['debit'], $data['kredit'], 'BEBAN')
'total_kredit' => $item['nominal']
]; ];
}) }
)->values(); }
// Get monthly totals for chart // Get monthly totals for chart
$monthlyTotals = DB::table('laporan_transaksis') $monthlyTotals = DB::table('laporan_transaksis')
->select( ->select(
DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'), DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'),
DB::raw('SUM(uang_masuk) + SUM(COALESCE(uang_masuk2, 0)) + SUM(COALESCE(uang_masuk3, 0)) + SUM(COALESCE(uang_masuk4, 0)) + SUM(COALESCE(uang_masuk5, 0)) as total_debit'), DB::raw('SUM(CASE WHEN LEFT(kategori, 3) IN ("241", "242") THEN uang_masuk ELSE 0 END) as total_debit'),
DB::raw('SUM(uang_keluar) + SUM(COALESCE(uang_keluar2, 0)) + SUM(COALESCE(uang_keluar3, 0)) + SUM(COALESCE(uang_keluar4, 0)) + SUM(COALESCE(uang_keluar5, 0)) as total_kredit') DB::raw('SUM(CASE WHEN LEFT(kategori, 3) IN ("251", "252") THEN uang_keluar ELSE 0 END) as total_kredit')
) )
->groupBy('periode') ->groupBy('periode')
->orderBy('periode') ->orderBy('periode')
->get(); ->get();
// Get category totals for distribution chart
$categoryTotals = DB::table('laporan_transaksis')
->select(
'kategori',
DB::raw('SUM(CASE WHEN LEFT(kategori, 3) IN ("241", "242") THEN uang_masuk ELSE 0 END) as total_debit'),
DB::raw('SUM(CASE WHEN LEFT(kategori, 3) IN ("251", "252") THEN uang_keluar ELSE 0 END) as total_kredit')
)
->whereBetween('Tanggal', [$startDate, $endDate])
->whereNotNull('kategori')
->groupBy('kategori')
->get();
// Get recent transactions // Get recent transactions
$recentTransactions = DB::table('laporan_transaksis') $recentTransactions = DB::table('laporan_transaksis')
->orderBy('Tanggal', 'desc') ->orderBy('Tanggal', 'desc')
->limit(10) ->limit(10)
->get(); ->get();
// Debug log untuk memeriksa nilai // Calculate growth percentage
Log::info("Total Uang Masuk: " . $totalUangMasuk); $lastMonthStart = Carbon::parse($startDate)->subMonth()->startOfMonth();
Log::info("Total Uang Keluar: " . $totalUangKeluar); $lastMonthEnd = Carbon::parse($startDate)->subMonth()->endOfMonth();
Log::info("Total Saldo: " . $totalSaldo);
Log::info("Laba Rugi Total: " . $labaRugiTotal); $lastMonthData = DB::table('laporan_transaksis')
Log::info("Laba Rugi Bulan Ini: " . $labaRugiBulanIni); ->whereBetween('Tanggal', [$lastMonthStart, $lastMonthEnd])
->get();
$lastMonthPendapatan = 0;
$lastMonthBeban = 0;
foreach ($lastMonthData as $transaksi) {
$kodeAkun = $this->getKodeAkun($transaksi->kategori);
if ($kodeAkun) {
$accountType = $this->getAccountType($kodeAkun);
if ($accountType === 'PENDAPATAN') {
$lastMonthPendapatan = $this->calculateBalance(
$lastMonthPendapatan,
floatval($transaksi->uang_masuk ?? 0),
floatval($transaksi->uang_keluar ?? 0),
'PENDAPATAN'
);
} elseif ($accountType === 'BEBAN') {
$lastMonthBeban = $this->calculateBalance(
$lastMonthBeban,
floatval($transaksi->uang_masuk ?? 0),
floatval($transaksi->uang_keluar ?? 0),
'BEBAN'
);
}
}
}
$lastMonthLabaRugi = $lastMonthPendapatan - $lastMonthBeban;
$currentMonthLabaRugi = $labaRugiBulanIni;
$growthPercentage = $lastMonthLabaRugi != 0 ?
(($currentMonthLabaRugi - $lastMonthLabaRugi) / abs($lastMonthLabaRugi)) * 100 :
100;
return view('home', compact( return view('home', compact(
'startDate', 'startDate',
'endDate', 'endDate',
'totalUangMasuk', 'totalPendapatan',
'totalUangKeluar', 'totalBeban',
'currentMonthUangMasuk',
'currentMonthUangKeluar',
'totalSaldo',
'growthPercentage',
'labaRugiTotal', 'labaRugiTotal',
'labaRugiBulanIni', 'labaRugiBulanIni',
'growthPercentage',
'monthlyTotals', 'monthlyTotals',
'categoryTotals', 'categoryTotals',
'recentTransactions', 'recentTransactions',

View File

@ -157,7 +157,7 @@
</li> </li>
<li> <li>
<a href="{{ route('rekening.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700"> <a href="{{ route('rekening.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Rekening Buku Besar
</a> </a>
</li> </li>
<li> <li>
@ -165,6 +165,11 @@
Neraca Saldo Neraca Saldo
</a> </a>
</li> </li>
<li>
<a href="{{ route('labarugi.index') }}" class="block px-4 py-2 text-white hover:bg-blue-700">
Laporan Laba Rugi
</a>
</li>
</ul> </ul>
</li> </li>
<li class="mb-4"> <li class="mb-4">

View File

@ -8,6 +8,11 @@
<p class="text-sm mt-1">Tabel keterangan gaji karyawan</p> <p class="text-sm mt-1">Tabel keterangan gaji karyawan</p>
</div> </div>
<!-- SweetAlert2 CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">
<!-- SweetAlert2 JS -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<div class="bg-white rounded-lg shadow-lg p-6"> <div class="bg-white rounded-lg shadow-lg p-6">
<!-- Tombol Tambah dan Filter dalam satu baris --> <!-- Tombol Tambah dan Filter dalam satu baris -->
<div class="flex justify-between items-center mb-4"> <div class="flex justify-between items-center mb-4">
@ -100,6 +105,25 @@ class="text-red-600 hover:text-red-800"
</div> </div>
<script> <script>
// Notifikasi SweetAlert2
@if(session('success'))
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: '{{ session('success') }}',
confirmButtonText: 'OK'
});
@endif
@if(session('error'))
Swal.fire({
icon: 'error',
title: 'Gagal!',
text: '{{ session('error') }}',
confirmButtonText: 'OK'
});
@endif
function filterTable() { function filterTable() {
const input = document.getElementById('filterKeterangan'); const input = document.getElementById('filterKeterangan');
const filter = input.value.toLowerCase(); const filter = input.value.toLowerCase();
@ -116,7 +140,17 @@ function filterTable() {
} }
function deleteGaji(id) { function deleteGaji(id) {
if (confirm('Apakah Anda yakin ingin menghapus data ini?')) { Swal.fire({
title: 'Apakah Anda yakin?',
text: "Data yang dihapus tidak dapat dikembalikan!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, hapus!',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
fetch(`/gaji/${id}`, { fetch(`/gaji/${id}`, {
method: 'DELETE', method: 'DELETE',
headers: { headers: {
@ -127,14 +161,34 @@ function deleteGaji(id) {
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
if (data.success) { if (data.success) {
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: 'Data gaji berhasil dihapus',
confirmButtonText: 'OK'
}).then(() => {
window.location.reload(); window.location.reload();
});
} else {
Swal.fire({
icon: 'error',
title: 'Gagal!',
text: 'Gagal menghapus data gaji',
confirmButtonText: 'OK'
});
} }
}) })
.catch(error => { .catch(error => {
console.error('Error:', error); console.error('Error:', error);
alert('Terjadi kesalahan saat menghapus data'); Swal.fire({
icon: 'error',
title: 'Gagal!',
text: 'Terjadi kesalahan saat menghapus data',
confirmButtonText: 'OK'
});
}); });
} }
});
} }
</script> </script>

View File

@ -2,12 +2,17 @@
@section('content') @section('content')
<div class="p-6 animate-fade-in"> <div class="p-6 animate-fade-in">
<!-- SweetAlert2 CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">
<!-- SweetAlert2 JS -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<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">Edit Gaji Karyawan</h1> <h1 class="text-2xl font-bold">Edit Gaji Karyawan</h1>
</div> </div>
<div class="bg-white rounded-lg shadow-lg p-6"> <div class="bg-white rounded-lg shadow-lg p-6">
<form action="{{ route('gaji.update', $karyawan->id) }}" method="POST"> <form id="editGajiForm" action="{{ route('gaji.update', $karyawan->id) }}" method="POST">
@csrf @csrf
@method('PUT') @method('PUT')
@ -31,8 +36,12 @@ class="border rounded w-full py-2 px-3" required>
<div class="mb-4"> <div class="mb-4">
<label class="block text-gray-700 text-sm font-bold mb-2">Gaji</label> <label class="block text-gray-700 text-sm font-bold mb-2">Gaji</label>
<input type="number" name="gaji" value="{{ $karyawan->gaji }}" <div class="relative">
class="border rounded w-full py-2 px-3" required> <span class="absolute left-3 top-2 text-gray-600">Rp</span>
<input type="text" name="gaji" value="{{ number_format($karyawan->gaji, 0, ',', '.') }}"
class="border rounded w-full py-2 pl-10 pr-3" required
oninput="formatNumber(this)">
</div>
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
@ -47,4 +56,61 @@ class="bg-gray-500 text-white px-4 py-2 rounded mr-2">
</form> </form>
</div> </div>
</div> </div>
<script>
// Notifikasi SweetAlert2
@if(session('success'))
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: '{{ session('success') }}',
confirmButtonText: 'OK'
});
@endif
@if(session('error'))
Swal.fire({
icon: 'error',
title: 'Gagal!',
text: '{{ session('error') }}',
confirmButtonText: 'OK'
});
@endif
function formatNumber(input) {
// Hapus semua karakter non-digit
let value = input.value.replace(/\D/g, '');
// Format angka dengan pemisah ribuan
if (value !== '') {
value = new Intl.NumberFormat('id-ID').format(value);
}
input.value = value;
}
// Form submission handling
document.getElementById('editGajiForm').addEventListener('submit', function(e) {
e.preventDefault();
// Validasi form di sini jika diperlukan
const nama = document.querySelector('input[name="nama"]').value;
const usia = document.querySelector('input[name="usia"]').value;
const jabatan = document.querySelector('input[name="jabatan"]').value;
const gaji = document.querySelector('input[name="gaji"]').value;
if (!nama || !usia || !jabatan || !gaji) {
Swal.fire({
icon: 'error',
title: 'Error!',
text: 'Semua field harus diisi!',
confirmButtonText: 'OK'
});
return;
}
// Submit form jika validasi berhasil
this.submit();
});
</script>
@endsection @endsection

View File

@ -29,25 +29,7 @@
</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-2 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> -->
<!-- Total Pendapatan 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">
@ -58,7 +40,13 @@
</div> </div>
<div> <div>
<p class="text-sm text-gray-500 mb-1">Total Pendapatan</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">
@if($totalPendapatan < 0)
-Rp {{ number_format(abs($totalPendapatan), 0, ',', '.') }}
@else
Rp {{ number_format($totalPendapatan, 0, ',', '.') }}
@endif
</h3>
<p class="text-sm text-gray-500">Periode: {{ date('d/m/Y', strtotime($startDate)) }} - {{ date('d/m/Y', strtotime($endDate)) }}</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>
@ -74,7 +62,13 @@
</div> </div>
<div> <div>
<p class="text-sm text-gray-500 mb-1">Total Beban</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">
@if($totalBeban < 0)
-Rp {{ number_format(abs($totalBeban), 0, ',', '.') }}
@else
Rp {{ number_format($totalBeban, 0, ',', '.') }}
@endif
</h3>
<p class="text-sm text-gray-500">Periode: {{ date('d/m/Y', strtotime($startDate)) }} - {{ date('d/m/Y', strtotime($endDate)) }}</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>
@ -92,13 +86,25 @@
<span class="text-sm text-gray-600">{{ ucwords($item['kategori']) }}</span> <span class="text-sm text-gray-600">{{ ucwords($item['kategori']) }}</span>
<span class="text-xs text-gray-400 ml-2">({{ $item['kode_akun'] }})</span> <span class="text-xs text-gray-400 ml-2">({{ $item['kode_akun'] }})</span>
</div> </div>
<span class="text-sm font-medium text-green-600">Rp {{ number_format(abs($item['nominal']), 0, ',', '.') }}</span> <span class="text-sm font-medium {{ $item['nominal'] < 0 ? 'text-red-600' : 'text-green-600' }}">
@if($item['nominal'] < 0)
-Rp {{ number_format(abs($item['nominal']), 0, ',', '.') }}
@else
Rp {{ number_format($item['nominal'], 0, ',', '.') }}
@endif
</span>
</div> </div>
@endforeach @endforeach
<div class="mt-4 pt-4 border-t"> <div class="mt-4 pt-4 border-t">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="font-semibold">Total Pendapatan</span> <span class="font-semibold">Total Pendapatan</span>
<span class="font-semibold text-green-600">Rp {{ number_format($totalUangMasuk, 0, ',', '.') }}</span> <span class="font-semibold {{ $totalPendapatan < 0 ? 'text-red-600' : 'text-green-600' }}">
@if($totalPendapatan < 0)
-Rp {{ number_format(abs($totalPendapatan), 0, ',', '.') }}
@else
Rp {{ number_format($totalPendapatan, 0, ',', '.') }}
@endif
</span>
</div> </div>
</div> </div>
</div> </div>
@ -112,13 +118,25 @@
<span class="text-sm text-gray-600">{{ ucwords($item['kategori']) }}</span> <span class="text-sm text-gray-600">{{ ucwords($item['kategori']) }}</span>
<span class="text-xs text-gray-400 ml-2">({{ $item['kode_akun'] }})</span> <span class="text-xs text-gray-400 ml-2">({{ $item['kode_akun'] }})</span>
</div> </div>
<span class="text-sm font-medium text-red-600">Rp {{ number_format(abs($item['nominal']), 0, ',', '.') }}</span> <span class="text-sm font-medium {{ $item['nominal'] < 0 ? 'text-green-600' : 'text-red-600' }}">
@if($item['nominal'] < 0)
-Rp {{ number_format(abs($item['nominal']), 0, ',', '.') }}
@else
Rp {{ number_format($item['nominal'], 0, ',', '.') }}
@endif
</span>
</div> </div>
@endforeach @endforeach
<div class="mt-4 pt-4 border-t"> <div class="mt-4 pt-4 border-t">
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<span class="font-semibold">Total Beban</span> <span class="font-semibold">Total Beban</span>
<span class="font-semibold text-red-600">Rp {{ number_format($totalUangKeluar, 0, ',', '.') }}</span> <span class="font-semibold {{ $totalBeban < 0 ? 'text-green-600' : 'text-red-600' }}">
@if($totalBeban < 0)
-Rp {{ number_format(abs($totalBeban), 0, ',', '.') }}
@else
Rp {{ number_format($totalBeban, 0, ',', '.') }}
@endif
</span>
</div> </div>
</div> </div>
</div> </div>
@ -137,7 +155,11 @@
</div> </div>
<div> <div>
<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, ',', '.') }} @if($labaRugiTotal < 0)
-Rp {{ number_format(abs($labaRugiTotal), 0, ',', '.') }}
@else
Rp {{ number_format($labaRugiTotal, 0, ',', '.') }}
@endif
</h3> </h3>
<p class="text-sm text-gray-500">{{ $labaRugiTotal >= 0 ? 'Laba' : 'Rugi' }}</p> <p class="text-sm text-gray-500">{{ $labaRugiTotal >= 0 ? 'Laba' : 'Rugi' }}</p>
</div> </div>
@ -155,7 +177,11 @@
</div> </div>
<div> <div>
<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, ',', '.') }} @if($labaRugiBulanIni < 0)
-Rp {{ number_format(abs($labaRugiBulanIni), 0, ',', '.') }}
@else
Rp {{ number_format($labaRugiBulanIni, 0, ',', '.') }}
@endif
</h3> </h3>
<p class="text-sm text-gray-500">{{ $labaRugiBulanIni >= 0 ? 'Laba' : 'Rugi' }}</p> <p class="text-sm text-gray-500">{{ $labaRugiBulanIni >= 0 ? 'Laba' : 'Rugi' }}</p>
</div> </div>

View File

@ -28,7 +28,7 @@
<!-- 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">Laporan Laba Rugi</h1> <h1 class="text-2xl font-bold">Laporan Laba Rugi</h1>
<p class="text-sm mt-1">PT EXAMPLE</p> <p class="text-sm mt-1">Budivespaendut</p>
<p class="text-sm">Periode: {{ date('F Y', strtotime($startDate)) }}</p> <p class="text-sm">Periode: {{ date('F Y', strtotime($startDate)) }}</p>
</div> </div>
@ -92,7 +92,14 @@
<tr class="bg-purple-100"> <tr class="bg-purple-100">
<td class="p-2 border border-gray-300 font-bold">Laba/Rugi Bersih</td> <td class="p-2 border border-gray-300 font-bold">Laba/Rugi Bersih</td>
<td class="text-right p-2 border border-gray-300 font-bold"> <td class="text-right p-2 border border-gray-300 font-bold">
{{ number_format(-($total_pendapatan) - $total_beban, 0, ',', '.') }} @php
$labaRugi = -($total_pendapatan) - $total_beban;
@endphp
@if($labaRugi < 0)
-Rp {{ number_format(abs($labaRugi), 0, ',', '.') }}
@else
Rp {{ number_format($labaRugi, 0, ',', '.') }}
@endif
</td> </td>
</tr> </tr>
</table> </table>

View File

@ -19,7 +19,7 @@
<!-- 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">Jurnal Umum</h1> <h1 class="text-2xl font-bold">Jurnal Umum</h1>
<p class="text-sm mt-1">Halaman ini menampilkan jurnal umum.</p> <p class="text-sm mt-1">jurnal umum Budivespaendut.</p>
</div> </div>
<!-- Summary Cards <!-- Summary Cards
@ -200,18 +200,22 @@
</td> </td>
<td class="py-3 px-4"> <td class="py-3 px-4">
<div class="flex flex-col"> <div class="flex flex-col">
@if($item->uang_masuk > 0)
<span>{{ $item->kategori }}</span> <span>{{ $item->kategori }}</span>
@else
<span class="ml-8">{{ $item->kategori }}</span>
@endif
@if(isset($item->kategori2)) @if(isset($item->kategori2))
<span class="text-sm text-gray-500">{{ $item->kategori2 }}</span> <span class="text-sm text-gray-500 ml-8">{{ $item->kategori2 }}</span>
@endif @endif
@if(isset($item->kategori3)) @if(isset($item->kategori3))
<span class="text-sm text-gray-500">{{ $item->kategori3 }}</span> <span class="text-sm text-gray-500 ml-8">{{ $item->kategori3 }}</span>
@endif @endif
@if(isset($item->kategori4)) @if(isset($item->kategori4))
<span class="text-sm text-gray-500">{{ $item->kategori4 }}</span> <span class="text-sm text-gray-500 ml-8">{{ $item->kategori4 }}</span>
@endif @endif
@if(isset($item->kategori5)) @if(isset($item->kategori5))
<span class="text-sm text-gray-500">{{ $item->kategori5 }}</span> <span class="text-sm text-gray-500 ml-8">{{ $item->kategori5 }}</span>
@endif @endif
</div> </div>
</td> </td>
@ -292,8 +296,8 @@
</td> </td>
<td class="py-3 px-4 text-center"> <td class="py-3 px-4 text-center">
<div class="flex justify-center space-x-2"> <div class="flex justify-center space-x-2">
<button class="text-blue-600 hover:text-blue-800" title="Edit"> <!-- <button class="text-blue-600 hover:text-blue-800" title="Edit">
<i class="fas fa-edit"></i> <i class="fas fa-edit"></i> -->
</button> </button>
<button onclick="hapusData({{ $item->id }})" class="text-red-600 hover:text-red-800" title="Hapus"> <button onclick="hapusData({{ $item->id }})" class="text-red-600 hover:text-red-800" title="Hapus">
<i class="fas fa-trash"></i> <i class="fas fa-trash"></i>

View File

@ -14,8 +14,8 @@
<!-- 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">Neraca Saldo Perusahaan Dagang</h1> <h1 class="text-2xl font-bold">Neraca Saldo Perusahaan Dagang</h1>
<p class="text-sm mt-1">Entri Neraca Saldo Budivespaendut</p> <p class="text-sm mt-1">Neraca Saldo Budivespaendut</p>
<p class="text-sm">Anggrek</p> <p class="text-sm">Kebun Anggrek</p>
</div> </div>
<!-- Tabel Transaksi --> <!-- Tabel Transaksi -->

View File

@ -53,8 +53,8 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
<!-- 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">Buku Besar Perusahaan Dagang</h1> <h1 class="text-2xl font-bold">Buku Besar Perusahaan Dagang</h1>
<p class="text-sm mt-1">Entri Jurnal Umum Budivespaendut</p> <p class="text-sm mt-1">Buku Besar Budivespaendut</p>
<p class="text-sm">Anggrek</p> <p class="text-sm">Kebun Anggrek</p>
</div> </div>
@foreach($groupedLaporan as $kategori => $items) @foreach($groupedLaporan as $kategori => $items)
@ -86,7 +86,7 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
<th class="py-3 px-4 text-right">Debit (Rp)</th> <th class="py-3 px-4 text-right">Debit (Rp)</th>
<th class="py-3 px-4 text-right">Kredit (Rp)</th> <th class="py-3 px-4 text-right">Kredit (Rp)</th>
<th class="py-3 px-4 text-right">Saldo</th> <th class="py-3 px-4 text-right">Saldo</th>
<th class="py-3 px-4 text-center">Aksi</th> <!-- <th class="py-3 px-4 text-center">Aksi</th> -->
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -120,7 +120,7 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
@endphp @endphp
{{ $displayBalance }} {{ $displayBalance }}
</td> </td>
<td class="py-3 px-4 text-center"> <!-- <td class="py-3 px-4 text-center">
<div class="flex justify-center space-x-2"> <div class="flex justify-center space-x-2">
<button class="text-blue-600 hover:text-blue-800" title="Edit"> <button class="text-blue-600 hover:text-blue-800" title="Edit">
<i class="fas fa-edit"></i> <i class="fas fa-edit"></i>
@ -129,7 +129,7 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
<i class="fas fa-trash"></i> <i class="fas fa-trash"></i>
</button> </button>
</div> </div>
</td> </td> -->
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>

View File

@ -1,7 +1,10 @@
@extends('Core.Sidebar') @extends('Core.Sidebar')
@section('content') @section('content')
<title>Data Akun User</title> <title>Data Akun User</title>
<!-- ... existing code ... --> <!-- SweetAlert2 CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">
<!-- SweetAlert2 JS -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<style> <style>
/* Gradient Background */ /* Gradient Background */
body { body {
@ -191,6 +194,25 @@
<!-- JavaScript for handling user CRUD operations --> <!-- JavaScript for handling user CRUD operations -->
<script> <script>
// Notifikasi SweetAlert2
@if(session('success'))
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: '{{ session('success') }}',
confirmButtonText: 'OK'
});
@endif
@if(session('error'))
Swal.fire({
icon: 'error',
title: 'Gagal!',
text: '{{ session('error') }}',
confirmButtonText: 'OK'
});
@endif
// Function to load users // Function to load users
function loadUsers() { function loadUsers() {
fetch('/users/data') fetch('/users/data')
@ -237,6 +259,42 @@ function editUser(id) {
window.location.href = "{{ route('User.create') }}"; window.location.href = "{{ route('User.create') }}";
}); });
// Function untuk menghapus user
function deleteUser(id) {
Swal.fire({
title: 'Apakah Anda yakin?',
text: "Data yang dihapus tidak dapat dikembalikan!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, hapus!',
cancelButtonText: 'Batal'
}).then((result) => {
if (result.isConfirmed) {
// Buat form untuk delete request
const form = document.createElement('form');
form.method = 'POST';
form.action = `/User/${id}`;
const csrfToken = document.createElement('input');
csrfToken.type = 'hidden';
csrfToken.name = '_token';
csrfToken.value = '{{ csrf_token() }}';
const methodField = document.createElement('input');
methodField.type = 'hidden';
methodField.name = '_method';
methodField.value = 'DELETE';
form.appendChild(csrfToken);
form.appendChild(methodField);
document.body.appendChild(form);
form.submit();
}
});
}
// Initial load // Initial load
loadUsers(); loadUsers();
</script> </script>