update profile & produktivitas
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
@csrf
|
||||
|
||||
@if(isset($kualitas))
|
||||
@method('PUT')
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Referensi Produksi</label>
|
||||
<select name="produksi_id" class="form-select @error('produksi_id') is-invalid @enderror">
|
||||
<option value="">Pilih Produksi</option>
|
||||
@foreach($produksi as $item)
|
||||
<option value="{{ $item->id }}" {{ old('produksi_id', $kualitas->produksi_id ?? '') == $item->id ? 'selected' : '' }}>
|
||||
{{ $item->kode_produksi ?? 'Produksi #' . $item->id }} - {{ $item->komoditas->nama ?? '-' }} - {{ $item->profile->nama ?? '-' }}
|
||||
</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('produksi_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Tanggal Pemeriksaan</label>
|
||||
<input type="date" name="tanggal_pemeriksaan" class="form-control @error('tanggal_pemeriksaan') is-invalid @enderror" value="{{ old('tanggal_pemeriksaan', isset($kualitas) && $kualitas->tanggal_pemeriksaan ? $kualitas->tanggal_pemeriksaan->format('Y-m-d') : '') }}">
|
||||
@error('tanggal_pemeriksaan')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Petani <span class="text-danger">*</span></label>
|
||||
<select name="profile_id" id="profile_id" class="form-select @error('profile_id') is-invalid @enderror" required>
|
||||
<option value="">Pilih Petani</option>
|
||||
@foreach($profiles as $profile)
|
||||
<option value="{{ $profile->id }}" {{ old('profile_id', $kualitas->profile_id ?? '') == $profile->id ? 'selected' : '' }}>{{ $profile->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('profile_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Lahan <span class="text-danger">*</span></label>
|
||||
<select name="lahan_id" id="lahan_id" class="form-select @error('lahan_id') is-invalid @enderror" required disabled>
|
||||
<option value="">Pilih Petani terlebih dahulu</option>
|
||||
</select>
|
||||
@error('lahan_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Komoditas <span class="text-danger">*</span></label>
|
||||
<select name="komoditas_id" class="form-select @error('komoditas_id') is-invalid @enderror" required>
|
||||
<option value="">Pilih Komoditas</option>
|
||||
@foreach($komoditas as $item)
|
||||
<option value="{{ $item->id }}" {{ old('komoditas_id', $kualitas->komoditas_id ?? '') == $item->id ? 'selected' : '' }}>{{ $item->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('komoditas_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Grade <span class="text-danger">*</span></label>
|
||||
<select name="grade" class="form-select @error('grade') is-invalid @enderror" required>
|
||||
<option value="">Pilih Grade</option>
|
||||
@foreach(['A', 'B', 'C', 'Reject'] as $grade)
|
||||
<option value="{{ $grade }}" {{ old('grade', $kualitas->grade ?? '') == $grade ? 'selected' : '' }}>{{ $grade }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('grade')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Kadar Air (%)</label>
|
||||
<input type="number" step="0.01" name="kadar_air" class="form-control @error('kadar_air') is-invalid @enderror" value="{{ old('kadar_air', $kualitas->kadar_air ?? '') }}">
|
||||
@error('kadar_air')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Status Kelayakan <span class="text-danger">*</span></label>
|
||||
<select name="status_kelayakan" class="form-select @error('status_kelayakan') is-invalid @enderror" required>
|
||||
@foreach(['layak' => 'Layak', 'perlu_sortir' => 'Perlu Sortir', 'tidak_layak' => 'Tidak Layak'] as $value => $label)
|
||||
<option value="{{ $value }}" {{ old('status_kelayakan', $kualitas->status_kelayakan ?? 'layak') == $value ? 'selected' : '' }}>{{ $label }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('status_kelayakan')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Berat Bersih</label>
|
||||
<input type="number" step="0.01" name="berat_bersih" class="form-control @error('berat_bersih') is-invalid @enderror" value="{{ old('berat_bersih', $kualitas->berat_bersih ?? '') }}">
|
||||
@error('berat_bersih')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Berat Rusak</label>
|
||||
<input type="number" step="0.01" name="berat_rusak" class="form-control @error('berat_rusak') is-invalid @enderror" value="{{ old('berat_rusak', $kualitas->berat_rusak ?? '') }}">
|
||||
@error('berat_rusak')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Standar Mutu</label>
|
||||
<input type="text" name="standar_mutu" class="form-control @error('standar_mutu') is-invalid @enderror" value="{{ old('standar_mutu', $kualitas->standar_mutu ?? '') }}" placeholder="Contoh: SNI / Internal">
|
||||
@error('standar_mutu')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Pemeriksa</label>
|
||||
<input type="text" name="pemeriksa" class="form-control @error('pemeriksa') is-invalid @enderror" value="{{ old('pemeriksa', $kualitas->pemeriksa ?? '') }}">
|
||||
@error('pemeriksa')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Catatan</label>
|
||||
<textarea name="catatan" class="form-control @error('catatan') is-invalid @enderror" rows="3">{{ old('catatan', $kualitas->catatan ?? '') }}</textarea>
|
||||
@error('catatan')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-end">
|
||||
<a href="{{ route('kualitas.index') }}" class="btn btn-label-secondary me-2">Batal</a>
|
||||
<button type="submit" class="btn btn-primary"><i class="ti tabler-device-floppy me-1"></i> Simpan</button>
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
@php
|
||||
$lahanOptions = $lahan->map(function ($item) {
|
||||
return [
|
||||
'id' => $item->id,
|
||||
'profile_id' => $item->profile_id,
|
||||
'nama' => $item->nama,
|
||||
];
|
||||
})->values();
|
||||
@endphp
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const profileSelect = document.getElementById('profile_id');
|
||||
const lahanSelect = document.getElementById('lahan_id');
|
||||
const selectedLahanId = "{{ old('lahan_id', $kualitas->lahan_id ?? '') }}";
|
||||
const lahanOptions = @json($lahanOptions);
|
||||
|
||||
function renderLahanOptions() {
|
||||
const profileId = profileSelect.value;
|
||||
|
||||
lahanSelect.innerHTML = '';
|
||||
|
||||
if (!profileId) {
|
||||
lahanSelect.disabled = true;
|
||||
lahanSelect.add(new Option('Pilih Petani terlebih dahulu', ''));
|
||||
return;
|
||||
}
|
||||
|
||||
const filteredLahan = lahanOptions.filter((item) => String(item.profile_id) === String(profileId));
|
||||
|
||||
lahanSelect.disabled = false;
|
||||
lahanSelect.add(new Option(filteredLahan.length ? 'Pilih Lahan' : 'Petani ini belum memiliki lahan', ''));
|
||||
|
||||
filteredLahan.forEach((item) => {
|
||||
const option = new Option(item.nama, item.id);
|
||||
option.selected = String(item.id) === String(selectedLahanId);
|
||||
lahanSelect.add(option);
|
||||
});
|
||||
|
||||
if (!filteredLahan.length) {
|
||||
lahanSelect.disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
profileSelect.addEventListener('change', function () {
|
||||
renderLahanOptions();
|
||||
lahanSelect.value = '';
|
||||
});
|
||||
|
||||
renderLahanOptions();
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,17 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Tambah Data Kualitas</h5>
|
||||
<a href="{{ route('kualitas.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
||||
</div>
|
||||
<div class="card-body pt-4">
|
||||
<form action="{{ route('kualitas.store') }}" method="POST">
|
||||
@include('produktivitas.kualitas._form')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,17 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Edit Data Kualitas</h5>
|
||||
<a href="{{ route('kualitas.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
||||
</div>
|
||||
<div class="card-body pt-4">
|
||||
<form action="{{ route('kualitas.update', $kualitas->id) }}" method="POST">
|
||||
@include('produktivitas.kualitas._form')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,128 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success alert-dismissible" role="alert">
|
||||
{{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Data Kualitas</h5>
|
||||
<a href="{{ route('kualitas.create') }}" class="btn btn-sm btn-primary"><i class="ti tabler-plus me-1"></i> Tambah Kualitas</a>
|
||||
</div>
|
||||
<div class="card-body border-bottom pt-4">
|
||||
<form method="GET" action="{{ route('kualitas.index') }}" class="d-flex justify-content-between align-items-center row gap-3 gap-md-0">
|
||||
<div class="col-md-auto d-flex align-items-center">
|
||||
<label class="me-2 text-nowrap">Show</label>
|
||||
<select name="per_page" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
||||
@foreach([10, 25, 50] as $size)
|
||||
<option value="{{ $size }}" {{ request('per_page', 10) == $size ? 'selected' : '' }}>{{ $size }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<label class="ms-2 text-nowrap">entries</label>
|
||||
</div>
|
||||
<div class="col-md-auto d-flex gap-2">
|
||||
<select name="status_kelayakan" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
||||
<option value="">Semua Status</option>
|
||||
<option value="layak" {{ request('status_kelayakan') == 'layak' ? 'selected' : '' }}>Layak</option>
|
||||
<option value="perlu_sortir" {{ request('status_kelayakan') == 'perlu_sortir' ? 'selected' : '' }}>Perlu Sortir</option>
|
||||
<option value="tidak_layak" {{ request('status_kelayakan') == 'tidak_layak' ? 'selected' : '' }}>Tidak Layak</option>
|
||||
</select>
|
||||
<div class="input-group input-group-sm w-auto">
|
||||
<input type="text" name="search" class="form-control" placeholder="Cari kualitas..." value="{{ request('search') }}">
|
||||
<button type="submit" class="btn btn-outline-primary"><i class="ti tabler-search"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive text-nowrap">
|
||||
<table class="table table-hover">
|
||||
<thead class="border-top">
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Produksi</th>
|
||||
<th>Petani</th>
|
||||
<th>Komoditas</th>
|
||||
<th>Grade</th>
|
||||
<th>Kadar Air</th>
|
||||
<th>Kerusakan</th>
|
||||
<th>Status</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($kualitas as $index => $item)
|
||||
<tr>
|
||||
<td>{{ $kualitas->firstItem() + $index }}</td>
|
||||
<td>{{ $item->produksi->kode_produksi ?? '-' }}</td>
|
||||
<td>{{ $item->profile->nama ?? '-' }}</td>
|
||||
<td>{{ $item->komoditas->nama ?? '-' }}</td>
|
||||
<td><span class="badge bg-label-primary">{{ $item->grade ?? '-' }}</span></td>
|
||||
<td>{{ $item->kadar_air ? $item->kadar_air . '%' : '-' }}</td>
|
||||
<td>{{ $item->persentase_kerusakan ? $item->persentase_kerusakan . '%' : '-' }}</td>
|
||||
<td>
|
||||
@php($statusClass = ['layak' => 'success', 'perlu_sortir' => 'warning', 'tidak_layak' => 'danger'][$item->status_kelayakan] ?? 'secondary')
|
||||
<span class="badge bg-label-{{ $statusClass }}">{{ ucwords(str_replace('_', ' ', $item->status_kelayakan)) }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="{{ route('kualitas.edit', $item->id) }}" class="btn btn-icon btn-text-secondary rounded-pill"><i class="ti tabler-edit ti-md"></i></a>
|
||||
<a href="javascript:;" class="btn btn-icon btn-text-secondary rounded-pill delete-record" data-id="{{ $item->id }}" data-nama="{{ $item->komoditas->nama ?? 'Kualitas' }}"><i class="ti tabler-trash ti-md"></i></a>
|
||||
<a href="{{ route('kualitas.show', $item->id) }}" class="btn btn-icon btn-text-secondary rounded-pill"><i class="ti tabler-eye ti-md"></i></a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr><td colspan="9" class="text-center py-4">Tidak ada data kualitas ditemukan.</td></tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-center justify-content-md-end border-top">
|
||||
{{ $kualitas->appends(request()->query())->links('pagination::bootstrap-5') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
const csrfTokenKualitas = "{{ csrf_token() }}";
|
||||
|
||||
$(document).on('click', '.delete-record', function () {
|
||||
const id = $(this).data('id');
|
||||
const name = $(this).data('nama');
|
||||
|
||||
Swal.fire({
|
||||
title: 'Hapus Kualitas?',
|
||||
text: `Data "${name}" akan dihapus.`,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Ya, Hapus!',
|
||||
cancelButtonText: 'Batal',
|
||||
customClass: { confirmButton: 'btn btn-danger me-3', cancelButton: 'btn btn-label-secondary' },
|
||||
buttonsStyling: false
|
||||
}).then(function (result) {
|
||||
if (result.value) {
|
||||
$.ajax({
|
||||
url: `/kualitas/${id}`,
|
||||
type: 'DELETE',
|
||||
headers: { 'X-CSRF-TOKEN': csrfTokenKualitas },
|
||||
success: function (res) {
|
||||
Swal.fire({ icon: 'success', title: 'Terhapus!', text: res.message, showConfirmButton: false, timer: 1500 })
|
||||
.then(() => window.location.reload());
|
||||
},
|
||||
error: function () {
|
||||
Swal.fire({ icon: 'error', title: 'Gagal!', text: 'Terjadi kesalahan saat menghapus data.' });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,40 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Detail Kualitas</h5>
|
||||
<a href="{{ route('kualitas.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
||||
</div>
|
||||
<div class="card-body pt-4">
|
||||
<div class="row g-3">
|
||||
@foreach([
|
||||
'Produksi' => $kualitas->produksi->kode_produksi ?? '-',
|
||||
'Tanggal Pemeriksaan' => $kualitas->tanggal_pemeriksaan ? $kualitas->tanggal_pemeriksaan->format('d-m-Y') : '-',
|
||||
'Petani' => $kualitas->profile->nama ?? '-',
|
||||
'Lahan' => $kualitas->lahan->nama ?? '-',
|
||||
'Komoditas' => $kualitas->komoditas->nama ?? '-',
|
||||
'Grade' => $kualitas->grade,
|
||||
'Kadar Air' => $kualitas->kadar_air ? $kualitas->kadar_air . '%' : '-',
|
||||
'Berat Bersih' => $kualitas->berat_bersih,
|
||||
'Berat Rusak' => $kualitas->berat_rusak,
|
||||
'Persentase Kerusakan' => $kualitas->persentase_kerusakan ? $kualitas->persentase_kerusakan . '%' : '-',
|
||||
'Standar Mutu' => $kualitas->standar_mutu,
|
||||
'Status Kelayakan' => ucwords(str_replace('_', ' ', $kualitas->status_kelayakan)),
|
||||
'Pemeriksa' => $kualitas->pemeriksa,
|
||||
] as $label => $value)
|
||||
<div class="col-md-4">
|
||||
<label class="form-label text-muted">{{ $label }}</label>
|
||||
<div class="fw-medium">{{ $value ?? '-' }}</div>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="col-12">
|
||||
<label class="form-label text-muted">Catatan</label>
|
||||
<div>{{ $kualitas->catatan ?? '-' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,157 @@
|
||||
@csrf
|
||||
|
||||
@if(isset($produksi))
|
||||
@method('PUT')
|
||||
@endif
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Kode Produksi</label>
|
||||
<input type="text" name="kode_produksi" class="form-control @error('kode_produksi') is-invalid @enderror" value="{{ old('kode_produksi', $produksi->kode_produksi ?? '') }}" placeholder="Contoh: PRD-2026-001">
|
||||
@error('kode_produksi')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Periode</label>
|
||||
<input type="text" name="periode" class="form-control @error('periode') is-invalid @enderror" value="{{ old('periode', $produksi->periode ?? '') }}" placeholder="Contoh: Musim Tanam I 2026">
|
||||
@error('periode')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Petani <span class="text-danger">*</span></label>
|
||||
<select name="profile_id" id="profile_id" class="form-select @error('profile_id') is-invalid @enderror" required>
|
||||
<option value="">Pilih Petani</option>
|
||||
@foreach($profiles as $profile)
|
||||
<option value="{{ $profile->id }}" {{ old('profile_id', $produksi->profile_id ?? '') == $profile->id ? 'selected' : '' }}>{{ $profile->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('profile_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Lahan <span class="text-danger">*</span></label>
|
||||
<select name="lahan_id" id="lahan_id" class="form-select @error('lahan_id') is-invalid @enderror" required disabled>
|
||||
<option value="">Pilih Petani terlebih dahulu</option>
|
||||
</select>
|
||||
@error('lahan_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Tanaman</label>
|
||||
<select name="tanaman_id" class="form-select @error('tanaman_id') is-invalid @enderror">
|
||||
<option value="">Pilih Tanaman</option>
|
||||
@foreach($tanaman as $item)
|
||||
<option value="{{ $item->id }}" {{ old('tanaman_id', $produksi->tanaman_id ?? '') == $item->id ? 'selected' : '' }}>{{ $item->nama }}{{ $item->komoditas ? ' - ' . $item->komoditas->nama : '' }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('tanaman_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-3">
|
||||
<label class="form-label">Komoditas <span class="text-danger">*</span></label>
|
||||
<select name="komoditas_id" class="form-select @error('komoditas_id') is-invalid @enderror" required>
|
||||
<option value="">Pilih Komoditas</option>
|
||||
@foreach($komoditas as $item)
|
||||
<option value="{{ $item->id }}" {{ old('komoditas_id', $produksi->komoditas_id ?? '') == $item->id ? 'selected' : '' }}>{{ $item->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('komoditas_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Tanggal Panen</label>
|
||||
<input type="date" name="tanggal_panen" class="form-control @error('tanggal_panen') is-invalid @enderror" value="{{ old('tanggal_panen', isset($produksi) && $produksi->tanggal_panen ? $produksi->tanggal_panen->format('Y-m-d') : '') }}">
|
||||
@error('tanggal_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Luas Tanam</label>
|
||||
<input type="number" step="0.01" name="luas_tanam" class="form-control @error('luas_tanam') is-invalid @enderror" value="{{ old('luas_tanam', $produksi->luas_tanam ?? '') }}">
|
||||
@error('luas_tanam')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Luas Panen</label>
|
||||
<input type="number" step="0.01" name="luas_panen" class="form-control @error('luas_panen') is-invalid @enderror" value="{{ old('luas_panen', $produksi->luas_panen ?? '') }}">
|
||||
@error('luas_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Jumlah Panen</label>
|
||||
<input type="number" step="0.01" name="jumlah_panen" class="form-control @error('jumlah_panen') is-invalid @enderror" value="{{ old('jumlah_panen', $produksi->jumlah_panen ?? '') }}">
|
||||
@error('jumlah_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Satuan <span class="text-danger">*</span></label>
|
||||
<select name="satuan" class="form-select @error('satuan') is-invalid @enderror" required>
|
||||
@foreach(['kg' => 'Kg', 'ton' => 'Ton', 'kuintal' => 'Kuintal'] as $value => $label)
|
||||
<option value="{{ $value }}" {{ old('satuan', $produksi->satuan ?? 'kg') == $value ? 'selected' : '' }}>{{ $label }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('satuan')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Status Panen <span class="text-danger">*</span></label>
|
||||
<select name="status_panen" class="form-select @error('status_panen') is-invalid @enderror" required>
|
||||
@foreach(['belum_panen' => 'Belum Panen', 'panen_sebagian' => 'Panen Sebagian', 'selesai' => 'Selesai'] as $value => $label)
|
||||
<option value="{{ $value }}" {{ old('status_panen', $produksi->status_panen ?? 'belum_panen') == $value ? 'selected' : '' }}>{{ $label }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('status_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-12 mb-3">
|
||||
<label class="form-label">Catatan</label>
|
||||
<textarea name="catatan" class="form-control @error('catatan') is-invalid @enderror" rows="4" placeholder="Catatan kendala atau informasi tambahan">{{ old('catatan', $produksi->catatan ?? '') }}</textarea>
|
||||
@error('catatan')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-end">
|
||||
<a href="{{ route('produksi.index') }}" class="btn btn-label-secondary me-2">Batal</a>
|
||||
<button type="submit" class="btn btn-primary"><i class="ti tabler-device-floppy me-1"></i> Simpan</button>
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
@php
|
||||
$lahanOptions = $lahan->map(function ($item) {
|
||||
return [
|
||||
'id' => $item->id,
|
||||
'profile_id' => $item->profile_id,
|
||||
'nama' => $item->nama,
|
||||
];
|
||||
})->values();
|
||||
@endphp
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const profileSelect = document.getElementById('profile_id');
|
||||
const lahanSelect = document.getElementById('lahan_id');
|
||||
const selectedLahanId = "{{ old('lahan_id', $produksi->lahan_id ?? '') }}";
|
||||
const lahanOptions = @json($lahanOptions);
|
||||
|
||||
function renderLahanOptions() {
|
||||
const profileId = profileSelect.value;
|
||||
|
||||
lahanSelect.innerHTML = '';
|
||||
|
||||
if (!profileId) {
|
||||
lahanSelect.disabled = true;
|
||||
lahanSelect.add(new Option('Pilih Petani terlebih dahulu', ''));
|
||||
return;
|
||||
}
|
||||
|
||||
const filteredLahan = lahanOptions.filter((item) => String(item.profile_id) === String(profileId));
|
||||
|
||||
lahanSelect.disabled = false;
|
||||
lahanSelect.add(new Option(filteredLahan.length ? 'Pilih Lahan' : 'Petani ini belum memiliki lahan', ''));
|
||||
|
||||
filteredLahan.forEach((item) => {
|
||||
const option = new Option(item.nama, item.id);
|
||||
option.selected = String(item.id) === String(selectedLahanId);
|
||||
lahanSelect.add(option);
|
||||
});
|
||||
|
||||
if (!filteredLahan.length) {
|
||||
lahanSelect.disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
profileSelect.addEventListener('change', function () {
|
||||
renderLahanOptions();
|
||||
lahanSelect.value = '';
|
||||
});
|
||||
|
||||
renderLahanOptions();
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,17 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Tambah Data Produksi</h5>
|
||||
<a href="{{ route('produksi.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
||||
</div>
|
||||
<div class="card-body pt-4">
|
||||
<form action="{{ route('produksi.store') }}" method="POST">
|
||||
@include('produktivitas.produksi._form')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,17 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Edit Data Produksi</h5>
|
||||
<a href="{{ route('produksi.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
||||
</div>
|
||||
<div class="card-body pt-4">
|
||||
<form action="{{ route('produksi.update', $produksi->id) }}" method="POST">
|
||||
@include('produktivitas.produksi._form')
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -0,0 +1,131 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@if(session('success'))
|
||||
<div class="alert alert-success alert-dismissible" role="alert">
|
||||
{{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Data Produksi</h5>
|
||||
<a href="{{ route('produksi.create') }}" class="btn btn-sm btn-primary"><i class="ti tabler-plus me-1"></i> Tambah Produksi</a>
|
||||
</div>
|
||||
<div class="card-body border-bottom pt-4">
|
||||
<form method="GET" action="{{ route('produksi.index') }}" class="d-flex justify-content-between align-items-center row gap-3 gap-md-0">
|
||||
<div class="col-md-auto d-flex align-items-center">
|
||||
<label class="me-2 text-nowrap">Show</label>
|
||||
<select name="per_page" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
||||
@foreach([10, 25, 50] as $size)
|
||||
<option value="{{ $size }}" {{ request('per_page', 10) == $size ? 'selected' : '' }}>{{ $size }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<label class="ms-2 text-nowrap">entries</label>
|
||||
</div>
|
||||
<div class="col-md-auto d-flex gap-2">
|
||||
<select name="status_panen" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
||||
<option value="">Semua Status</option>
|
||||
<option value="belum_panen" {{ request('status_panen') == 'belum_panen' ? 'selected' : '' }}>Belum Panen</option>
|
||||
<option value="panen_sebagian" {{ request('status_panen') == 'panen_sebagian' ? 'selected' : '' }}>Panen Sebagian</option>
|
||||
<option value="selesai" {{ request('status_panen') == 'selesai' ? 'selected' : '' }}>Selesai</option>
|
||||
</select>
|
||||
<div class="input-group input-group-sm w-auto">
|
||||
<input type="text" name="search" class="form-control" placeholder="Cari produksi..." value="{{ request('search') }}">
|
||||
<button type="submit" class="btn btn-outline-primary"><i class="ti tabler-search"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive text-nowrap">
|
||||
<table class="table table-hover">
|
||||
<thead class="border-top">
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Kode / Periode</th>
|
||||
<th>Petani</th>
|
||||
<th>Komoditas</th>
|
||||
<th>Lahan</th>
|
||||
<th>Panen</th>
|
||||
<th>Produktivitas</th>
|
||||
<th>Status</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($produksi as $index => $item)
|
||||
<tr>
|
||||
<td>{{ $produksi->firstItem() + $index }}</td>
|
||||
<td>
|
||||
<span class="fw-medium">{{ $item->kode_produksi ?? '-' }}</span><br>
|
||||
<small class="text-muted">{{ $item->periode ?? '-' }}</small>
|
||||
</td>
|
||||
<td>{{ $item->profile->nama ?? '-' }}</td>
|
||||
<td>{{ $item->komoditas->nama ?? '-' }}</td>
|
||||
<td>{{ $item->lahan->nama ?? '-' }}</td>
|
||||
<td>{{ $item->jumlah_panen ?? '-' }} {{ $item->jumlah_panen ? $item->satuan : '' }}</td>
|
||||
<td>{{ $item->produktivitas ? $item->produktivitas . ' ' . $item->satuan . '/ha' : '-' }}</td>
|
||||
<td>
|
||||
@php($statusClass = ['belum_panen' => 'secondary', 'panen_sebagian' => 'warning', 'selesai' => 'success'][$item->status_panen] ?? 'secondary')
|
||||
<span class="badge bg-label-{{ $statusClass }}">{{ ucwords(str_replace('_', ' ', $item->status_panen)) }}</span>
|
||||
</td>
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="{{ route('produksi.edit', $item->id) }}" class="btn btn-icon btn-text-secondary rounded-pill"><i class="ti tabler-edit ti-md"></i></a>
|
||||
<a href="javascript:;" class="btn btn-icon btn-text-secondary rounded-pill delete-record" data-id="{{ $item->id }}" data-nama="{{ $item->kode_produksi ?? $item->komoditas->nama ?? 'Produksi' }}"><i class="ti tabler-trash ti-md"></i></a>
|
||||
<a href="{{ route('produksi.show', $item->id) }}" class="btn btn-icon btn-text-secondary rounded-pill"><i class="ti tabler-eye ti-md"></i></a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr><td colspan="9" class="text-center py-4">Tidak ada data produksi ditemukan.</td></tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-center justify-content-md-end border-top">
|
||||
{{ $produksi->appends(request()->query())->links('pagination::bootstrap-5') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
const csrfTokenProduksi = "{{ csrf_token() }}";
|
||||
|
||||
$(document).on('click', '.delete-record', function () {
|
||||
const id = $(this).data('id');
|
||||
const name = $(this).data('nama');
|
||||
|
||||
Swal.fire({
|
||||
title: 'Hapus Produksi?',
|
||||
text: `Data "${name}" akan dihapus.`,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Ya, Hapus!',
|
||||
cancelButtonText: 'Batal',
|
||||
customClass: { confirmButton: 'btn btn-danger me-3', cancelButton: 'btn btn-label-secondary' },
|
||||
buttonsStyling: false
|
||||
}).then(function (result) {
|
||||
if (result.value) {
|
||||
$.ajax({
|
||||
url: `/produksi/${id}`,
|
||||
type: 'DELETE',
|
||||
headers: { 'X-CSRF-TOKEN': csrfTokenProduksi },
|
||||
success: function (res) {
|
||||
Swal.fire({ icon: 'success', title: 'Terhapus!', text: res.message, showConfirmButton: false, timer: 1500 })
|
||||
.then(() => window.location.reload());
|
||||
},
|
||||
error: function () {
|
||||
Swal.fire({ icon: 'error', title: 'Gagal!', text: 'Terjadi kesalahan saat menghapus data.' });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,39 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||
<h5 class="card-title mb-0">Detail Produksi</h5>
|
||||
<a href="{{ route('produksi.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
||||
</div>
|
||||
<div class="card-body pt-4">
|
||||
<div class="row g-3">
|
||||
@foreach([
|
||||
'Kode Produksi' => $produksi->kode_produksi,
|
||||
'Periode' => $produksi->periode,
|
||||
'Petani' => $produksi->profile->nama ?? '-',
|
||||
'Lahan' => $produksi->lahan->nama ?? '-',
|
||||
'Tanaman' => $produksi->tanaman->nama ?? '-',
|
||||
'Komoditas' => $produksi->komoditas->nama ?? '-',
|
||||
'Tanggal Panen' => $produksi->tanggal_panen ? $produksi->tanggal_panen->format('d-m-Y') : '-',
|
||||
'Luas Tanam' => $produksi->luas_tanam,
|
||||
'Luas Panen' => $produksi->luas_panen,
|
||||
'Jumlah Panen' => $produksi->jumlah_panen ? $produksi->jumlah_panen . ' ' . $produksi->satuan : '-',
|
||||
'Produktivitas' => $produksi->produktivitas ? $produksi->produktivitas . ' ' . $produksi->satuan . '/ha' : '-',
|
||||
'Status Panen' => ucwords(str_replace('_', ' ', $produksi->status_panen)),
|
||||
] as $label => $value)
|
||||
<div class="col-md-4">
|
||||
<label class="form-label text-muted">{{ $label }}</label>
|
||||
<div class="fw-medium">{{ $value ?? '-' }}</div>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="col-12">
|
||||
<label class="form-label text-muted">Catatan</label>
|
||||
<div>{{ $produksi->catatan ?? '-' }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,6 +1,13 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
@php
|
||||
$petaniProfiles = $profiles->filter(function ($profile) {
|
||||
$role = $profile->role instanceof \App\Enums\Role ? $profile->role->value : $profile->role;
|
||||
|
||||
return $role === \App\Enums\Role::PETANI->value;
|
||||
});
|
||||
@endphp
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom">
|
||||
@@ -39,9 +46,9 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($profiles as $index => $item)
|
||||
@forelse($petaniProfiles as $index => $item)
|
||||
<tr>
|
||||
<td>{{ $profiles->firstItem() + $index }}</td>
|
||||
<td>{{ $profiles->firstItem() + $loop->index }}</td>
|
||||
<td>
|
||||
<span class="text-heading fw-medium">{{ $item->nama }}</span><br>
|
||||
<small class="text-muted">{{ $item->email }}</small>
|
||||
@@ -105,4 +112,4 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@endpush
|
||||
|
||||
Reference in New Issue
Block a user