update tgl 28 april 2
This commit is contained in:
parent
a074805ce6
commit
749d33bed0
|
@ -3,40 +3,53 @@
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\UangMasukModel; // Import model
|
use App\Models\UangMasukModel; // Import model
|
||||||
|
use App\Models\GajiModel; // Import model gaji
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class UangMasukController extends Controller
|
class UangMasukController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
return view('UangMasuk');
|
// Ambil data karyawan untuk dropdown
|
||||||
|
$karyawans = GajiModel::whereNotNull('gaji')
|
||||||
|
->where('gaji', '>', 0)
|
||||||
|
->select('id', 'nama', 'jabatan', 'gaji')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return view('UangMasuk', compact('karyawans'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
// Validasi input
|
$request->validate([
|
||||||
$validated = $request->validate([
|
|
||||||
'Tanggal' => 'required|date',
|
'Tanggal' => 'required|date',
|
||||||
|
'keterangan_type' => 'required|in:karyawan,manual',
|
||||||
'kategori' => 'required|array',
|
'kategori' => 'required|array',
|
||||||
'kategori.*' => 'required|string',
|
|
||||||
'keterangan' => 'required|string',
|
|
||||||
'nominal' => 'required|array',
|
|
||||||
'nominal.*' => 'required|string',
|
|
||||||
'posisi' => 'required|array',
|
'posisi' => 'required|array',
|
||||||
'posisi.*' => 'required|in:debit,kredit',
|
'nominal' => 'required|array',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Inisialisasi data untuk disimpan
|
// Gabungkan keterangan berdasarkan tipe input
|
||||||
|
$keterangan = '';
|
||||||
|
if ($request->keterangan_type === 'karyawan') {
|
||||||
|
$keterangan = $request->keterangan;
|
||||||
|
if ($request->filled('keterangan_tambahan')) {
|
||||||
|
$keterangan = $request->keterangan_tambahan;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$keterangan = $request->keterangan_manual;
|
||||||
|
}
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'Tanggal' => $validated['Tanggal'],
|
'Tanggal' => $request->Tanggal,
|
||||||
'keterangan' => $validated['keterangan'],
|
'keterangan' => $keterangan,
|
||||||
];
|
];
|
||||||
|
|
||||||
// Proses setiap rekening
|
// Proses setiap rekening
|
||||||
foreach ($validated['kategori'] as $index => $kategori) {
|
foreach ($request->kategori as $index => $kategori) {
|
||||||
$kode = $this->generateKode($kategori);
|
$kode = $this->generateKode($kategori);
|
||||||
$nominal = str_replace(['.', ','], '', $validated['nominal'][$index]);
|
$nominal = str_replace(['.', ','], '', $request->nominal[$index]);
|
||||||
|
|
||||||
// Set kode dan kategori sesuai urutan
|
// Set kode dan kategori sesuai urutan
|
||||||
$positionIndex = $index === 0 ? '' : ($index + 1);
|
$positionIndex = $index === 0 ? '' : ($index + 1);
|
||||||
|
@ -44,7 +57,7 @@ public function store(Request $request)
|
||||||
$data["kategori" . $positionIndex] = $kategori;
|
$data["kategori" . $positionIndex] = $kategori;
|
||||||
|
|
||||||
// Set uang_masuk atau uang_keluar berdasarkan posisi
|
// Set uang_masuk atau uang_keluar berdasarkan posisi
|
||||||
if ($validated['posisi'][$index] === 'debit') {
|
if ($request->posisi[$index] === 'debit') {
|
||||||
$data["uang_masuk" . $positionIndex] = $nominal;
|
$data["uang_masuk" . $positionIndex] = $nominal;
|
||||||
$data["uang_keluar" . $positionIndex] = null;
|
$data["uang_keluar" . $positionIndex] = null;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -5,7 +5,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">Gaji Karyawan</h1>
|
<h1 class="text-2xl font-bold">Gaji Karyawan</h1>
|
||||||
<p class="text-sm mt-1">Tabel keterangan gaji karyawan</p>
|
<p class="text-sm mt-1">Tabel keterangan karyawan</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- SweetAlert2 CSS -->
|
<!-- SweetAlert2 CSS -->
|
||||||
|
|
|
@ -29,14 +29,61 @@ class="w-full border rounded-lg px-3 py-2 focus:outline-none focus:ring-2 focus:
|
||||||
<label class="block text-sm font-medium text-gray-700 mb-1">
|
<label class="block text-sm font-medium text-gray-700 mb-1">
|
||||||
Keterangan <span class="text-red-600">*</span>
|
Keterangan <span class="text-red-600">*</span>
|
||||||
</label>
|
</label>
|
||||||
<textarea
|
<div class="space-y-2">
|
||||||
|
<!-- Radio Button untuk memilih input -->
|
||||||
|
<div class="flex items-center space-x-4">
|
||||||
|
<label class="flex items-center">
|
||||||
|
<input type="radio" name="keterangan_type" value="karyawan" checked class="mr-2" onchange="toggleKeteranganInput()">
|
||||||
|
<span>Pilih Karyawan</span>
|
||||||
|
</label>
|
||||||
|
<label class="flex items-center">
|
||||||
|
<input type="radio" name="keterangan_type" value="manual" class="mr-2" onchange="toggleKeteranganInput()">
|
||||||
|
<span>Input Manual</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Dropdown Karyawan -->
|
||||||
|
<div id="karyawanInput">
|
||||||
|
<div class="space-y-4">
|
||||||
|
<select
|
||||||
|
id="keterangan"
|
||||||
name="keterangan"
|
name="keterangan"
|
||||||
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"
|
||||||
|
required
|
||||||
|
>
|
||||||
|
<option value="">Pilih Karyawan</option>
|
||||||
|
@foreach($karyawans as $karyawan)
|
||||||
|
<option value="{{ $karyawan->nama }}" data-gaji="{{ $karyawan->gaji }}">{{ $karyawan->nama }} - {{ $karyawan->jabatan }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Input Keterangan Tambahan -->
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="block text-sm font-medium text-gray-700 mb-1">
|
||||||
|
Keterangan Tambahan
|
||||||
|
</label>
|
||||||
|
<textarea
|
||||||
|
name="keterangan_tambahan"
|
||||||
|
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 transaksi"
|
placeholder="Tambahkan keterangan lain jika diperlukan"
|
||||||
|
></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Input Manual -->
|
||||||
|
<div id="manualInput" class="hidden">
|
||||||
|
<textarea
|
||||||
|
name="keterangan_manual"
|
||||||
|
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
|
required
|
||||||
></textarea>
|
></textarea>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Container untuk rekening-rekening -->
|
<!-- Container untuk rekening-rekening -->
|
||||||
<div id="rekening-container">
|
<div id="rekening-container">
|
||||||
|
@ -228,6 +275,24 @@ class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-
|
||||||
let rekeningCount = 1;
|
let rekeningCount = 1;
|
||||||
const MAX_REKENING = 5;
|
const MAX_REKENING = 5;
|
||||||
|
|
||||||
|
function toggleKeteranganInput() {
|
||||||
|
const karyawanInput = document.getElementById('karyawanInput');
|
||||||
|
const manualInput = document.getElementById('manualInput');
|
||||||
|
const keteranganType = document.querySelector('input[name="keterangan_type"]:checked').value;
|
||||||
|
|
||||||
|
if (keteranganType === 'karyawan') {
|
||||||
|
karyawanInput.classList.remove('hidden');
|
||||||
|
manualInput.classList.add('hidden');
|
||||||
|
document.getElementById('keterangan').required = true;
|
||||||
|
document.querySelector('textarea[name="keterangan_manual"]').required = false;
|
||||||
|
} else {
|
||||||
|
karyawanInput.classList.add('hidden');
|
||||||
|
manualInput.classList.remove('hidden');
|
||||||
|
document.getElementById('keterangan').required = false;
|
||||||
|
document.querySelector('textarea[name="keterangan_manual"]').required = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function tambahRekening() {
|
function tambahRekening() {
|
||||||
if (rekeningCount >= MAX_REKENING) {
|
if (rekeningCount >= MAX_REKENING) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
|
@ -318,6 +383,18 @@ function validateBalance() {
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set keterangan berdasarkan input yang dipilih
|
||||||
|
const keteranganType = document.querySelector('input[name="keterangan_type"]:checked').value;
|
||||||
|
if (keteranganType === 'karyawan') {
|
||||||
|
const karyawan = document.getElementById('keterangan').value;
|
||||||
|
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;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Event listener untuk input nominal
|
// Event listener untuk input nominal
|
||||||
|
@ -335,6 +412,18 @@ function validateBalance() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.getElementById('keterangan').addEventListener('change', function() {
|
||||||
|
const selectedOption = this.options[this.selectedIndex];
|
||||||
|
const gaji = selectedOption.getAttribute('data-gaji');
|
||||||
|
if (gaji) {
|
||||||
|
const nominalInputs = document.getElementsByName('nominal[]');
|
||||||
|
if (nominalInputs.length > 0) {
|
||||||
|
nominalInputs[0].value = new Intl.NumberFormat('id-ID').format(gaji);
|
||||||
|
validateBalance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
@if(session('success'))
|
@if(session('success'))
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
icon: 'success',
|
icon: 'success',
|
||||||
|
|
Loading…
Reference in New Issue