Update Kelompok Tani & APP AGERA
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web\Produktivitas;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
use App\Models\Pertanian\KelompokTani;
|
||||
use App\Models\Pertanian\AsetKelompokTani;
|
||||
|
||||
class AsetKelompokTaniController extends Controller
|
||||
{
|
||||
public const JENIS_ASET_BAKU = [
|
||||
'Bibit/alat produksi',
|
||||
'Pupuk (stok kelompok)',
|
||||
'Pulper/alat kupas',
|
||||
'Lantai jemur',
|
||||
'Kotak/wadah fermentasi',
|
||||
'Kas/simpanan kelompok',
|
||||
'Gudang/tempat simpan',
|
||||
'Timbangan',
|
||||
];
|
||||
|
||||
private function authorizeAccess(): void
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
abort(403);
|
||||
}
|
||||
}
|
||||
|
||||
private function redirectToSection(string $url, string $section, string $message)
|
||||
{
|
||||
return redirect($url . '#section-' . $section)->with([
|
||||
'success' => $message,
|
||||
'success_section' => $section,
|
||||
]);
|
||||
}
|
||||
|
||||
public function index(KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$kelompokTani->load('aset');
|
||||
|
||||
return view('produktivitas.survey-kelompok-tani.aset-keuangan', compact('kelompokTani'));
|
||||
}
|
||||
|
||||
public function update(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$validated = $request->validate([
|
||||
'aset' => ['required', 'array'],
|
||||
'aset.*.jenis_aset' => ['required', Rule::in(self::JENIS_ASET_BAKU)],
|
||||
'aset.*.status_aset' => ['nullable', 'boolean'],
|
||||
'aset.*.status_pengelolaan_aset' => ['nullable', 'string', 'max:100'],
|
||||
'aset.*.kondisi_aset' => ['nullable', 'string', 'max:100'],
|
||||
]);
|
||||
|
||||
foreach ($validated['aset'] as $item) {
|
||||
$jenisAset = $item['jenis_aset'];
|
||||
$ada = (bool) ($item['status_aset'] ?? false);
|
||||
|
||||
$existing = $kelompokTani->aset()->where('jenis_aset', $jenisAset)->first()
|
||||
?? $kelompokTani->aset()->onlyTrashed()->where('jenis_aset', $jenisAset)->latest('id')->first();
|
||||
|
||||
if (!$ada) {
|
||||
if ($existing && !$existing->trashed()) {
|
||||
$existing->update(['deleted_by' => auth()->id()]);
|
||||
$existing->delete();
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($existing) {
|
||||
if ($existing->trashed()) {
|
||||
$existing->restore();
|
||||
}
|
||||
|
||||
$existing->update([
|
||||
'status_aset' => true,
|
||||
'status_pengelolaan_aset' => $item['status_pengelolaan_aset'] ?? $existing->status_pengelolaan_aset,
|
||||
'kondisi_aset' => $item['kondisi_aset'] ?? $existing->kondisi_aset,
|
||||
'deleted_by' => null,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
continue;
|
||||
}
|
||||
|
||||
$kelompokTani->aset()->create([
|
||||
'uid' => 'AKT-' . strtoupper(Str::random(10)),
|
||||
'jenis_aset' => $jenisAset,
|
||||
'status_aset' => true,
|
||||
'status_pengelolaan_aset' => $item['status_pengelolaan_aset'] ?? '-',
|
||||
'kondisi_aset' => $item['kondisi_aset'] ?? '-',
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.aset-keuangan.index', $kelompokTani->id), 'aset-baku', 'Data aset produktif berhasil disimpan.');
|
||||
}
|
||||
|
||||
public function store(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$validated = $request->validate([
|
||||
'aset_lainnya' => ['nullable', 'array'],
|
||||
'aset_lainnya.*.jenis_aset' => ['nullable', 'string', 'max:255', Rule::notIn(self::JENIS_ASET_BAKU)],
|
||||
'aset_lainnya.*.status_pengelolaan_aset' => ['nullable', 'string', 'max:100'],
|
||||
'aset_lainnya.*.kondisi_aset' => ['nullable', 'string', 'max:100'],
|
||||
], [
|
||||
'aset_lainnya.*.jenis_aset.not_in' => 'Jenis aset ini sudah ada di daftar baku di atas.',
|
||||
]);
|
||||
|
||||
foreach ($validated['aset_lainnya'] ?? [] as $item) {
|
||||
$jenisAset = trim($item['jenis_aset'] ?? '');
|
||||
|
||||
if ($jenisAset === '') {
|
||||
continue;
|
||||
}
|
||||
|
||||
$kelompokTani->aset()->create([
|
||||
'uid' => 'AKT-' . strtoupper(Str::random(10)),
|
||||
'jenis_aset' => $jenisAset,
|
||||
'status_aset' => true,
|
||||
'status_pengelolaan_aset' => $item['status_pengelolaan_aset'] ?? '-',
|
||||
'kondisi_aset' => $item['kondisi_aset'] ?? '-',
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.aset-keuangan.index', $kelompokTani->id), 'aset-lainnya', 'Aset lainnya berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
public function destroy(KelompokTani $kelompokTani, AsetKelompokTani $aset)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
abort_unless($aset->survey_kelompok_tani_id === $kelompokTani->id, 404);
|
||||
abort_if(in_array($aset->jenis_aset, self::JENIS_ASET_BAKU), 422, 'Aset baku diatur lewat checklist, bukan dihapus langsung.');
|
||||
|
||||
$aset->update(['deleted_by' => auth()->id()]);
|
||||
$aset->delete();
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.aset-keuangan.index', $kelompokTani->id), 'aset-lainnya', 'Aset lainnya berhasil dihapus.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web\Produktivitas;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
use App\Models\Pertanian\KelompokTani;
|
||||
use App\Models\Pertanian\BantuanKelompokTani;
|
||||
|
||||
class BantuanKelompokTaniController extends Controller
|
||||
{
|
||||
private function authorizeAccess(): void
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
abort(403);
|
||||
}
|
||||
}
|
||||
|
||||
private function redirectToSection(string $url, string $section, string $message)
|
||||
{
|
||||
return redirect($url . '#section-' . $section)->with([
|
||||
'success' => $message,
|
||||
'success_section' => $section,
|
||||
]);
|
||||
}
|
||||
|
||||
private function redirectToSectionWithError(string $url, string $section, string $message)
|
||||
{
|
||||
return redirect($url . '#section-' . $section)->with([
|
||||
'error' => $message,
|
||||
'error_section' => $section,
|
||||
]);
|
||||
}
|
||||
|
||||
public function index(KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$kelompokTani->load('bantuan');
|
||||
|
||||
return view('produktivitas.survey-kelompok-tani.bantuan-penilaian', compact('kelompokTani'));
|
||||
}
|
||||
|
||||
public function store(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
if (!$kelompokTani->pernah_mendapatkan_bantuan) {
|
||||
return $this->redirectToSectionWithError(
|
||||
route('kelompok-tani.bantuan-penilaian.index', $kelompokTani->id),
|
||||
'status-bantuan',
|
||||
'Set status jadi "Pernah" dulu sebelum menambahkan daftar bantuan/program.'
|
||||
);
|
||||
}
|
||||
|
||||
$validated = $request->validate([
|
||||
'bantuan' => ['nullable', 'array'],
|
||||
'bantuan.*.nama_program' => ['nullable', 'string', 'max:255'],
|
||||
'bantuan.*.penyelenggara' => ['nullable', 'string', 'max:255'],
|
||||
'bantuan.*.bentuk_bantuan' => ['nullable', 'string', 'max:255'],
|
||||
'bantuan.*.tahun' => ['nullable', 'integer', 'min:1900', 'max:' . date('Y')],
|
||||
]);
|
||||
|
||||
foreach ($validated['bantuan'] ?? [] as $item) {
|
||||
if (empty($item['nama_program']) && empty($item['penyelenggara']) && empty($item['bentuk_bantuan'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$kelompokTani->bantuan()->create([
|
||||
'uid' => 'BKT-' . strtoupper(Str::random(10)),
|
||||
'nama_program' => $item['nama_program'] ?? null,
|
||||
'penyelenggara' => $item['penyelenggara'] ?? null,
|
||||
'bentuk_bantuan' => $item['bentuk_bantuan'] ?? null,
|
||||
'tahun' => $item['tahun'] ?? null,
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.bantuan-penilaian.index', $kelompokTani->id), 'bantuan', 'Data bantuan berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
public function destroy(KelompokTani $kelompokTani, BantuanKelompokTani $bantuan)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
abort_unless($bantuan->survey_kelompok_tani_id === $kelompokTani->id, 404);
|
||||
|
||||
$bantuan->update(['deleted_by' => auth()->id()]);
|
||||
$bantuan->delete();
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.bantuan-penilaian.index', $kelompokTani->id), 'bantuan', 'Data bantuan berhasil dihapus.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web\Produktivitas;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
use App\Models\Pertanian\KelompokTani;
|
||||
use App\Models\Pertanian\PengurusKelompokTani;
|
||||
|
||||
class PengurusKelompokTaniController extends Controller
|
||||
{
|
||||
private function authorizeAccess(): void
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
abort(403);
|
||||
}
|
||||
}
|
||||
|
||||
private function redirectToSection(string $url, string $section, string $message)
|
||||
{
|
||||
return redirect($url . '#section-' . $section)->with([
|
||||
'success' => $message,
|
||||
'success_section' => $section,
|
||||
]);
|
||||
}
|
||||
|
||||
public function index(KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$kelompokTani->load('pengurus');
|
||||
|
||||
return view('produktivitas.survey-kelompok-tani.pengurus-anggota', compact('kelompokTani'));
|
||||
}
|
||||
|
||||
public function store(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$validated = $request->validate([
|
||||
'pengurus' => ['nullable', 'array'],
|
||||
'pengurus.*.nama_pengurus' => ['nullable', 'string', 'max:255'],
|
||||
'pengurus.*.jabatan' => ['nullable', 'string', 'max:255'],
|
||||
'pengurus.*.kontak' => ['nullable', 'string', 'max:50'],
|
||||
'pengurus.*.status' => ['nullable', 'boolean'],
|
||||
]);
|
||||
|
||||
foreach ($validated['pengurus'] ?? [] as $item) {
|
||||
if (empty($item['nama_pengurus']) && empty($item['jabatan']) && empty($item['kontak'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$kelompokTani->pengurus()->create([
|
||||
'uid' => 'PKT-' . strtoupper(Str::random(10)),
|
||||
'nama_pengurus' => $item['nama_pengurus'] ?? null,
|
||||
'jabatan' => $item['jabatan'] ?? null,
|
||||
'kontak' => $item['kontak'] ?? null,
|
||||
'status' => $item['status'] ?? false,
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
}
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.pengurus-anggota.index', $kelompokTani->id), 'pengurus', 'Data pengurus berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
public function destroy(KelompokTani $kelompokTani, PengurusKelompokTani $pengurus)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
abort_unless($pengurus->survey_kelompok_tani_id === $kelompokTani->id, 404);
|
||||
|
||||
$pengurus->update(['deleted_by' => auth()->id()]);
|
||||
$pengurus->delete();
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.pengurus-anggota.index', $kelompokTani->id), 'pengurus', 'Data pengurus berhasil dihapus.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,346 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web\Produktivitas;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
use App\Models\Pertanian\KelompokTani;
|
||||
use App\Models\Wilayah\Provinsi;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
|
||||
class SurveyKelompokTaniController extends Controller
|
||||
{
|
||||
private function authorizeAccess(): void
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
abort(403);
|
||||
}
|
||||
}
|
||||
|
||||
private function redirectToSection(string $url, string $section, string $message)
|
||||
{
|
||||
return redirect($url . '#section-' . $section)->with([
|
||||
'success' => $message,
|
||||
'success_section' => $section,
|
||||
]);
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$kelompokTani = KelompokTani::query()
|
||||
->when($request->search, fn ($query, $search) => $query->where('nama_kelompok', 'like', "%{$search}%"))
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 10)
|
||||
->appends($request->query());
|
||||
|
||||
return view('produktivitas.survey-kelompok-tani.index', compact('kelompokTani'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$provinsi = Provinsi::orderBy('kode', 'asc')->get();
|
||||
$komoditas = Komoditas::where('is_utama', true)->get();
|
||||
|
||||
return view('produktivitas.survey-kelompok-tani.add', compact('provinsi', 'komoditas'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$validated = $this->validateIdentitas($request);
|
||||
|
||||
if (($validated['jenis_kelompok'] ?? null) === 'Lainnya') {
|
||||
$validated['jenis_kelompok'] = $validated['jenis_kelompok_lainnya'];
|
||||
}
|
||||
unset($validated['jenis_kelompok_lainnya']);
|
||||
|
||||
$kelompokTani = KelompokTani::create([
|
||||
...$validated,
|
||||
'uid' => 'KLP-' . strtoupper(Str::random(10)),
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.edit', $kelompokTani->id), 'identitas', 'Data kelompok tani berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
private function editUrl(KelompokTani $kelompokTani, string $section = 'identitas'): string
|
||||
{
|
||||
$url = route('kelompok-tani.edit', $kelompokTani->id);
|
||||
|
||||
return $section === 'identitas' ? $url : $url . '?section=' . $section;
|
||||
}
|
||||
|
||||
public function edit(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
return match ($request->query('section', 'identitas')) {
|
||||
'kelembagaan' => view('produktivitas.survey-kelompok-tani.kelembagaan', compact('kelompokTani')),
|
||||
'aktivitas-fungsi' => view('produktivitas.survey-kelompok-tani.aktivitas-fungsi', compact('kelompokTani')),
|
||||
'sosial-konflik' => view('produktivitas.survey-kelompok-tani.sosial-konflik', compact('kelompokTani')),
|
||||
default => view('produktivitas.survey-kelompok-tani.edit', [
|
||||
'kelompokTani' => $kelompokTani,
|
||||
'provinsi' => Provinsi::orderBy('kode', 'asc')->get(),
|
||||
'komoditas' => Komoditas::where('is_utama', true)->get(),
|
||||
]),
|
||||
};
|
||||
}
|
||||
|
||||
public function update(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
return match ($request->input('section', 'identitas')) {
|
||||
'ringkasan-pengurus' => $this->updateRingkasanPengurus($request, $kelompokTani),
|
||||
'kelembagaan' => $this->updateKelembagaan($request, $kelompokTani),
|
||||
'aktivitas-fungsi' => $this->updateAktivitasFungsi($request, $kelompokTani),
|
||||
'kas' => $this->updateKasSimpanPinjam($request, $kelompokTani),
|
||||
'sosial-konflik' => $this->updateSosialKonflik($request, $kelompokTani),
|
||||
'status-bantuan' => $this->updateStatusBantuan($request, $kelompokTani),
|
||||
'penilaian' => $this->updatePenilaian($request, $kelompokTani),
|
||||
default => $this->updateIdentitas($request, $kelompokTani),
|
||||
};
|
||||
}
|
||||
|
||||
public function destroy(string $id)
|
||||
{
|
||||
$this->authorizeAccess();
|
||||
|
||||
$kelompokTani = KelompokTani::findOrFail($id);
|
||||
$kelompokTani->update(['deleted_by' => auth()->id()]);
|
||||
$kelompokTani->delete();
|
||||
|
||||
return response()->json(['message' => 'Data kelompok tani berhasil dihapus.']);
|
||||
}
|
||||
|
||||
private function validateIdentitas(Request $request)
|
||||
{
|
||||
return $request->validate([
|
||||
// Data Responden
|
||||
'nama_responden' => ['required', 'string', 'max:255'],
|
||||
'jabatan_responden' => ['nullable', 'string', 'max:255'],
|
||||
'kontak_responden' => ['nullable', 'string', 'max:20'],
|
||||
|
||||
// Identitas Kelompok Tani
|
||||
'nama_kelompok' => ['required', 'string', 'max:255'],
|
||||
'desa_kelurahan_id' => ['required', 'exists:master_desa_kelurahan,id'],
|
||||
'dusun' => ['nullable', 'string', 'max:255'],
|
||||
'tahun_berdiri' => ['nullable', 'digits:4', 'integer', 'min:1900', 'max:' . date('Y')],
|
||||
'jenis_kelompok' => ['required', 'string', 'max:50'],
|
||||
'jenis_kelompok_lainnya' => ['required_if:jenis_kelompok,Lainnya', 'nullable', 'string', 'max:255'],
|
||||
'nama_gapoktan' => ['nullable', 'string', 'max:255'],
|
||||
'komoditas_id' => ['nullable', 'array'],
|
||||
'komoditas_id.*' => ['exists:master_komoditas,id'],
|
||||
], [
|
||||
'nama_responden.required' => 'Nama responden wajib diisi.',
|
||||
'nama_kelompok.required' => 'Nama kelompok wajib diisi.',
|
||||
'desa_kelurahan_id.required' => 'Desa/Kelurahan wajib dipilih.',
|
||||
'desa_kelurahan_id.exists' => 'Desa/Kelurahan tidak ditemukan.',
|
||||
'jenis_kelompok.required' => 'Jenis kelompok wajib dipilih.',
|
||||
'jenis_kelompok_lainnya.required_if' => 'Sebutkan jenis kelompok lainnya.',
|
||||
'tahun_berdiri.digits' => 'Tahun berdiri harus 4 digit.',
|
||||
]);
|
||||
}
|
||||
|
||||
private function updateIdentitas(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $this->validateIdentitas($request);
|
||||
|
||||
if (($validated['jenis_kelompok'] ?? null) === 'Lainnya') {
|
||||
$validated['jenis_kelompok'] = $validated['jenis_kelompok_lainnya'];
|
||||
}
|
||||
unset($validated['jenis_kelompok_lainnya']);
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.edit', $kelompokTani->id), 'identitas', 'Data kelompok tani berhasil diperbarui.');
|
||||
}
|
||||
|
||||
private function updateRingkasanPengurus(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'jumlah_pengurus' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_pengurus_aktif' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_anggota_terdaftar' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_anggota_aktif' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_pengurus_laki_laki' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_pengurus_perempuan' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_anggota_laki_laki' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_anggota_perempuan' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_anggota_pemuda_laki_laki' => ['nullable', 'integer', 'min:0'],
|
||||
'jumlah_anggota_pemuda_perempuan' => ['nullable', 'integer', 'min:0'],
|
||||
]);
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.pengurus-anggota.index', $kelompokTani->id), 'ringkasan', 'Ringkasan pengurus & anggota berhasil disimpan.');
|
||||
}
|
||||
|
||||
private function updateKelembagaan(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
// Cakupan Wilayah Kelompok
|
||||
'cakupan_wilayah' => ['nullable', 'string', 'max:50'],
|
||||
'nama_wilayah_cakupan' => ['nullable', 'string'],
|
||||
|
||||
// Status Legalitas Kelompok
|
||||
'status_legalitas' => ['nullable', 'string', 'max:50'],
|
||||
'nomor_sk' => ['nullable', 'string', 'max:100'],
|
||||
'tanggal_tahun_penerbitan_sk' => ['nullable', 'string', 'max:30'],
|
||||
|
||||
// Kualitas Kepemimpinan
|
||||
'tingkat_keaktifan_ketua' => ['nullable', 'string', 'max:30'],
|
||||
'status_pembagian_peran' => ['nullable', 'string', 'max:30'],
|
||||
'status_dokumentasi_rapat' => ['nullable', 'string', 'max:30'],
|
||||
|
||||
// Frekuensi Pertemuan Rutin
|
||||
'frekuensi_pertemuan' => ['nullable', 'string', 'max:50'],
|
||||
'tanggal_pertemuan_terakhir' => ['nullable', 'date'],
|
||||
]);
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection($this->editUrl($kelompokTani, 'kelembagaan'), 'kelembagaan', 'Data kelembagaan berhasil disimpan.');
|
||||
}
|
||||
|
||||
private function resolveLainnya(?array $selected, ?string $lainnyaText): ?array
|
||||
{
|
||||
if (empty($selected)) {
|
||||
return $selected;
|
||||
}
|
||||
|
||||
return array_values(array_map(function ($item) use ($lainnyaText) {
|
||||
return $item === 'Lainnya' && filled($lainnyaText) ? $lainnyaText : $item;
|
||||
}, $selected));
|
||||
}
|
||||
|
||||
private function updateAktivitasFungsi(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
// Kegiatan Konkret yang Sudah Berjalan
|
||||
'kegiatan_terlaksana' => ['nullable', 'array'],
|
||||
'kegiatan_terlaksana.*' => ['string', 'max:255'],
|
||||
'kegiatan_terlaksana_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
|
||||
'estimasi_panen_minimal' => ['nullable', 'numeric', 'min:0'],
|
||||
'estimasi_panen_maksimal' => ['nullable', 'numeric', 'min:0', 'gte:estimasi_panen_minimal'],
|
||||
'satuan_hasil_panen' => ['nullable', 'string', 'max:20'],
|
||||
|
||||
'tindakan_hasil_panen' => ['nullable', 'array'],
|
||||
'tindakan_hasil_panen.*' => ['string', 'max:255'],
|
||||
|
||||
// Peran dan Fungsi Kelompok
|
||||
'fungsi_kelompok_bagi_anggota' => ['nullable', 'array'],
|
||||
'fungsi_kelompok_bagi_anggota.*' => ['string', 'max:255'],
|
||||
'fungsi_kelompok_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
], [
|
||||
'estimasi_panen_maksimal.gte' => 'Estimasi panen maksimal tidak boleh kurang dari estimasi minimal.',
|
||||
]);
|
||||
|
||||
$validated['kegiatan_terlaksana'] = $this->resolveLainnya(
|
||||
$validated['kegiatan_terlaksana'] ?? null,
|
||||
$validated['kegiatan_terlaksana_lainnya'] ?? null
|
||||
);
|
||||
unset($validated['kegiatan_terlaksana_lainnya']);
|
||||
|
||||
$validated['fungsi_kelompok_bagi_anggota'] = $this->resolveLainnya(
|
||||
$validated['fungsi_kelompok_bagi_anggota'] ?? null,
|
||||
$validated['fungsi_kelompok_lainnya'] ?? null
|
||||
);
|
||||
unset($validated['fungsi_kelompok_lainnya']);
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection($this->editUrl($kelompokTani, 'aktivitas-fungsi'), 'aktivitas-fungsi', 'Data aktivitas & fungsi kelompok berhasil disimpan.');
|
||||
}
|
||||
|
||||
private function updateKasSimpanPinjam(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'pembukuan_kas' => ['nullable', 'string', 'max:50'],
|
||||
'pengelola_kas' => ['nullable', 'string', 'max:255'],
|
||||
'masalah_pengelolaan_kas_simpan_pinjam' => ['nullable', 'string', 'max:255'],
|
||||
'deskripsi_masalah_pengelolaan_kas_simpan_pinjam' => ['nullable', 'string'],
|
||||
]);
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.aset-keuangan.index', $kelompokTani->id), 'kas', 'Data kas/simpan-pinjam berhasil disimpan.');
|
||||
}
|
||||
|
||||
private function updateSosialKonflik(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
// Keterlibatan Perempuan
|
||||
'partisipasi_perempuan' => ['nullable', 'string', 'max:255'],
|
||||
|
||||
// Riwayat Konflik Internal Kelompok
|
||||
'konflik_kelompok' => ['nullable', 'string', 'max:255'],
|
||||
'topik_konflik' => ['nullable', 'string', 'max:255'],
|
||||
'penyelesaian_konflik' => ['nullable', 'string'],
|
||||
]);
|
||||
|
||||
if (!in_array($validated['konflik_kelompok'] ?? null, ['Pernah, sudah selesai', 'Pernah, masih berlanjut/belum selesai'])) {
|
||||
$validated['topik_konflik'] = null;
|
||||
$validated['penyelesaian_konflik'] = null;
|
||||
}
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection($this->editUrl($kelompokTani, 'sosial-konflik'), 'sosial-konflik', 'Data sosial & konflik berhasil disimpan.');
|
||||
}
|
||||
|
||||
private function updateStatusBantuan(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'pernah_mendapatkan_bantuan' => ['required', 'boolean'],
|
||||
]);
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.bantuan-penilaian.index', $kelompokTani->id), 'status-bantuan', 'Status akses bantuan berhasil disimpan.');
|
||||
}
|
||||
|
||||
private function updatePenilaian(Request $request, KelompokTani $kelompokTani)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'potensi_kelompok' => ['nullable', 'string', 'max:50'],
|
||||
'alasan_penilaian_potensi' => ['nullable', 'string'],
|
||||
]);
|
||||
|
||||
$kelompokTani->update([
|
||||
...$validated,
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
return $this->redirectToSection(route('kelompok-tani.bantuan-penilaian.index', $kelompokTani->id), 'penilaian', 'Penilaian potensi kelompok berhasil disimpan.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Pertanian;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class AsetKelompokTani extends Model
|
||||
{
|
||||
use HasFactory, SoftDeletes;
|
||||
|
||||
protected $table = 'survey_aset_kelompok_tani';
|
||||
|
||||
protected $fillable = [
|
||||
'uid',
|
||||
'survey_kelompok_tani_id',
|
||||
'jenis_aset',
|
||||
'status_aset',
|
||||
'status_pengelolaan_aset',
|
||||
'kondisi_aset',
|
||||
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'status_aset' => 'boolean',
|
||||
];
|
||||
|
||||
public function kelompokTani(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(KelompokTani::class, 'survey_kelompok_tani_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Pertanian;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class BantuanKelompokTani extends Model
|
||||
{
|
||||
use HasFactory, SoftDeletes;
|
||||
|
||||
protected $table = 'survey_bantuan_kelompok_tani';
|
||||
|
||||
protected $fillable = [
|
||||
'uid',
|
||||
'survey_kelompok_tani_id',
|
||||
'nama_program',
|
||||
'penyelenggara',
|
||||
'bentuk_bantuan',
|
||||
'tahun',
|
||||
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
];
|
||||
|
||||
public function kelompokTani(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(KelompokTani::class, 'survey_kelompok_tani_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Pertanian;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
|
||||
use App\Models\Wilayah\DesaKelurahan;
|
||||
|
||||
class KelompokTani extends Model
|
||||
{
|
||||
use HasFactory, SoftDeletes;
|
||||
|
||||
protected $table = 'survey_kelompok_tani';
|
||||
|
||||
protected $fillable = [
|
||||
'uid',
|
||||
|
||||
// Data Responden
|
||||
'nama_responden',
|
||||
'jabatan_responden',
|
||||
'kontak_responden',
|
||||
|
||||
// Identitas Kelompok Tani
|
||||
'nama_kelompok',
|
||||
'desa_kelurahan_id',
|
||||
'dusun',
|
||||
'tahun_berdiri',
|
||||
'jenis_kelompok',
|
||||
'nama_gapoktan',
|
||||
'komoditas_id',
|
||||
|
||||
// Pengurus & Anggota Kelompok
|
||||
'jumlah_pengurus',
|
||||
'jumlah_pengurus_aktif',
|
||||
'jumlah_anggota_terdaftar',
|
||||
'jumlah_anggota_aktif',
|
||||
'jumlah_pengurus_laki_laki',
|
||||
'jumlah_pengurus_perempuan',
|
||||
'jumlah_anggota_laki_laki',
|
||||
'jumlah_anggota_perempuan',
|
||||
'jumlah_anggota_pemuda_laki_laki',
|
||||
'jumlah_anggota_pemuda_perempuan',
|
||||
|
||||
// Cakupan Wilayah Kelompok
|
||||
'cakupan_wilayah',
|
||||
'nama_wilayah_cakupan',
|
||||
|
||||
// Status Legalitas Kelompok
|
||||
'status_legalitas',
|
||||
'nomor_sk',
|
||||
'tanggal_tahun_penerbitan_sk',
|
||||
|
||||
// Kualitas Kepemimpinan
|
||||
'tingkat_keaktifan_ketua',
|
||||
'status_pembagian_peran',
|
||||
'status_dokumentasi_rapat',
|
||||
|
||||
// Frekuensi Pertemuan Rutin
|
||||
'frekuensi_pertemuan',
|
||||
'tanggal_pertemuan_terakhir',
|
||||
|
||||
// Kegiatan Konkret yang Sudah Berjalan
|
||||
'kegiatan_terlaksana',
|
||||
'estimasi_panen_minimal',
|
||||
'estimasi_panen_maksimal',
|
||||
'satuan_hasil_panen',
|
||||
'tindakan_hasil_panen',
|
||||
|
||||
// Peran & Fungsi Kelompok
|
||||
'fungsi_kelompok_bagi_anggota',
|
||||
|
||||
// Kapasitas Pengelolaan Kas/Simpan Pinjam
|
||||
'pembukuan_kas',
|
||||
'pengelola_kas',
|
||||
'masalah_pengelolaan_kas_simpan_pinjam',
|
||||
'deskripsi_masalah_pengelolaan_kas_simpan_pinjam',
|
||||
|
||||
// Keterlibatan Perempuan
|
||||
'partisipasi_perempuan',
|
||||
|
||||
// Konflik Internal
|
||||
'konflik_kelompok',
|
||||
'topik_konflik',
|
||||
'penyelesaian_konflik',
|
||||
|
||||
// Pengalaman Bantuan
|
||||
'pernah_mendapatkan_bantuan',
|
||||
|
||||
// Postensi Sebagai Mitra Agregasi/Pengolahan Kolektif
|
||||
'potensi_kelompok',
|
||||
'alasan_penilaian_potensi',
|
||||
|
||||
// Audit
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'komoditas_id' => 'array',
|
||||
'tindakan_hasil_panen' => 'array',
|
||||
'fungsi_kelompok_bagi_anggota' => 'array',
|
||||
'kegiatan_terlaksana' => 'array',
|
||||
|
||||
'pernah_mendapatkan_bantuan' => 'boolean',
|
||||
|
||||
'tanggal_pertemuan_terakhir' => 'date',
|
||||
|
||||
'estimasi_panen_minimal' => 'decimal:2',
|
||||
'estimasi_panen_maksimal' => 'decimal:2',
|
||||
];
|
||||
|
||||
public function desaKelurahan()
|
||||
{
|
||||
return $this->belongsTo(DesaKelurahan::class, 'desa_kelurahan_id');
|
||||
}
|
||||
|
||||
public function pengurus()
|
||||
{
|
||||
return $this->hasMany(PengurusKelompokTani::class, 'survey_kelompok_tani_id');
|
||||
}
|
||||
|
||||
public function aset()
|
||||
{
|
||||
return $this->hasMany(AsetKelompokTani::class, 'survey_kelompok_tani_id');
|
||||
}
|
||||
|
||||
public function bantuan()
|
||||
{
|
||||
return $this->hasMany(BantuanKelompokTani::class, 'survey_kelompok_tani_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Pertanian;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class PengurusKelompokTani extends Model
|
||||
{
|
||||
use HasFactory, SoftDeletes;
|
||||
|
||||
protected $table = 'survey_pengurus_kelompok_tani';
|
||||
|
||||
protected $fillable = [
|
||||
'uid',
|
||||
'survey_kelompok_tani_id',
|
||||
'nama_pengurus',
|
||||
'jabatan',
|
||||
'kontak',
|
||||
'status',
|
||||
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'status' => 'boolean',
|
||||
];
|
||||
|
||||
public function kelompokTani(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(KelompokTani::class, 'survey_kelompok_tani_id');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
<?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('survey_kelompok_tani', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uid')->unique();
|
||||
// Data Responden
|
||||
$table->string('nama_responden')->nullable();
|
||||
$table->string('jabatan_responden')->nullable();
|
||||
$table->string('kontak_responden')->nullable();
|
||||
// Identitas Kelompok Tani
|
||||
$table->string('nama_kelompok')->nullable();
|
||||
$table->foreignId('desa_kelurahan_id')->nullable()->constrained('master_desa_kelurahan');
|
||||
$table->string('dusun')->nullable();
|
||||
$table->year('tahun_berdiri')->nullable();
|
||||
$table->string('jenis_kelompok', 50)->nullable();
|
||||
$table->string('nama_gapoktan')->nullable();
|
||||
$table->jsonb('komoditas_id')->nullable();
|
||||
// Pengurus & Anggota Kelompok
|
||||
$table->unsignedInteger('jumlah_pengurus')->nullable();
|
||||
$table->unsignedInteger('jumlah_pengurus_aktif')->nullable();
|
||||
$table->unsignedInteger('jumlah_anggota_terdaftar')->nullable();
|
||||
$table->unsignedInteger('jumlah_anggota_aktif')->nullable();
|
||||
$table->unsignedInteger('jumlah_pengurus_laki_laki')->nullable();
|
||||
$table->unsignedInteger('jumlah_pengurus_perempuan')->nullable();
|
||||
$table->unsignedInteger('jumlah_anggota_laki_laki')->nullable();
|
||||
$table->unsignedInteger('jumlah_anggota_perempuan')->nullable();
|
||||
$table->unsignedInteger('jumlah_anggota_pemuda_laki_laki')->nullable();
|
||||
$table->unsignedInteger('jumlah_anggota_pemuda_perempuan')->nullable();
|
||||
// Cakupan Wilayah Kelompok
|
||||
$table->string('cakupan_wilayah')->nullable();
|
||||
$table->text('nama_wilayah_cakupan')->nullable();
|
||||
// Status Legalitas Kelompok
|
||||
$table->string('status_legalitas', 50)->nullable();
|
||||
$table->string('nomor_sk', 100)->nullable();
|
||||
$table->string('tanggal_tahun_penerbitan_sk', 30)->nullable();
|
||||
// Kualitas Kepemimpinan
|
||||
$table->string('tingkat_keaktifan_ketua', 30)->nullable();
|
||||
$table->string('status_pembagian_peran', 30)->nullable();
|
||||
$table->string('status_dokumentasi_rapat', 30)->nullable();
|
||||
// Frekuensi Pertemuan Rutin
|
||||
$table->string('frekuensi_pertemuan', 50)->nullable();
|
||||
$table->date('tanggal_pertemuan_terakhir')->nullable();
|
||||
// Kegiatan Kongkret yang Sudah Berjalan
|
||||
$table->jsonb('kegiatan_terlaksana')->nullable();
|
||||
$table->decimal('estimasi_panen_minimal', 10, 2)->nullable();
|
||||
$table->decimal('estimasi_panen_maksimal', 10, 2)->nullable();
|
||||
$table->string('satuan_hasil_panen')->nullable();
|
||||
$table->jsonb('tindakan_hasil_panen')->nullable();
|
||||
// Peran & Fungsi Kelompok
|
||||
$table->jsonb('fungsi_kelompok_bagi_anggota')->nullable();
|
||||
// Kapasitas Pengelolaan Kas/Simpan-Pinjam Kelompok
|
||||
$table->string('pembukuan_kas', 50)->nullable();
|
||||
$table->string('pengelola_kas')->nullable();
|
||||
$table->string('masalah_pengelolaan_kas_simpan_pinjam')->nullable();
|
||||
$table->text('deskripsi_masalah_pengelolaan_kas_simpan_pinjam')->nullable();
|
||||
// Keterlibatan Perempuan
|
||||
$table->string('partisipasi_perempuan')->nullable();
|
||||
// Riwayat konflik Internal Kelompok
|
||||
$table->string('konflik_kelompok')->nullable();
|
||||
$table->string('topik_konflik')->nullable();
|
||||
$table->text('penyelesaian_konflik')->nullable();
|
||||
// Pengalaman Akses Bantuan
|
||||
$table->boolean('pernah_mendapatkan_bantuan')->nullable();
|
||||
// Postensi Sebagai Mitra Agregasi/Pengolahan Kolektif
|
||||
$table->string('potensi_kelompok')->nullable();
|
||||
$table->text('alasan_penilaian_potensi')->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();
|
||||
});
|
||||
|
||||
Schema::create('survey_pengurus_kelompok_tani', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uid')->unique();
|
||||
$table->foreignId('survey_kelompok_tani_id')->nullable()->constrained('survey_kelompok_tani')->cascadeOnUpdate()->cascadeOnDelete();
|
||||
$table->string('nama_pengurus');
|
||||
$table->string('jabatan');
|
||||
$table->string('kontak');
|
||||
$table->boolean('status');
|
||||
$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();
|
||||
});
|
||||
|
||||
Schema::create('survey_aset_kelompok_tani', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uid')->unique();
|
||||
$table->foreignId('survey_kelompok_tani_id')->nullable()->constrained('survey_kelompok_tani')->cascadeOnUpdate()->cascadeOnDelete();
|
||||
$table->string('jenis_aset');
|
||||
$table->boolean('status_aset');
|
||||
$table->string('status_pengelolaan_aset');
|
||||
$table->string('kondisi_aset');
|
||||
$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();
|
||||
});
|
||||
|
||||
Schema::create('survey_bantuan_kelompok_tani', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uid')->unique();
|
||||
$table->foreignId('survey_kelompok_tani_id')->nullable()->constrained('survey_kelompok_tani')->cascadeOnUpdate()->cascadeOnDelete();
|
||||
$table->string('nama_program');
|
||||
$table->string('penyelenggara');
|
||||
$table->string('bentuk_bantuan');
|
||||
$table->year('tahun');
|
||||
$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();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('survey_bantuan_kelompok_tani');
|
||||
Schema::dropIfExists('survey_aset_kelompok_tani');
|
||||
Schema::dropIfExists('survey_pengurus_kelompok_tani');
|
||||
Schema::dropIfExists('survey_kelompok_tani');
|
||||
}
|
||||
};
|
||||
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 421 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 328 KiB |
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 359 KiB |
@@ -71,13 +71,13 @@ window.templateName = document.documentElement.getAttribute('data-template');
|
||||
|
||||
if (typeof TemplateCustomizer !== 'undefined') {
|
||||
window.templateCustomizer = new TemplateCustomizer({
|
||||
displayCustomizer: true,
|
||||
displayCustomizer: false,
|
||||
lang: localStorage.getItem('templateCustomizer-' + templateName + '--Lang') || 'en', // Set default language here
|
||||
// defaultPrimaryColor: '#D11BB4',
|
||||
defaultPrimaryColor: '#2a7233',
|
||||
// defaultSkin: 1,
|
||||
// defaultTheme: 'system',
|
||||
// defaultSemiDark: true,
|
||||
// defaultContentLayout: 'wide',
|
||||
defaultContentLayout: 'wide',
|
||||
// defaultHeaderType: 'static',
|
||||
// defaultMenuCollapsed: true,
|
||||
// defaultNavbarType: 'static',
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<title>Agomonev | {{ $title ?? 'Auth' }} </title>
|
||||
<title>AGERA | {{ $title ?? 'Auth' }} </title>
|
||||
|
||||
<meta name="description" content="" />
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/x-icon" href="../../assets/img/favicon/favicon.ico" />
|
||||
<link rel="icon" type="image/svg+xml" href="{{ asset('assets/img/logo/agera_icon.svg') }}" />
|
||||
|
||||
<!-- Fonts -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
@@ -72,6 +72,21 @@
|
||||
<!--? Config: Mandatory theme config file contain global vars & default theme options, Set your preferred theme option in this file. -->
|
||||
|
||||
<script src="{{ asset('assets/js/config.js') }}"></script>
|
||||
|
||||
<style>
|
||||
.agera-logo {
|
||||
width: 200px;
|
||||
height: auto;
|
||||
max-height: 78px;
|
||||
object-fit: contain;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.app-brand-logo.demo {
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
@@ -6,24 +6,12 @@
|
||||
<div class="app-brand justify-content-center mb-6">
|
||||
<a href="{{ route('home') }}" class="app-brand-link">
|
||||
<span class="app-brand-logo demo">
|
||||
<span class="text-primary">
|
||||
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<!-- Daun Bagian Kiri -->
|
||||
<path opacity="0.3" d="M16 2.5C16 2.5 5 6.5 5 15.5C5 20.5 11 23.5 16 23.5V2.5Z" fill="currentColor" />
|
||||
<!-- Daun Bagian Kanan -->
|
||||
<path opacity="0.6" d="M16 2.5C16 2.5 27 6.5 27 15.5C27 20.5 21 23.5 16 23.5V2.5Z" fill="currentColor" />
|
||||
<!-- Grafik Pertumbuhan (Monev) -->
|
||||
<path d="M2 19L10 11L15 15L27 4" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<!-- Titik Target/Pencapaian -->
|
||||
<circle cx="27" cy="4" r="2.5" fill="currentColor" />
|
||||
</svg>
|
||||
</span>
|
||||
<img src="{{ asset('assets/img/logo/agera_side.svg') }}" alt="AGERA" class="agera-logo">
|
||||
</span>
|
||||
<span class="app-brand-text demo menu-text fw-bold ms-3" style="text-transform: capitalize;">AgroMonev</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h4 class="mb-1">Selamat datang di AgroMonev!</h4>
|
||||
<h4 class="mb-1">Selamat datang di AGERA!</h4>
|
||||
<p class="mb-6">Silakan masuk ke akun Anda</p>
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
|
||||
@@ -6,40 +6,12 @@
|
||||
<div class="app-brand justify-content-center mb-6">
|
||||
<a href="{{ route('home') }}" class="app-brand-link">
|
||||
<span class="app-brand-logo demo">
|
||||
<span class="text-primary">
|
||||
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3"
|
||||
d="M16 2.5C16 2.5 5 6.5 5 15.5C5 20.5 11 23.5 16 23.5V2.5Z"
|
||||
fill="#2E7D32" />
|
||||
|
||||
<path opacity="0.6"
|
||||
d="M16 2.5C16 2.5 27 6.5 27 15.5C27 20.5 21 23.5 16 23.5V2.5Z"
|
||||
fill="#2E7D32" />
|
||||
|
||||
<path d="M2 19L10 11L15 15"
|
||||
stroke="#0054A6"
|
||||
stroke-width="2.5"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round" />
|
||||
|
||||
<path d="M15 15L27 4"
|
||||
stroke="#ED1C24"
|
||||
stroke-width="2.5"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round" />
|
||||
|
||||
<circle cx="27" cy="4" r="2.5" fill="#ED1C24" />
|
||||
</svg>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<span class="app-brand-text demo menu-text fw-bold ms-3" style="text-transform: capitalize;">
|
||||
AgroMonev
|
||||
<img src="{{ asset('assets/img/logo/agera_side.svg') }}" alt="AGERA" class="agera-logo">
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /Logo -->
|
||||
<h4 class="mb-1">Buat akun AgroMonev</h4>
|
||||
<h4 class="mb-1">Buat akun AGERA</h4>
|
||||
<p class="mb-6">Lengkapi data berikut untuk membuat akun baru.</p>
|
||||
|
||||
<form id="formAuthentication" class="mb-6" action="{{ route('auth.createAccount') }}" method="POST">
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<title>AgroMonev | {{ $title ?? 'Database Petani' }}</title>
|
||||
<title>AGERA | {{ $title ?? 'Database Petani' }}</title>
|
||||
|
||||
<meta name="description" content="" />
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="../../assets/img/favicon/favicon.ico" />
|
||||
<link rel="icon" type="image/svg+xml" href="{{ asset('assets/img/logo/agera_icon.svg') }}" />
|
||||
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
@@ -64,6 +64,26 @@
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
|
||||
|
||||
<style>
|
||||
.agera-logo {
|
||||
width: 200px;
|
||||
height: auto;
|
||||
max-height: 78px;
|
||||
object-fit: contain;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.app-brand-logo.demo {
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.app-brand.demo {
|
||||
height: 98px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@stack('style')
|
||||
<script src="{{ asset('assets/vendor/js/helpers.js') }}"></script>
|
||||
|
||||
@@ -2,38 +2,11 @@
|
||||
<div class="app-brand demo ">
|
||||
<a href="{{ route('home') }}" class="app-brand-link">
|
||||
<span class="app-brand-logo demo">
|
||||
<span>
|
||||
<!-- AgroMonev -->
|
||||
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.3" d="M16 2.5C16 2.5 5 6.5 5 15.5C5 20.5 11 23.5 16 23.5V2.5Z" fill="#28a745" />
|
||||
<path opacity="0.6" d="M16 2.5C16 2.5 27 6.5 27 15.5C27 20.5 21 23.5 16 23.5V2.5Z" fill="#28a745" />
|
||||
<path d="M2 19L10 11L15 15" stroke="#0054A6" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<path d="M15 15L27 4" stroke="#ED1C24" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<circle cx="27" cy="4" r="2.5" fill="#ED1C24" />
|
||||
</svg>
|
||||
<!-- AgroPro -->
|
||||
<!-- <svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path opacity="0.25" d="M16 2.5C16 2.5 5 6.5 5 15.5C5 20.5 11 23.5 16 23.5V2.5Z" fill="#28A745"/>
|
||||
<path opacity="0.5" d="M16 2.5C16 2.5 27 6.5 27 15.5C27 20.5 21 23.5 16 23.5V2.5Z" fill="#28A745"/>
|
||||
<rect x="5.5" y="5.5" width="21" height="15" rx="2.5" fill="white" stroke="#0054A6" stroke-width="1.5"/>
|
||||
<rect x="11" y="3.5" width="10" height="4" rx="2" fill="#0054A6"/>
|
||||
<circle cx="9.5" cy="10" r="1.7" fill="#28A745"/>
|
||||
<path d="M8.7 10L9.3 10.6L10.4 9.3" stroke="white" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13 10H23" stroke="#D9E2EC" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M13 10H22" stroke="#0054A6" stroke-width="2" stroke-linecap="round"/>
|
||||
<circle cx="9.5" cy="14" r="1.7" fill="#28A745"/>
|
||||
<path d="M8.7 14L9.3 14.6L10.4 13.3" stroke="white" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M13 14H23" stroke="#D9E2EC" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M13 14H19.5" stroke="#F4B400" stroke-width="2" stroke-linecap="round"/>
|
||||
<circle cx="9.5" cy="18" r="1.7" fill="white" stroke="#ED1C24" stroke-width="1.3"/>
|
||||
<path d="M13 18H23" stroke="#D9E2EC" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M13 18H17" stroke="#ED1C24" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg> -->
|
||||
</span>
|
||||
</span>
|
||||
|
||||
<span class="app-brand-text demo menu-text fw-bold ms-3" style="text-transform: capitalize;">
|
||||
AgroMonev
|
||||
<img
|
||||
src="{{ asset('assets/img/logo/agera_side.svg') }}"
|
||||
alt="AGERA"
|
||||
class="agera-logo"
|
||||
>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@@ -121,41 +94,36 @@
|
||||
@endif
|
||||
|
||||
@if(in_array($userRole, ['fasilitator', 'super_admin', 'admin']) && env('APP_NAME') == 'AgroMonev')
|
||||
<li class="menu-header small">
|
||||
<span class="menu-header-text" data-i18n="Data Pertanian">Data Pertanian</span>
|
||||
</li>
|
||||
<li class="menu-item {{ request()->routeIs('petani.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('petani.index') }}" class="menu-link">
|
||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||
<div data-i18n="Profil Petani">Profil Petani</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-header small">
|
||||
<span class="menu-header-text" data-i18n="Data Pertanian">Data Pertanian</span>
|
||||
</li>
|
||||
<li class="menu-item {{ request()->routeIs('petani.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('petani.index') }}" class="menu-link">
|
||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||
<div data-i18n="Profil Petani">Profil Petani</div>
|
||||
</a>
|
||||
</li>
|
||||
@if(in_array($userRole, ['super_admin', 'admin']) && env('APP_NAME') == 'AgroMonev')
|
||||
<li class="menu-item {{ request()->routeIs('kelompok-tani.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('kelompok-tani.index') }}" class="menu-link">
|
||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||
<div data-i18n="Profil Kelompok Tani">Profil Kelompok Tani</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-item {{ request()->routeIs('bumdes.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('bumdes.index') }}" class="menu-link">
|
||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||
<div data-i18n="Profil BUMDes">Profil BUMDes</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="menu-item {{ request()->routeIs('koperasi.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('koperasi.pengurus.index') }}" class="menu-link">
|
||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||
<div data-i18n="Profil Pengurus Koperasi">Profil Pengurus Koperasi</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
@endif
|
||||
@if(in_array($userRole, ['super_admin', 'admin']) && env('APP_NAME') == 'AgroMonev')
|
||||
<li class="menu-header small">
|
||||
<span class="menu-header-text" data-i18n="Data BUMDes">Data BUMDes</span>
|
||||
</li>
|
||||
<li class="menu-item {{ request()->routeIs('bumdes.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('bumdes.index') }}" class="menu-link">
|
||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||
<div data-i18n="Profil Pengurus BUMDes">Profil Pengurus BUMDes</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
@if(in_array($userRole, ['super_admin', 'admin']) && env('APP_NAME') == 'AgroMonev')
|
||||
<li class="menu-header small">
|
||||
<span class="menu-header-text" data-i18n="Data Koperasi">Data Koperasi</span>
|
||||
</li>
|
||||
<li class="menu-item {{ request()->routeIs('koperasi.*') ? 'active' : '' }}">
|
||||
<a href="{{ route('koperasi.pengurus.index') }}" class="menu-link">
|
||||
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||
<div data-i18n="Profil Pengurus Koperasi">Profil Pengurus Koperasi</div>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
|
||||
|
||||
@if(in_array($userRole, ['super_admin', 'admin']) && env('APP_NAME') == 'AgroPro')
|
||||
<!-- Ekosistem -->
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
{{--
|
||||
Partial notif per-card. Dipakai di dalam tiap <div class="card"> supaya notif sukses/gagal
|
||||
muncul tepat di atas card yang barusan disubmit, bukan di paling atas halaman.
|
||||
|
||||
Params:
|
||||
- $section (string) kunci section, harus sama dengan yang dipakai controller di redirectToSection().
|
||||
- $errorFields (array, optional) daftar nama field/wildcard (mis. 'aset.*') milik card ini,
|
||||
dipakai buat nentuin apakah error validasi yang ada punya card ini.
|
||||
--}}
|
||||
@if(session('success') && session('success_section') === $section)
|
||||
<div class="alert alert-success alert-dismissible" role="alert">
|
||||
{{ session('success') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(session('error') && session('error_section') === $section)
|
||||
<div class="alert alert-danger alert-dismissible" role="alert">
|
||||
{{ session('error') }}
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(!empty($errorFields) && $errors->has($errorFields))
|
||||
<div class="alert alert-danger alert-dismissible" role="alert">
|
||||
<ul class="mb-0">
|
||||
@foreach($errorFields as $field)
|
||||
@foreach($errors->get($field) as $messages)
|
||||
@foreach((array) $messages as $message)
|
||||
<li>{{ $message }}</li>
|
||||
@endforeach
|
||||
@endforeach
|
||||
@endforeach
|
||||
</ul>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</div>
|
||||
@endif
|
||||
@@ -0,0 +1,287 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => null])
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card mb-6">
|
||||
<div class="card-body pt-6">
|
||||
<form id="addKelompokTaniForm" action="{{ route('kelompok-tani.store') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Data Responden</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-nama-responden">Nama Responden<span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_responden') is-invalid @enderror" id="add-kt-nama-responden" name="nama_responden"
|
||||
placeholder="Cth: John Doe" value="{{ old('nama_responden') }}" />
|
||||
@error('nama_responden')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-jabatan-responden">Jabatan Responden</label>
|
||||
<input type="text" class="form-control @error('jabatan_responden') is-invalid @enderror" id="add-kt-jabatan-responden" name="jabatan_responden"
|
||||
placeholder="Cth: Ketua Kelompok" value="{{ old('jabatan_responden') }}" />
|
||||
@error('jabatan_responden')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-kontak-responden">Kontak Responden (No. HP)</label>
|
||||
<input type="text" class="form-control @error('kontak_responden') is-invalid @enderror" id="add-kt-kontak-responden" name="kontak_responden"
|
||||
placeholder="Cth: 081234567890" value="{{ old('kontak_responden') }}" />
|
||||
@error('kontak_responden')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Identitas Kelompok Tani</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-nama-kelompok">Nama Kelompok Tani<span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_kelompok') is-invalid @enderror" id="add-kt-nama-kelompok" name="nama_kelompok"
|
||||
placeholder="Cth: Kelompok Tani Maju Bersama" value="{{ old('nama_kelompok') }}" />
|
||||
@error('nama_kelompok')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-dusun">Dusun</label>
|
||||
<input type="text" class="form-control @error('dusun') is-invalid @enderror" id="add-kt-dusun" name="dusun"
|
||||
placeholder="Cth: Dusun I" value="{{ old('dusun') }}" />
|
||||
@error('dusun')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-tahun-berdiri">Tahun Berdiri</label>
|
||||
<input type="number" class="form-control @error('tahun_berdiri') is-invalid @enderror" id="add-kt-tahun-berdiri" name="tahun_berdiri"
|
||||
placeholder="Cth: 2015" min="1900" max="{{ date('Y') }}" value="{{ old('tahun_berdiri') }}" />
|
||||
@error('tahun_berdiri')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-provinsi">Provinsi<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('provinsi_id') is-invalid @enderror" id="add-kt-provinsi" name="provinsi_id">
|
||||
<option value="">Pilih Provinsi</option>
|
||||
@foreach($provinsi as $p)
|
||||
<option value="{{ $p->id }}" {{ old('provinsi_id') == $p->id ? 'selected' : '' }}>{{ $p->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-kabupaten">Kabupaten/Kota<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('kabupaten_id') is-invalid @enderror" id="add-kt-kabupaten" name="kabupaten_id" disabled>
|
||||
<option value="">Pilih Kabupaten/Kota</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-kecamatan">Kecamatan<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('kecamatan_id') is-invalid @enderror" id="add-kt-kecamatan" name="kecamatan_id" disabled>
|
||||
<option value="">Pilih Kecamatan</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-desa">Desa/Kelurahan<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('desa_kelurahan_id') is-invalid @enderror" id="add-kt-desa" name="desa_kelurahan_id" disabled>
|
||||
<option value="">Pilih Desa/Kelurahan</option>
|
||||
</select>
|
||||
@error('desa_kelurahan_id')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="add-kt-jenis-kelompok">Terdaftar/Dikenal Sebagai<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('jenis_kelompok') is-invalid @enderror" id="add-kt-jenis-kelompok" name="jenis_kelompok">
|
||||
<option value="">Pilih Jenis Kelompok</option>
|
||||
<option value="Kelompok Tani (Poktan)" {{ old('jenis_kelompok') == 'Kelompok Tani (Poktan)' ? 'selected' : '' }}>Kelompok Tani (Poktan)</option>
|
||||
<option value="Kelompok Wanita Tani (KWT)" {{ old('jenis_kelompok') == 'Kelompok Wanita Tani (KWT)' ? 'selected' : '' }}>Kelompok Wanita Tani (KWT)</option>
|
||||
<option value="Gabungan Kelompok Tani (Gapoktan)" {{ old('jenis_kelompok') == 'Gabungan Kelompok Tani (Gapoktan)' ? 'selected' : '' }}>Gabungan Kelompok Tani (Gapoktan)</option>
|
||||
<option value="Kelompok Pemuda Tani" {{ old('jenis_kelompok') == 'Kelompok Pemuda Tani' ? 'selected' : '' }}>Kelompok Pemuda Tani</option>
|
||||
<option value="Asosiasi Petani" {{ old('jenis_kelompok') == 'Asosiasi Petani' ? 'selected' : '' }}>Asosiasi Petani</option>
|
||||
<option value="Lainnya" {{ old('jenis_kelompok') == 'Lainnya' ? 'selected' : '' }}>Lainnya</option>
|
||||
</select>
|
||||
@error('jenis_kelompok')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation" id="add-kt-jenis-kelompok-lainnya-wrapper" style="display: none;">
|
||||
<label class="form-label" for="add-kt-jenis-kelompok-lainnya">Sebutkan Jenis Kelompok</label>
|
||||
<input type="text" class="form-control @error('jenis_kelompok_lainnya') is-invalid @enderror" id="add-kt-jenis-kelompok-lainnya" name="jenis_kelompok_lainnya"
|
||||
value="{{ old('jenis_kelompok_lainnya') }}" />
|
||||
@error('jenis_kelompok_lainnya')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation" id="add-kt-nama-gapoktan-wrapper" style="display: none;">
|
||||
<label class="form-label" for="add-kt-nama-gapoktan">Nama Gapoktan</label>
|
||||
<input type="text" class="form-control @error('nama_gapoktan') is-invalid @enderror" id="add-kt-nama-gapoktan" name="nama_gapoktan"
|
||||
placeholder="Cth: Gapoktan Sumber Makmur" value="{{ old('nama_gapoktan') }}" />
|
||||
@error('nama_gapoktan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label">Komoditas Utama</label>
|
||||
<select id="add-kt-komoditas" name="komoditas_id[]" class="form-select @error('komoditas_id') is-invalid @enderror" multiple>
|
||||
@foreach($komoditas as $k)
|
||||
<option value="{{ $k->id }}" {{ collect(old('komoditas_id'))->contains($k->id) ? 'selected' : '' }}>{{ $k->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('komoditas_id')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<a href="{{ route('kelompok-tani.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Kembali</a>
|
||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan & Lanjutkan</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
$(document).ready(function () {
|
||||
|
||||
$('#add-kt-jenis-kelompok, #add-kt-komoditas').select2();
|
||||
|
||||
function toggleJenisKelompokFields() {
|
||||
var jenisKelompok = $('#add-kt-jenis-kelompok').val();
|
||||
|
||||
if (jenisKelompok === 'Lainnya') {
|
||||
$('#add-kt-jenis-kelompok-lainnya-wrapper').show();
|
||||
} else {
|
||||
$('#add-kt-jenis-kelompok-lainnya-wrapper').hide();
|
||||
$('#add-kt-jenis-kelompok-lainnya').val('');
|
||||
}
|
||||
|
||||
if (jenisKelompok === 'Gabungan Kelompok Tani (Gapoktan)') {
|
||||
$('#add-kt-nama-gapoktan-wrapper').show();
|
||||
} else {
|
||||
$('#add-kt-nama-gapoktan-wrapper').hide();
|
||||
$('#add-kt-nama-gapoktan').val('');
|
||||
}
|
||||
}
|
||||
toggleJenisKelompokFields();
|
||||
$('#add-kt-jenis-kelompok').on('change', toggleJenisKelompokFields);
|
||||
|
||||
$('#add-kt-provinsi').select2().on('change', function (e) {
|
||||
e.preventDefault();
|
||||
var provinsiId = $(this).val();
|
||||
$('#add-kt-kabupaten').prop('disabled', !provinsiId).empty().append('<option value="">Pilih Kabupaten/Kota</option>').trigger('change');
|
||||
$('#add-kt-kecamatan').prop('disabled', true).empty().append('<option value="">Pilih Kecamatan</option>').trigger('change');
|
||||
$('#add-kt-desa').prop('disabled', true).empty().append('<option value="">Pilih Desa/Kelurahan</option>').trigger('change');
|
||||
|
||||
if (provinsiId) {
|
||||
$.ajax({
|
||||
url: '{{ route("kabupatenkota.byprovinsi", ":id") }}'.replace(':id', provinsiId),
|
||||
method: 'GET',
|
||||
success: function (data) {
|
||||
$('#add-kt-kabupaten').prop('disabled', false);
|
||||
data.forEach(function (kabupaten) {
|
||||
$('#add-kt-kabupaten').append('<option value="' + kabupaten.id + '">' + kabupaten.nama + '</option>');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#add-kt-kabupaten').select2().on('change', function (e) {
|
||||
e.preventDefault();
|
||||
var kabupatenId = $(this).val();
|
||||
$('#add-kt-kecamatan').prop('disabled', !kabupatenId).empty().append('<option value="">Pilih Kecamatan</option>').trigger('change');
|
||||
$('#add-kt-desa').prop('disabled', true).empty().append('<option value="">Pilih Desa/Kelurahan</option>').trigger('change');
|
||||
|
||||
if (kabupatenId) {
|
||||
$.ajax({
|
||||
url: '{{ route("kecamatan.bykabupatenkota", ":id") }}'.replace(':id', kabupatenId),
|
||||
method: 'GET',
|
||||
success: function (data) {
|
||||
$('#add-kt-kecamatan').prop('disabled', false);
|
||||
data.forEach(function (kecamatan) {
|
||||
$('#add-kt-kecamatan').append('<option value="' + kecamatan.id + '">' + kecamatan.nama + '</option>');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#add-kt-kecamatan').select2().on('change', function (e) {
|
||||
e.preventDefault();
|
||||
var kecamatanId = $(this).val();
|
||||
$('#add-kt-desa').prop('disabled', !kecamatanId).empty().append('<option value="">Pilih Desa/Kelurahan</option>').trigger('change');
|
||||
|
||||
if (kecamatanId) {
|
||||
$.ajax({
|
||||
url: '{{ route("desakelurahan.bykecamatan", ":id") }}'.replace(':id', kecamatanId),
|
||||
method: 'GET',
|
||||
success: function (data) {
|
||||
$('#add-kt-desa').prop('disabled', false);
|
||||
data.forEach(function (desa) {
|
||||
$('#add-kt-desa').append('<option value="' + desa.id + '">' + desa.nama + '</option>');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#add-kt-desa').select2();
|
||||
|
||||
$('#addKelompokTaniForm').validate({
|
||||
rules: {
|
||||
nama_responden: { required: true },
|
||||
nama_kelompok: { required: true },
|
||||
provinsi_id: { required: true },
|
||||
kabupaten_id: { required: true },
|
||||
kecamatan_id: { required: true },
|
||||
desa_kelurahan_id: { required: true },
|
||||
jenis_kelompok: { required: true },
|
||||
jenis_kelompok_lainnya: {
|
||||
required: function () {
|
||||
return $('#add-kt-jenis-kelompok').val() === 'Lainnya';
|
||||
}
|
||||
},
|
||||
tahun_berdiri: { min: 1900, max: new Date().getFullYear() }
|
||||
},
|
||||
messages: {
|
||||
nama_responden: { required: 'Nama responden wajib diisi' },
|
||||
nama_kelompok: { required: 'Nama kelompok wajib diisi' },
|
||||
provinsi_id: { required: 'Provinsi wajib diisi' },
|
||||
kabupaten_id: { required: 'Kabupaten/Kota wajib diisi' },
|
||||
kecamatan_id: { required: 'Kecamatan wajib diisi' },
|
||||
desa_kelurahan_id: { required: 'Desa/Kelurahan wajib diisi' },
|
||||
jenis_kelompok: { required: 'Jenis kelompok wajib dipilih' },
|
||||
jenis_kelompok_lainnya: { required: 'Sebutkan jenis kelompoknya' }
|
||||
},
|
||||
errorElement: 'div',
|
||||
errorPlacement: function (error, element) {
|
||||
error.addClass('invalid-feedback');
|
||||
if (element.hasClass('select2-hidden-accessible')) {
|
||||
element.closest('.form-control-validation').append(error);
|
||||
} else {
|
||||
element.closest('.mb-4, .form-control-validation').append(error);
|
||||
}
|
||||
},
|
||||
highlight: function (element) {
|
||||
$(element).addClass('is-invalid');
|
||||
},
|
||||
unhighlight: function (element) {
|
||||
$(element).removeClass('is-invalid');
|
||||
},
|
||||
submitHandler: function (form) {
|
||||
form.submit();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,198 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => $kelompokTani])
|
||||
|
||||
@php
|
||||
$kegiatanOptions = [
|
||||
'Pertemuan/diskusi rutin',
|
||||
'Pelatihan bersama',
|
||||
'Pengadaan input bersama (pupuk/bibit)',
|
||||
'Pengolahan pascapanen bersama',
|
||||
'Pemasaran/penjualan kolektif',
|
||||
'Simpan pinjam kelompok',
|
||||
'Mengumpulkan hasil panen',
|
||||
];
|
||||
$tindakanOptions = [
|
||||
'Difermentasi',
|
||||
'Disetorkan ke BUMDes/Koperasi',
|
||||
'Dijual langsung ke tengkulak/Offtaker',
|
||||
'Dijual untuk pendanaan kelompok',
|
||||
];
|
||||
$fungsiOptions = [
|
||||
'Pendampingan/penguatan praktik budidaya (GAP) di kebun anggota',
|
||||
'Pengumpulan/agregasi hasil panen anggota',
|
||||
'Penyalur informasi & program bantuan dari pemerintah/NGO ke anggota',
|
||||
'Advokasi/perwakilan kepentingan anggota ke pihak luar',
|
||||
'Belum ada fungsi spesifik yang berjalan',
|
||||
];
|
||||
|
||||
$kegiatanSelected = old('kegiatan_terlaksana', $kelompokTani->kegiatan_terlaksana ?? []);
|
||||
$kegiatanLainnyaValue = collect($kegiatanSelected)->first(fn ($v) => !in_array($v, $kegiatanOptions));
|
||||
$kegiatanLainnyaChecked = old('kegiatan_terlaksana_lainnya', $kegiatanLainnyaValue) !== null;
|
||||
|
||||
$tindakanSelected = old('tindakan_hasil_panen', $kelompokTani->tindakan_hasil_panen ?? []);
|
||||
|
||||
$fungsiSelected = old('fungsi_kelompok_bagi_anggota', $kelompokTani->fungsi_kelompok_bagi_anggota ?? []);
|
||||
$fungsiLainnyaValue = collect($fungsiSelected)->first(fn ($v) => !in_array($v, $fungsiOptions));
|
||||
$fungsiLainnyaChecked = old('fungsi_kelompok_lainnya', $fungsiLainnyaValue) !== null;
|
||||
@endphp
|
||||
|
||||
<div class="card mb-6" id="section-aktivitas-fungsi">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'aktivitas-fungsi',
|
||||
'errorFields' => ['kegiatan_terlaksana.*', 'kegiatan_terlaksana_lainnya', 'estimasi_panen_minimal', 'estimasi_panen_maksimal', 'satuan_hasil_panen', 'tindakan_hasil_panen.*', 'fungsi_kelompok_bagi_anggota.*', 'fungsi_kelompok_lainnya'],
|
||||
])
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="section" value="aktivitas-fungsi">
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Kegiatan Konkret yang Sudah Berjalan</h5>
|
||||
<p class="text-muted" style="font-size: 0.8rem; margin-top: -0.75rem;">
|
||||
Kegiatan yang sudah benar-benar dilaksanakan, bukan rencana. Boleh pilih lebih dari satu.
|
||||
</p>
|
||||
<div class="row mb-2">
|
||||
@foreach($kegiatanOptions as $option)
|
||||
<div class="col-md-4 mb-2">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input kegiatan-checkbox" type="checkbox" name="kegiatan_terlaksana[]" value="{{ $option }}"
|
||||
id="kegiatan-{{ $loop->index }}" {{ in_array($option, $kegiatanSelected) ? 'checked' : '' }}
|
||||
@if($option === 'Mengumpulkan hasil panen') data-toggle-panen @endif>
|
||||
<label class="form-check-label" for="kegiatan-{{ $loop->index }}">{{ $option }}</label>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="col-md-4 mb-2">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="kegiatan_terlaksana[]" value="Lainnya" id="kegiatan-lainnya-check" {{ $kegiatanLainnyaChecked ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="kegiatan-lainnya-check">Lainnya</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" id="kegiatan-lainnya-wrapper" style="display: none;">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<input type="text" class="form-control @error('kegiatan_terlaksana_lainnya') is-invalid @enderror" name="kegiatan_terlaksana_lainnya"
|
||||
id="kegiatan-lainnya-text" placeholder="Sebutkan kegiatan lainnya"
|
||||
value="{{ old('kegiatan_terlaksana_lainnya', $kegiatanLainnyaValue) }}" />
|
||||
@error('kegiatan_terlaksana_lainnya')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="panen-wrapper" style="display: none;">
|
||||
<h6 class="pb-2 mt-3">Detail Hasil Panen</h6>
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="af-panen-min">Estimasi Panen Minimal</label>
|
||||
<input type="number" step="0.01" min="0" class="form-control @error('estimasi_panen_minimal') is-invalid @enderror" id="af-panen-min" name="estimasi_panen_minimal"
|
||||
value="{{ old('estimasi_panen_minimal', $kelompokTani->estimasi_panen_minimal) }}" />
|
||||
@error('estimasi_panen_minimal')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="af-panen-max">Estimasi Panen Maksimal</label>
|
||||
<input type="number" step="0.01" min="0" class="form-control @error('estimasi_panen_maksimal') is-invalid @enderror" id="af-panen-max" name="estimasi_panen_maksimal"
|
||||
value="{{ old('estimasi_panen_maksimal', $kelompokTani->estimasi_panen_maksimal) }}" />
|
||||
@error('estimasi_panen_maksimal')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="af-satuan-panen">Satuan</label>
|
||||
<select class="form-control @error('satuan_hasil_panen') is-invalid @enderror" id="af-satuan-panen" name="satuan_hasil_panen">
|
||||
<option value="">Pilih Satuan</option>
|
||||
<option value="kg" {{ old('satuan_hasil_panen', $kelompokTani->satuan_hasil_panen) == 'kg' ? 'selected' : '' }}>Kg</option>
|
||||
<option value="ton" {{ old('satuan_hasil_panen', $kelompokTani->satuan_hasil_panen) == 'ton' ? 'selected' : '' }}>Ton</option>
|
||||
</select>
|
||||
@error('satuan_hasil_panen')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<label class="form-label d-block">Hasil Panen Kelompok Biasanya Dilanjutkan untuk Apa?</label>
|
||||
<div class="row mb-4">
|
||||
@foreach($tindakanOptions as $option)
|
||||
<div class="col-md-6 mb-2">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="tindakan_hasil_panen[]" value="{{ $option }}"
|
||||
id="tindakan-{{ $loop->index }}" {{ in_array($option, $tindakanSelected) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="tindakan-{{ $loop->index }}">{{ $option }}</label>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Peran dan Fungsi Kelompok</h5>
|
||||
<p class="text-muted" style="font-size: 0.8rem; margin-top: -0.75rem;">
|
||||
Fungsi yang melekat secara struktural pada kelompok ini, terlepas dari seberapa sering kegiatannya berjalan.
|
||||
</p>
|
||||
<div class="row mb-2">
|
||||
@foreach($fungsiOptions as $option)
|
||||
<div class="col-md-6 mb-2">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="fungsi_kelompok_bagi_anggota[]" value="{{ $option }}"
|
||||
id="fungsi-{{ $loop->index }}" {{ in_array($option, $fungsiSelected) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="fungsi-{{ $loop->index }}">{{ $option }}</label>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
<div class="col-md-6 mb-2">
|
||||
<div class="form-check">
|
||||
<input class="form-check-input" type="checkbox" name="fungsi_kelompok_bagi_anggota[]" value="Lainnya" id="fungsi-lainnya-check" {{ $fungsiLainnyaChecked ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="fungsi-lainnya-check">Lainnya</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" id="fungsi-lainnya-wrapper" style="display: none;">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<input type="text" class="form-control @error('fungsi_kelompok_lainnya') is-invalid @enderror" name="fungsi_kelompok_lainnya"
|
||||
id="fungsi-lainnya-text" placeholder="Sebutkan fungsi lainnya"
|
||||
value="{{ old('fungsi_kelompok_lainnya', $fungsiLainnyaValue) }}" />
|
||||
@error('fungsi_kelompok_lainnya')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Aktivitas & Fungsi
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
$(document).ready(function () {
|
||||
|
||||
function toggleLainnya(checkboxSelector, wrapperSelector, textInputSelector) {
|
||||
var $checkbox = $(checkboxSelector);
|
||||
var $wrapper = $(wrapperSelector);
|
||||
|
||||
function sync() {
|
||||
if ($checkbox.is(':checked')) {
|
||||
$wrapper.show();
|
||||
} else {
|
||||
$wrapper.hide();
|
||||
$(textInputSelector).val('');
|
||||
}
|
||||
}
|
||||
sync();
|
||||
$checkbox.on('change', sync);
|
||||
}
|
||||
|
||||
toggleLainnya('#kegiatan-lainnya-check', '#kegiatan-lainnya-wrapper', '#kegiatan-lainnya-text');
|
||||
toggleLainnya('#fungsi-lainnya-check', '#fungsi-lainnya-wrapper', '#fungsi-lainnya-text');
|
||||
|
||||
function togglePanen() {
|
||||
var checked = $('[data-toggle-panen]').is(':checked');
|
||||
$('#panen-wrapper').toggle(checked);
|
||||
}
|
||||
togglePanen();
|
||||
$('[data-toggle-panen]').on('change', togglePanen);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,373 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => $kelompokTani])
|
||||
|
||||
@php
|
||||
$jenisAsetBaku = \App\Http\Controllers\Web\Produktivitas\AsetKelompokTaniController::JENIS_ASET_BAKU;
|
||||
$asetTersimpan = $kelompokTani->aset->keyBy('jenis_aset');
|
||||
$asetLainnyaList = $kelompokTani->aset->filter(fn ($a) => !in_array($a->jenis_aset, $jenisAsetBaku));
|
||||
|
||||
$statusPengelolaanOptions = ['Swadaya', 'Hibah', 'Pinjaman', 'Sewa'];
|
||||
$kondisiOptions = ['Berfungsi', 'Perlu perbaikan/evaluasi', 'Rusak/tidak bisa dipakai', 'Mangkrak'];
|
||||
@endphp
|
||||
|
||||
{{-- ASET PRODUKTIF --}}
|
||||
<div class="card mb-6" id="section-aset-baku">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'aset-baku',
|
||||
'errorFields' => ['aset.*'],
|
||||
])
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Aset Produktif Milik Kelompok</h5>
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.aset-keuangan.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
<div class="table-responsive mb-4">
|
||||
<table class="table table-bordered align-middle">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="min-width: 180px;">Jenis Aset</th>
|
||||
<th style="width: 140px;">Ada/Tidak</th>
|
||||
<th style="min-width: 180px;">Status Pengelolaan</th>
|
||||
<th style="min-width: 200px;">Kondisi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($jenisAsetBaku as $index => $jenis)
|
||||
@php $row = $asetTersimpan->get($jenis); @endphp
|
||||
<tr>
|
||||
<td>
|
||||
<input type="hidden" name="aset[{{ $index }}][jenis_aset]" value="{{ $jenis }}">
|
||||
{{ $jenis }}
|
||||
</td>
|
||||
<td>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input aset-status-radio" type="radio" name="aset[{{ $index }}][status_aset]" value="1" id="aset-{{ $index }}-ada" data-row="{{ $index }}" {{ $row?->status_aset ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="aset-{{ $index }}-ada">Ada</label>
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input class="form-check-input aset-status-radio" type="radio" name="aset[{{ $index }}][status_aset]" value="0" id="aset-{{ $index }}-tidak" data-row="{{ $index }}" {{ !$row || !$row->status_aset ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="aset-{{ $index }}-tidak">Tidak</label>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-select form-select-sm aset-detail-select" name="aset[{{ $index }}][status_pengelolaan_aset]" {{ !$row?->status_aset ? 'disabled' : '' }}>
|
||||
<option value="">-</option>
|
||||
@foreach($statusPengelolaanOptions as $option)
|
||||
<option value="{{ $option }}" {{ $row?->status_pengelolaan_aset == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select class="form-select form-select-sm aset-detail-select" name="aset[{{ $index }}][kondisi_aset]" {{ !$row?->status_aset ? 'disabled' : '' }}>
|
||||
<option value="">-</option>
|
||||
@foreach($kondisiOptions as $option)
|
||||
<option value="{{ $option }}" {{ $row?->kondisi_aset == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Aset Produktif
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- ASET LAINNYA (di luar 8 jenis baku, bisa lebih dari satu) --}}
|
||||
<div class="card mb-6" id="section-aset-lainnya">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'aset-lainnya',
|
||||
'errorFields' => ['aset_lainnya.*'],
|
||||
])
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Aset Lainnya</h5>
|
||||
|
||||
{{-- DATA LAMA --}}
|
||||
@if($asetLainnyaList->isNotEmpty())
|
||||
@foreach($asetLainnyaList as $row)
|
||||
<div class="row align-items-end border-bottom pb-3 mb-3">
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">Jenis Aset</label>
|
||||
<input type="text" class="form-control" value="{{ $row->jenis_aset }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Status Pengelolaan</label>
|
||||
<input type="text" class="form-control" value="{{ $row->status_pengelolaan_aset }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">Kondisi</label>
|
||||
<input type="text" class="form-control" value="{{ $row->kondisi_aset }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<form method="POST" action="{{ route('kelompok-tani.aset-keuangan.destroy', [$kelompokTani->id, $row->id]) }}" class="delete-db-form">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-outline-danger">
|
||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@else
|
||||
<p class="text-muted mb-4">Belum ada aset lainnya di luar daftar baku.</p>
|
||||
@endif
|
||||
|
||||
{{-- TOMBOL PEMBUKA — form tambah disembunyikan dulu karena aset lainnya sifatnya opsional --}}
|
||||
@php $bukaFormAsetLainnya = old('aset_lainnya') || $errors->has('aset_lainnya.*'); @endphp
|
||||
<button type="button" class="btn btn-outline-success" id="btn-toggle-aset-lainnya" style="display: {{ $bukaFormAsetLainnya ? 'none' : 'inline-block' }};">
|
||||
<i class="icon-base ti tabler-plus me-1_5 icon-sm"></i> Tambahkan Aset Lainnya
|
||||
</button>
|
||||
|
||||
{{-- FORM TAMBAH DATA BARU — tetap kebuka kalau baru gagal validasi, biar isian & errornya kelihatan --}}
|
||||
<div id="aset-lainnya-form-wrapper" style="display: {{ $bukaFormAsetLainnya ? 'block' : 'none' }};" class="mt-4">
|
||||
<form method="POST" action="{{ route('kelompok-tani.aset-keuangan.store', $kelompokTani->id) }}" class="form-repeater-aset-lainnya">
|
||||
@csrf
|
||||
|
||||
<div data-repeater-list="aset_lainnya">
|
||||
<div data-repeater-item>
|
||||
<div class="row align-items-end">
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Jenis Aset</label>
|
||||
<input type="text" class="form-control aset-lainnya-input" name="jenis_aset" placeholder="Cth: Mesin pengering">
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<label class="form-label">Status Pengelolaan</label>
|
||||
<select class="form-select aset-lainnya-select" name="status_pengelolaan_aset">
|
||||
<option value="">-</option>
|
||||
@foreach($statusPengelolaanOptions as $option)
|
||||
<option value="{{ $option }}">{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Kondisi</label>
|
||||
<select class="form-select aset-lainnya-select" name="kondisi_aset">
|
||||
<option value="">-</option>
|
||||
@foreach($kondisiOptions as $option)
|
||||
<option value="{{ $option }}">{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-1 mb-3">
|
||||
<button type="button" class="btn btn-outline-danger btn-delete-aset-lainnya" data-repeater-delete disabled>
|
||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 d-flex justify-content-between">
|
||||
<button type="button" class="btn btn-outline-success" id="btn-tambah-baris-aset-lainnya" data-repeater-create disabled>
|
||||
<i class="icon-base ti tabler-plus me-1_5 icon-sm"></i> Tambah Baris
|
||||
</button>
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="icon-base ti tabler-check me-1_5 icon-sm"></i> Simpan Aset Lainnya
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- KAS / SIMPAN-PINJAM --}}
|
||||
<div class="card mb-6" id="section-kas">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'kas',
|
||||
'errorFields' => ['pembukuan_kas', 'pengelola_kas', 'masalah_pengelolaan_kas_simpan_pinjam', 'deskripsi_masalah_pengelolaan_kas_simpan_pinjam'],
|
||||
])
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Kapasitas Pengelolaan Kas/Simpan-Pinjam Kelompok</h5>
|
||||
<p class="text-muted" style="font-size: 0.8rem; margin-top: -0.75rem;">
|
||||
Hanya isi bagian ini jika kelompok memiliki kas/simpan-pinjam (lihat baris "Kas/simpanan kelompok" di tabel aset).
|
||||
</p>
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="section" value="kas">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="ak-pembukuan-kas">Pembukuan/Pencatatan Keuangan Kas</label>
|
||||
<select class="form-control @error('pembukuan_kas') is-invalid @enderror" id="ak-pembukuan-kas" name="pembukuan_kas">
|
||||
<option value="">Pilih Status Pembukuan</option>
|
||||
@foreach([
|
||||
'Tidak ada pencatatan sama sekali',
|
||||
'Ada, tapi tidak rutin/tidak rapi',
|
||||
'Ada, rutin dan rapi',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('pembukuan_kas', $kelompokTani->pembukuan_kas) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('pembukuan_kas')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="ak-pengelola-kas">Siapa yang Mengelola/Memegang Kas</label>
|
||||
<input type="text" class="form-control @error('pengelola_kas') is-invalid @enderror" id="ak-pengelola-kas" name="pengelola_kas"
|
||||
value="{{ old('pengelola_kas', $kelompokTani->pengelola_kas) }}" />
|
||||
@error('pengelola_kas')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="ak-masalah-kas">Pernah Ada Masalah Pengelolaan Kas?</label>
|
||||
<select class="form-control @error('masalah_pengelolaan_kas_simpan_pinjam') is-invalid @enderror" id="ak-masalah-kas" name="masalah_pengelolaan_kas_simpan_pinjam">
|
||||
<option value="">Pilih Status</option>
|
||||
@foreach([
|
||||
'Tidak pernah ada masalah',
|
||||
'Pernah, sudah selesai',
|
||||
'Pernah, masih berlanjut/belum selesai',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('masalah_pengelolaan_kas_simpan_pinjam', $kelompokTani->masalah_pengelolaan_kas_simpan_pinjam) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('masalah_pengelolaan_kas_simpan_pinjam')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="ak-deskripsi-masalah-wrapper" style="display: none;">
|
||||
<div class="col-md-12 mb-4 form-control-validation">
|
||||
<label class="form-label" for="ak-deskripsi-masalah">Ceritakan Singkat</label>
|
||||
<textarea class="form-control @error('deskripsi_masalah_pengelolaan_kas_simpan_pinjam') is-invalid @enderror" id="ak-deskripsi-masalah" name="deskripsi_masalah_pengelolaan_kas_simpan_pinjam" rows="2">{{ old('deskripsi_masalah_pengelolaan_kas_simpan_pinjam', $kelompokTani->deskripsi_masalah_pengelolaan_kas_simpan_pinjam) }}</textarea>
|
||||
@error('deskripsi_masalah_pengelolaan_kas_simpan_pinjam')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Kas/Simpan-Pinjam
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
$(document).ready(function () {
|
||||
function toggleDeskripsiMasalah() {
|
||||
var val = $('#ak-masalah-kas').val();
|
||||
$('#ak-deskripsi-masalah-wrapper').toggle(val === 'Pernah, sudah selesai' || val === 'Pernah, masih berlanjut/belum selesai');
|
||||
}
|
||||
toggleDeskripsiMasalah();
|
||||
$('#ak-masalah-kas').on('change', toggleDeskripsiMasalah);
|
||||
|
||||
// Status Pengelolaan & Kondisi cuma relevan kalau asetnya "Ada" — disable & kosongkan
|
||||
// begitu "Tidak" dipilih, biar tidak ada kesan barang yang tidak ada tapi diisi detailnya.
|
||||
$('.aset-status-radio').on('change', function () {
|
||||
var $row = $(this).closest('tr');
|
||||
var ada = $(this).val() === '1';
|
||||
|
||||
$row.find('.aset-detail-select').prop('disabled', !ada);
|
||||
if (!ada) {
|
||||
$row.find('.aset-detail-select').val('');
|
||||
}
|
||||
});
|
||||
|
||||
// Tombol pembuka form "Aset Lainnya" (disembunyikan dulu karena opsional)
|
||||
$('#btn-toggle-aset-lainnya').on('click', function () {
|
||||
$('#aset-lainnya-form-wrapper').slideDown();
|
||||
$(this).hide();
|
||||
});
|
||||
|
||||
// Repeater "Aset Lainnya"
|
||||
var $form = $('.form-repeater-aset-lainnya');
|
||||
var $btnTambah = $('#btn-tambah-baris-aset-lainnya');
|
||||
|
||||
function getRows() {
|
||||
return $form.find('[data-repeater-item]');
|
||||
}
|
||||
|
||||
function rowAdaIsi($row) {
|
||||
return String($row.find('input[name="jenis_aset"]').val() || '').trim() !== '';
|
||||
}
|
||||
|
||||
function updateButtons() {
|
||||
var $rows = getRows();
|
||||
var $lastRow = $rows.last();
|
||||
|
||||
$rows.each(function () {
|
||||
var $row = $(this);
|
||||
$row.find('.btn-delete-aset-lainnya').prop('disabled', !rowAdaIsi($row));
|
||||
});
|
||||
|
||||
$btnTambah.prop('disabled', !rowAdaIsi($lastRow));
|
||||
}
|
||||
|
||||
$form.repeater({
|
||||
initEmpty: false,
|
||||
show: function () {
|
||||
var $row = $(this);
|
||||
$row.find('.aset-lainnya-input').val('');
|
||||
$row.find('.aset-lainnya-select').val('');
|
||||
$row.find('.btn-delete-aset-lainnya').prop('disabled', true);
|
||||
$row.slideDown();
|
||||
setTimeout(updateButtons, 50);
|
||||
},
|
||||
hide: function (deleteElement) {
|
||||
var $row = $(this);
|
||||
if (!rowAdaIsi($row)) {
|
||||
return;
|
||||
}
|
||||
Swal.fire({
|
||||
title: 'Hapus baris ini?',
|
||||
text: 'Baris ini hanya akan dihapus dari form.',
|
||||
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.isConfirmed) {
|
||||
$row.slideUp(deleteElement);
|
||||
setTimeout(updateButtons, 300);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('input keyup change', '.form-repeater-aset-lainnya input[name="jenis_aset"]', updateButtons);
|
||||
updateButtons();
|
||||
|
||||
$(document).on('submit', '.delete-db-form', function (e) {
|
||||
e.preventDefault();
|
||||
var form = this;
|
||||
|
||||
Swal.fire({
|
||||
title: 'Hapus aset ini?',
|
||||
text: 'Data yang sudah dihapus tidak bisa dikembalikan.',
|
||||
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.isConfirmed) {
|
||||
form.submit();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,295 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => $kelompokTani])
|
||||
|
||||
{{-- STATUS AKSES BANTUAN --}}
|
||||
<div class="card mb-6" id="section-status-bantuan">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'status-bantuan',
|
||||
'errorFields' => ['pernah_mendapatkan_bantuan'],
|
||||
])
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Pengalaman Akses Bantuan/Program</h5>
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="section" value="status-bantuan">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label d-block">Apakah kelompok ini pernah mendapatkan bantuan atau akses program dari pemerintah/lembaga lain?</label>
|
||||
@php $pernahBantuan = old('pernah_mendapatkan_bantuan', $kelompokTani->pernah_mendapatkan_bantuan); @endphp
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="pernah_mendapatkan_bantuan" value="1" id="sb-pernah" {{ $pernahBantuan ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="sb-pernah">Pernah</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="pernah_mendapatkan_bantuan" value="0" id="sb-belum" {{ !is_null($pernahBantuan) && !$pernahBantuan ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="sb-belum">Belum Pernah</label>
|
||||
</div>
|
||||
@error('pernah_mendapatkan_bantuan')<div class="error invalid-feedback d-block">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Status
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- DAFTAR PROGRAM / BANTUAN --}}
|
||||
<div class="card mb-6" id="section-bantuan">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'bantuan',
|
||||
'errorFields' => ['bantuan.*'],
|
||||
])
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Daftar Program/Bantuan yang Pernah Diterima</h5>
|
||||
|
||||
<p class="text-muted mb-0" id="bantuan-list-placeholder" style="display: none;">
|
||||
Set status di atas jadi <strong>"Pernah"</strong> dulu untuk mengisi daftar program/bantuan.
|
||||
</p>
|
||||
|
||||
<div id="bantuan-list-content">
|
||||
{{-- DATA LAMA --}}
|
||||
@if($kelompokTani->bantuan->count() > 0)
|
||||
@foreach($kelompokTani->bantuan as $row)
|
||||
<div class="row align-items-end border-bottom pb-3 mb-3">
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Nama Program/Bantuan</label>
|
||||
<input type="text" class="form-control" value="{{ $row->nama_program }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Penyelenggara</label>
|
||||
<input type="text" class="form-control" value="{{ $row->penyelenggara }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Bentuk Bantuan</label>
|
||||
<input type="text" class="form-control" value="{{ $row->bentuk_bantuan }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label class="form-label">Tahun</label>
|
||||
<input type="text" class="form-control" value="{{ $row->tahun }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<form method="POST" action="{{ route('kelompok-tani.bantuan-penilaian.destroy', [$kelompokTani->id, $row->id]) }}" class="delete-db-form">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-outline-danger">
|
||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@else
|
||||
<p class="text-muted mb-4">Belum ada data program/bantuan.</p>
|
||||
@endif
|
||||
|
||||
{{-- FORM TAMBAH DATA BARU --}}
|
||||
<form method="POST" action="{{ route('kelompok-tani.bantuan-penilaian.store', $kelompokTani->id) }}" class="form-repeater-bantuan">
|
||||
@csrf
|
||||
|
||||
<div data-repeater-list="bantuan">
|
||||
<div data-repeater-item>
|
||||
<div class="row align-items-end">
|
||||
<div class="col-md-3 mb-3">
|
||||
<label class="form-label">Nama Program/Bantuan</label>
|
||||
<input type="text" class="form-control bantuan-input" name="nama_program" placeholder="Cth: Bantuan Bibit Kakao">
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<label class="form-label">Penyelenggara</label>
|
||||
<input type="text" class="form-control bantuan-input" name="penyelenggara" placeholder="Cth: Dinas Pertanian">
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<label class="form-label">Bentuk Bantuan</label>
|
||||
<input type="text" class="form-control bantuan-input" name="bentuk_bantuan" placeholder="Cth: Bibit, pupuk, pelatihan">
|
||||
</div>
|
||||
<div class="col-md-2 mb-3">
|
||||
<label class="form-label">Tahun</label>
|
||||
<input type="number" class="form-control" name="tahun" placeholder="Cth: 2023" min="1900" max="{{ date('Y') }}">
|
||||
</div>
|
||||
<div class="col-md-1 mb-3">
|
||||
<button type="button" class="btn btn-outline-danger btn-delete-bantuan" data-repeater-delete disabled>
|
||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 d-flex justify-content-between">
|
||||
<button type="button" class="btn btn-outline-success" id="btn-tambah-bantuan" data-repeater-create disabled>
|
||||
<i class="icon-base ti tabler-plus me-1_5 icon-sm"></i> Tambah Baris
|
||||
</button>
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="icon-base ti tabler-check me-1_5 icon-sm"></i> Simpan Daftar Bantuan
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- POTENSI MITRA AGREGASI --}}
|
||||
<div class="card mb-6" id="section-penilaian">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'penilaian',
|
||||
'errorFields' => ['potensi_kelompok', 'alasan_penilaian_potensi'],
|
||||
])
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Potensi sebagai Mitra Agregasi/Pengolahan Kolektif</h5>
|
||||
<p class="text-muted" style="font-size: 0.8rem; margin-top: -0.75rem;">
|
||||
Ini penilaian enumerator, bukan pernyataan langsung dari responden — dasarkan pada kombinasi kegiatan, fungsi, dan aset yang sudah tergali di tab-tab sebelumnya.
|
||||
</p>
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="section" value="penilaian">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="pn-potensi-kelompok">Tingkat Potensi</label>
|
||||
<select class="form-control @error('potensi_kelompok') is-invalid @enderror" id="pn-potensi-kelompok" name="potensi_kelompok">
|
||||
<option value="">Pilih Tingkat Potensi</option>
|
||||
<option value="Rendah" {{ old('potensi_kelompok', $kelompokTani->potensi_kelompok) == 'Rendah' ? 'selected' : '' }}>Rendah — belum ada kapasitas/aktivitas yang mendukung</option>
|
||||
<option value="Sedang" {{ old('potensi_kelompok', $kelompokTani->potensi_kelompok) == 'Sedang' ? 'selected' : '' }}>Sedang — ada sebagian kapasitas, perlu penguatan lebih jauh</option>
|
||||
<option value="Tinggi" {{ old('potensi_kelompok', $kelompokTani->potensi_kelompok) == 'Tinggi' ? 'selected' : '' }}>Tinggi — kapasitas dan aktivitas sudah mendukung peran ini</option>
|
||||
</select>
|
||||
@error('potensi_kelompok')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-8 mb-4 form-control-validation">
|
||||
<label class="form-label" for="pn-alasan-penilaian">Alasan Penilaian</label>
|
||||
<textarea class="form-control @error('alasan_penilaian_potensi') is-invalid @enderror" id="pn-alasan-penilaian" name="alasan_penilaian_potensi" rows="2">{{ old('alasan_penilaian_potensi', $kelompokTani->alasan_penilaian_potensi) }}</textarea>
|
||||
@error('alasan_penilaian_potensi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Penilaian
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
$(function () {
|
||||
$('#pn-potensi-kelompok').select2();
|
||||
|
||||
// Daftar bantuan cuma relevan kalau status-nya "Pernah" — biar nggak kontradiktif
|
||||
// (jawab "Belum Pernah" tapi daftar bantuannya keisi).
|
||||
function toggleDaftarBantuan() {
|
||||
var pernah = $('#sb-pernah').is(':checked');
|
||||
$('#bantuan-list-content').toggle(pernah);
|
||||
$('#bantuan-list-placeholder').toggle(!pernah);
|
||||
}
|
||||
toggleDaftarBantuan();
|
||||
$('#sb-pernah, #sb-belum').on('change', toggleDaftarBantuan);
|
||||
|
||||
var $form = $('.form-repeater-bantuan');
|
||||
var $btnTambah = $('#btn-tambah-bantuan');
|
||||
|
||||
function getRows() {
|
||||
return $form.find('[data-repeater-item]');
|
||||
}
|
||||
|
||||
function rowAdaIsi($row) {
|
||||
return $row.find('.bantuan-input').toArray().some(function (input) {
|
||||
return String($(input).val() || '').trim() !== '';
|
||||
});
|
||||
}
|
||||
|
||||
function rowLengkap($row) {
|
||||
var $inputs = $row.find('.bantuan-input');
|
||||
return $inputs.toArray().every(function (input) {
|
||||
return String($(input).val() || '').trim() !== '';
|
||||
});
|
||||
}
|
||||
|
||||
function updateButtons() {
|
||||
var $rows = getRows();
|
||||
var $lastRow = $rows.last();
|
||||
|
||||
$rows.each(function () {
|
||||
var $row = $(this);
|
||||
$row.find('.btn-delete-bantuan').prop('disabled', !rowAdaIsi($row));
|
||||
});
|
||||
|
||||
$btnTambah.prop('disabled', !rowLengkap($lastRow));
|
||||
}
|
||||
|
||||
$form.repeater({
|
||||
initEmpty: false,
|
||||
show: function () {
|
||||
var $row = $(this);
|
||||
$row.find('.bantuan-input, input[name="tahun"]').val('');
|
||||
$row.find('.btn-delete-bantuan').prop('disabled', true);
|
||||
$row.slideDown();
|
||||
setTimeout(updateButtons, 50);
|
||||
},
|
||||
hide: function (deleteElement) {
|
||||
var $row = $(this);
|
||||
if (!rowAdaIsi($row)) {
|
||||
return;
|
||||
}
|
||||
Swal.fire({
|
||||
title: 'Hapus baris ini?',
|
||||
text: 'Baris ini hanya akan dihapus dari form.',
|
||||
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.isConfirmed) {
|
||||
$row.slideUp(deleteElement);
|
||||
setTimeout(updateButtons, 300);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('input keyup change', '.form-repeater-bantuan .bantuan-input', updateButtons);
|
||||
updateButtons();
|
||||
|
||||
$(document).on('submit', '.delete-db-form', function (e) {
|
||||
e.preventDefault();
|
||||
var form = this;
|
||||
|
||||
Swal.fire({
|
||||
title: 'Hapus data ini?',
|
||||
text: 'Data yang sudah dihapus tidak bisa dikembalikan.',
|
||||
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.isConfirmed) {
|
||||
form.submit();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,298 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => $kelompokTani])
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card mb-6" id="section-identitas">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'identitas',
|
||||
'errorFields' => ['nama_responden', 'jabatan_responden', 'kontak_responden', 'nama_kelompok', 'desa_kelurahan_id', 'dusun', 'tahun_berdiri', 'jenis_kelompok', 'jenis_kelompok_lainnya', 'nama_gapoktan', 'komoditas_id.*'],
|
||||
])
|
||||
|
||||
<form id="editKelompokTaniForm" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Data Responden</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-nama-responden">Nama Responden<span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_responden') is-invalid @enderror" id="edit-kt-nama-responden" name="nama_responden"
|
||||
placeholder="Cth: John Doe" value="{{ old('nama_responden', $kelompokTani->nama_responden) }}" />
|
||||
@error('nama_responden')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-jabatan-responden">Jabatan Responden</label>
|
||||
<input type="text" class="form-control @error('jabatan_responden') is-invalid @enderror" id="edit-kt-jabatan-responden" name="jabatan_responden"
|
||||
placeholder="Cth: Ketua Kelompok" value="{{ old('jabatan_responden', $kelompokTani->jabatan_responden) }}" />
|
||||
@error('jabatan_responden')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-kontak-responden">Kontak Responden (No. HP)</label>
|
||||
<input type="text" class="form-control @error('kontak_responden') is-invalid @enderror" id="edit-kt-kontak-responden" name="kontak_responden"
|
||||
placeholder="Cth: 081234567890" value="{{ old('kontak_responden', $kelompokTani->kontak_responden) }}" />
|
||||
@error('kontak_responden')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Identitas Kelompok Tani</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-nama-kelompok">Nama Kelompok Tani<span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control @error('nama_kelompok') is-invalid @enderror" id="edit-kt-nama-kelompok" name="nama_kelompok"
|
||||
placeholder="Cth: Kelompok Tani Maju Bersama" value="{{ old('nama_kelompok', $kelompokTani->nama_kelompok) }}" />
|
||||
@error('nama_kelompok')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-dusun">Dusun</label>
|
||||
<input type="text" class="form-control @error('dusun') is-invalid @enderror" id="edit-kt-dusun" name="dusun"
|
||||
placeholder="Cth: Dusun I" value="{{ old('dusun', $kelompokTani->dusun) }}" />
|
||||
@error('dusun')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-tahun-berdiri">Tahun Berdiri</label>
|
||||
<input type="number" class="form-control @error('tahun_berdiri') is-invalid @enderror" id="edit-kt-tahun-berdiri" name="tahun_berdiri"
|
||||
placeholder="Cth: 2015" min="1900" max="{{ date('Y') }}" value="{{ old('tahun_berdiri', $kelompokTani->tahun_berdiri) }}" />
|
||||
@error('tahun_berdiri')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-provinsi">Provinsi<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('provinsi_id') is-invalid @enderror" id="edit-kt-provinsi" name="provinsi_id">
|
||||
<option value="">Pilih Provinsi</option>
|
||||
@foreach($provinsi as $p)
|
||||
<option value="{{ $p->id }}" {{ old('provinsi_id', $kelompokTani->desaKelurahan?->kecamatan?->kabupatenKota?->provinsi_id) == $p->id ? 'selected' : '' }}>{{ $p->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-kabupaten">Kabupaten/Kota<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('kabupaten_id') is-invalid @enderror" id="edit-kt-kabupaten" name="kabupaten_id">
|
||||
<option value="">Pilih Kabupaten/Kota</option>
|
||||
@if($kelompokTani->desaKelurahan?->kecamatan?->kabupatenKota)
|
||||
<option value="{{ $kelompokTani->desaKelurahan->kecamatan->kabupatenKota->id }}" selected>{{ $kelompokTani->desaKelurahan->kecamatan->kabupatenKota->nama }}</option>
|
||||
@endif
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-kecamatan">Kecamatan<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('kecamatan_id') is-invalid @enderror" id="edit-kt-kecamatan" name="kecamatan_id">
|
||||
<option value="">Pilih Kecamatan</option>
|
||||
@if($kelompokTani->desaKelurahan?->kecamatan)
|
||||
<option value="{{ $kelompokTani->desaKelurahan->kecamatan->id }}" selected>{{ $kelompokTani->desaKelurahan->kecamatan->nama }}</option>
|
||||
@endif
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-desa">Desa/Kelurahan<span class="text-danger">*</span></label>
|
||||
<select class="form-control @error('desa_kelurahan_id') is-invalid @enderror" id="edit-kt-desa" name="desa_kelurahan_id">
|
||||
<option value="">Pilih Desa/Kelurahan</option>
|
||||
@if($kelompokTani->desaKelurahan)
|
||||
<option value="{{ $kelompokTani->desaKelurahan->id }}" selected>{{ $kelompokTani->desaKelurahan->nama }}</option>
|
||||
@endif
|
||||
</select>
|
||||
@error('desa_kelurahan_id')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-kt-jenis-kelompok">Terdaftar/Dikenal Sebagai<span class="text-danger">*</span></label>
|
||||
@php
|
||||
$jenisKelompokOptions = [
|
||||
'Kelompok Tani (Poktan)',
|
||||
'Kelompok Wanita Tani (KWT)',
|
||||
'Gabungan Kelompok Tani (Gapoktan)',
|
||||
'Kelompok Pemuda Tani',
|
||||
'Asosiasi Petani',
|
||||
];
|
||||
$currentJenisKelompok = old('jenis_kelompok', $kelompokTani->jenis_kelompok);
|
||||
$isJenisKelompokLainnya = $currentJenisKelompok && !in_array($currentJenisKelompok, $jenisKelompokOptions);
|
||||
@endphp
|
||||
<select class="form-control @error('jenis_kelompok') is-invalid @enderror" id="edit-kt-jenis-kelompok" name="jenis_kelompok">
|
||||
<option value="">Pilih Jenis Kelompok</option>
|
||||
@foreach($jenisKelompokOptions as $option)
|
||||
<option value="{{ $option }}" {{ $currentJenisKelompok == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
<option value="Lainnya" {{ old('jenis_kelompok') == 'Lainnya' || $isJenisKelompokLainnya ? 'selected' : '' }}>Lainnya</option>
|
||||
</select>
|
||||
@error('jenis_kelompok')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation" id="edit-kt-jenis-kelompok-lainnya-wrapper" style="display: none;">
|
||||
<label class="form-label" for="edit-kt-jenis-kelompok-lainnya">Sebutkan Jenis Kelompok</label>
|
||||
<input type="text" class="form-control @error('jenis_kelompok_lainnya') is-invalid @enderror" id="edit-kt-jenis-kelompok-lainnya" name="jenis_kelompok_lainnya"
|
||||
value="{{ old('jenis_kelompok_lainnya', $isJenisKelompokLainnya ? $currentJenisKelompok : null) }}" />
|
||||
@error('jenis_kelompok_lainnya')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation" id="edit-kt-nama-gapoktan-wrapper" style="display: none;">
|
||||
<label class="form-label" for="edit-kt-nama-gapoktan">Nama Gapoktan</label>
|
||||
<input type="text" class="form-control @error('nama_gapoktan') is-invalid @enderror" id="edit-kt-nama-gapoktan" name="nama_gapoktan"
|
||||
placeholder="Cth: Gapoktan Sumber Makmur" value="{{ old('nama_gapoktan', $kelompokTani->nama_gapoktan) }}" />
|
||||
@error('nama_gapoktan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label">Komoditas Utama</label>
|
||||
<select id="edit-kt-komoditas" name="komoditas_id[]" class="form-select @error('komoditas_id') is-invalid @enderror" multiple>
|
||||
@foreach($komoditas as $k)
|
||||
<option value="{{ $k->id }}" {{ collect(old('komoditas_id', $kelompokTani->komoditas_id))->contains($k->id) ? 'selected' : '' }}>{{ $k->nama }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('komoditas_id')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<a href="{{ route('kelompok-tani.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Kembali</a>
|
||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
$(document).ready(function () {
|
||||
|
||||
$('#edit-kt-jenis-kelompok, #edit-kt-komoditas').select2();
|
||||
|
||||
function toggleJenisKelompokFields() {
|
||||
var jenisKelompok = $('#edit-kt-jenis-kelompok').val();
|
||||
|
||||
if (jenisKelompok === 'Lainnya') {
|
||||
$('#edit-kt-jenis-kelompok-lainnya-wrapper').show();
|
||||
} else {
|
||||
$('#edit-kt-jenis-kelompok-lainnya-wrapper').hide();
|
||||
$('#edit-kt-jenis-kelompok-lainnya').val('');
|
||||
}
|
||||
|
||||
if (jenisKelompok === 'Gabungan Kelompok Tani (Gapoktan)') {
|
||||
$('#edit-kt-nama-gapoktan-wrapper').show();
|
||||
} else {
|
||||
$('#edit-kt-nama-gapoktan-wrapper').hide();
|
||||
$('#edit-kt-nama-gapoktan').val('');
|
||||
}
|
||||
}
|
||||
toggleJenisKelompokFields();
|
||||
$('#edit-kt-jenis-kelompok').on('change', toggleJenisKelompokFields);
|
||||
|
||||
$('#edit-kt-provinsi').select2().on('change', function (e) {
|
||||
e.preventDefault();
|
||||
var provinsiId = $(this).val();
|
||||
$('#edit-kt-kabupaten').empty().append('<option value="">Pilih Kabupaten/Kota</option>').trigger('change');
|
||||
$('#edit-kt-kecamatan').empty().append('<option value="">Pilih Kecamatan</option>').trigger('change');
|
||||
$('#edit-kt-desa').empty().append('<option value="">Pilih Desa/Kelurahan</option>').trigger('change');
|
||||
|
||||
if (provinsiId) {
|
||||
$.ajax({
|
||||
url: '{{ route("kabupatenkota.byprovinsi", ":id") }}'.replace(':id', provinsiId),
|
||||
method: 'GET',
|
||||
success: function (data) {
|
||||
data.forEach(function (kabupaten) {
|
||||
$('#edit-kt-kabupaten').append('<option value="' + kabupaten.id + '">' + kabupaten.nama + '</option>');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#edit-kt-kabupaten').select2().on('change', function (e) {
|
||||
e.preventDefault();
|
||||
var kabupatenId = $(this).val();
|
||||
$('#edit-kt-kecamatan').empty().append('<option value="">Pilih Kecamatan</option>').trigger('change');
|
||||
$('#edit-kt-desa').empty().append('<option value="">Pilih Desa/Kelurahan</option>').trigger('change');
|
||||
|
||||
if (kabupatenId) {
|
||||
$.ajax({
|
||||
url: '{{ route("kecamatan.bykabupatenkota", ":id") }}'.replace(':id', kabupatenId),
|
||||
method: 'GET',
|
||||
success: function (data) {
|
||||
data.forEach(function (kecamatan) {
|
||||
$('#edit-kt-kecamatan').append('<option value="' + kecamatan.id + '">' + kecamatan.nama + '</option>');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#edit-kt-kecamatan').select2().on('change', function (e) {
|
||||
e.preventDefault();
|
||||
var kecamatanId = $(this).val();
|
||||
$('#edit-kt-desa').empty().append('<option value="">Pilih Desa/Kelurahan</option>').trigger('change');
|
||||
|
||||
if (kecamatanId) {
|
||||
$.ajax({
|
||||
url: '{{ route("desakelurahan.bykecamatan", ":id") }}'.replace(':id', kecamatanId),
|
||||
method: 'GET',
|
||||
success: function (data) {
|
||||
data.forEach(function (desa) {
|
||||
$('#edit-kt-desa').append('<option value="' + desa.id + '">' + desa.nama + '</option>');
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$('#edit-kt-desa').select2();
|
||||
|
||||
$('#editKelompokTaniForm').validate({
|
||||
rules: {
|
||||
nama_responden: { required: true },
|
||||
nama_kelompok: { required: true },
|
||||
provinsi_id: { required: true },
|
||||
kabupaten_id: { required: true },
|
||||
kecamatan_id: { required: true },
|
||||
desa_kelurahan_id: { required: true },
|
||||
jenis_kelompok: { required: true },
|
||||
jenis_kelompok_lainnya: {
|
||||
required: function () {
|
||||
return $('#edit-kt-jenis-kelompok').val() === 'Lainnya';
|
||||
}
|
||||
},
|
||||
tahun_berdiri: { min: 1900, max: new Date().getFullYear() }
|
||||
},
|
||||
messages: {
|
||||
nama_responden: { required: 'Nama responden wajib diisi' },
|
||||
nama_kelompok: { required: 'Nama kelompok wajib diisi' },
|
||||
provinsi_id: { required: 'Provinsi wajib diisi' },
|
||||
kabupaten_id: { required: 'Kabupaten/Kota wajib diisi' },
|
||||
kecamatan_id: { required: 'Kecamatan wajib diisi' },
|
||||
desa_kelurahan_id: { required: 'Desa/Kelurahan wajib diisi' },
|
||||
jenis_kelompok: { required: 'Jenis kelompok wajib dipilih' },
|
||||
jenis_kelompok_lainnya: { required: 'Sebutkan jenis kelompoknya' }
|
||||
},
|
||||
errorElement: 'div',
|
||||
errorPlacement: function (error, element) {
|
||||
error.addClass('invalid-feedback');
|
||||
if (element.hasClass('select2-hidden-accessible')) {
|
||||
element.closest('.form-control-validation').append(error);
|
||||
} else {
|
||||
element.closest('.mb-4, .form-control-validation').append(error);
|
||||
}
|
||||
},
|
||||
highlight: function (element) {
|
||||
$(element).addClass('is-invalid');
|
||||
},
|
||||
unhighlight: function (element) {
|
||||
$(element).removeClass('is-invalid');
|
||||
},
|
||||
submitHandler: function (form) {
|
||||
form.submit();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,216 @@
|
||||
<style>
|
||||
@media (min-width: 768px) {
|
||||
.nav-pills-custom-spacing {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: nowrap !important;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.nav-pills-custom-spacing::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-pills-custom-spacing .nav-item {
|
||||
margin-right: 0 !important;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.nav-pills-custom-spacing .nav-link {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding-left: 0.5rem !important;
|
||||
padding-right: 0.5rem !important;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
font-size: 0.9375rem !important;
|
||||
}
|
||||
|
||||
.nav-pills-custom-spacing .nav-link i {
|
||||
margin-right: 0.4rem !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@php
|
||||
$namaKomoditas = isset($kelompokTani) && $kelompokTani->komoditas_id
|
||||
? \App\Models\Pertanian\Komoditas::whereIn('id', $kelompokTani->komoditas_id)->pluck('nama')
|
||||
: collect();
|
||||
$lokasiKelompok = isset($kelompokTani)
|
||||
? collect([$kelompokTani->dusun, $kelompokTani->desaKelurahan?->nama, $kelompokTani->desaKelurahan?->kecamatan?->nama])
|
||||
->filter()
|
||||
->implode(', ')
|
||||
: null;
|
||||
@endphp
|
||||
|
||||
<div class="card mb-6">
|
||||
<div class="card-body p-3">
|
||||
<div class="d-flex justify-content-start align-items-center flex-wrap row-gap-2">
|
||||
<div class="avatar avatar-lg me-3">
|
||||
<span class="avatar-initial rounded bg-label-primary">
|
||||
<i class="icon-base ti tabler-users-group icon-28px"></i>
|
||||
</span>
|
||||
</div>
|
||||
<div class="d-flex flex-column">
|
||||
<h5 class="mb-0">{{ isset($kelompokTani) ? $kelompokTani->nama_kelompok : 'Tambah Kelompok Tani Baru' }}</h5>
|
||||
<span class="text-muted" style="font-size: 0.8rem;">
|
||||
{{ $lokasiKelompok ?: 'Lengkapi identitas & data responden untuk memulai' }}
|
||||
</span>
|
||||
@if(isset($kelompokTani) && ($kelompokTani->jenis_kelompok || $namaKomoditas->isNotEmpty() || $kelompokTani->nama_gapoktan))
|
||||
<div class="d-flex flex-wrap gap-1 mt-2">
|
||||
@if($kelompokTani->jenis_kelompok)
|
||||
<span class="badge bg-label-secondary">{{ $kelompokTani->jenis_kelompok }}</span>
|
||||
@endif
|
||||
@if($kelompokTani->nama_gapoktan)
|
||||
<span class="badge bg-label-info">Gapoktan: {{ $kelompokTani->nama_gapoktan }}</span>
|
||||
@endif
|
||||
@foreach($namaKomoditas as $nama)
|
||||
<span class="badge bg-label-success">{{ $nama }}</span>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if(isset($kelompokTani))
|
||||
<hr class="my-3">
|
||||
<div class="row gy-3">
|
||||
<div class="col-sm-6 col-lg-3 d-flex align-items-center">
|
||||
<span class="avatar avatar-sm me-2">
|
||||
<span class="avatar-initial rounded-circle bg-label-primary">
|
||||
<i class="icon-base ti tabler-user icon-16px"></i>
|
||||
</span>
|
||||
</span>
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Nama Responden</p>
|
||||
<span class="fw-medium" style="font-size: 0.85rem;">{{ $kelompokTani->nama_responden ?: '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-3 d-flex align-items-center">
|
||||
<span class="avatar avatar-sm me-2">
|
||||
<span class="avatar-initial rounded-circle bg-label-primary">
|
||||
<i class="icon-base ti tabler-briefcase icon-16px"></i>
|
||||
</span>
|
||||
</span>
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Jabatan Responden</p>
|
||||
<span class="fw-medium" style="font-size: 0.85rem;">{{ $kelompokTani->jabatan_responden ?: '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-3 d-flex align-items-center">
|
||||
<span class="avatar avatar-sm me-2">
|
||||
<span class="avatar-initial rounded-circle bg-label-primary">
|
||||
<i class="icon-base ti tabler-phone icon-16px"></i>
|
||||
</span>
|
||||
</span>
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Kontak Responden</p>
|
||||
<span class="fw-medium" style="font-size: 0.85rem;">{{ $kelompokTani->kontak_responden ?: '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-6 col-lg-3 d-flex align-items-center">
|
||||
<span class="avatar avatar-sm me-2">
|
||||
<span class="avatar-initial rounded-circle bg-label-primary">
|
||||
<i class="icon-base ti tabler-calendar-event icon-16px"></i>
|
||||
</span>
|
||||
</span>
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Tahun Berdiri</p>
|
||||
<span class="fw-medium" style="font-size: 0.85rem;">{{ $kelompokTani->tahun_berdiri ?: '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="nav-align-top">
|
||||
<ul class="nav nav-pills flex-column flex-md-row mb-6 row-gap-2 nav-pills-custom-spacing">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link {{ request()->routeIs('kelompok-tani.create') || (request()->routeIs('kelompok-tani.edit') && !request()->query('section')) ? 'active' : '' }}"
|
||||
href="{{ isset($kelompokTani) ? route('kelompok-tani.edit', $kelompokTani->id) : route('kelompok-tani.create') }}">
|
||||
<i class="icon-base ti tabler-id-badge-2 me-1_5 icon-sm"></i>Identitas & Responden
|
||||
</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
@if(isset($kelompokTani))
|
||||
<a class="nav-link {{ request()->routeIs('kelompok-tani.pengurus-anggota.*') ? 'active' : '' }}"
|
||||
href="{{ route('kelompok-tani.pengurus-anggota.index', $kelompokTani->id) }}">
|
||||
<i class="icon-base ti tabler-users-group me-1_5 icon-sm"></i>Pengurus & Anggota
|
||||
</a>
|
||||
@else
|
||||
<a class="nav-link" href="#" data-bs-toggle="tooltip" data-bs-placement="top"
|
||||
data-bs-original-title="Simpan Identitas & Responden terlebih dahulu">
|
||||
<i class="icon-base ti tabler-users-group me-1_5 icon-sm"></i>Pengurus & Anggota
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
@if(isset($kelompokTani))
|
||||
<a class="nav-link {{ request()->routeIs('kelompok-tani.edit') && request()->query('section') === 'kelembagaan' ? 'active' : '' }}"
|
||||
href="{{ route('kelompok-tani.edit', $kelompokTani->id) }}?section=kelembagaan">
|
||||
<i class="icon-base ti tabler-building-community me-1_5 icon-sm"></i>Kelembagaan
|
||||
</a>
|
||||
@else
|
||||
<a class="nav-link" href="#" data-bs-toggle="tooltip" data-bs-placement="top"
|
||||
data-bs-original-title="Simpan Identitas & Responden terlebih dahulu">
|
||||
<i class="icon-base ti tabler-building-community me-1_5 icon-sm"></i>Kelembagaan
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
@if(isset($kelompokTani))
|
||||
<a class="nav-link {{ request()->routeIs('kelompok-tani.edit') && request()->query('section') === 'aktivitas-fungsi' ? 'active' : '' }}"
|
||||
href="{{ route('kelompok-tani.edit', $kelompokTani->id) }}?section=aktivitas-fungsi">
|
||||
<i class="icon-base ti tabler-clipboard-list me-1_5 icon-sm"></i>Aktivitas & Fungsi
|
||||
</a>
|
||||
@else
|
||||
<a class="nav-link" href="#" data-bs-toggle="tooltip" data-bs-placement="top"
|
||||
data-bs-original-title="Simpan Identitas & Responden terlebih dahulu">
|
||||
<i class="icon-base ti tabler-clipboard-list me-1_5 icon-sm"></i>Aktivitas & Fungsi
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
@if(isset($kelompokTani))
|
||||
<a class="nav-link {{ request()->routeIs('kelompok-tani.aset-keuangan.*') ? 'active' : '' }}"
|
||||
href="{{ route('kelompok-tani.aset-keuangan.index', $kelompokTani->id) }}">
|
||||
<i class="icon-base ti tabler-wallet me-1_5 icon-sm"></i>Aset & Keuangan
|
||||
</a>
|
||||
@else
|
||||
<a class="nav-link" href="#" data-bs-toggle="tooltip" data-bs-placement="top"
|
||||
data-bs-original-title="Simpan Identitas & Responden terlebih dahulu">
|
||||
<i class="icon-base ti tabler-wallet me-1_5 icon-sm"></i>Aset & Keuangan
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
@if(isset($kelompokTani))
|
||||
<a class="nav-link {{ request()->routeIs('kelompok-tani.edit') && request()->query('section') === 'sosial-konflik' ? 'active' : '' }}"
|
||||
href="{{ route('kelompok-tani.edit', $kelompokTani->id) }}?section=sosial-konflik">
|
||||
<i class="icon-base ti tabler-heart-handshake me-1_5 icon-sm"></i>Sosial & Konflik
|
||||
</a>
|
||||
@else
|
||||
<a class="nav-link" href="#" data-bs-toggle="tooltip" data-bs-placement="top"
|
||||
data-bs-original-title="Simpan Identitas & Responden terlebih dahulu">
|
||||
<i class="icon-base ti tabler-heart-handshake me-1_5 icon-sm"></i>Sosial & Konflik
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
@if(isset($kelompokTani))
|
||||
<a class="nav-link {{ request()->routeIs('kelompok-tani.bantuan-penilaian.*') ? 'active' : '' }}"
|
||||
href="{{ route('kelompok-tani.bantuan-penilaian.index', $kelompokTani->id) }}">
|
||||
<i class="icon-base ti tabler-report me-1_5 icon-sm"></i>Bantuan & Penilaian
|
||||
</a>
|
||||
@else
|
||||
<a class="nav-link" href="#" data-bs-toggle="tooltip" data-bs-placement="top"
|
||||
data-bs-original-title="Simpan Identitas & Responden terlebih dahulu">
|
||||
<i class="icon-base ti tabler-report me-1_5 icon-sm"></i>Bantuan & Penilaian
|
||||
</a>
|
||||
@endif
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,111 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom">
|
||||
<h5 class="card-title mb-0">Data Kelompok Tani</h5>
|
||||
</div>
|
||||
|
||||
<div class="card-body border-bottom pt-4">
|
||||
<form method="GET" action="{{ route('kelompok-tani.index') }}" class="d-flex justify-content-between align-items-center row gap-3 gap-md-0">
|
||||
<div class="col-md-auto">
|
||||
<div class="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()">
|
||||
<option value="10" {{ request('per_page') == 10 ? 'selected' : '' }}>10</option>
|
||||
<option value="25" {{ request('per_page') == 25 ? 'selected' : '' }}>25</option>
|
||||
</select>
|
||||
<label class="ms-2 text-nowrap">entries</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-auto d-flex gap-2">
|
||||
<div class="input-group input-group-sm w-auto">
|
||||
<input type="text" name="search" class="form-control" placeholder="Cari Nama..." value="{{ request('search') }}">
|
||||
<button type="submit" class="btn btn-outline-primary"><i class="ti tabler-search"></i></button>
|
||||
</div>
|
||||
<a href="{{ route('kelompok-tani.create') }}" class="btn btn-sm btn-primary">
|
||||
<i class="ti tabler-plus me-1"></i> Tambah
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="table-responsive text-nowrap">
|
||||
<table class="table table-hover">
|
||||
<thead class="border-top">
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Nama Kelompok</th>
|
||||
<th>Desa/Kelurahan</th>
|
||||
<th>Jenis Kelompok</th>
|
||||
<th>Tahun Berdiri</th>
|
||||
<th>Nama Responden</th>
|
||||
<th>Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($kelompokTani as $index => $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td><span class="text-heading">{{ $item->nama_kelompok }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->desaKelurahan?->nama }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->jenis_kelompok }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->tahun_berdiri }}</span></td>
|
||||
<td><span class="text-muted">{{ $item->nama_responden }}</span></td>
|
||||
<td>
|
||||
<div class="d-flex align-items-center">
|
||||
<a href="{{ route('kelompok-tani.edit', $item->id) }}" class="btn btn-icon btn-text-secondary rounded-pill edit-record"><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->nama_kelompok }}"><i class="ti tabler-trash ti-md"></i></a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr><td colspan="7" class="text-center py-4">Tidak ada data ditemukan.</td></tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="card-footer d-flex justify-content-center justify-content-md-end border-top">
|
||||
{{ $kelompokTani->appends(request()->query())->links('pagination::bootstrap-5') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
const csrfToken = "{{ csrf_token() }}";
|
||||
|
||||
$(document).ready(function () {
|
||||
$(document).on('click', '.delete-record', function () {
|
||||
const id = $(this).data('id');
|
||||
const name = $(this).data('nama');
|
||||
|
||||
Swal.fire({
|
||||
title: 'Apakah Anda yakin?',
|
||||
text: `Data kelompok tani "${name}" akan dihapus secara permanen!`,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonText: 'Ya, Hapus!',
|
||||
customClass: { confirmButton: 'btn btn-primary me-3', cancelButton: 'btn btn-label-secondary' },
|
||||
buttonsStyling: false
|
||||
}).then(function (result) {
|
||||
if (result.value) {
|
||||
$.ajax({
|
||||
url: '{{ route('kelompok-tani.destroy', ':id') }}'.replace(':id', id),
|
||||
type: 'DELETE',
|
||||
headers: { 'X-CSRF-TOKEN': csrfToken },
|
||||
success: function (res) {
|
||||
Swal.fire({ icon: 'success', title: 'Terhapus!', text: res.message, showConfirmButton: false, timer: 1500 })
|
||||
.then(() => window.location.reload());
|
||||
},
|
||||
error: () => Swal.fire({ icon: 'error', title: 'Gagal!', text: 'Terjadi kesalahan sistem.' })
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,167 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => $kelompokTani])
|
||||
|
||||
<div class="card mb-6" id="section-kelembagaan">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'kelembagaan',
|
||||
'errorFields' => ['cakupan_wilayah', 'nama_wilayah_cakupan', 'status_legalitas', 'nomor_sk', 'tanggal_tahun_penerbitan_sk', 'tingkat_keaktifan_ketua', 'status_pembagian_peran', 'status_dokumentasi_rapat', 'frekuensi_pertemuan', 'tanggal_pertemuan_terakhir'],
|
||||
])
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="section" value="kelembagaan">
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Cakupan Wilayah Kelompok</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-cakupan-wilayah">Cakupan Wilayah Keanggotaan</label>
|
||||
<select class="form-control @error('cakupan_wilayah') is-invalid @enderror" id="klb-cakupan-wilayah" name="cakupan_wilayah">
|
||||
<option value="">Pilih Cakupan Wilayah</option>
|
||||
@foreach(['RT', 'RW', 'Desa', 'Kecamatan', 'Kabupaten'] as $option)
|
||||
<option value="{{ $option }}" {{ old('cakupan_wilayah', $kelompokTani->cakupan_wilayah) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<small class="text-muted">Pilih satu level cakupan wilayah terluas.</small>
|
||||
@error('cakupan_wilayah')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-8 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-nama-wilayah-cakupan">Nama Wilayah yang Termasuk Cakupan</label>
|
||||
<textarea class="form-control @error('nama_wilayah_cakupan') is-invalid @enderror" id="klb-nama-wilayah-cakupan" name="nama_wilayah_cakupan" rows="2"
|
||||
placeholder="Cth: Desa Sukamaju, Desa Sukamakmur">{{ old('nama_wilayah_cakupan', $kelompokTani->nama_wilayah_cakupan) }}</textarea>
|
||||
@error('nama_wilayah_cakupan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Status Legalitas Kelompok</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-status-legalitas">Status SK/Dokumen Pendaftaran</label>
|
||||
<select class="form-control @error('status_legalitas') is-invalid @enderror" id="klb-status-legalitas" name="status_legalitas">
|
||||
<option value="">Pilih Status Legalitas</option>
|
||||
@foreach([
|
||||
'Belum ada SK/dokumen apa pun',
|
||||
'Sedang proses pengajuan',
|
||||
'Sudah ada SK dari desa/kecamatan',
|
||||
'Sudah ada SK dan terdaftar di Dinas/Kabupaten',
|
||||
'Tidak tahu',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('status_legalitas', $kelompokTani->status_legalitas) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('status_legalitas')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-nomor-sk">Nomor SK (jika ada)</label>
|
||||
<input type="text" class="form-control @error('nomor_sk') is-invalid @enderror" id="klb-nomor-sk" name="nomor_sk"
|
||||
value="{{ old('nomor_sk', $kelompokTani->nomor_sk) }}" />
|
||||
@error('nomor_sk')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-tanggal-penerbitan-sk">Tanggal/Tahun Penerbitan</label>
|
||||
<input type="text" class="form-control @error('tanggal_tahun_penerbitan_sk') is-invalid @enderror" id="klb-tanggal-penerbitan-sk" name="tanggal_tahun_penerbitan_sk"
|
||||
placeholder="Cth: 12-01-2020 atau 2020" value="{{ old('tanggal_tahun_penerbitan_sk', $kelompokTani->tanggal_tahun_penerbitan_sk) }}" />
|
||||
@error('tanggal_tahun_penerbitan_sk')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Kualitas Kepemimpinan</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-keaktifan-ketua">Keaktifan Ketua Kelompok</label>
|
||||
<select class="form-control @error('tingkat_keaktifan_ketua') is-invalid @enderror" id="klb-keaktifan-ketua" name="tingkat_keaktifan_ketua">
|
||||
<option value="">Pilih Tingkat Keaktifan</option>
|
||||
@foreach([
|
||||
'Tidak aktif/jarang hadir',
|
||||
'Cukup aktif',
|
||||
'Sangat aktif dan menjalankan tanggung jawab dengan baik',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('tingkat_keaktifan_ketua', $kelompokTani->tingkat_keaktifan_ketua) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('tingkat_keaktifan_ketua')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-pembagian-peran">Pembagian Peran Pengurus</label>
|
||||
<select class="form-control @error('status_pembagian_peran') is-invalid @enderror" id="klb-pembagian-peran" name="status_pembagian_peran">
|
||||
<option value="">Pilih Status Pembagian Peran</option>
|
||||
@foreach([
|
||||
'Tidak ada pembagian peran',
|
||||
'Ada tapi tidak berjalan',
|
||||
'Ada dan berjalan dengan baik',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('status_pembagian_peran', $kelompokTani->status_pembagian_peran) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('status_pembagian_peran')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-dokumentasi-rapat">Dokumentasi Rapat (Notulen/Daftar Hadir)</label>
|
||||
<select class="form-control @error('status_dokumentasi_rapat') is-invalid @enderror" id="klb-dokumentasi-rapat" name="status_dokumentasi_rapat">
|
||||
<option value="">Pilih Status Dokumentasi</option>
|
||||
@foreach([
|
||||
'Tidak ada',
|
||||
'Ada, tidak rutin',
|
||||
'Ada, rutin setiap pertemuan',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('status_dokumentasi_rapat', $kelompokTani->status_dokumentasi_rapat) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('status_dokumentasi_rapat')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Frekuensi Pertemuan Rutin</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-frekuensi-pertemuan">Frekuensi Pertemuan</label>
|
||||
<select class="form-control @error('frekuensi_pertemuan') is-invalid @enderror" id="klb-frekuensi-pertemuan" name="frekuensi_pertemuan">
|
||||
<option value="">Pilih Frekuensi Pertemuan</option>
|
||||
@foreach([
|
||||
'Tidak pernah/sudah tidak aktif',
|
||||
'Tidak rutin/tidak terjadwal',
|
||||
'1x per 2-3 bulan',
|
||||
'1x per bulan',
|
||||
'Lebih dari 1x per bulan',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('frekuensi_pertemuan', $kelompokTani->frekuensi_pertemuan) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('frekuensi_pertemuan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="klb-tanggal-pertemuan-terakhir">Tanggal Pertemuan Terakhir</label>
|
||||
<input type="text" class="form-control @error('tanggal_pertemuan_terakhir') is-invalid @enderror" id="klb-tanggal-pertemuan-terakhir" name="tanggal_pertemuan_terakhir"
|
||||
value="{{ old('tanggal_pertemuan_terakhir', $kelompokTani->tanggal_pertemuan_terakhir?->format('Y-m-d')) }}" />
|
||||
@error('tanggal_pertemuan_terakhir')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Kelembagaan
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
$(document).ready(function () {
|
||||
$('#klb-cakupan-wilayah, #klb-status-legalitas, #klb-keaktifan-ketua, #klb-pembagian-peran, #klb-dokumentasi-rapat, #klb-frekuensi-pertemuan').select2();
|
||||
$('#klb-tanggal-pertemuan-terakhir').flatpickr({
|
||||
dateFormat: 'Y-m-d',
|
||||
altInput: true,
|
||||
altFormat: 'd-m-Y'
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,318 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@push('style')
|
||||
<style>
|
||||
.status-switch-row {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
gap: 12px !important;
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
|
||||
.status-switch-row .switch {
|
||||
width: 52px !important;
|
||||
min-width: 52px !important;
|
||||
max-width: 52px !important;
|
||||
padding-left: 0 !important;
|
||||
margin: 0 !important;
|
||||
position: relative !important;
|
||||
display: inline-block !important;
|
||||
flex: 0 0 52px !important;
|
||||
}
|
||||
|
||||
.status-switch-row .switch-toggle-slider {
|
||||
left: 0 !important;
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => $kelompokTani])
|
||||
|
||||
{{-- RINGKASAN JUMLAH & KOMPOSISI GENDER --}}
|
||||
<div class="card mb-6" id="section-ringkasan">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'ringkasan',
|
||||
'errorFields' => ['jumlah_pengurus', 'jumlah_pengurus_aktif', 'jumlah_anggota_terdaftar', 'jumlah_anggota_aktif', 'jumlah_pengurus_laki_laki', 'jumlah_pengurus_perempuan', 'jumlah_anggota_laki_laki', 'jumlah_anggota_perempuan', 'jumlah_anggota_pemuda_laki_laki', 'jumlah_anggota_pemuda_perempuan'],
|
||||
])
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="section" value="ringkasan-pengurus">
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Jumlah Pengurus & Anggota</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="pa-jumlah-pengurus">Jumlah Pengurus (total)</label>
|
||||
<input type="number" min="0" class="form-control @error('jumlah_pengurus') is-invalid @enderror" id="pa-jumlah-pengurus" name="jumlah_pengurus"
|
||||
value="{{ old('jumlah_pengurus', $kelompokTani->jumlah_pengurus) }}" />
|
||||
@error('jumlah_pengurus')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="pa-jumlah-pengurus-aktif">Jumlah Pengurus Aktif</label>
|
||||
<input type="number" min="0" class="form-control @error('jumlah_pengurus_aktif') is-invalid @enderror" id="pa-jumlah-pengurus-aktif" name="jumlah_pengurus_aktif"
|
||||
value="{{ old('jumlah_pengurus_aktif', $kelompokTani->jumlah_pengurus_aktif) }}" />
|
||||
@error('jumlah_pengurus_aktif')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="pa-jumlah-anggota-terdaftar">Jumlah Anggota Terdaftar</label>
|
||||
<input type="number" min="0" class="form-control @error('jumlah_anggota_terdaftar') is-invalid @enderror" id="pa-jumlah-anggota-terdaftar" name="jumlah_anggota_terdaftar"
|
||||
value="{{ old('jumlah_anggota_terdaftar', $kelompokTani->jumlah_anggota_terdaftar) }}" />
|
||||
@error('jumlah_anggota_terdaftar')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="pa-jumlah-anggota-aktif">Jumlah Anggota Aktif <small class="text-muted">(hadir pertemuan rutin)</small></label>
|
||||
<input type="number" min="0" class="form-control @error('jumlah_anggota_aktif') is-invalid @enderror" id="pa-jumlah-anggota-aktif" name="jumlah_anggota_aktif"
|
||||
value="{{ old('jumlah_anggota_aktif', $kelompokTani->jumlah_anggota_aktif) }}" />
|
||||
@error('jumlah_anggota_aktif')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Komposisi Gender</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-4 mb-4">
|
||||
<label class="form-label d-block">Jumlah Pengurus (Laki-laki / Perempuan)</label>
|
||||
<div class="d-flex gap-2">
|
||||
<input type="number" min="0" class="form-control @error('jumlah_pengurus_laki_laki') is-invalid @enderror" name="jumlah_pengurus_laki_laki"
|
||||
placeholder="Laki-laki" value="{{ old('jumlah_pengurus_laki_laki', $kelompokTani->jumlah_pengurus_laki_laki) }}" />
|
||||
<input type="number" min="0" class="form-control @error('jumlah_pengurus_perempuan') is-invalid @enderror" name="jumlah_pengurus_perempuan"
|
||||
placeholder="Perempuan" value="{{ old('jumlah_pengurus_perempuan', $kelompokTani->jumlah_pengurus_perempuan) }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 mb-4">
|
||||
<label class="form-label d-block">Jumlah Anggota (Laki-laki / Perempuan)</label>
|
||||
<div class="d-flex gap-2">
|
||||
<input type="number" min="0" class="form-control @error('jumlah_anggota_laki_laki') is-invalid @enderror" name="jumlah_anggota_laki_laki"
|
||||
placeholder="Laki-laki" value="{{ old('jumlah_anggota_laki_laki', $kelompokTani->jumlah_anggota_laki_laki) }}" />
|
||||
<input type="number" min="0" class="form-control @error('jumlah_anggota_perempuan') is-invalid @enderror" name="jumlah_anggota_perempuan"
|
||||
placeholder="Perempuan" value="{{ old('jumlah_anggota_perempuan', $kelompokTani->jumlah_anggota_perempuan) }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 mb-4">
|
||||
<label class="form-label d-block">Jumlah Anggota Pemuda (16-30 th) <small class="text-muted">L / P</small></label>
|
||||
<div class="d-flex gap-2">
|
||||
<input type="number" min="0" class="form-control @error('jumlah_anggota_pemuda_laki_laki') is-invalid @enderror" name="jumlah_anggota_pemuda_laki_laki"
|
||||
placeholder="Laki-laki" value="{{ old('jumlah_anggota_pemuda_laki_laki', $kelompokTani->jumlah_anggota_pemuda_laki_laki) }}" />
|
||||
<input type="number" min="0" class="form-control @error('jumlah_anggota_pemuda_perempuan') is-invalid @enderror" name="jumlah_anggota_pemuda_perempuan"
|
||||
placeholder="Perempuan" value="{{ old('jumlah_anggota_pemuda_perempuan', $kelompokTani->jumlah_anggota_pemuda_perempuan) }}" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Ringkasan
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- DAFTAR PENGURUS --}}
|
||||
<div class="card mb-6" id="section-pengurus">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'pengurus',
|
||||
'errorFields' => ['pengurus.*'],
|
||||
])
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Daftar Pengurus</h5>
|
||||
|
||||
{{-- DATA LAMA --}}
|
||||
@if ($kelompokTani->pengurus->count() > 0)
|
||||
@foreach ($kelompokTani->pengurus as $row)
|
||||
<div class="row align-items-end border-bottom pb-3 mb-3">
|
||||
<div class="col-md-4">
|
||||
<label class="form-label">Nama Pengurus</label>
|
||||
<input type="text" class="form-control" value="{{ $row->nama_pengurus }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Jabatan</label>
|
||||
<input type="text" class="form-control" value="{{ $row->jabatan }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">No. Kontak</label>
|
||||
<input type="text" class="form-control" value="{{ $row->kontak }}" disabled>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<label class="form-label d-block mb-1">Status</label>
|
||||
<span class="badge {{ $row->status ? 'bg-label-success' : 'bg-label-secondary' }}">
|
||||
{{ $row->status ? 'Aktif' : 'Tidak aktif' }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
<form method="POST" action="{{ route('kelompok-tani.pengurus-anggota.destroy', [$kelompokTani->id, $row->id]) }}" class="delete-db-form">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-outline-danger">
|
||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
@else
|
||||
<p class="text-muted mb-4">Belum ada data pengurus.</p>
|
||||
@endif
|
||||
|
||||
{{-- FORM TAMBAH DATA BARU --}}
|
||||
<form method="POST" action="{{ route('kelompok-tani.pengurus-anggota.store', $kelompokTani->id) }}" class="form-repeater-pengurus">
|
||||
@csrf
|
||||
|
||||
<div data-repeater-list="pengurus">
|
||||
<div data-repeater-item>
|
||||
<div class="row align-items-end">
|
||||
<div class="col-md-4 mb-3">
|
||||
<label class="form-label">Nama Pengurus</label>
|
||||
<input type="text" class="form-control pengurus-input" name="nama_pengurus" placeholder="Cth: John Doe">
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<label class="form-label">Jabatan</label>
|
||||
<input type="text" class="form-control pengurus-input" name="jabatan" placeholder="Cth: Ketua">
|
||||
</div>
|
||||
<div class="col-md-3 mb-3">
|
||||
<label class="form-label">No. Kontak</label>
|
||||
<input type="text" class="form-control pengurus-input" name="kontak" placeholder="Cth: 081234567890">
|
||||
</div>
|
||||
<div class="col-md-1 mb-3">
|
||||
<label class="form-label d-block">Status</label>
|
||||
<div class="status-switch-row">
|
||||
<label class="switch switch-lg">
|
||||
<input type="hidden" class="pengurus-status-hidden" name="status" value="0">
|
||||
<input type="checkbox" class="switch-input pengurus-status-switch">
|
||||
<span class="switch-toggle-slider">
|
||||
<span class="switch-on"><i class="icon-base ti tabler-check"></i></span>
|
||||
<span class="switch-off"><i class="icon-base ti tabler-x"></i></span>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1 mb-3">
|
||||
<button type="button" class="btn btn-outline-danger btn-delete-pengurus" data-repeater-delete disabled>
|
||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 d-flex justify-content-between">
|
||||
<button type="button" class="btn btn-outline-success" id="btn-tambah-pengurus" data-repeater-create disabled>
|
||||
<i class="icon-base ti tabler-plus me-1_5 icon-sm"></i> Tambah Pengurus
|
||||
</button>
|
||||
<button type="submit" class="btn btn-success">
|
||||
<i class="icon-base ti tabler-check me-1_5 icon-sm"></i> Simpan Daftar Pengurus
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
$(function () {
|
||||
const $form = $('.form-repeater-pengurus');
|
||||
const $btnTambah = $('#btn-tambah-pengurus');
|
||||
|
||||
function getRows() {
|
||||
return $form.find('[data-repeater-item]');
|
||||
}
|
||||
|
||||
function rowAdaIsi($row) {
|
||||
return $row.find('.pengurus-input').toArray().some(function (input) {
|
||||
return String($(input).val() || '').trim() !== '';
|
||||
});
|
||||
}
|
||||
|
||||
function rowLengkap($row) {
|
||||
const $inputs = $row.find('.pengurus-input');
|
||||
return $inputs.toArray().every(function (input) {
|
||||
return String($(input).val() || '').trim() !== '';
|
||||
});
|
||||
}
|
||||
|
||||
function updateButtons() {
|
||||
const $rows = getRows();
|
||||
const $lastRow = $rows.last();
|
||||
|
||||
$rows.each(function () {
|
||||
const $row = $(this);
|
||||
$row.find('.btn-delete-pengurus').prop('disabled', !rowAdaIsi($row));
|
||||
});
|
||||
|
||||
$btnTambah.prop('disabled', !rowLengkap($lastRow));
|
||||
}
|
||||
|
||||
$form.repeater({
|
||||
initEmpty: false,
|
||||
show: function () {
|
||||
const $row = $(this);
|
||||
$row.find('.pengurus-input').val('');
|
||||
$row.find('.pengurus-status-switch').prop('checked', false);
|
||||
$row.find('.pengurus-status-hidden').val('0');
|
||||
$row.find('.btn-delete-pengurus').prop('disabled', true);
|
||||
$row.slideDown();
|
||||
setTimeout(updateButtons, 50);
|
||||
},
|
||||
hide: function (deleteElement) {
|
||||
const $row = $(this);
|
||||
if (!rowAdaIsi($row)) {
|
||||
return;
|
||||
}
|
||||
Swal.fire({
|
||||
title: 'Hapus baris ini?',
|
||||
text: 'Baris ini hanya akan dihapus dari form.',
|
||||
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.isConfirmed) {
|
||||
$row.slideUp(deleteElement);
|
||||
setTimeout(updateButtons, 300);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('input keyup change', '.form-repeater-pengurus .pengurus-input', updateButtons);
|
||||
updateButtons();
|
||||
|
||||
// Checkbox switch tidak punya "name" (biar tidak kena auto-suffix "[]" dari plugin repeater
|
||||
// untuk elemen checkbox) — nilainya disinkronkan manual ke hidden input yang benar-benar dikirim.
|
||||
$(document).on('change', '.form-repeater-pengurus .pengurus-status-switch', function () {
|
||||
$(this).closest('.status-switch-row').find('.pengurus-status-hidden').val(this.checked ? '1' : '0');
|
||||
});
|
||||
|
||||
$(document).on('submit', '.delete-db-form', function (e) {
|
||||
e.preventDefault();
|
||||
const form = this;
|
||||
|
||||
Swal.fire({
|
||||
title: 'Hapus data pengurus ini?',
|
||||
text: 'Data yang sudah dihapus tidak bisa dikembalikan.',
|
||||
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.isConfirmed) {
|
||||
form.submit();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,98 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
@include('produktivitas.survey-kelompok-tani.header', ['kelompokTani' => $kelompokTani])
|
||||
|
||||
<div class="card mb-6" id="section-sosial-konflik">
|
||||
<div class="card-body pt-6">
|
||||
@include('produktivitas.survey-kelompok-tani._alert', [
|
||||
'section' => 'sosial-konflik',
|
||||
'errorFields' => ['partisipasi_perempuan', 'konflik_kelompok', 'topik_konflik', 'penyelesaian_konflik'],
|
||||
])
|
||||
|
||||
<form method="POST" action="{{ route('kelompok-tani.update', $kelompokTani->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<input type="hidden" name="section" value="sosial-konflik">
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4">Keterlibatan Perempuan</h5>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="sk-partisipasi-perempuan">Apakah Perempuan Terlibat Aktif dalam Kegiatan & Pengambilan Keputusan?</label>
|
||||
<select class="form-control @error('partisipasi_perempuan') is-invalid @enderror" id="sk-partisipasi-perempuan" name="partisipasi_perempuan">
|
||||
<option value="">Pilih Status</option>
|
||||
@foreach([
|
||||
'Tidak terlibat',
|
||||
'Hadir tapi pasif',
|
||||
'Terlibat aktif dalam diskusi/keputusan',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('partisipasi_perempuan', $kelompokTani->partisipasi_perempuan) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('partisipasi_perempuan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h5 class="pb-4 border-bottom mb-4 mt-4">Riwayat Konflik Internal Kelompok</h5>
|
||||
<p class="text-muted" style="font-size: 0.8rem; margin-top: -0.75rem;">
|
||||
Topik ini cukup sensitif. Kalau responden tidak nyaman menjawab, pilih "Tidak bersedia menjawab".
|
||||
</p>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="sk-konflik-kelompok">Pernah Terjadi Konflik Internal?</label>
|
||||
<select class="form-control @error('konflik_kelompok') is-invalid @enderror" id="sk-konflik-kelompok" name="konflik_kelompok">
|
||||
<option value="">Pilih Status</option>
|
||||
@foreach([
|
||||
'Tidak pernah',
|
||||
'Pernah, sudah selesai',
|
||||
'Pernah, masih berlanjut/belum selesai',
|
||||
'Tidak bersedia menjawab',
|
||||
] as $option)
|
||||
<option value="{{ $option }}" {{ old('konflik_kelompok', $kelompokTani->konflik_kelompok) == $option ? 'selected' : '' }}>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@error('konflik_kelompok')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="sk-detail-konflik-wrapper" style="display: none;">
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="sk-topik-konflik">Jika Pernah, Soal Apa?</label>
|
||||
<input type="text" class="form-control @error('topik_konflik') is-invalid @enderror" id="sk-topik-konflik" name="topik_konflik"
|
||||
placeholder="Cth: Kepemimpinan, pembagian hasil" value="{{ old('topik_konflik', $kelompokTani->topik_konflik) }}" />
|
||||
@error('topik_konflik')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
<div class="col-md-6 mb-4 form-control-validation">
|
||||
<label class="form-label" for="sk-penyelesaian-konflik">Bagaimana Penyelesaiannya?</label>
|
||||
<textarea class="form-control @error('penyelesaian_konflik') is-invalid @enderror" id="sk-penyelesaian-konflik" name="penyelesaian_konflik" rows="2">{{ old('penyelesaian_konflik', $kelompokTani->penyelesaian_konflik) }}</textarea>
|
||||
@error('penyelesaian_konflik')<div class="error invalid-feedback">{{ $message }}</div>@enderror
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<button type="submit" class="btn btn-success wave-effect wave-light">
|
||||
<i class="ti tabler-device-floppy me-2"></i> Simpan Sosial & Konflik
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
$(document).ready(function () {
|
||||
$('#sk-partisipasi-perempuan, #sk-konflik-kelompok').select2();
|
||||
|
||||
function toggleDetailKonflik() {
|
||||
var val = $('#sk-konflik-kelompok').val();
|
||||
$('#sk-detail-konflik-wrapper').toggle(val === 'Pernah, sudah selesai' || val === 'Pernah, masih berlanjut/belum selesai');
|
||||
}
|
||||
toggleDetailKonflik();
|
||||
$('#sk-konflik-kelompok').on('change', toggleDetailKonflik);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -0,0 +1,103 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@section('content')
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="card">
|
||||
<div class="card-header border-bottom mb-4">
|
||||
<h5 class="card-title mb-0">Edit Petani</h5>
|
||||
</div>
|
||||
|
||||
<div class="card-body">
|
||||
<form id="viewPetaniForm">
|
||||
@if ($errors->any())
|
||||
<div class="alert alert-danger">
|
||||
<ul class="mb-0">
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<h6 class="mb-3">Informasi Petani</h6>
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-nama">Nama Petani</label>
|
||||
<input type="text" class="form-control" id="edit-petani-nama" name="nama"
|
||||
placeholder="Cth: John Doe" value="{{ old('nama', $petani->nama) }}" readonly/>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-jenis-kelamin">Jenis Kelamin</label>
|
||||
<input type="text" class="form-control" id="edit-petani-jenis-kelamin" name="jenis_kelamin"
|
||||
value="{{ old('jenis_kelamin', $petani->jenis_kelamin) == '1' ? 'Laki-laki' : 'Perempuan' }}" readonly/>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-tempat-lahir">Tempat Lahir</label>
|
||||
<input type="text" class="form-control" id="edit-petani-tempat-lahir" name="tempat_lahir" placeholder="Cth: Ngada"
|
||||
value="{{ old('tempat_lahir', $petani->tempat_lahir) }}" />
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-tanggal-lahir">Tanggal Lahir</label>
|
||||
<input type="date" class="form-control" id="edit-petani-tanggal-lahir" name="tanggal_lahir"
|
||||
value="{{ old('tanggal_lahir', $petani->tanggal_lahir?->format('d-m-Y')) }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-pendidikan-terakhir">Pendidikan Terakhir</label>
|
||||
<input type="text" class="form-control" id="edit-petani-pendidikan-terakhir" name="pendidikan_terakhir"
|
||||
value="{{ old('pendidikan_terakhir', $petani->pendidikan_terakhir?->label()) }}" readonly/>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-status-pernikahan">Status Pernikahan<span class="text-danger">*</span></label>
|
||||
<input type="text" class="form-control" id="edit-petani-status-pernikahan" name="status_perkawinan"
|
||||
value="{{ old('status_perkawinan', $petani->status_perkawinan?->label()) }}" readonly/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-alamat">Alamat</label>
|
||||
<input type="text" class="form-control" id="edit-petani-alamat" name="alamat"
|
||||
placeholder="Cth: Alamat lengkap petani" value="{{ old('alamat', $petani->alamat) }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-provinsi">Provinsi</label>
|
||||
<input type="text" class="form-control" id="edit-petani-provinsi" name="provinsi"
|
||||
value="{{ old('provinsi', $petani->desaKelurahan?->kecamatan->kabupatenKota->provinsi->nama) }}" readonly/>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-kabupaten">Kabupaten/Kota</label>
|
||||
<input type="text" class="form-control" id="edit-petani-kabupaten" name="kabupaten"
|
||||
value="{{ old('kabupaten', $petani->desaKelurahan?->kecamatan->kabupatenKota->nama) }}" readonly/>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-kecamatan">Kecamatan</label>
|
||||
<input type="text" class="form-control" id="edit-petani-kecamatan" name="kecamatan"
|
||||
value="{{ old('kecamatan', $petani->desaKelurahan?->kecamatan->nama) }}" readonly/>
|
||||
</div>
|
||||
<div class="col-md-3 mb-4 form-control-validation">
|
||||
<label class="form-label" for="edit-petani-desa">Desa/Kelurahan</label>
|
||||
<input type="text" class="form-control" id="edit-petani-desa" name="desa"
|
||||
value="{{ old('desa', $petani->desaKelurahan->nama) }}" readonly/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 text-end">
|
||||
<a href="{{ route('petani.index') }}" class="btn btn-label-secondary me-2">Kembali</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
'use strict';
|
||||
$(document).ready(function () {
|
||||
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
+11
-5
@@ -240,7 +240,13 @@ Route::middleware('auth')
|
||||
|
||||
Route::resource('petani.skor', App\Http\Controllers\Web\Produktivitas\SkorPetaniController::class)->only(['index']);
|
||||
|
||||
|
||||
Route::resource('survey/kelompok-tani', App\Http\Controllers\Web\Produktivitas\SurveyKelompokTaniController::class)->except(['show'])->names('kelompok-tani')->parameters(['kelompok-tani' => 'kelompokTani']);
|
||||
Route::prefix('survey/kelompok-tani/{kelompokTani}')->name('kelompok-tani.')->group(function () {
|
||||
Route::resource('pengurus-anggota', App\Http\Controllers\Web\Produktivitas\PengurusKelompokTaniController::class)->only(['index', 'store', 'destroy'])->parameters(['pengurus-anggota' => 'pengurus']);
|
||||
Route::resource('aset-keuangan', App\Http\Controllers\Web\Produktivitas\AsetKelompokTaniController::class)->only(['index', 'store', 'destroy'])->parameters(['aset-keuangan' => 'aset']);
|
||||
Route::put('/aset-keuangan', [App\Http\Controllers\Web\Produktivitas\AsetKelompokTaniController::class, 'update'])->name('aset-keuangan.update');
|
||||
Route::resource('bantuan-penilaian', App\Http\Controllers\Web\Produktivitas\BantuanKelompokTaniController::class)->only(['index', 'store', 'destroy'])->parameters(['bantuan-penilaian' => 'bantuan']);
|
||||
});
|
||||
// BUMDES routes...
|
||||
Route::get('bumdes/{bumdes}/kelembagaan-aktor', [App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class, 'kelembagaanAktor'])->name('bumdes.kelembagaan-aktor.index');
|
||||
Route::resource('bumdes', App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class);
|
||||
@@ -249,9 +255,9 @@ Route::middleware('auth')
|
||||
|
||||
// --- KOPERASI GROUP ---
|
||||
Route::prefix('koperasi')->name('koperasi.')->group(function () {
|
||||
Route::resource('pengurus', App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class);
|
||||
Route::get('pengurus/{id}/survey', [App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class, 'survey'])->name('pengurus.survey');
|
||||
Route::post('pengurus/{id}/survey', [App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class, 'surveyStore'])->name('pengurus.survey.store');
|
||||
});
|
||||
Route::resource('pengurus', App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class);
|
||||
Route::get('pengurus/{id}/survey', [App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class, 'survey'])->name('pengurus.survey');
|
||||
Route::post('pengurus/{id}/survey', [App\Http\Controllers\Web\Koperasi\PengurusKoperasiController::class, 'surveyStore'])->name('pengurus.survey.store');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user