update pakan

This commit is contained in:
ninavirgiana 2026-03-24 10:43:42 +07:00
parent dedf8458ac
commit ff786d572a
2 changed files with 183 additions and 109 deletions

View File

@ -101,7 +101,7 @@ public function store(Request $request)
$request->validate([ $request->validate([
'tanggal' => 'required|date|before_or_equal:today', 'tanggal' => 'required|date|before_or_equal:today',
'nama_barang' => 'required|string|max:100', 'nama_barang' => 'required|string|max:100',
'jenis_transaksi' => 'required|in:masuk,keluar', 'jenis_transaksi' => 'required|in:masuk,keluar',
'jumlah' => 'required|numeric|min:1|max:999999', 'jumlah' => 'required|numeric|min:1|max:999999',
// 'satuan' => 'required|string|max:50|in:karung', // 'satuan' => 'required|string|max:50|in:karung',
@ -190,41 +190,43 @@ public function update(Request $request, $id)
$namaBarang = ucfirst(strtolower(trim($request->nama_barang))); $namaBarang = ucfirst(strtolower(trim($request->nama_barang)));
$request->validate([ $validator = \Illuminate\Support\Facades\Validator::make($request->all(), [
'tanggal' => 'required|date|before_or_equal:today', 'tanggal' => 'required|date|before_or_equal:today',
'nama_barang' => 'required|string|max:100', 'nama_barang' => 'required|string|max:100',
'jenis_transaksi' => 'required|in:masuk,keluar', 'jenis_transaksi' => 'required|in:masuk,keluar',
'jumlah' => 'required|numeric|min:1|max:999999', 'jumlah' => 'required|numeric|min:1|max:999999',
// 'satuan' => 'required|string|max:50|in:karung', 'harga_satuan' => $request->jenis_transaksi === 'masuk'
'harga_satuan' => $request->jenis_transaksi === 'masuk'
? 'required|numeric|min:1|max:999999999' ? 'required|numeric|min:1|max:999999999'
: 'nullable', : 'nullable',
], [ ], [
'tanggal.required' => 'Tanggal wajib diisi.', 'tanggal.required' => 'Tanggal wajib diisi.',
'tanggal.date' => 'Format tanggal tidak valid.', 'tanggal.date' => 'Format tanggal tidak valid.',
'nama_barang.required' => 'Nama barang wajib diisi.', 'nama_barang.required' => 'Nama barang wajib diisi.',
'nama_barang.string' => 'Nama barang harus berupa teks.', 'nama_barang.string' => 'Nama barang harus berupa teks.',
'nama_barang.max' => 'Nama barang maksimal 100 karakter.', 'nama_barang.max' => 'Nama barang maksimal 100 karakter.',
'jenis_transaksi.required' => 'Jenis transaksi wajib dipilih.', 'jenis_transaksi.required' => 'Jenis transaksi wajib dipilih.',
'jenis_transaksi.in' => 'Jenis transaksi tidak valid.', 'jenis_transaksi.in' => 'Jenis transaksi tidak valid.',
'jumlah.required' => 'Jumlah wajib diisi.', 'jumlah.required' => 'Jumlah wajib diisi.',
'jumlah.numeric' => 'Jumlah harus berupa angka.', 'jumlah.numeric' => 'Jumlah harus berupa angka.',
'jumlah.min' => 'Jumlah minimal 1.', 'jumlah.min' => 'Jumlah minimal 1.',
'jumlah.max' => 'Jumlah terlalu besar.', 'jumlah.max' => 'Jumlah terlalu besar.',
// 'satuan.required' => 'Satuan wajib diisi.', 'harga_satuan.required' => 'Harga satuan wajib diisi untuk transaksi masuk.',
// 'satuan.string' => 'Satuan harus berupa teks.', 'harga_satuan.numeric' => 'Harga satuan harus berupa angka.',
// 'satuan.max' => 'Satuan maksimal 50 karakter.', 'harga_satuan.min' => 'Harga satuan minimal 1.',
'harga_satuan.max' => 'Harga satuan terlalu besar.',
'harga_satuan.required' => 'Harga satuan wajib diisi untuk transaksi masuk.',
'harga_satuan.numeric' => 'Harga satuan harus berupa angka.',
'harga_satuan.min' => 'Harga satuan minimal 1.',
'harga_satuan.max' => 'Harga satuan terlalu besar.',
]); ]);
if ($validator->fails()) {
return back()
->withErrors($validator, 'edit')
->withInput()
->with('edit_id', $id);
}
try { try {
DB::transaction(function () use ($request, $id, $namaBarang) { DB::transaction(function () use ($request, $id, $namaBarang) {
@ -272,8 +274,9 @@ public function update(Request $request, $id)
return back() return back()
->withErrors([ ->withErrors([
'jumlah' => $e->getMessage() 'jumlah' => $e->getMessage()
]) ], 'edit')
->withInput(); ->withInput()
->with('edit_id', $id);
} }
return redirect()->route('pakan')->with('success', 'Transaksi berhasil diupdate'); return redirect()->route('pakan')->with('success', 'Transaksi berhasil diupdate');

View File

@ -50,7 +50,7 @@ class="form-control form-control-sm">
<label class="small">Tahun</label> <label class="small">Tahun</label>
<select name="tahun" class="form-control form-control-sm"> <select name="tahun" class="form-control form-control-sm">
<option value="">Semua</option> <option value="">Semua</option>
@for ($th = now()->year - 2; $th <= now()->year + 1; $th++) @for ($th = now()->year - 2; $th <= now()->year + 1; $th++)
<option value="{{ $th }}" <option value="{{ $th }}"
{{ request('tahun') == $th ? 'selected' : '' }}> {{ request('tahun') == $th ? 'selected' : '' }}>
{{ $th }} {{ $th }}
@ -103,15 +103,16 @@ class="form-control form-control-sm">
@endif @endif
@if ($errors->has('delete')) @if ($errors->has('delete'))
<div class="alert alert-danger"> <div class="alert alert-danger">
{{ $errors->first('delete') }} {{ $errors->first('delete') }}
</div> </div>
@endif @endif
<!-- TABEL --> <!-- TABEL -->
<div class="p-0 card-body"> <div class="p-0 card-body">
<div class="table-responsive"> <div class="table-responsive">
<table class="table mb-0" style="table-layout:fixed; width:100%;"> <thead class="table-light"> <table class="table mb-0" style="table-layout:fixed; width:100%;">
<thead class="table-light">
<tr> <tr>
<th class="text-center" style="width:60px;">No</th> <th class="text-center" style="width:60px;">No</th>
<th style="width:150px;">Tanggal</th> <th style="width:150px;">Tanggal</th>
@ -170,9 +171,8 @@ class="badge badge-{{ $item->jenis_transaksi == 'masuk' ? 'success' : 'danger' }
data-nama="{{ $item->nama_barang }}" data-nama="{{ $item->nama_barang }}"
data-jenis="{{ $item->jenis_transaksi }}" data-jenis="{{ $item->jenis_transaksi }}"
data-jumlah="{{ (int) $item->jumlah }}" data-jumlah="{{ (int) $item->jumlah }}"
data-harga="{{ (int) $item->harga_satuan }}" data-harga="{{ (int) $item->harga_satuan }}"
data-harga="{{ $item->harga_satuan }}" {{-- data-harga="{{ $item->harga_satuan }}" --}} data-tanggal="{{ $item->tanggal }}">
data-tanggal="{{ $item->tanggal }}">
<i class="la la-edit"></i> <i class="la la-edit"></i>
</button> </button>
@ -279,8 +279,12 @@ class="form-control @error('jenis_transaksi') is-invalid @enderror" required>
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Tanggal</label> <label>Tanggal</label>
<input type="date" name="tanggal" class="form-control" <input type="date" name="tanggal"
class="form-control @error('tanggal') is-invalid @enderror"
value="{{ old('tanggal', date('Y-m-d')) }}" max="{{ date('Y-m-d') }}" required> value="{{ old('tanggal', date('Y-m-d')) }}" max="{{ date('Y-m-d') }}" required>
@error('tanggal')
<small class="text-danger">{{ $message }}</small>
@enderror
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Nama Barang</label> <label>Nama Barang</label>
@ -347,7 +351,7 @@ class="form-control @error('jumlah') is-invalid @enderror"
<div class="form-group"> <div class="form-group">
<label>Harga (Rp)</label> <label>Harga (Rp)</label>
<input type="text" name="harga_satuan" id="hargaTambah" <input type="text" name="harga_satuan" id="hargaTambah"
class="form-control @error('harga_satuan') is-invalid @enderror" class="form-control @error('harga_satuan') is-invalid @enderror"
inputmode="numeric" maxlength="12" value="{{ old('harga_satuan') }}"> inputmode="numeric" maxlength="12" value="{{ old('harga_satuan') }}">
@error('harga_satuan') @error('harga_satuan')
@ -411,18 +415,23 @@ class="form-control @error('jenis_transaksi') is-invalid @enderror" required>
</select> </select>
@error('jenis_transaksi') @error('jenis_transaksi', 'edit')
<small class="text-danger">{{ $message }}</small> <small class="text-danger">{{ $message }}</small>
@enderror @enderror
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Tanggal</label> <label>Tanggal</label>
<input type="date" name="tanggal" id="tanggalEdit" class="form-control" <input type="date" name="tanggal" id="tanggalEdit"
max="{{ date('Y-m-d') }}" required> class="form-control @error('tanggal') is-invalid @enderror" max="{{ date('Y-m-d') }}"
required>
@error('tanggal', 'edit')
<small class="text-danger">{{ $message }}</small>
@enderror
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Nama Barang</label> <label>Nama Barang</label>
<select name="nama_barang" id="namaEdit" class="form-control" required> <select name="nama_barang" id="namaEdit"
class="form-control @error('nama_barang') is-invalid @enderror" required>
<option value="Jagung">Jagung</option> <option value="Jagung">Jagung</option>
<option value="Katul">Katul</option> <option value="Katul">Katul</option>
@ -431,6 +440,9 @@ class="form-control @error('jenis_transaksi') is-invalid @enderror" required>
<option value="Pakan Starter">Pakan Starter</option> <option value="Pakan Starter">Pakan Starter</option>
</select> </select>
@error('nama_barang', 'edit')
<small class="text-danger">{{ $message }}</small>
@enderror
</div> </div>
<div class="row"> <div class="row">
@ -439,7 +451,10 @@ class="form-control @error('jenis_transaksi') is-invalid @enderror" required>
<label>Jumlah</label> <label>Jumlah</label>
<input type="number" name="jumlah" id="jumlahEdit" max="999999" min="1" <input type="number" name="jumlah" id="jumlahEdit" max="999999" min="1"
inputmode="numeric" maxlength="6" inputmode="numeric" maxlength="6"
class="form-control" required> class="form-control @error('jumlah') is-invalid @enderror" required>
@error('jumlah', 'edit')
<small class="text-danger">{{ $message }}</small>
@enderror
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
@ -453,8 +468,12 @@ class="form-control" required>
<div class="col-md-4 harga-edit"> <div class="col-md-4 harga-edit">
<div class="form-group"> <div class="form-group">
<label>Harga Satuan (Rp)</label> <label>Harga Satuan (Rp)</label>
<input type="text" name="harga_satuan" id="hargaEdit" class="form-control" <input type="text" name="harga_satuan" id="hargaEdit"
class="form-control @error('harga_satuan') is-invalid @enderror"
inputmode="numeric" maxlength="12"> inputmode="numeric" maxlength="12">
@error('harga_satuan', 'edit')
<small class="text-danger">{{ $message }}</small>
@enderror
</div> </div>
</div> </div>
</div> </div>
@ -517,48 +536,53 @@ class="form-control" required>
@section('scripts') @section('scripts')
<script> <script>
const baseUrl = "{{ route('pakan') }}"; const baseUrl = "{{ route('pakan') }}";
function formatRupiah(angka) {
if (!angka) return '';
angka = angka.toString().replace(/\D/g, ''); function formatRupiah(angka) {
return angka.replace(/\B(?=(\d{3})+(?!\d))/g, "."); if (!angka) return '';
}
angka = angka.toString().replace(/\D/g, '');
return angka.replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}
/* TAMBAH */ /* TAMBAH */
function hitungTambah() { function hitungTambah() {
let j = parseInt($('#jumlahTambah').val()) || 0; let j = parseInt($('#jumlahTambah').val()) || 0;
let h = $('#hargaTambah').val().replace(/\D/g, ''); let h = $('#hargaTambah').val().replace(/\D/g, '');
h = parseInt(h) || 0; h = parseInt(h) || 0;
$('#totalTambah').val( $('#totalTambah').val(
'Rp ' + (j * h).toLocaleString('id-ID') 'Rp ' + (j * h).toLocaleString('id-ID')
); );
} }
$('#hargaTambah').on('input', function() { $('#hargaTambah').on('input', function() {
let angka = this.value.replace(/\D/g, ''); let angka = this.value.replace(/\D/g, '');
if (angka.length > 9) { if (angka.length > 9) {
angka = angka.slice(0, 9); angka = angka.slice(0, 9);
} }
this.value = formatRupiah(angka); this.value = formatRupiah(angka);
hitungTambah(); hitungTambah();
}); });
/* format harga tambah */ /* format harga tambah */
$('#jumlahTambah').on('input', hitungTambah); $('#jumlahTambah').on('input', hitungTambah);
$('#jenisTambah').on('change', function() { $('#jenisTambah').on('change', function() {
if (this.value === 'keluar') { if (this.value === 'keluar') {
$('.harga-tambah').hide(); $('.harga-tambah').hide();
$('#hargaTambah,#totalTambah').val(''); $('#hargaTambah')
.val('')
.prop('disabled', true);
$('#totalTambah').val('');
} else { } else {
$('.harga-tambah').show(); $('.harga-tambah').show();
$('#hargaTambah').prop('disabled', false);
} }
}); });
@ -566,32 +590,32 @@ function hitungTambah() {
/* EDIT */ /* EDIT */
function hitungEdit() { function hitungEdit() {
let j = parseInt($('#jumlahEdit').val()) || 0; let j = parseInt($('#jumlahEdit').val()) || 0;
let h = $('#hargaEdit').val().replace(/\./g, ''); let h = $('#hargaEdit').val().replace(/\./g, '');
h = parseInt(h) || 0; h = parseInt(h) || 0;
$('#totalEdit').val( $('#totalEdit').val(
j && h ? 'Rp ' + (j * h).toLocaleString('id-ID') : '' j && h ? 'Rp ' + (j * h).toLocaleString('id-ID') : ''
); );
} }
/* realtime hitung */ /* realtime hitung */
$('#jumlahEdit, #hargaEdit').on('input', hitungEdit); $('#jumlahEdit, #hargaEdit').on('input', hitungEdit);
/* format harga edit */ /* format harga edit */
$('#hargaEdit').on('input', function() { $('#hargaEdit').on('input', function() {
let angka = this.value.replace(/\./g, ''); let angka = this.value.replace(/\./g, '');
if (angka.length > 9) { if (angka.length > 9) {
angka = angka.slice(0, 9); angka = angka.slice(0, 9);
} }
this.value = formatRupiah(angka); this.value = formatRupiah(angka);
hitungEdit(); hitungEdit();
}); });
/* perubahan jenis transaksi edit */ /* perubahan jenis transaksi edit */
$('#jenisEdit').on('change', function() { $('#jenisEdit').on('change', function() {
@ -608,41 +632,44 @@ function hitungEdit() {
/* modal edit dibuka */ /* modal edit dibuka */
$('#modalEditTransaksi').on('show.bs.modal', function(e) { $('#modalEditTransaksi').on('show.bs.modal', function(e) {
let btn = $(e.relatedTarget); // CEK: kalau ada error edit, JANGAN override input
let isError = {{ $errors->edit->any() ? 'true' : 'false' }};
$('#formEditTransaksi').attr('action', baseUrl + '/' + btn.data('id')); if (isError) return; // STOP di sini, biar pakai old()
// FIX NAMA BARANG let btn = $(e.relatedTarget);
$('#namaEdit').val(''); // RESET DULU let id = btn.data('id');
let nama = btn.data('nama'); $('#formEditTransaksi').attr('action', baseUrl + '/' + btn.data('id'));
$('#namaEdit option').each(function () {
if ($(this).val().toLowerCase() === String(nama).toLowerCase()) {
$(this).prop('selected', true);
}
});
// jenis // FIX NAMA BARANG
$('#jenisEdit').val(btn.data('jenis')); $('#namaEdit').val(''); // RESET DULU
// jumlah (langsung angka asli) let nama = btn.data('nama');
$('#jumlahEdit').val(btn.data('jumlah')); $('#namaEdit option').each(function() {
if ($(this).val().toLowerCase() === String(nama).toLowerCase()) {
$(this).prop('selected', true);
}
});
// harga // jenis
let harga = parseInt(btn.data('harga')) || 0; $('#jenisEdit').val(btn.data('jenis'));
$('#hargaEdit').val(harga ? formatRupiah(harga.toString()) : ''); // jumlah (langsung angka asli)
// if (harga !== null && harga !== undefined && harga !== '') { $('#jumlahEdit').val(btn.data('jumlah'));
// $('#hargaEdit').val(formatRupiah(harga));} else {
// $('#hargaEdit').val('');
// }
// tanggal // harga
$('#tanggalEdit').val(btn.data('tanggal')); let harga = parseInt(btn.data('harga')) || 0;
$('#jenisEdit').trigger('change'); $('#hargaEdit').val(harga ? formatRupiah(harga.toString()) : '');
hitungEdit();
});
// tanggal
$('#tanggalEdit').val(btn.data('tanggal'));
$('#jenisEdit').trigger('change');
hitungEdit();
});
/* HAPUS */ /* HAPUS */
$('#modalHapusTransaksi').on('show.bs.modal', function(e) { $('#modalHapusTransaksi').on('show.bs.modal', function(e) {
@ -686,15 +713,59 @@ function hitungEdit() {
@endif @endif
@if ($errors->any()) @if ($errors->any() && !$errors->edit->any())
<script> <script>
$(document).ready(function() { $(document).ready(function() {
$('#modalTransaksi').modal('show'); $('#modalTransaksi').modal('show');
hitungTambah();
let jenis = "{{ old('jenis_transaksi') }}";
if (jenis === 'keluar') {
$('.harga-tambah').hide();
$('#hargaTambah').prop('disabled', true);
} else {
$('.harga-tambah').show();
$('#hargaTambah').prop('disabled', false);
}
hitungTambah();
}); });
</script> </script>
@endif @endif
@if ($errors->edit->any())
<script>
$(document).ready(function() {
let id = "{{ session('edit_id') }}";
// SET ACTION WAJIB!
$('#formEditTransaksi').attr('action', "{{ route('pakan') }}/" + id);
$('#modalEditTransaksi').modal('show');
// isi pakai old input
$('#jenisEdit').val("{{ old('jenis_transaksi') }}");
$('#tanggalEdit').val("{{ old('tanggal') }}");
$('#jumlahEdit').val("{{ old('jumlah') }}");
let nama = "{{ old('nama_barang') }}";
$('#namaEdit option').each(function() {
if ($(this).val().toLowerCase() === nama.toLowerCase()) {
$(this).prop('selected', true);
}
});
let harga = "{{ old('harga_satuan') }}";
if (harga) {
$('#hargaEdit').val(formatRupiah(harga));
}
$('#jenisEdit').trigger('change');
hitungEdit();
});
</script>
@endif
@endsection @endsection