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
]);
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) {
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)
{
$karyawan = GajiModel::findOrFail($id);
$karyawan->update($request->all());
return redirect()->route('gaji.index')->with('success', 'Data gaji berhasil diperbarui');
try {
$karyawan = GajiModel::findOrFail($id);
// Bersihkan format angka dari gaji
$request->merge([
'gaji' => str_replace('.', '', $request->gaji)
]);
$karyawan->update($request->all());
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)
{
$karyawan = GajiModel::findOrFail($id);
$karyawan->delete();
return response()->json(['success' => true]);
try {
$karyawan = GajiModel::findOrFail($id);
$karyawan->delete();
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;
}
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;
}
}
private function getAccountType($kodeAkun) {
$kode = (string)$kodeAkun;
if (str_starts_with($kode, '111') || str_starts_with($kode, '112')) {
return 'AKTIVA';
} else if (str_starts_with($kode, '121') || str_starts_with($kode, '122') || str_starts_with($kode, '131')) {
return 'PASIVA';
} else if (str_starts_with($kode, '241') || str_starts_with($kode, '242')) {
return 'PENDAPATAN';
} else if (str_starts_with($kode, '251') || str_starts_with($kode, '252')) {
return 'BEBAN';
}
return 'UNKNOWN';
}
private function calculateBalance($previousBalance, $debit, $kredit, $accountType) {
$balance = $previousBalance;
switch($accountType) {
case 'AKTIVA':
// Aktiva: bertambah di debit, berkurang di kredit
$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)
@ -81,147 +83,175 @@ public function index(Request $request)
$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;
// Array untuk menyimpan total per kategori
$totalsPerAkun = [];
$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) {
// Proses kategori1
if (!empty($transaksi->kategori)) {
$this->prosesKategori(
$transaksi->kategori,
$transaksi->uang_masuk ?? 0,
$transaksi->uang_keluar ?? 0,
$pendapatan,
$beban
);
// Proses untuk semua kategori
for ($i = 1; $i <= 5; $i++) {
$kategoriField = $i === 1 ? 'kategori' : "kategori{$i}";
$uangMasukField = $i === 1 ? 'uang_masuk' : "uang_masuk{$i}";
$uangKeluarField = $i === 1 ? 'uang_keluar' : "uang_keluar{$i}";
// Tambahkan ke total
$totalUangMasuk += $transaksi->uang_masuk ?? 0;
$totalUangKeluar += $transaksi->uang_keluar ?? 0;
}
if (!empty($transaksi->$kategoriField)) {
$kodeAkun = $this->getKodeAkun($transaksi->$kategoriField);
if ($kodeAkun) {
$processAkun(
$kodeAkun,
$transaksi->$kategoriField,
$transaksi->$uangMasukField,
$transaksi->$uangKeluarField
);
// 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;
// Hitung total berdasarkan jenis akun
$accountType = $this->getAccountType($kodeAkun);
if ($accountType === 'PENDAPATAN') {
$totalPendapatan = $this->calculateBalance(
$totalPendapatan,
floatval($transaksi->$uangMasukField ?? 0),
floatval($transaksi->$uangKeluarField ?? 0),
'PENDAPATAN'
);
} elseif ($accountType === 'BEBAN') {
$totalBeban = $this->calculateBalance(
$totalBeban,
floatval($transaksi->$uangMasukField ?? 0),
floatval($transaksi->$uangKeluarField ?? 0),
'BEBAN'
);
}
}
}
}
}
// Calculate current month totals
$currentMonthUangMasuk = $totalUangMasuk;
$currentMonthUangKeluar = $totalUangKeluar;
// Hitung laba rugi
$labaRugiTotal = $totalPendapatan - $totalBeban;
$labaRugiBulanIni = $labaRugiTotal;
// 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;
// Kelompokkan data untuk tampilan
$pendapatan = [];
$beban = [];
foreach ($totalsPerAkun as $kategori => $data) {
$accountType = $this->getAccountType($data['kode']);
if ($accountType === 'PENDAPATAN') {
$pendapatan[$kategori] = [
'kategori' => $kategori,
'kode_akun' => $data['kode'],
'nominal' => $this->calculateBalance(0, $data['debit'], $data['kredit'], 'PENDAPATAN')
];
} elseif ($accountType === 'BEBAN') {
$beban[$kategori] = [
'kategori' => $kategori,
'kode_akun' => $data['kode'],
'nominal' => $this->calculateBalance(0, $data['debit'], $data['kredit'], 'BEBAN')
];
}
}
$lastMonthTotal = $lastMonthUangMasuk - $lastMonthUangKeluar;
$currentMonthTotal = $totalUangMasuk - $totalUangKeluar;
// Get monthly totals for chart
$monthlyTotals = DB::table('laporan_transaksis')
->select(
DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'),
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')
)
->groupBy('periode')
->orderBy('periode')
->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
$recentTransactions = DB::table('laporan_transaksis')
->orderBy('Tanggal', 'desc')
->limit(10)
->get();
// Calculate growth percentage
$growthPercentage = $lastMonthTotal != 0 ?
(($currentMonthTotal - $lastMonthTotal) / abs($lastMonthTotal)) * 100 :
$lastMonthStart = Carbon::parse($startDate)->subMonth()->startOfMonth();
$lastMonthEnd = Carbon::parse($startDate)->subMonth()->endOfMonth();
$lastMonthData = DB::table('laporan_transaksis')
->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;
// Calculate total saldo dan laba rugi sesuai format di Labarugi blade
$totalSaldo = -($totalUangMasuk) - $totalUangKeluar;
$labaRugiTotal = -($totalUangMasuk) - $totalUangKeluar;
$labaRugiBulanIni = -($currentMonthUangMasuk) - $currentMonthUangKeluar;
// Get category breakdown
$categoryTotals = collect($pendapatan)->map(function($item) {
return [
'kategori' => $item['kategori'],
'total_debit' => $item['nominal'],
'total_kredit' => 0
];
})->merge(
collect($beban)->map(function($item) {
return [
'kategori' => $item['kategori'],
'total_debit' => 0,
'total_kredit' => $item['nominal']
];
})
)->values();
// Get monthly totals for chart
$monthlyTotals = DB::table('laporan_transaksis')
->select(
DB::raw('DATE_FORMAT(Tanggal, "%Y-%m") as periode'),
DB::raw('SUM(uang_masuk) + SUM(COALESCE(uang_masuk2, 0)) + SUM(COALESCE(uang_masuk3, 0)) + SUM(COALESCE(uang_masuk4, 0)) + SUM(COALESCE(uang_masuk5, 0)) as total_debit'),
DB::raw('SUM(uang_keluar) + SUM(COALESCE(uang_keluar2, 0)) + SUM(COALESCE(uang_keluar3, 0)) + SUM(COALESCE(uang_keluar4, 0)) + SUM(COALESCE(uang_keluar5, 0)) as total_kredit')
)
->groupBy('periode')
->orderBy('periode')
->get();
// Get recent transactions
$recentTransactions = DB::table('laporan_transaksis')
->orderBy('Tanggal', 'desc')
->limit(10)
->get();
// Debug log untuk memeriksa nilai
Log::info("Total Uang Masuk: " . $totalUangMasuk);
Log::info("Total Uang Keluar: " . $totalUangKeluar);
Log::info("Total Saldo: " . $totalSaldo);
Log::info("Laba Rugi Total: " . $labaRugiTotal);
Log::info("Laba Rugi Bulan Ini: " . $labaRugiBulanIni);
return view('home', compact(
return view('home', compact(
'startDate',
'endDate',
'totalUangMasuk',
'totalUangKeluar',
'currentMonthUangMasuk',
'currentMonthUangKeluar',
'totalSaldo',
'growthPercentage',
'totalPendapatan',
'totalBeban',
'labaRugiTotal',
'labaRugiBulanIni',
'monthlyTotals',
'categoryTotals',
'growthPercentage',
'monthlyTotals',
'categoryTotals',
'recentTransactions',
'pendapatan',
'beban'

View File

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

View File

@ -8,6 +8,11 @@
<p class="text-sm mt-1">Tabel keterangan gaji karyawan</p>
</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">
<!-- Tombol Tambah dan Filter dalam satu baris -->
<div class="flex justify-between items-center mb-4">
@ -100,6 +105,25 @@ class="text-red-600 hover:text-red-800"
</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 filterTable() {
const input = document.getElementById('filterKeterangan');
const filter = input.value.toLowerCase();
@ -116,25 +140,55 @@ function filterTable() {
}
function deleteGaji(id) {
if (confirm('Apakah Anda yakin ingin menghapus data ini?')) {
fetch(`/gaji/${id}`, {
method: 'DELETE',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
'Content-Type': 'application/json'
},
})
.then(response => response.json())
.then(data => {
if (data.success) {
window.location.reload();
}
})
.catch(error => {
console.error('Error:', error);
alert('Terjadi kesalahan saat menghapus data');
});
}
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}`, {
method: 'DELETE',
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}',
'Content-Type': 'application/json'
},
})
.then(response => response.json())
.then(data => {
if (data.success) {
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: 'Data gaji berhasil dihapus',
confirmButtonText: 'OK'
}).then(() => {
window.location.reload();
});
} else {
Swal.fire({
icon: 'error',
title: 'Gagal!',
text: 'Gagal menghapus data gaji',
confirmButtonText: 'OK'
});
}
})
.catch(error => {
console.error('Error:', error);
Swal.fire({
icon: 'error',
title: 'Gagal!',
text: 'Terjadi kesalahan saat menghapus data',
confirmButtonText: 'OK'
});
});
}
});
}
</script>

View File

@ -2,12 +2,17 @@
@section('content')
<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">
<h1 class="text-2xl font-bold">Edit Gaji Karyawan</h1>
</div>
<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
@method('PUT')
@ -31,8 +36,12 @@ class="border rounded w-full py-2 px-3" required>
<div class="mb-4">
<label class="block text-gray-700 text-sm font-bold mb-2">Gaji</label>
<input type="number" name="gaji" value="{{ $karyawan->gaji }}"
class="border rounded w-full py-2 px-3" required>
<div class="relative">
<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 class="flex justify-end">
@ -47,4 +56,61 @@ class="bg-gray-500 text-white px-4 py-2 rounded mr-2">
</form>
</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

View File

@ -29,25 +29,7 @@
</div>
<!-- Main Metrics -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
<!-- Total Saldo Card -->
<!-- <div class="bg-white rounded-xl p-6 shadow-sm">
<div class="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 class="grid grid-cols-2 gap-4 mb-6">
<!-- Total Pendapatan Card -->
<div class="bg-white rounded-xl p-6 shadow-sm">
<div class="flex items-center">
@ -58,7 +40,13 @@
</div>
<div>
<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>
</div>
</div>
@ -74,7 +62,13 @@
</div>
<div>
<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>
</div>
</div>
@ -92,13 +86,25 @@
<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>
<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>
@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>
<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>
@ -112,13 +118,25 @@
<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>
<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>
@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>
<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>
@ -137,7 +155,11 @@
</div>
<div>
<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>
<p class="text-sm text-gray-500">{{ $labaRugiTotal >= 0 ? 'Laba' : 'Rugi' }}</p>
</div>
@ -155,7 +177,11 @@
</div>
<div>
<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>
<p class="text-sm text-gray-500">{{ $labaRugiBulanIni >= 0 ? 'Laba' : 'Rugi' }}</p>
</div>

View File

@ -28,7 +28,7 @@
<!-- Header -->
<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>
<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>
</div>
@ -92,7 +92,14 @@
<tr class="bg-purple-100">
<td class="p-2 border border-gray-300 font-bold">Laba/Rugi Bersih</td>
<td class="text-right p-2 border border-gray-300 font-bold">
{{ number_format(-($total_pendapatan) - $total_beban, 0, ',', '.') }}
@php
$labaRugi = -($total_pendapatan) - $total_beban;
@endphp
@if($labaRugi < 0)
-Rp {{ number_format(abs($labaRugi), 0, ',', '.') }}
@else
Rp {{ number_format($labaRugi, 0, ',', '.') }}
@endif
</td>
</tr>
</table>

View File

@ -19,7 +19,7 @@
<!-- Header -->
<div class="mb-4 bg-blue-600 text-white p-4 rounded-lg shadow-md">
<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>
<!-- Summary Cards
@ -200,18 +200,22 @@
</td>
<td class="py-3 px-4">
<div class="flex flex-col">
<span>{{ $item->kategori }}</span>
@if($item->uang_masuk > 0)
<span>{{ $item->kategori }}</span>
@else
<span class="ml-8">{{ $item->kategori }}</span>
@endif
@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
@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
@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
@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
</div>
</td>
@ -292,8 +296,8 @@
</td>
<td class="py-3 px-4 text-center">
<div class="flex justify-center space-x-2">
<button class="text-blue-600 hover:text-blue-800" title="Edit">
<i class="fas fa-edit"></i>
<!-- <button class="text-blue-600 hover:text-blue-800" title="Edit">
<i class="fas fa-edit"></i> -->
</button>
<button onclick="hapusData({{ $item->id }})" class="text-red-600 hover:text-red-800" title="Hapus">
<i class="fas fa-trash"></i>

View File

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

View File

@ -53,8 +53,8 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
<!-- Header -->
<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>
<p class="text-sm mt-1">Entri Jurnal Umum Budivespaendut</p>
<p class="text-sm">Anggrek</p>
<p class="text-sm mt-1">Buku Besar Budivespaendut</p>
<p class="text-sm">Kebun Anggrek</p>
</div>
@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">Kredit (Rp)</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>
</thead>
<tbody>
@ -120,7 +120,7 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
@endphp
{{ $displayBalance }}
</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">
<button class="text-blue-600 hover:text-blue-800" title="Edit">
<i class="fas fa-edit"></i>
@ -129,7 +129,7 @@ function calculateBalancePHP($previousBalance, $debit, $kredit, $accountType) {
<i class="fas fa-trash"></i>
</button>
</div>
</td>
</td> -->
</tr>
@endforeach
</tbody>

View File

@ -1,7 +1,10 @@
@extends('Core.Sidebar')
@section('content')
<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>
/* Gradient Background */
body {
@ -191,6 +194,25 @@
<!-- JavaScript for handling user CRUD operations -->
<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 loadUsers() {
fetch('/users/data')
@ -237,6 +259,42 @@ function editUser(id) {
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
loadUsers();
</script>