update telur dan perbaikan bug

This commit is contained in:
ninavirgiana 2026-03-24 19:51:19 +07:00
parent 3872207bf0
commit ece92b25b2
5 changed files with 159 additions and 67 deletions

View File

@ -7,6 +7,7 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
class HasilController extends Controller
{
@ -47,9 +48,7 @@ public function index(Request $request)
});
}
if ($request->kandang) {
$query->where('kandang_id', $request->kandang);
}
if ($request->bulan) {
$query->whereMonth('tanggal_produksi', $request->bulan);
@ -79,7 +78,7 @@ public function index(Request $request)
public function store(Request $request)
{
$request->validate([
$validator = Validator::make($request->all(), [
'kandang_id' => 'required|exists:kandang,id',
'shift' => 'required|in:pagi,sore',
'berat_telur_layak' => 'required|regex:/^\d{1,6}(\.\d{1,2})?$/',
@ -103,15 +102,23 @@ public function store(Request $request)
'tanggal_produksi.before_or_equal' => 'Tanggal tidak boleh melebihi hari ini.',
]);
if ($validator->fails()) {
return redirect()->route('hasil')
->withErrors($validator)
->withInput()
->with('form', 'tambah');
}
$total = $request->berat_telur_layak + $request->berat_telur_rusak;
$layak = (float) $request->berat_telur_layak;
$rusak = (float) $request->berat_telur_rusak;
$total = $layak + $rusak;
ProduksiTelur::create([
'kandang_id' => $request->kandang_id,
'user_id' => Auth::id(),
'shift' => $request->shift,
'berat_telur_layak' => $request->berat_telur_layak,
'berat_telur_rusak' => $request->berat_telur_rusak,
'berat_telur_layak' => $layak,
'berat_telur_rusak' => $rusak,
'berat_telur_total' => $total,
'tanggal_produksi' => $request->tanggal_produksi,
]);
@ -123,7 +130,7 @@ public function store(Request $request)
public function update(Request $request, $id)
{
$request->validate([
$validator = Validator::make($request->all(), [
'kandang_id' => 'required|exists:kandang,id',
'shift' => 'required|in:pagi,sore',
'berat_telur_layak' => 'required|regex:/^\d{1,6}(\.\d{1,2})?$/',
@ -150,20 +157,29 @@ public function update(Request $request, $id)
'tanggal_produksi.before_or_equal' => 'Tanggal tidak boleh melebihi hari ini.',
]);
if ($validator->fails()) {
return redirect()->route('hasil')
->withErrors($validator)
->withInput()
->with('form', 'edit')
->with('edit_id', $id);
}
$total = $request->berat_telur_layak + $request->berat_telur_rusak;
$layak = (float) $request->berat_telur_layak;
$rusak = (float) $request->berat_telur_rusak;
$total = $layak + $rusak;
ProduksiTelur::findOrFail($id)->update([
'kandang_id' => $request->kandang_id,
'shift' => $request->shift,
'berat_telur_layak' => $request->berat_telur_layak,
'berat_telur_rusak' => $request->berat_telur_rusak,
'berat_telur_layak' => $layak,
'berat_telur_rusak' => $rusak,
'berat_telur_total' => $total,
'tanggal_produksi' => $request->tanggal_produksi,
]);
return redirect()->route('hasil')
->with('success', 'Data produksi berhasil diperbarui.');
->with('success', 'Data berhasil diupdate.');
}

View File

@ -3,16 +3,32 @@
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
web: __DIR__ . '/../routes/web.php',
commands: __DIR__ . '/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware): void {
//
})
->withExceptions(function (Exceptions $exceptions): void {
//
// 405 - Method tidak sesuai
$exceptions->render(function (MethodNotAllowedHttpException $e, $request) {
if (!Auth::check()) {
return redirect()->route('login');
}
});
// 404 - URL tidak ditemukan / diisengi
$exceptions->render(function (NotFoundHttpException $e, $request) {
if (!Auth::check()) {
return redirect()->route('login');
}
});
})->create();

View File

@ -288,44 +288,78 @@ class="form-control @error('tanggal_produksi') is-invalid @enderror"
<div class="modal-body">
<!-- KANDANG -->
<div class="form-group">
<label>Kandang</label>
<select name="kandang_id" class="form-control">
<select name="kandang_id" class="form-control @error('kandang_id') is-invalid @enderror">
<option value="">-- Pilih Kandang --</option>
@foreach ($kandang as $k)
<option value="{{ $k->id }}">{{ $k->nama_kandang }}</option>
<option value="{{ $k->id }}">
{{ $k->nama_kandang }}
</option>
@endforeach
</select>
@error('kandang_id')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<!-- SHIFT -->
<div class="form-group">
<label>Shift</label>
<select name="shift" class="form-control">
<option value="pagi">Pagi</option>
<option value="sore">Sore</option>
<select name="shift" class="form-control @error('shift') is-invalid @enderror">
<option value="">-- Pilih Shift --</option>
<option value="pagi" {{ old('shift') == 'pagi' ? 'selected' : '' }}>Pagi</option>
<option value="sore" {{ old('shift') == 'sore' ? 'selected' : '' }}>Sore</option>
</select>
@error('shift')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
<!-- BERAT -->
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label>Berat Telur Layak (Kg)</label>
<input type="text" name="berat_telur_layak" class="form-control" maxlength="6" inputmode="decimal"
<input type="text" name="berat_telur_layak"
class="form-control @error('berat_telur_layak') is-invalid @enderror"
value="{{ old('berat_telur_layak') }}" maxlength="6" inputmode="decimal"
oninput="validasiBerat(this)">
@error('berat_telur_layak')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Berat Telur Rusak (Kg)</label>
<input type="text" name="berat_telur_rusak" class="form-control" maxlength="6" inputmode="decimal"
<input type="text" name="berat_telur_rusak"
class="form-control @error('berat_telur_rusak') is-invalid @enderror"
value="{{ old('berat_telur_rusak') }}" maxlength="6" inputmode="decimal"
oninput="validasiBerat(this)">
@error('berat_telur_rusak')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
</div>
</div>
<!-- TANGGAL -->
<div class="form-group">
<label>Tanggal Produksi</label>
<input type="date" name="tanggal_produksi" min="2000-01-01" max="{{ date('Y-m-d') }}"
class="form-control">
<input type="date" name="tanggal_produksi"
class="form-control @error('tanggal_produksi') is-invalid @enderror"
value="{{ old('tanggal_produksi') }}" min="2000-01-01" max="{{ date('Y-m-d') }}">
@error('tanggal_produksi')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
</div>
@ -391,7 +425,7 @@ function autoSubmit() {
$('#formFilter').submit();
});
function formatBerat(angka) {
function formatBerat(angka) {
if (!angka && angka !== 0) return '';
let num = Number(angka);
@ -401,7 +435,7 @@ function formatBerat(angka) {
}
return num.toFixed(2).replace(/\.?0+$/, ''); // contoh: 10.50 → 10.5
}
}
/* MODAL EDIT */
$('#modalEditProduksi').on('show.bs.modal', function(e) {
@ -418,7 +452,7 @@ function formatBerat(angka) {
$('#formEdit [name=berat_telur_layak]').val(formatBerat(btn.data('layak') ?? 0));
$('#formEdit [name=berat_telur_rusak]').val(formatBerat(btn.data('rusak') ?? 0));
$('#formEdit [name=tanggal_produksi]').val(btn.data('tanggal'));
});
});
/* MODAL HAPUS */
@ -430,13 +464,34 @@ function formatBerat(angka) {
url = url.replace(':id', id);
$('#formHapus').attr('action', url);
});
});
/*AUTO OPEN MODAL JIKA ERROR */
@if ($errors->any())
$(document).ready(function() {
let form = "{{ session('form') }}";
if (form === 'edit') {
let editId = "{{ session('edit_id') }}";
$('#modalEditProduksi').modal('show');
// langsung pakai old() untuk isi form
$('#formEdit [name=kandang_id]').val("{{ old('kandang_id') }}");
$('#formEdit [name=shift]').val("{{ old('shift') }}");
$('#formEdit [name=berat_telur_layak]').val("{{ old('berat_telur_layak') }}");
$('#formEdit [name=berat_telur_rusak]').val("{{ old('berat_telur_rusak') }}");
$('#formEdit [name=tanggal_produksi]').val("{{ old('tanggal_produksi') }}");
// set action form edit
let url = "{{ route('hasil.update', ':id') }}".replace(':id', editId);
$('#formEdit').attr('action', url);
} else {
$('#modalTambahProduksi').modal('show');
}
});
@endif

