Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web
This commit is contained in:
@@ -0,0 +1,143 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use App\Models\Map\PanenTanaman;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class PanenTanamanController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$panenTanaman = PanenTanaman::latest()->get();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Daftar data panen tanaman berhasil diambil.',
|
||||||
|
'data' => $panenTanaman
|
||||||
|
], 200);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Terjadi kesalahan saat mengambil data.',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'panen_id' => 'required|integer',
|
||||||
|
'tanaman_id' => 'required|integer',
|
||||||
|
'commodity_name' => 'required|string|max:255',
|
||||||
|
'sync_status' => 'nullable|string|max:50',
|
||||||
|
'weight_kg' => 'required|numeric|min:0',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Validasi gagal.',
|
||||||
|
'errors' => $validator->errors()
|
||||||
|
], 422);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$panenTanaman = PanenTanaman::create($request->all());
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Data panen tanaman berhasil disimpan.',
|
||||||
|
'data' => $panenTanaman
|
||||||
|
], 201);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Gagal menyimpan data.',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(PanenTanaman $panenTanaman)
|
||||||
|
{
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Detail data panen tanaman ditemukan.',
|
||||||
|
'data' => $panenTanaman
|
||||||
|
], 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, PanenTanaman $panenTanaman)
|
||||||
|
{
|
||||||
|
$validator = Validator::make($request->all(), [
|
||||||
|
'panen_id' => 'sometimes|required|integer',
|
||||||
|
'tanaman_id' => 'sometimes|required|integer',
|
||||||
|
'commodity_name' => 'sometimes|required|string|max:255',
|
||||||
|
'sync_status' => 'nullable|string|max:50',
|
||||||
|
'weight_kg' => 'sometimes|required|numeric|min:0',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Validasi gagal.',
|
||||||
|
'errors' => $validator->errors()
|
||||||
|
], 422);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$panenTanaman->update($request->all());
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Data panen tanaman berhasil diperbarui.',
|
||||||
|
'data' => $panenTanaman
|
||||||
|
], 200);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Gagal memperbarui data.',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(PanenTanaman $panenTanaman)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$panenTanaman->delete(); // Karena pakai SoftDeletes, data tidak terhapus permanen di DB
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Data panen tanaman berhasil dihapus (soft delete).'
|
||||||
|
], 200);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Gagal menghapus data.',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Controllers\Api\Produktivitas;
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
use App\Models\Map\Panen;
|
use App\Models\Map\Panen;
|
||||||
|
|
||||||
@@ -29,33 +30,61 @@ class PanenController extends Controller
|
|||||||
|
|
||||||
public function store(Request $request): JsonResponse
|
public function store(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
if (!Gate::any(['petani', 'fasilitator', 'super_admin'])) {
|
||||||
abort(403);
|
abort(403);
|
||||||
}
|
}
|
||||||
|
|
||||||
$validated = $request->validate([
|
$validated = $request->validate([
|
||||||
|
'uid' => ['required', 'string'],
|
||||||
|
'title' => ['required', 'string'],
|
||||||
'land_id' => ['required', 'integer'],
|
'land_id' => ['required', 'integer'],
|
||||||
'plant_id' => ['required', 'integer'],
|
'farmer_id' => ['required', 'integer'],
|
||||||
'commodity_name' => ['required', 'string', 'max:255'],
|
'land_description' => ['nullable', 'string'],
|
||||||
'weight_kg' => ['required', 'numeric'],
|
|
||||||
'harvest_date' => ['required', 'date'],
|
'harvest_date' => ['required', 'date'],
|
||||||
|
'commodities' => ['required', 'array', 'min:1'],
|
||||||
|
'commodities.*.plant_id' => ['nullable', 'integer'],
|
||||||
|
'commodities.*.commodity_name' => ['required', 'string'],
|
||||||
|
'commodities.*.weight_kg' => ['required', 'numeric'],
|
||||||
'notes' => ['nullable', 'string'],
|
'notes' => ['nullable', 'string'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$panen = Panen::create([
|
try {
|
||||||
'land_id' => $validated['land_id'],
|
$panen = DB::transaction(function () use ($validated) {
|
||||||
'plant_id' => $validated['plant_id'],
|
|
||||||
'farmer_id' => Auth::user()->profile->id,
|
$panenData = collect($validated)->except('commodities')->toArray();
|
||||||
'commodity_name' => $validated['commodity_name'],
|
$panen = Panen::create($panenData);
|
||||||
'weight_kg' => $validated['weight_kg'],
|
|
||||||
'harvest_date' => $validated['harvest_date'],
|
|
||||||
'notes' => $validated['notes'] ?? null,
|
|
||||||
'sync_status' => 'synced'
|
|
||||||
]);
|
|
||||||
|
|
||||||
return response()->json($panen, 201);
|
foreach ($validated['commodities'] as $commodity) {
|
||||||
|
\App\Models\Map\PanenTanaman::create([
|
||||||
|
'panen_id' => $panen->id,
|
||||||
|
'tanaman_id' => $commodity['plant_id'] ?? null,
|
||||||
|
'commodity_name' => $commodity['commodity_name'],
|
||||||
|
'weight_kg' => $commodity['weight_kg'],
|
||||||
|
'sync_status' => 'synced',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $panen;
|
||||||
|
});
|
||||||
|
$panen->load('panenTanaman');
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Data panen dan detail tanaman berhasil disimpan.',
|
||||||
|
'data' => $panen
|
||||||
|
], 201);
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => false,
|
||||||
|
'message' => 'Gagal menyimpan data ke database.',
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
], 500);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function show(string $id): JsonResponse
|
public function show(string $id): JsonResponse
|
||||||
{
|
{
|
||||||
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
||||||
|
|||||||
@@ -0,0 +1,136 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api\Produktivitas;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Gate;
|
||||||
|
|
||||||
|
use App\Models\Map\Panen;
|
||||||
|
|
||||||
|
class PanenController01 extends Controller
|
||||||
|
{
|
||||||
|
public function index(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = Auth::user();
|
||||||
|
$profile = $user->profile;
|
||||||
|
|
||||||
|
$profileId = $user->role === 'petani' ? $profile->id : $request->id;
|
||||||
|
$listPanen = Panen::when($profileId, fn($q,$v) => $q->where('farmer_id',$user->id))->get();
|
||||||
|
|
||||||
|
return response()->json($listPanen);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
|
||||||
|
$validated = $request->validate([
|
||||||
|
'land_id' => ['required', 'integer'],
|
||||||
|
'plant_id' => ['required', 'integer'],
|
||||||
|
'commodity_name' => ['required', 'string', 'max:255'],
|
||||||
|
'weight_kg' => ['required', 'numeric'],
|
||||||
|
'harvest_date' => ['required', 'date'],
|
||||||
|
'notes' => ['nullable', 'string'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$panen = Panen::create([
|
||||||
|
'land_id' => $validated['land_id'],
|
||||||
|
'plant_id' => $validated['plant_id'],
|
||||||
|
'farmer_id' => Auth::user()->profile->id,
|
||||||
|
'commodity_name' => $validated['commodity_name'],
|
||||||
|
'weight_kg' => $validated['weight_kg'],
|
||||||
|
'harvest_date' => $validated['harvest_date'],
|
||||||
|
'notes' => $validated['notes'] ?? null,
|
||||||
|
'sync_status' => 'synced'
|
||||||
|
]);
|
||||||
|
|
||||||
|
return response()->json($panen, 201);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function show(string $id): JsonResponse
|
||||||
|
{
|
||||||
|
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
$panen = Panen::findOrFail($id);
|
||||||
|
return response()->json($panen);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update(Request $request, string $id): JsonResponse
|
||||||
|
{
|
||||||
|
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
$panen = Panen::findOrFail($id);
|
||||||
|
|
||||||
|
$validated = $request->validate([
|
||||||
|
'commodity_name' => ['string', 'max:255'],
|
||||||
|
'weight_kg' => ['numeric'],
|
||||||
|
'harvest_date' => ['date'],
|
||||||
|
'notes' => ['nullable', 'string'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$panen->update($validated);
|
||||||
|
return response()->json($panen);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy(string $id): JsonResponse
|
||||||
|
{
|
||||||
|
Gate::authorize(['petani', 'fasilitator']);
|
||||||
|
Panen::findOrFail($id)->delete();
|
||||||
|
return response()->json(null, 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Digunakan untuk sinkronisasi massal dari data lokal (offline)
|
||||||
|
*/
|
||||||
|
public function batchUpsert(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
if (Gate::authorize(['petani', 'fasilitator','super_admin'])) {
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
$profileId = Auth::user()->profile->id;
|
||||||
|
|
||||||
|
$validated = $request->validate([
|
||||||
|
'panens' => ['required', 'array'],
|
||||||
|
'panens.*.id' => ['nullable', 'integer'],
|
||||||
|
'panens.*.land_id' => ['required', 'integer'],
|
||||||
|
'panens.*.plant_id' => ['required', 'integer'],
|
||||||
|
'panens.*.commodity_name' => ['required', 'string'],
|
||||||
|
'panens.*.weight_kg' => ['required', 'numeric'],
|
||||||
|
'panens.*.harvest_date' => ['required', 'date'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$dataUpsert = [];
|
||||||
|
foreach ($validated['panens'] as $item) {
|
||||||
|
$dataUpsert[] = [
|
||||||
|
'id' => $item['id'] ?? null,
|
||||||
|
'land_id' => $item['land_id'],
|
||||||
|
'plant_id' => $item['plant_id'],
|
||||||
|
'farmer_id' => $profileId,
|
||||||
|
'commodity_name' => $item['commodity_name'],
|
||||||
|
'weight_kg' => $item['weight_kg'],
|
||||||
|
'harvest_date' => $item['harvest_date'],
|
||||||
|
'sync_status' => 'synced',
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Melakukan upsert berdasarkan ID
|
||||||
|
Panen::upsert($dataUpsert, ['id'], [
|
||||||
|
'weight_kg', 'commodity_name', 'harvest_date', 'sync_status', 'updated_at'
|
||||||
|
]);
|
||||||
|
|
||||||
|
return response()->json(['status' => 'success'], 200);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Web\Produktivitas;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Enums\Role;
|
|
||||||
use App\Models\Pertanian\Komoditas;
|
|
||||||
use App\Models\Pertanian\Kualitas;
|
|
||||||
use App\Models\Pertanian\Lahan;
|
|
||||||
use App\Models\Pertanian\Produksi;
|
|
||||||
use App\Models\Profile;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Validator;
|
|
||||||
use Illuminate\Validation\Rule;
|
|
||||||
|
|
||||||
class KualitasController extends Controller
|
|
||||||
{
|
|
||||||
public function index(Request $request)
|
|
||||||
{
|
|
||||||
$query = Kualitas::with(['produksi', 'profile', 'lahan', 'komoditas'])
|
|
||||||
->orderBy('created_at', 'desc');
|
|
||||||
|
|
||||||
if ($request->filled('search')) {
|
|
||||||
$query->where(function ($q) use ($request) {
|
|
||||||
$search = '%' . $request->search . '%';
|
|
||||||
$q->where('grade', 'like', $search)
|
|
||||||
->orWhere('pemeriksa', 'like', $search)
|
|
||||||
->orWhereHas('profile', fn ($profile) => $profile->where('nama', 'like', $search))
|
|
||||||
->orWhereHas('komoditas', fn ($komoditas) => $komoditas->where('nama', 'like', $search))
|
|
||||||
->orWhereHas('produksi', fn ($produksi) => $produksi->where('kode_produksi', 'like', $search));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($request->filled('status_kelayakan')) {
|
|
||||||
$query->where('status_kelayakan', $request->status_kelayakan);
|
|
||||||
}
|
|
||||||
|
|
||||||
$kualitas = $query->paginate($request->per_page ?? 10);
|
|
||||||
|
|
||||||
return view('produktivitas.kualitas.index', compact('kualitas'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
return view('produktivitas.kualitas.add', $this->formData());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
$validator = $this->validator($request);
|
|
||||||
|
|
||||||
if ($validator->fails()) {
|
|
||||||
return back()->withErrors($validator)->withInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
Kualitas::create($this->payload($request) + [
|
|
||||||
'created_by' => auth()->id(),
|
|
||||||
'updated_by' => auth()->id(),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return redirect()->route('kualitas.index')->with('success', 'Data kualitas berhasil ditambahkan.');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function show($id)
|
|
||||||
{
|
|
||||||
$kualitas = Kualitas::with(['produksi', 'profile', 'lahan', 'komoditas'])->findOrFail($id);
|
|
||||||
|
|
||||||
return view('produktivitas.kualitas.view', compact('kualitas'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function edit($id)
|
|
||||||
{
|
|
||||||
$kualitas = Kualitas::findOrFail($id);
|
|
||||||
|
|
||||||
return view('produktivitas.kualitas.edit', $this->formData() + compact('kualitas'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function update(Request $request, $id)
|
|
||||||
{
|
|
||||||
$validator = $this->validator($request);
|
|
||||||
|
|
||||||
if ($validator->fails()) {
|
|
||||||
return back()->withErrors($validator)->withInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
$kualitas = Kualitas::findOrFail($id);
|
|
||||||
$kualitas->update($this->payload($request) + [
|
|
||||||
'updated_by' => auth()->id(),
|
|
||||||
]);
|
|
||||||
|
|
||||||
return redirect()->route('kualitas.index')->with('success', 'Data kualitas berhasil diperbarui.');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function destroy($id)
|
|
||||||
{
|
|
||||||
$kualitas = Kualitas::findOrFail($id);
|
|
||||||
$kualitas->update(['deleted_by' => auth()->id()]);
|
|
||||||
$kualitas->delete();
|
|
||||||
|
|
||||||
return response()->json(['status' => 'success', 'message' => 'Data kualitas berhasil dihapus.']);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function formData(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'produksi' => Produksi::with(['komoditas', 'profile'])->orderBy('created_at', 'desc')->get(),
|
|
||||||
'profiles' => Profile::where('role', Role::PETANI->value)->orderBy('nama')->get(),
|
|
||||||
'lahan' => Lahan::whereHas('profile', function ($query) {
|
|
||||||
$query->where('role', Role::PETANI->value);
|
|
||||||
})->orderBy('nama')->get(),
|
|
||||||
'komoditas' => Komoditas::orderBy('nama')->get(),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function validator(Request $request)
|
|
||||||
{
|
|
||||||
return Validator::make($request->all(), [
|
|
||||||
'produksi_id' => ['nullable', 'exists:produksi,id'],
|
|
||||||
'profile_id' => [
|
|
||||||
'required',
|
|
||||||
Rule::exists('profiles', 'id')->where('role', Role::PETANI->value),
|
|
||||||
],
|
|
||||||
'lahan_id' => [
|
|
||||||
'required',
|
|
||||||
Rule::exists('map_lahan', 'id')->where('profile_id', $request->profile_id),
|
|
||||||
],
|
|
||||||
'komoditas_id' => ['required', 'exists:master_komoditas,id'],
|
|
||||||
'tanggal_pemeriksaan' => ['nullable', 'date'],
|
|
||||||
'grade' => ['required', 'string', 'max:50'],
|
|
||||||
'kadar_air' => ['nullable', 'numeric', 'min:0'],
|
|
||||||
'berat_bersih' => ['nullable', 'numeric', 'min:0'],
|
|
||||||
'berat_rusak' => ['nullable', 'numeric', 'min:0'],
|
|
||||||
'standar_mutu' => ['nullable', 'string', 'max:255'],
|
|
||||||
'status_kelayakan' => ['required', 'in:layak,perlu_sortir,tidak_layak'],
|
|
||||||
'pemeriksa' => ['nullable', 'string', 'max:255'],
|
|
||||||
'catatan' => ['nullable', 'string'],
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function payload(Request $request): array
|
|
||||||
{
|
|
||||||
$beratBersih = (float) $request->berat_bersih;
|
|
||||||
$beratRusak = (float) $request->berat_rusak;
|
|
||||||
|
|
||||||
return [
|
|
||||||
'produksi_id' => $request->produksi_id,
|
|
||||||
'profile_id' => $request->profile_id,
|
|
||||||
'lahan_id' => $request->lahan_id,
|
|
||||||
'komoditas_id' => $request->komoditas_id,
|
|
||||||
'tanggal_pemeriksaan' => $request->tanggal_pemeriksaan,
|
|
||||||
'grade' => $request->grade,
|
|
||||||
'kadar_air' => $request->kadar_air,
|
|
||||||
'berat_bersih' => $request->berat_bersih,
|
|
||||||
'berat_rusak' => $request->berat_rusak,
|
|
||||||
'persentase_kerusakan' => $beratBersih > 0 ? round(($beratRusak / $beratBersih) * 100, 2) : null,
|
|
||||||
'standar_mutu' => $request->standar_mutu,
|
|
||||||
'status_kelayakan' => $request->status_kelayakan,
|
|
||||||
'pemeriksa' => $request->pemeriksa,
|
|
||||||
'catatan' => $request->catatan,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,6 @@ use App\Enums\Role;
|
|||||||
use App\Models\Pertanian\Komoditas;
|
use App\Models\Pertanian\Komoditas;
|
||||||
use App\Models\Pertanian\Lahan;
|
use App\Models\Pertanian\Lahan;
|
||||||
use App\Models\Pertanian\Produksi;
|
use App\Models\Pertanian\Produksi;
|
||||||
use App\Models\Pertanian\Tanaman;
|
|
||||||
use App\Models\Profile;
|
use App\Models\Profile;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
@@ -17,7 +16,7 @@ class ProduksiController extends Controller
|
|||||||
{
|
{
|
||||||
public function index(Request $request)
|
public function index(Request $request)
|
||||||
{
|
{
|
||||||
$query = Produksi::with(['profile', 'lahan', 'tanaman', 'komoditas'])
|
$query = Produksi::with(['profile', 'lahan', 'komoditas'])
|
||||||
->orderBy('created_at', 'desc');
|
->orderBy('created_at', 'desc');
|
||||||
|
|
||||||
if ($request->filled('search')) {
|
if ($request->filled('search')) {
|
||||||
@@ -35,9 +34,14 @@ class ProduksiController extends Controller
|
|||||||
$query->where('status_panen', $request->status_panen);
|
$query->where('status_panen', $request->status_panen);
|
||||||
}
|
}
|
||||||
|
|
||||||
$produksi = $query->paginate($request->per_page ?? 10);
|
if ($request->filled('komoditas_id')) {
|
||||||
|
$query->where('komoditas_id', $request->komoditas_id);
|
||||||
|
}
|
||||||
|
|
||||||
return view('produktivitas.produksi.index', compact('produksi'));
|
$produksi = $query->paginate($request->per_page ?? 10);
|
||||||
|
$komoditas = Komoditas::orderBy('nama')->get();
|
||||||
|
|
||||||
|
return view('produktivitas.produksi.index', compact('produksi', 'komoditas'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create()
|
public function create()
|
||||||
@@ -58,12 +62,12 @@ class ProduksiController extends Controller
|
|||||||
'updated_by' => auth()->id(),
|
'updated_by' => auth()->id(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return redirect()->route('produksi.index')->with('success', 'Data produksi berhasil ditambahkan.');
|
return redirect()->route('produksi.index')->with('success', 'Data hasil panen berhasil ditambahkan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function show($id)
|
public function show($id)
|
||||||
{
|
{
|
||||||
$produksi = Produksi::with(['profile', 'lahan', 'tanaman', 'komoditas', 'kualitas'])->findOrFail($id);
|
$produksi = Produksi::with(['profile', 'lahan', 'komoditas'])->findOrFail($id);
|
||||||
|
|
||||||
return view('produktivitas.produksi.view', compact('produksi'));
|
return view('produktivitas.produksi.view', compact('produksi'));
|
||||||
}
|
}
|
||||||
@@ -88,7 +92,7 @@ class ProduksiController extends Controller
|
|||||||
'updated_by' => auth()->id(),
|
'updated_by' => auth()->id(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return redirect()->route('produksi.index')->with('success', 'Data produksi berhasil diperbarui.');
|
return redirect()->route('produksi.index')->with('success', 'Data hasil panen berhasil diperbarui.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy($id)
|
public function destroy($id)
|
||||||
@@ -97,7 +101,7 @@ class ProduksiController extends Controller
|
|||||||
$produksi->update(['deleted_by' => auth()->id()]);
|
$produksi->update(['deleted_by' => auth()->id()]);
|
||||||
$produksi->delete();
|
$produksi->delete();
|
||||||
|
|
||||||
return response()->json(['status' => 'success', 'message' => 'Data produksi berhasil dihapus.']);
|
return response()->json(['status' => 'success', 'message' => 'Data hasil panen berhasil dihapus.']);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function formData(): array
|
private function formData(): array
|
||||||
@@ -107,7 +111,6 @@ class ProduksiController extends Controller
|
|||||||
'lahan' => Lahan::whereHas('profile', function ($query) {
|
'lahan' => Lahan::whereHas('profile', function ($query) {
|
||||||
$query->where('role', Role::PETANI->value);
|
$query->where('role', Role::PETANI->value);
|
||||||
})->orderBy('nama')->get(),
|
})->orderBy('nama')->get(),
|
||||||
'tanaman' => Tanaman::with('komoditas')->orderBy('nama')->get(),
|
|
||||||
'komoditas' => Komoditas::orderBy('nama')->get(),
|
'komoditas' => Komoditas::orderBy('nama')->get(),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -124,15 +127,14 @@ class ProduksiController extends Controller
|
|||||||
'required',
|
'required',
|
||||||
Rule::exists('map_lahan', 'id')->where('profile_id', $request->profile_id),
|
Rule::exists('map_lahan', 'id')->where('profile_id', $request->profile_id),
|
||||||
],
|
],
|
||||||
'tanaman_id' => ['nullable', 'exists:map_tanaman,id'],
|
|
||||||
'komoditas_id' => ['required', 'exists:master_komoditas,id'],
|
'komoditas_id' => ['required', 'exists:master_komoditas,id'],
|
||||||
'periode' => ['nullable', 'string', 'max:255'],
|
'periode' => ['nullable', 'string', 'max:255'],
|
||||||
'tanggal_panen' => ['nullable', 'date'],
|
'tanggal_panen' => ['required', 'date'],
|
||||||
'luas_tanam' => ['nullable', 'numeric', 'min:0'],
|
'luas_tanam' => ['nullable', 'numeric', 'min:0'],
|
||||||
'luas_panen' => ['nullable', 'numeric', 'min:0'],
|
'luas_panen' => ['nullable', 'numeric', 'min:0'],
|
||||||
'jumlah_panen' => ['nullable', 'numeric', 'min:0'],
|
'jumlah_panen' => ['required', 'numeric', 'min:0'],
|
||||||
'satuan' => ['required', 'string', 'max:20'],
|
'satuan' => ['required', 'string', 'max:20'],
|
||||||
'status_panen' => ['required', 'in:belum_panen,panen_sebagian,selesai'],
|
'status_panen' => ['nullable', 'in:panen_sebagian,selesai'],
|
||||||
'catatan' => ['nullable', 'string'],
|
'catatan' => ['nullable', 'string'],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@@ -146,7 +148,7 @@ class ProduksiController extends Controller
|
|||||||
'kode_produksi' => $request->kode_produksi,
|
'kode_produksi' => $request->kode_produksi,
|
||||||
'profile_id' => $request->profile_id,
|
'profile_id' => $request->profile_id,
|
||||||
'lahan_id' => $request->lahan_id,
|
'lahan_id' => $request->lahan_id,
|
||||||
'tanaman_id' => $request->tanaman_id,
|
'tanaman_id' => null,
|
||||||
'komoditas_id' => $request->komoditas_id,
|
'komoditas_id' => $request->komoditas_id,
|
||||||
'periode' => $request->periode,
|
'periode' => $request->periode,
|
||||||
'tanggal_panen' => $request->tanggal_panen,
|
'tanggal_panen' => $request->tanggal_panen,
|
||||||
@@ -155,7 +157,7 @@ class ProduksiController extends Controller
|
|||||||
'jumlah_panen' => $request->jumlah_panen,
|
'jumlah_panen' => $request->jumlah_panen,
|
||||||
'satuan' => $request->satuan,
|
'satuan' => $request->satuan,
|
||||||
'produktivitas' => $luasPanen > 0 ? round($jumlahPanen / $luasPanen, 2) : null,
|
'produktivitas' => $luasPanen > 0 ? round($jumlahPanen / $luasPanen, 2) : null,
|
||||||
'status_panen' => $request->status_panen,
|
'status_panen' => $request->status_panen ?? 'selesai',
|
||||||
'catatan' => $request->catatan,
|
'catatan' => $request->catatan,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ namespace App\Models\Map;
|
|||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
class Panen extends Model
|
class Panen extends Model
|
||||||
@@ -18,11 +20,12 @@ class Panen extends Model
|
|||||||
* Atribut yang dapat diisi (mass assignable).
|
* Atribut yang dapat diisi (mass assignable).
|
||||||
*/
|
*/
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
|
'uid', // PN-1234567890-1234567890-1234567890 (lahan-tanaman-panen)
|
||||||
|
// 'plant_id',
|
||||||
|
'title',
|
||||||
'land_id',
|
'land_id',
|
||||||
'plant_id',
|
|
||||||
'farmer_id',
|
'farmer_id',
|
||||||
'commodity_name',
|
'land_description',
|
||||||
'weight_kg',
|
|
||||||
'harvest_date',
|
'harvest_date',
|
||||||
'notes',
|
'notes',
|
||||||
'sync_status',
|
'sync_status',
|
||||||
@@ -41,12 +44,25 @@ class Panen extends Model
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(Lahan::class, 'land_id');
|
return $this->belongsTo(Lahan::class, 'land_id');
|
||||||
}
|
}
|
||||||
public function tanaman(): BelongsTo
|
public function detailKomoditas(): HasMany
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Tanaman::class, 'plant_id');
|
return $this->hasMany(PanenKomoditas::class, 'panen_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function tanamans(): BelongsToMany
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(Tanaman::class, 'panen_komoditas', 'panen_id', 'plant_id')
|
||||||
|
->using(PanenKomoditas::class)
|
||||||
|
->withPivot(['uid', 'commodity_name', 'weight_kg', 'sync_status'])
|
||||||
|
->withTimestamps();
|
||||||
}
|
}
|
||||||
public function petani(): BelongsTo
|
public function petani(): BelongsTo
|
||||||
{
|
{
|
||||||
return $this->belongsTo(\App\Models\Profile::class, 'farmer_id');
|
return $this->belongsTo(\App\Models\Profile::class, 'farmer_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function panenTanaman(): HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(PanenTanaman::class, 'panen_id', 'id');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models\Map;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
||||||
|
class PanenTanaman extends Model
|
||||||
|
{
|
||||||
|
use SoftDeletes;
|
||||||
|
protected $table = 'panen_tanaman';
|
||||||
|
protected $fillable = [
|
||||||
|
"panen_id",
|
||||||
|
"tanaman_id",
|
||||||
|
"commodity_name",
|
||||||
|
"sync_status",
|
||||||
|
"weight_kg"
|
||||||
|
];
|
||||||
|
|
||||||
|
public function panen(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(\App\Models\Map\Panen::class, 'panen_id', 'id');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models\Pertanian;
|
|
||||||
|
|
||||||
use App\Models\Profile;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
|
||||||
|
|
||||||
class Kualitas extends Model
|
|
||||||
{
|
|
||||||
use SoftDeletes;
|
|
||||||
|
|
||||||
protected $table = 'kualitas';
|
|
||||||
|
|
||||||
protected $fillable = [
|
|
||||||
'produksi_id',
|
|
||||||
'profile_id',
|
|
||||||
'lahan_id',
|
|
||||||
'komoditas_id',
|
|
||||||
'tanggal_pemeriksaan',
|
|
||||||
'grade',
|
|
||||||
'kadar_air',
|
|
||||||
'berat_bersih',
|
|
||||||
'berat_rusak',
|
|
||||||
'persentase_kerusakan',
|
|
||||||
'standar_mutu',
|
|
||||||
'status_kelayakan',
|
|
||||||
'pemeriksa',
|
|
||||||
'catatan',
|
|
||||||
'created_by',
|
|
||||||
'updated_by',
|
|
||||||
'deleted_by',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $casts = [
|
|
||||||
'tanggal_pemeriksaan' => 'date',
|
|
||||||
];
|
|
||||||
|
|
||||||
public function produksi()
|
|
||||||
{
|
|
||||||
return $this->belongsTo(Produksi::class, 'produksi_id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function profile()
|
|
||||||
{
|
|
||||||
return $this->belongsTo(Profile::class, 'profile_id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function lahan()
|
|
||||||
{
|
|
||||||
return $this->belongsTo(Lahan::class, 'lahan_id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function komoditas()
|
|
||||||
{
|
|
||||||
return $this->belongsTo(Komoditas::class, 'komoditas_id');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -55,9 +55,4 @@ class Produksi extends Model
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(Komoditas::class, 'komoditas_id');
|
return $this->belongsTo(Komoditas::class, 'komoditas_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function kualitas()
|
|
||||||
{
|
|
||||||
return $this->hasMany(Kualitas::class, 'produksi_id');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ return new class extends Migration {
|
|||||||
public function up(): void {
|
public function up(): void {
|
||||||
Schema::create('map_panen', function (Blueprint $table) {
|
Schema::create('map_panen', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
|
$table->string('uid')->unique()->nullable(); // Bagus untuk sinkronisasi Dexie offline
|
||||||
|
$table->string('title'); // Judul aktivitas panen
|
||||||
$table->unsignedBigInteger('land_id')->nullable();
|
$table->unsignedBigInteger('land_id')->nullable();
|
||||||
$table->unsignedBigInteger('plant_id')->nullable();
|
|
||||||
$table->unsignedBigInteger('farmer_id')->nullable();
|
$table->unsignedBigInteger('farmer_id')->nullable();
|
||||||
$table->string('commodity_name');
|
$table->text('land_description')->nullable(); // Deskripsi kondisi lahan saat panen
|
||||||
$table->double('weight_kg')->default(0);
|
|
||||||
$table->date('harvest_date');
|
$table->date('harvest_date');
|
||||||
$table->text('notes')->nullable();
|
$table->text('notes')->nullable();
|
||||||
$table->string('sync_status')->default('pending');
|
$table->string('sync_status')->default('pending');
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ return new class extends Migration
|
|||||||
$table->decimal('jumlah_panen', 12, 2)->nullable();
|
$table->decimal('jumlah_panen', 12, 2)->nullable();
|
||||||
$table->string('satuan', 20)->default('kg');
|
$table->string('satuan', 20)->default('kg');
|
||||||
$table->decimal('produktivitas', 12, 2)->nullable();
|
$table->decimal('produktivitas', 12, 2)->nullable();
|
||||||
$table->string('status_panen')->default('belum_panen');
|
$table->string('status_panen')->default('selesai');
|
||||||
$table->text('catatan')->nullable();
|
$table->text('catatan')->nullable();
|
||||||
$table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null');
|
$table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null');
|
||||||
$table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null');
|
$table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null');
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration
|
|
||||||
{
|
|
||||||
public function up(): void
|
|
||||||
{
|
|
||||||
Schema::create('kualitas', function (Blueprint $table) {
|
|
||||||
$table->id();
|
|
||||||
$table->foreignId('produksi_id')->nullable()->constrained('produksi')->onDelete('set null');
|
|
||||||
$table->foreignId('profile_id')->nullable()->constrained('profiles')->onDelete('set null');
|
|
||||||
$table->foreignId('lahan_id')->nullable()->constrained('map_lahan')->onDelete('set null');
|
|
||||||
$table->foreignId('komoditas_id')->nullable()->constrained('master_komoditas')->onDelete('set null');
|
|
||||||
$table->date('tanggal_pemeriksaan')->nullable();
|
|
||||||
$table->string('grade')->nullable();
|
|
||||||
$table->decimal('kadar_air', 8, 2)->nullable();
|
|
||||||
$table->decimal('berat_bersih', 12, 2)->nullable();
|
|
||||||
$table->decimal('berat_rusak', 12, 2)->nullable();
|
|
||||||
$table->decimal('persentase_kerusakan', 8, 2)->nullable();
|
|
||||||
$table->string('standar_mutu')->nullable();
|
|
||||||
$table->string('status_kelayakan')->default('layak');
|
|
||||||
$table->string('pemeriksa')->nullable();
|
|
||||||
$table->text('catatan')->nullable();
|
|
||||||
$table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null');
|
|
||||||
$table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null');
|
|
||||||
$table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null');
|
|
||||||
$table->timestamps();
|
|
||||||
$table->softDeletes();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('kualitas');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('panen_tanaman', function (Blueprint $bluePrint) {
|
||||||
|
$bluePrint->id();
|
||||||
|
|
||||||
|
$bluePrint->foreignId('panen_id')
|
||||||
|
->constrained('panen')
|
||||||
|
->onDelete('cascade');
|
||||||
|
|
||||||
|
$bluePrint->unsignedBigInteger('tanaman_id');
|
||||||
|
$bluePrint->string('commodity_name');
|
||||||
|
$bluePrint->string('sync_status', 50)->nullable()->default('synced');
|
||||||
|
$bluePrint->decimal('weight_kg', 10, 2); // Menggunakan decimal agar mendukung angka pecahan (misal: 10.5 kg)
|
||||||
|
|
||||||
|
$bluePrint->timestamps();
|
||||||
|
$bluePrint->softDeletes(); // Menambahkan kolom deleted_at untuk fitur SoftDeletes
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('panen_tanamen');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
<li class="menu-header small">
|
<li class="menu-header small">
|
||||||
<span class="menu-header-text" data-i18n="Ekosistem">Ekosistem</span>
|
<span class="menu-header-text" data-i18n="Ekosistem">Ekosistem</span>
|
||||||
</li>
|
</li>
|
||||||
<li class="menu-item {{ request()->routeIs(['profile.*', 'produksi.*', 'kualitas.*', 'lahan.*', 'tanaman.*']) ? 'active open' : '' }}">
|
<li class="menu-item {{ request()->routeIs(['profile.*', 'produksi.*', 'lahan.*', 'tanaman.*']) ? 'active open' : '' }}">
|
||||||
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||||
<div data-i18n="Data Pertanian">Data Pertanian</div>
|
<div data-i18n="Data Pertanian">Data Pertanian</div>
|
||||||
@@ -103,14 +103,7 @@
|
|||||||
<ul class="menu-sub">
|
<ul class="menu-sub">
|
||||||
<li class="menu-item {{ request()->routeIs('produksi.*') ? 'active' : '' }}">
|
<li class="menu-item {{ request()->routeIs('produksi.*') ? 'active' : '' }}">
|
||||||
<a href="{{ route('produksi.index') }}" class="menu-link">
|
<a href="{{ route('produksi.index') }}" class="menu-link">
|
||||||
<div data-i18n="Produksi">Produksi</div>
|
<div data-i18n="Hasil Panen">Hasil Panen</div>
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<ul class="menu-sub">
|
|
||||||
<li class="menu-item {{ request()->routeIs('kualitas.*') ? 'active' : '' }}">
|
|
||||||
<a href="{{ route('kualitas.index') }}" class="menu-link">
|
|
||||||
<div data-i18n="Kualitas">Kualitas</div>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -1,160 +0,0 @@
|
|||||||
@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
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
@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
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
@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
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
@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
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
@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
|
|
||||||
@@ -5,16 +5,6 @@
|
|||||||
@endif
|
@endif
|
||||||
|
|
||||||
<div class="row">
|
<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">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label">Petani <span class="text-danger">*</span></label>
|
<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>
|
<select name="profile_id" id="profile_id" class="form-select @error('profile_id') is-invalid @enderror" required>
|
||||||
@@ -33,17 +23,7 @@
|
|||||||
@error('lahan_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
@error('lahan_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label">Tanaman</label>
|
<label class="form-label">Komoditas Hasil Panen <span class="text-danger">*</span></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>
|
<select name="komoditas_id" class="form-select @error('komoditas_id') is-invalid @enderror" required>
|
||||||
<option value="">Pilih Komoditas</option>
|
<option value="">Pilih Komoditas</option>
|
||||||
@foreach($komoditas as $item)
|
@foreach($komoditas as $item)
|
||||||
@@ -52,28 +32,18 @@
|
|||||||
</select>
|
</select>
|
||||||
@error('komoditas_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
@error('komoditas_id')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label">Tanggal Panen</label>
|
<label class="form-label">Tanggal Panen <span class="text-danger">*</span></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') : '') }}">
|
<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') : '') }}" required>
|
||||||
@error('tanggal_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
@error('tanggal_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label">Luas Tanam</label>
|
<label class="form-label">Jumlah Hasil Panen <span class="text-danger">*</span></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 ?? '') }}">
|
<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 ?? '') }}" required>
|
||||||
@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
|
@error('jumlah_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label">Satuan <span class="text-danger">*</span></label>
|
<label class="form-label">Satuan Panen <span class="text-danger">*</span></label>
|
||||||
<select name="satuan" class="form-select @error('satuan') is-invalid @enderror" required>
|
<select name="satuan" class="form-select @error('satuan') is-invalid @enderror" required>
|
||||||
@foreach(['kg' => 'Kg', 'ton' => 'Ton', 'kuintal' => 'Kuintal'] as $value => $label)
|
@foreach(['kg' => 'Kg', 'ton' => 'Ton', 'kuintal' => 'Kuintal'] as $value => $label)
|
||||||
<option value="{{ $value }}" {{ old('satuan', $produksi->satuan ?? 'kg') == $value ? 'selected' : '' }}>{{ $label }}</option>
|
<option value="{{ $value }}" {{ old('satuan', $produksi->satuan ?? 'kg') == $value ? 'selected' : '' }}>{{ $label }}</option>
|
||||||
@@ -81,15 +51,30 @@
|
|||||||
</select>
|
</select>
|
||||||
@error('satuan')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
@error('satuan')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
|
<label class="form-label">Luas Tanam (ha)</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-6 mb-3">
|
||||||
|
<label class="form-label">Luas Panen (ha)</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-6 mb-3">
|
||||||
<label class="form-label">Status Panen <span class="text-danger">*</span></label>
|
<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>
|
<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)
|
@foreach(['selesai' => 'Selesai', 'panen_sebagian' => 'Panen Sebagian'] as $value => $label)
|
||||||
<option value="{{ $value }}" {{ old('status_panen', $produksi->status_panen ?? 'belum_panen') == $value ? 'selected' : '' }}>{{ $label }}</option>
|
<option value="{{ $value }}" {{ old('status_panen', $produksi->status_panen ?? 'selesai') == $value ? 'selected' : '' }}>{{ $label }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
@error('status_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
@error('status_panen')<div class="invalid-feedback">{{ $message }}</div>@enderror
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label class="form-label">Periode Panen</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-12 mb-3">
|
<div class="col-12 mb-3">
|
||||||
<label class="form-label">Catatan</label>
|
<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>
|
<textarea name="catatan" class="form-control @error('catatan') is-invalid @enderror" rows="4" placeholder="Catatan kendala atau informasi tambahan">{{ old('catatan', $produksi->catatan ?? '') }}</textarea>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<div class="container-xxl flex-grow-1 container-p-y">
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||||
<h5 class="card-title mb-0">Tambah Data Produksi</h5>
|
<h5 class="card-title mb-0">Tambah Data Hasil Panen</h5>
|
||||||
<a href="{{ route('produksi.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
<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>
|
||||||
<div class="card-body pt-4">
|
<div class="card-body pt-4">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<div class="container-xxl flex-grow-1 container-p-y">
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||||
<h5 class="card-title mb-0">Edit Data Produksi</h5>
|
<h5 class="card-title mb-0">Edit Data Hasil Panen</h5>
|
||||||
<a href="{{ route('produksi.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
<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>
|
||||||
<div class="card-body pt-4">
|
<div class="card-body pt-4">
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||||
<h5 class="card-title mb-0">Data Produksi</h5>
|
<h5 class="card-title mb-0">Data Hasil Panen</h5>
|
||||||
<a href="{{ route('produksi.create') }}" class="btn btn-sm btn-primary"><i class="ti tabler-plus me-1"></i> Tambah Produksi</a>
|
<a href="{{ route('produksi.create') }}" class="btn btn-sm btn-primary"><i class="ti tabler-plus me-1"></i> Tambah Hasil Panen</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body border-bottom pt-4">
|
<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">
|
<form method="GET" action="{{ route('produksi.index') }}" class="d-flex justify-content-between align-items-center row gap-3 gap-md-0">
|
||||||
@@ -26,14 +26,19 @@
|
|||||||
<label class="ms-2 text-nowrap">entries</label>
|
<label class="ms-2 text-nowrap">entries</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-auto d-flex gap-2">
|
<div class="col-md-auto d-flex gap-2">
|
||||||
|
<select name="komoditas_id" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
||||||
|
<option value="">Semua Komoditas</option>
|
||||||
|
@foreach($komoditas as $item)
|
||||||
|
<option value="{{ $item->id }}" {{ request('komoditas_id') == $item->id ? 'selected' : '' }}>{{ $item->nama }}</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
<select name="status_panen" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
<select name="status_panen" class="form-select form-select-sm w-auto" onchange="this.form.submit()">
|
||||||
<option value="">Semua Status</option>
|
<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="panen_sebagian" {{ request('status_panen') == 'panen_sebagian' ? 'selected' : '' }}>Panen Sebagian</option>
|
||||||
<option value="selesai" {{ request('status_panen') == 'selesai' ? 'selected' : '' }}>Selesai</option>
|
<option value="selesai" {{ request('status_panen') == 'selesai' ? 'selected' : '' }}>Selesai</option>
|
||||||
</select>
|
</select>
|
||||||
<div class="input-group input-group-sm w-auto">
|
<div class="input-group input-group-sm w-auto">
|
||||||
<input type="text" name="search" class="form-control" placeholder="Cari produksi..." value="{{ request('search') }}">
|
<input type="text" name="search" class="form-control" placeholder="Cari hasil panen..." value="{{ request('search') }}">
|
||||||
<button type="submit" class="btn btn-outline-primary"><i class="ti tabler-search"></i></button>
|
<button type="submit" class="btn btn-outline-primary"><i class="ti tabler-search"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -45,11 +50,11 @@
|
|||||||
<thead class="border-top">
|
<thead class="border-top">
|
||||||
<tr>
|
<tr>
|
||||||
<th>No</th>
|
<th>No</th>
|
||||||
<th>Kode / Periode</th>
|
|
||||||
<th>Petani</th>
|
|
||||||
<th>Komoditas</th>
|
<th>Komoditas</th>
|
||||||
|
<th>Petani</th>
|
||||||
<th>Lahan</th>
|
<th>Lahan</th>
|
||||||
<th>Panen</th>
|
<th>Tanggal Panen</th>
|
||||||
|
<th>Hasil Panen</th>
|
||||||
<th>Produktivitas</th>
|
<th>Produktivitas</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Actions</th>
|
<th>Actions</th>
|
||||||
@@ -59,29 +64,26 @@
|
|||||||
@forelse($produksi as $index => $item)
|
@forelse($produksi as $index => $item)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $produksi->firstItem() + $index }}</td>
|
<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->komoditas->nama ?? '-' }}</td>
|
||||||
|
<td>{{ $item->profile->nama ?? '-' }}</td>
|
||||||
<td>{{ $item->lahan->nama ?? '-' }}</td>
|
<td>{{ $item->lahan->nama ?? '-' }}</td>
|
||||||
|
<td>{{ $item->tanggal_panen ? $item->tanggal_panen->format('d-m-Y') : '-' }}</td>
|
||||||
<td>{{ $item->jumlah_panen ?? '-' }} {{ $item->jumlah_panen ? $item->satuan : '' }}</td>
|
<td>{{ $item->jumlah_panen ?? '-' }} {{ $item->jumlah_panen ? $item->satuan : '' }}</td>
|
||||||
<td>{{ $item->produktivitas ? $item->produktivitas . ' ' . $item->satuan . '/ha' : '-' }}</td>
|
<td>{{ $item->produktivitas ? $item->produktivitas . ' ' . $item->satuan . '/ha' : '-' }}</td>
|
||||||
<td>
|
<td>
|
||||||
@php($statusClass = ['belum_panen' => 'secondary', 'panen_sebagian' => 'warning', 'selesai' => 'success'][$item->status_panen] ?? 'secondary')
|
@php($statusClass = ['panen_sebagian' => 'warning', 'selesai' => 'success'][$item->status_panen] ?? 'secondary')
|
||||||
<span class="badge bg-label-{{ $statusClass }}">{{ ucwords(str_replace('_', ' ', $item->status_panen)) }}</span>
|
<span class="badge bg-label-{{ $statusClass }}">{{ ucwords(str_replace('_', ' ', $item->status_panen)) }}</span>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="d-flex align-items-center">
|
<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="{{ 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="javascript:;" class="btn btn-icon btn-text-secondary rounded-pill delete-record" data-id="{{ $item->id }}" data-nama="{{ $item->komoditas->nama ?? 'Hasil Panen' }}"><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>
|
<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>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@empty
|
@empty
|
||||||
<tr><td colspan="9" class="text-center py-4">Tidak ada data produksi ditemukan.</td></tr>
|
<tr><td colspan="9" class="text-center py-4">Tidak ada data hasil panen ditemukan.</td></tr>
|
||||||
@endforelse
|
@endforelse
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -102,7 +104,7 @@
|
|||||||
const name = $(this).data('nama');
|
const name = $(this).data('nama');
|
||||||
|
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: 'Hapus Produksi?',
|
title: 'Hapus Hasil Panen?',
|
||||||
text: `Data "${name}" akan dihapus.`,
|
text: `Data "${name}" akan dihapus.`,
|
||||||
icon: 'warning',
|
icon: 'warning',
|
||||||
showCancelButton: true,
|
showCancelButton: true,
|
||||||
|
|||||||
@@ -4,24 +4,23 @@
|
|||||||
<div class="container-xxl flex-grow-1 container-p-y">
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
<div class="card-header border-bottom d-flex justify-content-between align-items-center">
|
||||||
<h5 class="card-title mb-0">Detail Produksi</h5>
|
<h5 class="card-title mb-0">Detail Hasil Panen</h5>
|
||||||
<a href="{{ route('produksi.index') }}" class="btn btn-sm btn-label-secondary"><i class="ti tabler-arrow-left me-1"></i> Kembali</a>
|
<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>
|
||||||
<div class="card-body pt-4">
|
<div class="card-body pt-4">
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
@foreach([
|
@foreach([
|
||||||
'Kode Produksi' => $produksi->kode_produksi,
|
'Komoditas' => $produksi->komoditas->nama ?? '-',
|
||||||
'Periode' => $produksi->periode,
|
|
||||||
'Petani' => $produksi->profile->nama ?? '-',
|
'Petani' => $produksi->profile->nama ?? '-',
|
||||||
'Lahan' => $produksi->lahan->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') : '-',
|
'Tanggal Panen' => $produksi->tanggal_panen ? $produksi->tanggal_panen->format('d-m-Y') : '-',
|
||||||
'Luas Tanam' => $produksi->luas_tanam,
|
'Jumlah Hasil Panen' => $produksi->jumlah_panen ? $produksi->jumlah_panen . ' ' . $produksi->satuan : '-',
|
||||||
'Luas Panen' => $produksi->luas_panen,
|
'Satuan Panen' => $produksi->satuan,
|
||||||
'Jumlah Panen' => $produksi->jumlah_panen ? $produksi->jumlah_panen . ' ' . $produksi->satuan : '-',
|
'Luas Tanam' => $produksi->luas_tanam ? $produksi->luas_tanam . ' ha' : '-',
|
||||||
|
'Luas Panen' => $produksi->luas_panen ? $produksi->luas_panen . ' ha' : '-',
|
||||||
'Produktivitas' => $produksi->produktivitas ? $produksi->produktivitas . ' ' . $produksi->satuan . '/ha' : '-',
|
'Produktivitas' => $produksi->produktivitas ? $produksi->produktivitas . ' ' . $produksi->satuan . '/ha' : '-',
|
||||||
'Status Panen' => ucwords(str_replace('_', ' ', $produksi->status_panen)),
|
'Status Panen' => ucwords(str_replace('_', ' ', $produksi->status_panen)),
|
||||||
|
'Periode Panen' => $produksi->periode,
|
||||||
] as $label => $value)
|
] as $label => $value)
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<label class="form-label text-muted">{{ $label }}</label>
|
<label class="form-label text-muted">{{ $label }}</label>
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ Route::middleware('auth')
|
|||||||
|
|
||||||
Route::resource('lahan', App\Http\Controllers\Web\Produktivitas\LahanController::class);
|
Route::resource('lahan', App\Http\Controllers\Web\Produktivitas\LahanController::class);
|
||||||
Route::resource('produksi', App\Http\Controllers\Web\Produktivitas\ProduksiController::class);
|
Route::resource('produksi', App\Http\Controllers\Web\Produktivitas\ProduksiController::class);
|
||||||
Route::resource('kualitas', App\Http\Controllers\Web\Produktivitas\KualitasController::class);
|
|
||||||
Route::get('/lahan-by-profile/{profileId}', [App\Http\Controllers\Web\Produktivitas\LahanController::class, 'getByProfile'])->name('lahan.by-profile');
|
Route::get('/lahan-by-profile/{profileId}', [App\Http\Controllers\Web\Produktivitas\LahanController::class, 'getByProfile'])->name('lahan.by-profile');
|
||||||
|
|
||||||
Route::get('/komoditas', [App\Http\Controllers\Web\Master\KomoditasController::class, 'index'])->name('komoditas.index');
|
Route::get('/komoditas', [App\Http\Controllers\Web\Master\KomoditasController::class, 'index'])->name('komoditas.index');
|
||||||
|
|||||||
Reference in New Issue
Block a user