update tgl 27 mei 2
This commit is contained in:
parent
64118b2b7d
commit
0249840cf6
|
@ -22,6 +22,9 @@ public function index()
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
// Debug untuk melihat data yang diterima
|
||||||
|
\Log::info('Request Data:', $request->all());
|
||||||
|
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'Tanggal' => 'required|date',
|
'Tanggal' => 'required|date',
|
||||||
'keterangan_type' => 'required|in:karyawan,manual',
|
'keterangan_type' => 'required|in:karyawan,manual',
|
||||||
|
@ -33,17 +36,24 @@ public function store(Request $request)
|
||||||
// Gabungkan keterangan berdasarkan tipe input
|
// Gabungkan keterangan berdasarkan tipe input
|
||||||
$keterangan = '';
|
$keterangan = '';
|
||||||
if ($request->keterangan_type === 'karyawan') {
|
if ($request->keterangan_type === 'karyawan') {
|
||||||
|
if (empty($request->keterangan)) {
|
||||||
|
throw new \Exception('Karyawan harus dipilih');
|
||||||
|
}
|
||||||
|
|
||||||
$keterangan = $request->keterangan;
|
$keterangan = $request->keterangan;
|
||||||
if ($request->filled('keterangan_tambahan')) {
|
if ($request->filled('keterangan_tambahan')) {
|
||||||
$keterangan = $request->keterangan_tambahan;
|
$keterangan .= ' - ' . $request->keterangan_tambahan;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ambil gaji dari model GajiModel berdasarkan nama karyawan
|
// Ambil gaji dari model GajiModel berdasarkan nama karyawan
|
||||||
$karyawan = GajiModel::where('nama', $request->keterangan)->first();
|
$karyawan = GajiModel::where('nama', $request->keterangan)->first();
|
||||||
if ($karyawan) {
|
if (!$karyawan) {
|
||||||
$data['gaji'] = $karyawan->gaji;
|
throw new \Exception('Data karyawan tidak ditemukan');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (empty($request->keterangan_manual)) {
|
||||||
|
throw new \Exception('Keterangan manual harus diisi');
|
||||||
|
}
|
||||||
$keterangan = $request->keterangan_manual;
|
$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
|
// 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!');
|
return redirect()->back()->with('success', 'Data berhasil disimpan!');
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
\Log::error('Error in UangMasukController@store: ' . $e->getMessage());
|
||||||
return redirect()->back()->with('error', 'Gagal menyimpan data: ' . $e->getMessage());
|
return redirect()->back()->with('error', 'Gagal menyimpan data: ' . $e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
@extends('Core.Sidebar')
|
@extends('Core.Sidebar')
|
||||||
|
|
||||||
@section('content')
|
@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">
|
<div class="p-6 animate-fade-in">
|
||||||
<!-- 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">
|
||||||
|
@ -57,9 +61,6 @@ class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Hidden input untuk gaji -->
|
|
||||||
<input type="hidden" name="gaji" id="gaji_input">
|
|
||||||
|
|
||||||
<!-- Input Keterangan Tambahan -->
|
<!-- Input Keterangan Tambahan -->
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="block text-sm font-medium text-gray-700 mb-1">
|
<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"
|
class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
|
||||||
rows="3"
|
rows="3"
|
||||||
placeholder="Masukkan keterangan"
|
placeholder="Masukkan keterangan"
|
||||||
required
|
|
||||||
></textarea>
|
></textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -103,7 +103,7 @@ class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:
|
||||||
</label>
|
</label>
|
||||||
<select
|
<select
|
||||||
name="kategori[]"
|
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
|
required
|
||||||
>
|
>
|
||||||
<option value="" disabled selected>Pilih Kategori Akun</option>
|
<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">
|
<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>
|
<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>
|
<script>
|
||||||
let rekeningCount = 1;
|
let rekeningCount = 1;
|
||||||
const MAX_REKENING = 5;
|
const MAX_REKENING = 5;
|
||||||
|
@ -309,30 +313,42 @@ function tambahRekening() {
|
||||||
|
|
||||||
rekeningCount++;
|
rekeningCount++;
|
||||||
const container = document.getElementById('rekening-container');
|
const container = document.getElementById('rekening-container');
|
||||||
const template = document.querySelector('.rekening-entry').cloneNode(true);
|
const template = document.querySelector('.rekening-entry');
|
||||||
|
|
||||||
// Update judul rekening
|
// Hapus Select2 sebelum clone
|
||||||
template.querySelector('h3').textContent = `Rekening ${rekeningCount}`;
|
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
|
// Reset nilai-nilai form
|
||||||
template.querySelector('select[name="kategori[]"]').value = '';
|
newEntry.querySelector('select[name="kategori[]"]').value = '';
|
||||||
template.querySelector('select[name="posisi[]"]').value = '';
|
newEntry.querySelector('select[name="posisi[]"]').value = '';
|
||||||
template.querySelector('input[name="nominal[]"]').value = '';
|
newEntry.querySelector('input[name="nominal[]"]').value = '';
|
||||||
|
|
||||||
|
// Update judul rekening
|
||||||
|
newEntry.querySelector('h3').textContent = `Rekening ${rekeningCount}`;
|
||||||
|
|
||||||
// Tambahkan tombol hapus untuk rekening tambahan
|
// Tambahkan tombol hapus untuk rekening tambahan
|
||||||
const headerDiv = template.querySelector('.flex');
|
const headerDiv = newEntry.querySelector('.flex');
|
||||||
const deleteButton = document.createElement('button');
|
const deleteButton = document.createElement('button');
|
||||||
deleteButton.type = 'button';
|
deleteButton.type = 'button';
|
||||||
deleteButton.className = 'text-red-500 hover:text-red-700';
|
deleteButton.className = 'text-red-500 hover:text-red-700';
|
||||||
deleteButton.innerHTML = '<i class="fas fa-trash"></i>';
|
deleteButton.innerHTML = '<i class="fas fa-trash"></i>';
|
||||||
deleteButton.onclick = function() {
|
deleteButton.onclick = function() {
|
||||||
template.remove();
|
newEntry.remove();
|
||||||
rekeningCount--;
|
rekeningCount--;
|
||||||
validateBalance();
|
validateBalance();
|
||||||
};
|
};
|
||||||
headerDiv.appendChild(deleteButton);
|
headerDiv.appendChild(deleteButton);
|
||||||
|
|
||||||
container.appendChild(template);
|
container.appendChild(newEntry);
|
||||||
|
|
||||||
|
// Inisialisasi Select2 ulang untuk semua select kategori
|
||||||
|
initializeSelect2();
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatNumber(input) {
|
function formatNumber(input) {
|
||||||
|
@ -386,12 +402,28 @@ function validateForm(event) {
|
||||||
const keteranganType = document.querySelector('input[name="keterangan_type"]:checked').value;
|
const keteranganType = document.querySelector('input[name="keterangan_type"]:checked').value;
|
||||||
if (keteranganType === 'karyawan') {
|
if (keteranganType === 'karyawan') {
|
||||||
const karyawan = document.getElementById('keterangan').value;
|
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;
|
const tambahan = document.querySelector('textarea[name="keterangan_tambahan"]').value;
|
||||||
document.querySelector('textarea[name="keterangan_manual"]').value = '';
|
document.querySelector('textarea[name="keterangan_manual"]').value = '';
|
||||||
document.getElementById('keterangan').value = tambahan ? `${karyawan} - ${tambahan}` : karyawan;
|
|
||||||
} else {
|
} else {
|
||||||
const manual = document.querySelector('textarea[name="keterangan_manual"]').value;
|
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...');
|
console.log('Form validation passed, submitting...');
|
||||||
|
@ -431,10 +463,30 @@ function validateBalance() {
|
||||||
// Set default date to today
|
// Set default date to today
|
||||||
document.querySelector('input[type="date"]').valueAsDate = new Date();
|
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
|
// Event listeners
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
console.log('Page loaded');
|
console.log('Page loaded');
|
||||||
validateBalance();
|
validateBalance();
|
||||||
|
toggleKeteranganInput();
|
||||||
|
initializeSelect2(); // Inisialisasi Select2 saat halaman dimuat
|
||||||
|
|
||||||
// Event listener untuk input nominal
|
// Event listener untuk input nominal
|
||||||
document.addEventListener('input', function(e) {
|
document.addEventListener('input', function(e) {
|
||||||
|
@ -456,7 +508,6 @@ function validateBalance() {
|
||||||
const selectedOption = this.options[this.selectedIndex];
|
const selectedOption = this.options[this.selectedIndex];
|
||||||
const gaji = selectedOption.getAttribute('data-gaji');
|
const gaji = selectedOption.getAttribute('data-gaji');
|
||||||
if (gaji) {
|
if (gaji) {
|
||||||
document.getElementById('gaji_input').value = gaji;
|
|
||||||
const nominalInputs = document.getElementsByName('nominal[]');
|
const nominalInputs = document.getElementsByName('nominal[]');
|
||||||
if (nominalInputs.length > 0) {
|
if (nominalInputs.length > 0) {
|
||||||
nominalInputs[0].value = new Intl.NumberFormat('id-ID').format(gaji);
|
nominalInputs[0].value = new Intl.NumberFormat('id-ID').format(gaji);
|
||||||
|
@ -486,6 +537,31 @@ function validateBalance() {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<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 {
|
@keyframes fadeIn {
|
||||||
from {
|
from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
|
|
Loading…
Reference in New Issue