View File

@ -6,12 +6,12 @@
<link rel="icon" type="image/png" href="{{ asset('assets/img/favicon.png') }}">
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no'
name='viewport' />
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<link rel="stylesheet" href="{{ asset('assets/css/bootstrap.min.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/ready.css">
<link rel="stylesheet" href="assets/css/demo.css">
<link rel="stylesheet" href="assets/css/custom.css">
<link rel="stylesheet" href="{{ asset('assets/css/ready.css') }}">
<link rel="stylesheet" href="{{ asset('assets/css/demo.css') }}">
<link rel="stylesheet" href="{{ asset('assets/css/custom.css') }}">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/line-awesome/1.3.0/line-awesome/css/line-awesome.min.css">
@ -224,19 +224,19 @@ class="d-none d-sm-inline font-weight-bold text-dark">{{ auth()->user()->name }}
@yield('content')
<script src="assets/js/core/jquery.3.2.1.min.js"></script>
<script src="assets/js/core/popper.min.js"></script>
<script src="assets/js/core/bootstrap.min.js"></script>
<script src="assets/js/plugin/jquery-ui-1.12.1.custom/jquery-ui.min.js"></script>
<script src="assets/js/plugin/chartist/chartist.min.js"></script>
<script src="assets/js/plugin/chartist/plugin/chartist-plugin-tooltip.min.js"></script>
<script src="assets/js/plugin/bootstrap-notify/bootstrap-notify.min.js"></script>
<script src="assets/js/plugin/bootstrap-toggle/bootstrap-toggle.min.js"></script>
<script src="assets/js/plugin/jquery-mapael/jquery.mapael.min.js"></script>
<script src="assets/js/plugin/jquery-mapael/maps/world_countries.min.js"></script>
<script src="assets/js/plugin/chart-circle/circles.min.js"></script>
<script src="assets/js/plugin/jquery-scrollbar/jquery.scrollbar.min.js"></script>
<script src="assets/js/ready.min.js"></script>
<script src="{{ asset('assets/js/core/jquery.3.2.1.min.js') }}"></script>
<script src="{{ asset('assets/js/core/popper.min.js') }}"></script>
<script src="{{ asset('assets/js/core/bootstrap.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/jquery-ui-1.12.1.custom/jquery-ui.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/chartist/chartist.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/chartist/plugin/chartist-plugin-tooltip.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/bootstrap-notify/bootstrap-notify.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/bootstrap-toggle/bootstrap-toggle.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/jquery-mapael/jquery.mapael.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/jquery-mapael/maps/world_countries.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/chart-circle/circles.min.js') }}"></script>
<script src="{{ asset('assets/js/plugin/jquery-scrollbar/jquery.scrollbar.min.js') }}"></script>
<script src="{{ asset('assets/js/ready.min.js') }}"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

View File

@ -99,3 +99,8 @@
Route::get('/laporan/export', [LaporanController::class, 'export'])->name('laporan.export');
});
});
Route::fallback(function () {
return Auth::check()
? abort(404)
: redirect()->route('login');
});