update tgl 27 mei 2

This commit is contained in:
whywdd 2025-05-28 01:39:12 +07:00
parent 64118b2b7d
commit 0249840cf6
2 changed files with 119 additions and 25 deletions

View File

@ -22,6 +22,9 @@ public function index()
public function store(Request $request)
{
try {
// Debug untuk melihat data yang diterima
\Log::info('Request Data:', $request->all());
$request->validate([
'Tanggal' => 'required|date',
'keterangan_type' => 'required|in:karyawan,manual',
@ -33,17 +36,24 @@ public function store(Request $request)
// Gabungkan keterangan berdasarkan tipe input
$keterangan = '';
if ($request->keterangan_type === 'karyawan') {
if (empty($request->keterangan)) {
throw new \Exception('Karyawan harus dipilih');
}
$keterangan = $request->keterangan;
if ($request->filled('keterangan_tambahan')) {
$keterangan = $request->keterangan_tambahan;
$keterangan .= ' - ' . $request->keterangan_tambahan;
}
// Ambil gaji dari model GajiModel berdasarkan nama karyawan
$karyawan = GajiModel::where('nama', $request->keterangan)->first();
if ($karyawan) {
$data['gaji'] = $karyawan->gaji;
if (!$karyawan) {
throw new \Exception('Data karyawan tidak ditemukan');
}
} else {
if (empty($request->keterangan_manual)) {
throw new \Exception('Keterangan manual harus diisi');
}
$keterangan = $request->keterangan_manual;
}
@ -72,11 +82,19 @@ public function store(Request $request)
}
}
// Debug untuk melihat data yang akan disimpan
\Log::info('Data to be saved:', $data);
// Simpan data
UangMasukModel::create($data);
$result = UangMasukModel::create($data);
if (!$result) {
throw new \Exception('Gagal menyimpan data');
}
return redirect()->back()->with('success', 'Data berhasil disimpan!');
} catch (\Exception $e) {
\Log::error('Error in UangMasukController@store: ' . $e->getMessage());
return redirect()->back()->with('error', 'Gagal menyimpan data: ' . $e->getMessage());
}
}

View File

@ -1,6 +1,10 @@
@extends('Core.Sidebar')
@section('content')
<!-- Tambahkan CSS Select2 di bagian atas -->
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<link href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" rel="stylesheet" />
<div class="p-6 animate-fade-in">
<!-- Header -->
<div class="mb-4 bg-blue-600 text-white p-4 rounded-lg shadow-md">
@ -57,9 +61,6 @@ class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:
@endforeach
</select>
<!-- Hidden input untuk gaji -->
<input type="hidden" name="gaji" id="gaji_input">
<!-- Input Keterangan Tambahan -->
<div class="form-group">
<label class="block text-sm font-medium text-gray-700 mb-1">
@ -82,7 +83,6 @@ class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:
class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
rows="3"
placeholder="Masukkan keterangan"
required
></textarea>
</div>
</div>
@ -103,7 +103,7 @@ class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:
</label>
<select
name="kategori[]"
class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 kategori-select"
required
>
<option value="" disabled selected>Pilih Kategori Akun</option>
@ -274,6 +274,10 @@ class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<!-- Tambahkan jQuery dan Select2 JS -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<script>
let rekeningCount = 1;
const MAX_REKENING = 5;
@ -309,30 +313,42 @@ function tambahRekening() {
rekeningCount++;
const container = document.getElementById('rekening-container');
const template = document.querySelector('.rekening-entry').cloneNode(true);
// Update judul rekening
template.querySelector('h3').textContent = `Rekening ${rekeningCount}`;
const template = document.querySelector('.rekening-entry');
// Hapus Select2 sebelum clone
const selectKategori = template.querySelector('select[name="kategori[]"]');
if ($(selectKategori).hasClass("select2-hidden-accessible")) {
$(selectKategori).select2('destroy');
}
// Clone node
const newEntry = template.cloneNode(true);
// Reset nilai-nilai form
template.querySelector('select[name="kategori[]"]').value = '';
template.querySelector('select[name="posisi[]"]').value = '';
template.querySelector('input[name="nominal[]"]').value = '';
newEntry.querySelector('select[name="kategori[]"]').value = '';
newEntry.querySelector('select[name="posisi[]"]').value = '';
newEntry.querySelector('input[name="nominal[]"]').value = '';
// Update judul rekening
newEntry.querySelector('h3').textContent = `Rekening ${rekeningCount}`;
// Tambahkan tombol hapus untuk rekening tambahan
const headerDiv = template.querySelector('.flex');
const headerDiv = newEntry.querySelector('.flex');
const deleteButton = document.createElement('button');
deleteButton.type = 'button';
deleteButton.className = 'text-red-500 hover:text-red-700';
deleteButton.innerHTML = '<i class="fas fa-trash"></i>';
deleteButton.onclick = function() {
template.remove();
newEntry.remove();
rekeningCount--;
validateBalance();
};
headerDiv.appendChild(deleteButton);
container.appendChild(template);
container.appendChild(newEntry);
// Inisialisasi Select2 ulang untuk semua select kategori
initializeSelect2();
}
function formatNumber(input) {
@ -386,12 +402,28 @@ function validateForm(event) {
const keteranganType = document.querySelector('input[name="keterangan_type"]:checked').value;
if (keteranganType === 'karyawan') {
const karyawan = document.getElementById('keterangan').value;
if (!karyawan) {
Swal.fire({
icon: 'error',
title: 'Error!',
text: 'Silakan pilih karyawan!',
confirmButtonText: 'OK'
});
return false;
}
const tambahan = document.querySelector('textarea[name="keterangan_tambahan"]').value;
document.querySelector('textarea[name="keterangan_manual"]').value = '';
document.getElementById('keterangan').value = tambahan ? `${karyawan} - ${tambahan}` : karyawan;
} else {
const manual = document.querySelector('textarea[name="keterangan_manual"]').value;
document.getElementById('keterangan').value = manual;
if (!manual) {
Swal.fire({
icon: 'error',
title: 'Error!',
text: 'Silakan isi keterangan manual!',
confirmButtonText: 'OK'
});
return false;
}
}
console.log('Form validation passed, submitting...');
@ -431,10 +463,30 @@ function validateBalance() {
// Set default date to today
document.querySelector('input[type="date"]').valueAsDate = new Date();
// Tambahkan fungsi untuk inisialisasi Select2
function initializeSelect2() {
$('.kategori-select').select2({
theme: 'bootstrap-5',
width: '100%',
placeholder: 'Pilih Kategori Akun',
allowClear: true,
language: {
noResults: function() {
return "Tidak ada hasil yang ditemukan";
},
searching: function() {
return "Mencari...";
}
}
});
}
// Event listeners
document.addEventListener('DOMContentLoaded', function() {
console.log('Page loaded');
validateBalance();
toggleKeteranganInput();
initializeSelect2(); // Inisialisasi Select2 saat halaman dimuat
// Event listener untuk input nominal
document.addEventListener('input', function(e) {
@ -456,7 +508,6 @@ function validateBalance() {
const selectedOption = this.options[this.selectedIndex];
const gaji = selectedOption.getAttribute('data-gaji');
if (gaji) {
document.getElementById('gaji_input').value = gaji;
const nominalInputs = document.getElementsByName('nominal[]');
if (nominalInputs.length > 0) {
nominalInputs[0].value = new Intl.NumberFormat('id-ID').format(gaji);
@ -486,6 +537,31 @@ function validateBalance() {
</script>
<style>
/* Tambahkan style untuk Select2 */
.select2-container--bootstrap-5 .select2-selection {
min-height: 38px;
border: 1px solid #d1d5db;
border-radius: 0.5rem;
}
.select2-container--bootstrap-5 .select2-selection--single {
padding: 0.375rem 0.75rem;
}
.select2-container--bootstrap-5 .select2-selection--single .select2-selection__rendered {
padding-left: 0;
}
.select2-container--bootstrap-5 .select2-dropdown {
border: 1px solid #d1d5db;
border-radius: 0.5rem;
}
.select2-container--bootstrap-5 .select2-results__option--highlighted {
background-color: #3b82f6;
}
/* Existing styles */
@keyframes fadeIn {
from {
opacity: 0;