Compare commits
20
Commits
50c9adfdc7
...
program
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
909f03cb9a | ||
|
|
4475cd0098 | ||
|
|
67c111a2b3 | ||
|
|
3bcaa3ea50 | ||
|
|
bed9a6f620 | ||
|
|
712b10e405 | ||
|
|
6cfcf46ba6 | ||
|
|
b1b9828514 | ||
|
|
7af7e1bdaf | ||
|
|
bd05fc7f0f | ||
|
|
17b5687db8 | ||
|
|
e7f48b6500 | ||
|
|
a5884d0f8c | ||
|
|
9576c6295e | ||
|
|
079e300d5d | ||
|
|
2c94316439 | ||
|
|
690b53e5a2 | ||
|
|
5967e7d6f3 | ||
|
|
4c66d72dc5 | ||
|
|
e02a34a527 |
@@ -34,12 +34,42 @@ class SummaryController extends Controller
|
|||||||
$totalpetani = Profile::where('role', 'petani')->count();
|
$totalpetani = Profile::where('role', 'petani')->count();
|
||||||
$totallahan = Lahan::whereNotNull('path')->count();
|
$totallahan = Lahan::whereNotNull('path')->count();
|
||||||
|
|
||||||
$petaniList = Profile::where('role', 'petani')
|
$petaniList = Profile::select('id', 'nama', 'role', 'desa_kelurahan_id')
|
||||||
->with(['lahan.tanaman.komoditas', 'desaKelurahan'])
|
->where('role', 'petani')
|
||||||
|
->with([
|
||||||
|
'lahan:id,profile_id,luas_lahan',
|
||||||
|
'desaKelurahan:id,nama,kecamatan_id',
|
||||||
|
])
|
||||||
->paginate(20);
|
->paginate(20);
|
||||||
|
|
||||||
$allLahan = Lahan::whereNotNull('path')
|
$lahanSummaryByDesa = Lahan::whereNotNull('path')
|
||||||
->with(['profile', 'tanaman.komoditas', 'desaKelurahan.kecamatan.kabupatenKota.provinsi'])
|
->whereNotNull('desa_kelurahan_id')
|
||||||
|
->select('desa_kelurahan_id')
|
||||||
|
->selectRaw('COUNT(*) as total_lahan')
|
||||||
|
->selectRaw('COALESCE(SUM(luas_lahan), 0) as total_luas')
|
||||||
|
->groupBy('desa_kelurahan_id')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$desaList = DesaKelurahan::select('id', 'nama', 'path', 'kecamatan_id')
|
||||||
|
->whereIn('id', $lahanSummaryByDesa->pluck('desa_kelurahan_id')->filter()->unique()->values())
|
||||||
|
->with([
|
||||||
|
'kecamatan:id,nama,path,kabupaten_kota_id',
|
||||||
|
'kecamatan.kabupatenKota:id,nama,path,provinsi_id',
|
||||||
|
'kecamatan.kabupatenKota.provinsi:id,nama,path',
|
||||||
|
])
|
||||||
|
->get()
|
||||||
|
->keyBy('id');
|
||||||
|
|
||||||
|
$mapLahanLimit = min(max((int) $request->integer('map_lahan_limit', 500), 0), 2000);
|
||||||
|
$mapLahan = Lahan::whereNotNull('path')
|
||||||
|
->select('id', 'profile_id', 'desa_kelurahan_id', 'path', 'luas_lahan')
|
||||||
|
->with([
|
||||||
|
'profile:id,nama',
|
||||||
|
'tanaman:id,lahan_id,komoditas_id',
|
||||||
|
'tanaman.komoditas:id,nama',
|
||||||
|
])
|
||||||
|
->orderByDesc('updated_at')
|
||||||
|
->limit($mapLahanLimit)
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$geoProvinsi = [];
|
$geoProvinsi = [];
|
||||||
@@ -48,47 +78,51 @@ class SummaryController extends Controller
|
|||||||
$geoDesa = [];
|
$geoDesa = [];
|
||||||
$geoLahan = [];
|
$geoLahan = [];
|
||||||
|
|
||||||
foreach ($allLahan as $lahan) {
|
foreach ($lahanSummaryByDesa as $summary) {
|
||||||
$desa = $lahan->desaKelurahan;
|
$desa = $desaList->get($summary->desa_kelurahan_id);
|
||||||
$kec = $desa ? $desa->kecamatan : null;
|
$kec = $desa ? $desa->kecamatan : null;
|
||||||
$kab = $kec ? $kec->kabupatenKota : null;
|
$kab = $kec ? $kec->kabupatenKota : null;
|
||||||
$prov = $kab ? $kab->provinsi : null;
|
$prov = $kab ? $kab->provinsi : null;
|
||||||
|
$totalLahan = (int) $summary->total_lahan;
|
||||||
|
$totalLuas = (float) $summary->total_luas;
|
||||||
|
|
||||||
if ($prov && $prov->path) {
|
if ($prov && $prov->path) {
|
||||||
if (!isset($geoProvinsi[$prov->id])) {
|
if (!isset($geoProvinsi[$prov->id])) {
|
||||||
$geoProvinsi[$prov->id] = ['id' => $prov->id, 'nama' => $prov->nama, 'polygon' => $prov->path, 'total_lahan' => 0, 'total_luas' => 0];
|
$geoProvinsi[$prov->id] = ['id' => $prov->id, 'nama' => $prov->nama, 'polygon' => $prov->path, 'total_lahan' => 0, 'total_luas' => 0];
|
||||||
}
|
}
|
||||||
$geoProvinsi[$prov->id]['total_lahan']++;
|
$geoProvinsi[$prov->id]['total_lahan'] += $totalLahan;
|
||||||
$geoProvinsi[$prov->id]['total_luas'] += $lahan->luas_lahan;
|
$geoProvinsi[$prov->id]['total_luas'] += $totalLuas;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($kab && $kab->path) {
|
if ($kab && $kab->path) {
|
||||||
if (!isset($geoKabupaten[$kab->id])) {
|
if (!isset($geoKabupaten[$kab->id])) {
|
||||||
$geoKabupaten[$kab->id] = ['id' => $kab->id, 'parent_id' => $prov->id ?? null, 'nama' => $kab->nama, 'polygon' => $kab->path, 'total_lahan' => 0, 'total_luas' => 0];
|
$geoKabupaten[$kab->id] = ['id' => $kab->id, 'parent_id' => $prov->id ?? null, 'nama' => $kab->nama, 'polygon' => $kab->path, 'total_lahan' => 0, 'total_luas' => 0];
|
||||||
}
|
}
|
||||||
$geoKabupaten[$kab->id]['total_lahan']++;
|
$geoKabupaten[$kab->id]['total_lahan'] += $totalLahan;
|
||||||
$geoKabupaten[$kab->id]['total_luas'] += $lahan->luas_lahan;
|
$geoKabupaten[$kab->id]['total_luas'] += $totalLuas;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($kec && $kec->path) {
|
if ($kec && $kec->path) {
|
||||||
if (!isset($geoKecamatan[$kec->id])) {
|
if (!isset($geoKecamatan[$kec->id])) {
|
||||||
$geoKecamatan[$kec->id] = ['id' => $kec->id, 'parent_id' => $kab->id ?? null, 'nama' => $kec->nama, 'polygon' => $kec->path, 'total_lahan' => 0, 'total_luas' => 0];
|
$geoKecamatan[$kec->id] = ['id' => $kec->id, 'parent_id' => $kab->id ?? null, 'nama' => $kec->nama, 'polygon' => $kec->path, 'total_lahan' => 0, 'total_luas' => 0];
|
||||||
}
|
}
|
||||||
$geoKecamatan[$kec->id]['total_lahan']++;
|
$geoKecamatan[$kec->id]['total_lahan'] += $totalLahan;
|
||||||
$geoKecamatan[$kec->id]['total_luas'] += $lahan->luas_lahan;
|
$geoKecamatan[$kec->id]['total_luas'] += $totalLuas;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($desa && $desa->path) {
|
if ($desa && $desa->path) {
|
||||||
if (!isset($geoDesa[$desa->id])) {
|
if (!isset($geoDesa[$desa->id])) {
|
||||||
$geoDesa[$desa->id] = ['id' => $desa->id, 'parent_id' => $kec->id ?? null, 'nama' => $desa->nama, 'polygon' => $desa->path, 'total_lahan' => 0, 'total_luas' => 0];
|
$geoDesa[$desa->id] = ['id' => $desa->id, 'parent_id' => $kec->id ?? null, 'nama' => $desa->nama, 'polygon' => $desa->path, 'total_lahan' => 0, 'total_luas' => 0];
|
||||||
}
|
}
|
||||||
$geoDesa[$desa->id]['total_lahan']++;
|
$geoDesa[$desa->id]['total_lahan'] += $totalLahan;
|
||||||
$geoDesa[$desa->id]['total_luas'] += $lahan->luas_lahan;
|
$geoDesa[$desa->id]['total_luas'] += $totalLuas;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($mapLahan as $lahan) {
|
||||||
$geoLahan[] = [
|
$geoLahan[] = [
|
||||||
'id' => $lahan->id,
|
'id' => $lahan->id,
|
||||||
'parent_id' => $desa->id ?? null,
|
'parent_id' => $lahan->desa_kelurahan_id,
|
||||||
'polygon' => $lahan->path,
|
'polygon' => $lahan->path,
|
||||||
'nama_petani' => $lahan->profile->nama ?? 'N/A',
|
'nama_petani' => $lahan->profile->nama ?? 'N/A',
|
||||||
'luas' => $lahan->luas_lahan,
|
'luas' => $lahan->luas_lahan,
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ use App\Models\User;
|
|||||||
use App\Models\Pertanian\Petani;
|
use App\Models\Pertanian\Petani;
|
||||||
use App\Models\Pertanian\Komoditas;
|
use App\Models\Pertanian\Komoditas;
|
||||||
use App\Models\Pertanian\Lahan;
|
use App\Models\Pertanian\Lahan;
|
||||||
|
use App\Models\Pertanian\Tanaman;
|
||||||
use App\Models\Pertanian\SurveyPelatihan;
|
use App\Models\Pertanian\SurveyPelatihan;
|
||||||
use App\Models\Pertanian\SurveySertifikasi;
|
use App\Models\Pertanian\SurveySertifikasi;
|
||||||
|
|
||||||
@@ -143,24 +144,29 @@ class SurveyPetaniController extends Controller
|
|||||||
|
|
||||||
// Ringkasan lahan
|
// Ringkasan lahan
|
||||||
|
|
||||||
$totalLuasLahan = (float) Lahan::query()
|
$totalLuasLahan = ((float) Lahan::query()
|
||||||
->sum('luas_lahan');
|
->sum('luas_lahan')) / 10000;
|
||||||
|
|
||||||
$totalJumlahTanaman = (int) Lahan::query()
|
|
||||||
->sum('jumlah_tanaman');
|
|
||||||
|
|
||||||
// Jumlah tanaman berdasarkan komoditas petani
|
// Jumlah tanaman berdasarkan komoditas petani
|
||||||
|
|
||||||
$tanamanPerKomoditasCollection = DB::table("{$lahanTable} as l")
|
$tanamanTable = (new Tanaman())->getTable();
|
||||||
|
|
||||||
|
$tanamanPerKomoditasCollection = DB::table("{$tanamanTable} as t")
|
||||||
|
->join("{$lahanTable} as l", 'l.id', '=', 't.lahan_id')
|
||||||
->join("{$petaniTable} as p", 'p.id', '=', 'l.petani_id')
|
->join("{$petaniTable} as p", 'p.id', '=', 'l.petani_id')
|
||||||
->leftJoin("{$komoditasTable} as k", 'k.id', '=', 'p.komoditas_id')
|
->leftJoin("{$komoditasTable} as k", 'k.id', '=', 't.komoditas_id')
|
||||||
->selectRaw("COALESCE(k.nama, 'Belum ditentukan') as label")
|
->selectRaw("COALESCE(k.nama, 'Belum ditentukan') as label")
|
||||||
->selectRaw('COALESCE(SUM(l.jumlah_tanaman), 0) as total')
|
->selectRaw('COUNT(t.id) as total')
|
||||||
->where('k.is_utama', true)
|
->where('k.is_utama', true)
|
||||||
|
->whereNull('t.deleted_at')
|
||||||
|
->whereNull('l.deleted_at')
|
||||||
|
->whereNull('p.deleted_at')
|
||||||
->groupBy('k.id', 'k.nama')
|
->groupBy('k.id', 'k.nama')
|
||||||
->orderByDesc('total')
|
->orderByDesc('total')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
|
$totalJumlahTanaman = (int) $tanamanPerKomoditasCollection->sum('total');
|
||||||
|
|
||||||
$tanamanPerKomoditas = $tanamanPerKomoditasCollection
|
$tanamanPerKomoditas = $tanamanPerKomoditasCollection
|
||||||
->map(function ($item, $index) use ($colors, $totalJumlahTanaman) {
|
->map(function ($item, $index) use ($colors, $totalJumlahTanaman) {
|
||||||
$color = $colors[$index % count($colors)];
|
$color = $colors[$index % count($colors)];
|
||||||
|
|||||||
@@ -25,9 +25,25 @@ class AksesPasarController extends Controller
|
|||||||
|
|
||||||
$aksesPasar = AksesPasar::where('petani_id', $petaniId)->first();
|
$aksesPasar = AksesPasar::where('petani_id', $petaniId)->first();
|
||||||
$hargaJualPanen = HargaJualPanen::where('petani_id', $petaniId)->get();
|
$hargaJualPanen = HargaJualPanen::where('petani_id', $petaniId)->get();
|
||||||
|
$hargaJualRows = collect([
|
||||||
|
'Buah segar hasil petik',
|
||||||
|
'Biji basah',
|
||||||
|
'Biji kering/Biji Kupas',
|
||||||
|
'Terfermentasi (Rp/kg)',
|
||||||
|
])->map(function (string $bentuk, int $index) use ($hargaJualPanen) {
|
||||||
|
$existingData = $hargaJualPanen->firstWhere('bentuk_produk', $bentuk);
|
||||||
|
|
||||||
|
return [
|
||||||
|
'index' => $index,
|
||||||
|
'bentuk' => $bentuk,
|
||||||
|
'harga_panen_terakhir' => $this->currencyForDisplay($existingData?->harga_panen_terakhir),
|
||||||
|
'harga_tahun_lalu' => $this->currencyForDisplay($existingData?->harga_tahun_lalu),
|
||||||
|
'harga_dua_tahun_lalu' => $this->currencyForDisplay($existingData?->harga_dua_tahun_lalu),
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
return view('produktivitas.petani.akses-pasar.index', array_merge(
|
return view('produktivitas.petani.akses-pasar.index', array_merge(
|
||||||
compact('petani', 'aksesPasar', 'hargaJualPanen'),
|
compact('petani', 'aksesPasar', 'hargaJualPanen', 'hargaJualRows'),
|
||||||
$this->aksesPasarOptions()
|
$this->aksesPasarOptions()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -251,4 +267,11 @@ class AksesPasarController extends Controller
|
|||||||
$digits = preg_replace('/\D/', '', (string) $value);
|
$digits = preg_replace('/\D/', '', (string) $value);
|
||||||
return $digits === '' ? null : $digits;
|
return $digits === '' ? null : $digits;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private function currencyForDisplay(mixed $value): string
|
||||||
|
{
|
||||||
|
$digits = $this->currencyDigits($value);
|
||||||
|
|
||||||
|
return is_null($digits) ? '' : number_format((int) $digits, 0, ',', '.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -77,10 +77,11 @@ class PendidikanPelatihanController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return back()->with('success', 'Riwayat pelatihan berhasil disimpan.');
|
return $this->redirectBackToFragment($request, 'section-sertifikasi')
|
||||||
|
->with('success', 'Riwayat pelatihan berhasil disimpan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroyPelatihan(Petani $petani, SurveyPelatihan $surveyPelatihan)
|
public function destroyPelatihan(Request $request, Petani $petani, SurveyPelatihan $surveyPelatihan)
|
||||||
{
|
{
|
||||||
$this->authorizeAccess();
|
$this->authorizeAccess();
|
||||||
|
|
||||||
@@ -92,7 +93,8 @@ class PendidikanPelatihanController extends Controller
|
|||||||
|
|
||||||
$surveyPelatihan->delete();
|
$surveyPelatihan->delete();
|
||||||
|
|
||||||
return back()->with('success', 'Riwayat pelatihan berhasil dihapus.');
|
return $this->redirectBackToFragment($request, 'section-pelatihan')
|
||||||
|
->with('success', 'Riwayat pelatihan berhasil dihapus.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function storeSertifikasi(Request $request, Petani $petani)
|
public function storeSertifikasi(Request $request, Petani $petani)
|
||||||
@@ -155,10 +157,11 @@ class PendidikanPelatihanController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return back()->with('success', 'Sertifikasi berhasil disimpan.');
|
return $this->redirectBackToFragment($request, 'section-sertifikasi')
|
||||||
|
->with('success', 'Sertifikasi berhasil disimpan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroySertifikasi(Petani $petani, SurveySertifikasi $surveySertifikasi)
|
public function destroySertifikasi(Request $request, Petani $petani, SurveySertifikasi $surveySertifikasi)
|
||||||
{
|
{
|
||||||
$this->authorizeAccess();
|
$this->authorizeAccess();
|
||||||
|
|
||||||
@@ -170,6 +173,18 @@ class PendidikanPelatihanController extends Controller
|
|||||||
|
|
||||||
$surveySertifikasi->delete();
|
$surveySertifikasi->delete();
|
||||||
|
|
||||||
return back()->with('success', 'Sertifikasi berhasil dihapus.');
|
return $this->redirectBackToFragment($request, 'section-sertifikasi')
|
||||||
|
->with('success', 'Sertifikasi berhasil dihapus.');
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private function redirectBackToFragment(Request $request, string $defaultFragment)
|
||||||
|
{
|
||||||
|
$fragment = $request->input('redirect_fragment', $defaultFragment);
|
||||||
|
|
||||||
|
if (!is_string($fragment) || !preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) {
|
||||||
|
$fragment = $defaultFragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to(Str::before(url()->previous(), '#') . '#' . $fragment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -34,9 +34,16 @@ class PetaniController extends Controller
|
|||||||
abort(403);
|
abort(403);
|
||||||
}
|
}
|
||||||
|
|
||||||
$provinsi = Provinsi::orderBy('kode', 'asc')->get();
|
$provinsi = Provinsi::select('id', 'kode', 'nama')->orderBy('kode', 'asc')->get();
|
||||||
|
|
||||||
$query = Petani::with('desakelurahan')
|
$query = Petani::with([
|
||||||
|
'desaKelurahan:id,nama,kecamatan_id',
|
||||||
|
'desaKelurahan.kecamatan:id,nama,kabupaten_kota_id',
|
||||||
|
'desaKelurahan.kecamatan.kabupatenKota:id,nama,provinsi_id',
|
||||||
|
'desaKelurahan.kecamatan.kabupatenKota.provinsi:id,nama',
|
||||||
|
'komoditas:id,nama',
|
||||||
|
'skor:id,petani_id,skor_kesiapan_adopsi',
|
||||||
|
])
|
||||||
->orderBy('created_at', 'desc');
|
->orderBy('created_at', 'desc');
|
||||||
|
|
||||||
if ($request->search) {
|
if ($request->search) {
|
||||||
@@ -50,15 +57,15 @@ class PetaniController extends Controller
|
|||||||
$query->where('created_by', auth()->user()->id);
|
$query->where('created_by', auth()->user()->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$summaryPetaniIds = (clone $query)->pluck('id');
|
||||||
$petani = $query->paginate($request->per_page ?? 10);
|
$petani = $query->paginate($request->per_page ?? 10);
|
||||||
|
|
||||||
$komoditas = Komoditas::where('is_utama', true)->get();
|
$komoditas = Komoditas::select('id', 'nama')->where('is_utama', true)->get();
|
||||||
$lahan = Lahan::whereIn('petani_id', $petani->pluck('id'))
|
$lahanQuery = Lahan::whereIn('petani_id', $summaryPetaniIds)
|
||||||
->whereIn('komoditas_id', $komoditas->pluck('id'))
|
->whereIn('komoditas_id', $komoditas->pluck('id'));
|
||||||
->get();
|
$lahanIds = (clone $lahanQuery)->pluck('id');
|
||||||
$tanaman = Tanaman::whereIn('lahan_id', $lahan->pluck('id'))
|
$totalLuasLahan = (clone $lahanQuery)->sum('luas_lahan');
|
||||||
->whereIn('lahan_id', $lahan->pluck('id'))
|
$totalTanaman = Tanaman::whereIn('lahan_id', $lahanIds)->count();
|
||||||
->get();
|
|
||||||
|
|
||||||
$case = "
|
$case = "
|
||||||
CASE
|
CASE
|
||||||
@@ -70,11 +77,11 @@ class PetaniController extends Controller
|
|||||||
END
|
END
|
||||||
";
|
";
|
||||||
$skor = SkorPetani::selectRaw("$case AS segmen, COUNT(*) AS total")
|
$skor = SkorPetani::selectRaw("$case AS segmen, COUNT(*) AS total")
|
||||||
->whereIn('petani_id', $petani->pluck('id'))
|
->whereIn('petani_id', $summaryPetaniIds)
|
||||||
->groupByRaw($case)
|
->groupByRaw($case)
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
return view('produktivitas.petani.index', compact('petani', 'provinsi', 'lahan', 'komoditas', 'tanaman', 'skor'));
|
return view('produktivitas.petani.index', compact('petani', 'provinsi', 'komoditas', 'skor', 'totalLuasLahan', 'totalTanaman'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create()
|
public function create()
|
||||||
@@ -178,7 +185,7 @@ class PetaniController extends Controller
|
|||||||
'created_by' => auth()->id(),
|
'created_by' => auth()->id(),
|
||||||
'updated_by' => auth()->id()]);
|
'updated_by' => auth()->id()]);
|
||||||
|
|
||||||
return redirect()->route('petani.index')->with('success', 'Data petani berhasil ditambahkan.');
|
return redirect()->route('petani.edit', $petani->id)->with('success', 'Data petani berhasil ditambahkan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function show(string $id)
|
public function show(string $id)
|
||||||
@@ -253,7 +260,7 @@ class PetaniController extends Controller
|
|||||||
$petani->update([...$validatedData,
|
$petani->update([...$validatedData,
|
||||||
'updated_by' => auth()->id()]);
|
'updated_by' => auth()->id()]);
|
||||||
|
|
||||||
return redirect()->route('petani.index')->with('success', 'Data petani berhasil diupdate.');
|
return redirect()->route('petani.edit', $petani->id)->with('success', 'Data petani berhasil diupdate.');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\Rules\Enum;
|
use Illuminate\Validation\Rules\Enum;
|
||||||
@@ -17,6 +18,7 @@ use App\Models\Pertanian\Lahan;
|
|||||||
use App\Models\Wilayah\DesaKelurahan;
|
use App\Models\Wilayah\DesaKelurahan;
|
||||||
use App\Models\Wilayah\Provinsi;
|
use App\Models\Wilayah\Provinsi;
|
||||||
use App\Models\Pertanian\Komoditas;
|
use App\Models\Pertanian\Komoditas;
|
||||||
|
use App\Models\Pertanian\PraktikBudidaya;
|
||||||
use App\Models\Pertanian\Tanaman;
|
use App\Models\Pertanian\Tanaman;
|
||||||
use App\Models\Master\JenisTanaman;
|
use App\Models\Master\JenisTanaman;
|
||||||
|
|
||||||
@@ -64,8 +66,46 @@ class PetaniLahanController extends Controller
|
|||||||
|
|
||||||
$komoditas = Komoditas::all();
|
$komoditas = Komoditas::all();
|
||||||
$tanamanPenaung = JenisTanaman::all();
|
$tanamanPenaung = JenisTanaman::all();
|
||||||
|
$autoPestDiseaseData = $this->autoPestDiseaseData($petaniId);
|
||||||
|
$jenisHamaOtomatis = $autoPestDiseaseData['jenis_hama'];
|
||||||
|
$jenisPenyakitOtomatis = $autoPestDiseaseData['jenis_penyakit'];
|
||||||
|
|
||||||
return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas', 'tanamanPenaung'));
|
return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas', 'tanamanPenaung', 'jenisHamaOtomatis', 'jenisPenyakitOtomatis'));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function autoPestDiseaseData(string|int $petaniId): array
|
||||||
|
{
|
||||||
|
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->latest()->first();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'jenis_hama' => $this->normalizeArrayValue($praktikBudidaya?->jenis_hama),
|
||||||
|
'jenis_penyakit' => $this->normalizeArrayValue($praktikBudidaya?->jenis_penyakit),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function normalizeArrayValue(mixed $value): array
|
||||||
|
{
|
||||||
|
if (is_array($value)) {
|
||||||
|
return array_values(array_filter($value, fn ($item) => filled($item)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_string($value) && $value !== '') {
|
||||||
|
$decoded = json_decode($value, true);
|
||||||
|
|
||||||
|
if (is_array($decoded)) {
|
||||||
|
return array_values(array_filter($decoded, fn ($item) => filled($item)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$value];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function hasPestDiseaseColumns(string $table): bool
|
||||||
|
{
|
||||||
|
return Schema::hasColumn($table, 'jenis_hama')
|
||||||
|
&& Schema::hasColumn($table, 'jenis_penyakit');
|
||||||
}
|
}
|
||||||
|
|
||||||
private function validateLahan(Request $request)
|
private function validateLahan(Request $request)
|
||||||
@@ -167,6 +207,14 @@ class PetaniLahanController extends Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$validated = $this->validateLahan($request);
|
$validated = $this->validateLahan($request);
|
||||||
|
$autoPestDiseaseData = $this->autoPestDiseaseData($petaniId);
|
||||||
|
$lahanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Lahan)->getTable());
|
||||||
|
$tanamanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Tanaman)->getTable());
|
||||||
|
|
||||||
|
if ($lahanHasPestDiseaseColumns) {
|
||||||
|
$validated = array_merge($validated, $autoPestDiseaseData);
|
||||||
|
}
|
||||||
|
|
||||||
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
||||||
$lahanCount = Lahan::where('petani_id', $petaniId)
|
$lahanCount = Lahan::where('petani_id', $petaniId)
|
||||||
->count();
|
->count();
|
||||||
@@ -196,8 +244,8 @@ class PetaniLahanController extends Controller
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ($lahan && $lahan->jumlah_tanaman > 0) {
|
if ($lahan && $lahan->jumlah_tanaman > 0) {
|
||||||
$data = collect(range(1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) {
|
$data = collect(range(1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid, $autoPestDiseaseData, $tanamanHasPestDiseaseColumns) {
|
||||||
return [
|
$row = [
|
||||||
'lahan_id' => $lahan->id,
|
'lahan_id' => $lahan->id,
|
||||||
'uid' => 'TNM-' . $lahanUid . '-' . strtoupper(Str::random(10)),
|
'uid' => 'TNM-' . $lahanUid . '-' . strtoupper(Str::random(10)),
|
||||||
'komoditas_id' => $lahan->komoditas_id,
|
'komoditas_id' => $lahan->komoditas_id,
|
||||||
@@ -215,6 +263,13 @@ class PetaniLahanController extends Controller
|
|||||||
'created_at' => now(),
|
'created_at' => now(),
|
||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if ($tanamanHasPestDiseaseColumns) {
|
||||||
|
$row['jenis_hama'] = json_encode($autoPestDiseaseData['jenis_hama'] ?? []);
|
||||||
|
$row['jenis_penyakit'] = json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $row;
|
||||||
});
|
});
|
||||||
|
|
||||||
$data->chunk(500)->each(function ($chunk) {
|
$data->chunk(500)->each(function ($chunk) {
|
||||||
@@ -224,15 +279,15 @@ class PetaniLahanController extends Controller
|
|||||||
if ($request->ajax()) {
|
if ($request->ajax()) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'redirect' => route('petani.lahan-tanaman.index', $petaniId),
|
'redirect' => route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id]),
|
||||||
'message' => 'Lahan berhasil ditambahkan.'
|
'message' => 'Lahan berhasil ditambahkan.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil ditambahkan.');
|
return redirect()->route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id])->with('success', 'Lahan berhasil ditambahkan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil ditambahkan.');
|
return redirect()->route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id])->with('success', 'Lahan berhasil ditambahkan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function show(string $petaniId, string $id)
|
public function show(string $petaniId, string $id)
|
||||||
@@ -269,10 +324,13 @@ class PetaniLahanController extends Controller
|
|||||||
|
|
||||||
$komoditas = Komoditas::all();
|
$komoditas = Komoditas::all();
|
||||||
$tanamanPenaung = JenisTanaman::all();
|
$tanamanPenaung = JenisTanaman::all();
|
||||||
|
$autoPestDiseaseData = $this->autoPestDiseaseData($petaniId);
|
||||||
|
$jenisHamaOtomatis = $autoPestDiseaseData['jenis_hama'];
|
||||||
|
$jenisPenyakitOtomatis = $autoPestDiseaseData['jenis_penyakit'];
|
||||||
|
|
||||||
$provinsi = Provinsi::orderBy('kode', 'asc')->get();
|
$provinsi = Provinsi::orderBy('kode', 'asc')->get();
|
||||||
|
|
||||||
return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi', 'tanamanPenaung'));
|
return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi', 'tanamanPenaung', 'jenisHamaOtomatis', 'jenisPenyakitOtomatis'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update(Request $request, string $petaniId, string $id)
|
public function update(Request $request, string $petaniId, string $id)
|
||||||
@@ -290,6 +348,14 @@ class PetaniLahanController extends Controller
|
|||||||
->toArray()
|
->toArray()
|
||||||
]);
|
]);
|
||||||
$validated = $this->validateLahan($request);
|
$validated = $this->validateLahan($request);
|
||||||
|
$autoPestDiseaseData = $this->autoPestDiseaseData($petaniId);
|
||||||
|
$lahanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Lahan)->getTable());
|
||||||
|
$tanamanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Tanaman)->getTable());
|
||||||
|
|
||||||
|
if ($lahanHasPestDiseaseColumns) {
|
||||||
|
$validated = array_merge($validated, $autoPestDiseaseData);
|
||||||
|
}
|
||||||
|
|
||||||
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
||||||
$tanamanCount = Tanaman::where('lahan_id', $lahan->id)->count();
|
$tanamanCount = Tanaman::where('lahan_id', $lahan->id)->count();
|
||||||
$lahanCount = Lahan::where('petani_id', $petaniId)->count();
|
$lahanCount = Lahan::where('petani_id', $petaniId)->count();
|
||||||
@@ -342,8 +408,8 @@ class PetaniLahanController extends Controller
|
|||||||
$this->syncTanamanPenaung($request);
|
$this->syncTanamanPenaung($request);
|
||||||
|
|
||||||
if ($lahan && $lahan->jumlah_tanaman > $tanamanCount) {
|
if ($lahan && $lahan->jumlah_tanaman > $tanamanCount) {
|
||||||
$data = collect(range($tanamanCount + 1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) {
|
$data = collect(range($tanamanCount + 1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid, $autoPestDiseaseData, $tanamanHasPestDiseaseColumns) {
|
||||||
return [
|
$row = [
|
||||||
'lahan_id' => $lahan->id,
|
'lahan_id' => $lahan->id,
|
||||||
'komoditas_id' => $lahan->komoditas_id,
|
'komoditas_id' => $lahan->komoditas_id,
|
||||||
'jenis_komoditas_id' => $lahan->jenis_komoditas_id,
|
'jenis_komoditas_id' => $lahan->jenis_komoditas_id,
|
||||||
@@ -361,6 +427,13 @@ class PetaniLahanController extends Controller
|
|||||||
'created_at' => now(),
|
'created_at' => now(),
|
||||||
'updated_at' => now(),
|
'updated_at' => now(),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
if ($tanamanHasPestDiseaseColumns) {
|
||||||
|
$row['jenis_hama'] = json_encode($autoPestDiseaseData['jenis_hama'] ?? []);
|
||||||
|
$row['jenis_penyakit'] = json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $row;
|
||||||
});
|
});
|
||||||
|
|
||||||
$data->chunk(500)->each(function ($chunk) {
|
$data->chunk(500)->each(function ($chunk) {
|
||||||
@@ -368,20 +441,42 @@ class PetaniLahanController extends Controller
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($tanamanHasPestDiseaseColumns) {
|
||||||
|
$lahan->tanaman()->update([
|
||||||
|
'jenis_hama' => json_encode($autoPestDiseaseData['jenis_hama'] ?? []),
|
||||||
|
'jenis_penyakit' => json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []),
|
||||||
|
'updated_by' => auth()->id(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
if ($request->ajax()) {
|
if ($request->ajax()) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'redirect' => route('petani.lahan-tanaman.index', $petaniId),
|
'redirect' => route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id]),
|
||||||
'message' => 'Lahan berhasil diupdate.'
|
'message' => 'Lahan berhasil diupdate.'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil diperbarui.');
|
return redirect()->route('petani.lahan-tanaman.edit', [$petaniId, $lahan->id])->with('success', 'Lahan berhasil diperbarui.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy(string $id)
|
public function destroy(string $petaniId, string $id)
|
||||||
{
|
{
|
||||||
//
|
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||||
|
abort(403);
|
||||||
|
}
|
||||||
|
|
||||||
|
$lahan = Lahan::findOrFail($id);
|
||||||
|
$lahan->tanaman()->update([
|
||||||
|
'deleted_by' => auth()->id()
|
||||||
|
]);
|
||||||
|
$lahan->tanaman()->delete();
|
||||||
|
$lahan->update([
|
||||||
|
'deleted_by' => auth()->id()
|
||||||
|
]);
|
||||||
|
$lahan->delete();
|
||||||
|
|
||||||
|
return redirect()->route('petani.lahan-tanaman.index', $petaniId)->with('success', 'Lahan berhasil dihapus.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function summary(string $petaniId)
|
public function summary(string $petaniId)
|
||||||
|
|||||||
@@ -178,8 +178,14 @@ class PraktikBudidayaController extends Controller
|
|||||||
|
|
||||||
$teknik_pemangkasan = array_values($teknik_pemangkasan);
|
$teknik_pemangkasan = array_values($teknik_pemangkasan);
|
||||||
|
|
||||||
|
if ((int) ($validatedData['frekuensi_pemangkasan_komoditas_utama'] ?? 0) === FrekuensiPemangkasanUtama::TIDAK_PERNAH->value) {
|
||||||
|
$teknik_pemangkasan = [];
|
||||||
|
}
|
||||||
|
|
||||||
$petani = Petani::findOrFail($petaniId);
|
$petani = Petani::findOrFail($petaniId);
|
||||||
|
|
||||||
|
$pemupukanTidakPernah = (int) ($validatedData['pemberian_pupuk'] ?? 0) === PemberianPupuk::TIDAK_PERNAH->value;
|
||||||
|
|
||||||
$praktikBudidaya = $petani->praktikBudidaya()->create([
|
$praktikBudidaya = $petani->praktikBudidaya()->create([
|
||||||
'petani_id' => $petani->id,
|
'petani_id' => $petani->id,
|
||||||
'uid' => 'PB-' . strtoupper(Str::random(10)),
|
'uid' => 'PB-' . strtoupper(Str::random(10)),
|
||||||
@@ -193,12 +199,12 @@ class PraktikBudidayaController extends Controller
|
|||||||
'deskripsi_penyerbukan_manual' => $validatedData['alasan_tidak_penyerbukan'] ?? null,
|
'deskripsi_penyerbukan_manual' => $validatedData['alasan_tidak_penyerbukan'] ?? null,
|
||||||
'tingkat_keberhasilan_penyerbukan' => $validatedData['tingkat_keberhasilan_penyerbukan'] ?? null,
|
'tingkat_keberhasilan_penyerbukan' => $validatedData['tingkat_keberhasilan_penyerbukan'] ?? null,
|
||||||
'pemberian_pupuk' => $validatedData['pemberian_pupuk'] ?? null,
|
'pemberian_pupuk' => $validatedData['pemberian_pupuk'] ?? null,
|
||||||
'jenis_pupuk' => $validatedData['jenis_pupuk'] ?? null,
|
'jenis_pupuk' => $pemupukanTidakPernah ? null : ($validatedData['jenis_pupuk'] ?? null),
|
||||||
'frekuensi_pemberian_pupuk' => ($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null),
|
'frekuensi_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null)),
|
||||||
'estimasi_dosis_pupuk_organik' => $validatedData['estimasi_dosis_pupuk_organik'] ?? null,
|
'estimasi_dosis_pupuk_organik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_organik'] ?? null),
|
||||||
'estimasi_dosis_pupuk_anorganik' => $validatedData['estimasi_dosis_pupuk_anorganik'] ?? null,
|
'estimasi_dosis_pupuk_anorganik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_anorganik'] ?? null),
|
||||||
'waktu_pemberian_pupuk' => ($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null),
|
'waktu_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null)),
|
||||||
'cara_pemberian_pupuk' => ($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null),
|
'cara_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null)),
|
||||||
'created_by' => auth()->id(),
|
'created_by' => auth()->id(),
|
||||||
'updated_by' => auth()->id(),
|
'updated_by' => auth()->id(),
|
||||||
], [
|
], [
|
||||||
@@ -554,6 +560,12 @@ class PraktikBudidayaController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$teknikPemangkasan = array_values($teknik_pemangkasan);
|
$teknikPemangkasan = array_values($teknik_pemangkasan);
|
||||||
|
|
||||||
|
if ((int) ($validatedData['frekuensi_pemangkasan_komoditas_utama'] ?? 0) === FrekuensiPemangkasanUtama::TIDAK_PERNAH->value) {
|
||||||
|
$teknikPemangkasan = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$pemupukanTidakPernah = (int) ($validatedData['pemberian_pupuk'] ?? 0) === PemberianPupuk::TIDAK_PERNAH->value;
|
||||||
|
|
||||||
$dataPraktikBudidaya = [
|
$dataPraktikBudidaya = [
|
||||||
'tenaga_kerja' => $validatedData['tenaga_kerja'],
|
'tenaga_kerja' => $validatedData['tenaga_kerja'],
|
||||||
@@ -566,12 +578,12 @@ class PraktikBudidayaController extends Controller
|
|||||||
'deskripsi_penyerbukan_manual' => $validatedData['alasan_tidak_penyerbukan'] ?? null,
|
'deskripsi_penyerbukan_manual' => $validatedData['alasan_tidak_penyerbukan'] ?? null,
|
||||||
'tingkat_keberhasilan_penyerbukan' => $validatedData['tingkat_keberhasilan_penyerbukan'] ?? null,
|
'tingkat_keberhasilan_penyerbukan' => $validatedData['tingkat_keberhasilan_penyerbukan'] ?? null,
|
||||||
'pemberian_pupuk' => $validatedData['pemberian_pupuk'] ?? null,
|
'pemberian_pupuk' => $validatedData['pemberian_pupuk'] ?? null,
|
||||||
'jenis_pupuk' => $validatedData['jenis_pupuk'] ?? null,
|
'jenis_pupuk' => $pemupukanTidakPernah ? null : ($validatedData['jenis_pupuk'] ?? null),
|
||||||
'frekuensi_pemberian_pupuk' => ($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null),
|
'frekuensi_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null)),
|
||||||
'estimasi_dosis_pupuk_organik' => $validatedData['estimasi_dosis_pupuk_organik'] ?? null,
|
'estimasi_dosis_pupuk_organik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_organik'] ?? null),
|
||||||
'estimasi_dosis_pupuk_anorganik' => $validatedData['estimasi_dosis_pupuk_anorganik'] ?? null,
|
'estimasi_dosis_pupuk_anorganik' => $pemupukanTidakPernah ? null : ($validatedData['estimasi_dosis_pupuk_anorganik'] ?? null),
|
||||||
'waktu_pemberian_pupuk' => ($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null),
|
'waktu_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null)),
|
||||||
'cara_pemberian_pupuk' => ($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null),
|
'cara_pemberian_pupuk' => $pemupukanTidakPernah ? null : (($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null)),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -675,6 +687,17 @@ class PraktikBudidayaController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return back()->with('success', 'Data berhasil diperbarui.');
|
return $this->redirectBackToFragment($request)->with('success', 'Data berhasil diperbarui.');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function redirectBackToFragment(Request $request)
|
||||||
|
{
|
||||||
|
$fragment = $request->input('redirect_fragment');
|
||||||
|
|
||||||
|
if (!is_string($fragment) || !preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) {
|
||||||
|
return back();
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to(Str::before(url()->previous(), '#') . '#' . $fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,8 +154,7 @@ class SosialEkonomiController extends Controller
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!$request->expectsJson()) {
|
if (!$request->expectsJson()) {
|
||||||
return redirect()
|
return $this->redirectToEditSection($sosialEkonomi, $request)
|
||||||
->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id])
|
|
||||||
->with('success', 'Data sosial ekonomi berhasil disimpan.');
|
->with('success', 'Data sosial ekonomi berhasil disimpan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,8 +205,7 @@ class SosialEkonomiController extends Controller
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!$request->expectsJson()) {
|
if (!$request->expectsJson()) {
|
||||||
return redirect()
|
return $this->redirectToEditSection($sosialEkonomi, $request)
|
||||||
->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id])
|
|
||||||
->with('success', 'Data sosial ekonomi berhasil diperbarui.');
|
->with('success', 'Data sosial ekonomi berhasil diperbarui.');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,6 +216,18 @@ class SosialEkonomiController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function redirectToEditSection(SosialEkonomi $sosialEkonomi, Request $request): RedirectResponse
|
||||||
|
{
|
||||||
|
$url = route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id]);
|
||||||
|
$fragment = $request->input('redirect_fragment');
|
||||||
|
|
||||||
|
if (is_string($fragment) && preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) {
|
||||||
|
$url .= '#' . $fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to($url);
|
||||||
|
}
|
||||||
|
|
||||||
public function destroy(string $id): JsonResponse
|
public function destroy(string $id): JsonResponse
|
||||||
{
|
{
|
||||||
$sosialEkonomi = SosialEkonomi::findOrFail($id);
|
$sosialEkonomi = SosialEkonomi::findOrFail($id);
|
||||||
@@ -589,6 +599,14 @@ class SosialEkonomiController extends Controller
|
|||||||
|
|
||||||
$payload = $this->normalizeSkorPayload($payload);
|
$payload = $this->normalizeSkorPayload($payload);
|
||||||
|
|
||||||
|
if (array_key_exists('ada_sengketa', $payload) && !filter_var($payload['ada_sengketa'], FILTER_VALIDATE_BOOLEAN)) {
|
||||||
|
$payload['keterangan_sengketa'] = null;
|
||||||
|
$payload['pihak_membantu_konflik'] = null;
|
||||||
|
$payload['pihak_membantu_konflik_nama'] = null;
|
||||||
|
$payload['tahun_bantuan_konflik'] = null;
|
||||||
|
$payload['status_konflik'] = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) {
|
if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) {
|
||||||
$payload['pihak_membantu_konflik_nama'] = null;
|
$payload['pihak_membantu_konflik_nama'] = null;
|
||||||
$payload['tahun_bantuan_konflik'] = null;
|
$payload['tahun_bantuan_konflik'] = null;
|
||||||
|
|||||||
@@ -3,26 +3,43 @@
|
|||||||
namespace App\Http\Controllers\Web\Produktivitas;
|
namespace App\Http\Controllers\Web\Produktivitas;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Str;
|
|
||||||
|
|
||||||
use App\Models\Pertanian\Petani;
|
use App\Models\Pertanian\Petani;
|
||||||
use App\Models\Pertanian\SurveyProduktivitas;
|
use App\Models\Pertanian\SurveyProduktivitas;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
class SurveyProduktivitasController extends Controller
|
class SurveyProduktivitasController extends Controller
|
||||||
{
|
{
|
||||||
public function store($petaniId, Request $request)
|
public function store($petaniId, Request $request)
|
||||||
{
|
{
|
||||||
$petani = Petani::findOrFail($petaniId);
|
$petani = Petani::findOrFail($petaniId);
|
||||||
$validated = $request->validate([
|
|
||||||
'produktivitas_komoditas' => ['required', 'array'],
|
$validator = Validator::make($request->all(), [
|
||||||
'produktivitas_komoditas.*.komoditas_id' => ['nullable', 'exists:master_komoditas,id'],
|
'produktivitas_komoditas' => ['required', 'array', 'min:1'],
|
||||||
'produktivitas_komoditas.*.hasil_panen_3_musim' => ['nullable', 'numeric'],
|
'produktivitas_komoditas.*.komoditas_id' => ['required', 'exists:master_komoditas,id'],
|
||||||
'produktivitas_komoditas.*.satuan' => ['nullable', 'string'],
|
'produktivitas_komoditas.*.hasil_panen_3_musim' => ['required', 'numeric', 'min:0'],
|
||||||
|
'produktivitas_komoditas.*.satuan' => ['required', 'in:ha_tahun,pohon_tahun'],
|
||||||
|
], [
|
||||||
|
'produktivitas_komoditas.required' => 'Minimal satu data produktivitas harus diisi.',
|
||||||
|
'produktivitas_komoditas.*.komoditas_id.required' => 'Komoditas wajib dipilih.',
|
||||||
|
'produktivitas_komoditas.*.komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.',
|
||||||
|
'produktivitas_komoditas.*.hasil_panen_3_musim.required' => 'Hasil panen wajib diisi.',
|
||||||
|
'produktivitas_komoditas.*.hasil_panen_3_musim.numeric' => 'Hasil panen harus berupa angka.',
|
||||||
|
'produktivitas_komoditas.*.hasil_panen_3_musim.min' => 'Hasil panen tidak boleh kurang dari 0.',
|
||||||
|
'produktivitas_komoditas.*.satuan.required' => 'Satuan wajib dipilih.',
|
||||||
|
'produktivitas_komoditas.*.satuan.in' => 'Satuan yang dipilih tidak valid.',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
if ($validator->fails()) {
|
||||||
|
return $this->redirectBackToFragment($request)->withErrors($validator)->withInput();
|
||||||
|
}
|
||||||
|
|
||||||
|
$validated = $validator->validated();
|
||||||
|
|
||||||
foreach ($validated['produktivitas_komoditas'] as $row) {
|
foreach ($validated['produktivitas_komoditas'] as $row) {
|
||||||
SurveyProduktivitas::create([
|
SurveyProduktivitas::create([
|
||||||
'uid' => 'SPV-' . strtoupper(Str::random(10)),
|
'uid' => 'SPV-'.strtoupper(Str::random(10)),
|
||||||
'petani_id' => $petani->id,
|
'petani_id' => $petani->id,
|
||||||
'komoditas_id' => $row['komoditas_id'],
|
'komoditas_id' => $row['komoditas_id'],
|
||||||
'kuantitas' => $row['hasil_panen_3_musim'],
|
'kuantitas' => $row['hasil_panen_3_musim'],
|
||||||
@@ -32,10 +49,10 @@ class SurveyProduktivitasController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return back()->with('success', 'Data produktivitas berhasil disimpan.');
|
return $this->redirectBackToFragment($request)->with('success', 'Data produktivitas berhasil disimpan.');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function destroy($petaniId, $surveyProduktivitasId)
|
public function destroy($petaniId, $surveyProduktivitasId, Request $request)
|
||||||
{
|
{
|
||||||
$surveyProduktivitas = SurveyProduktivitas::where('petani_id', $petaniId)
|
$surveyProduktivitas = SurveyProduktivitas::where('petani_id', $petaniId)
|
||||||
->where('id', $surveyProduktivitasId)
|
->where('id', $surveyProduktivitasId)
|
||||||
@@ -44,6 +61,17 @@ class SurveyProduktivitasController extends Controller
|
|||||||
$surveyProduktivitas->save();
|
$surveyProduktivitas->save();
|
||||||
$surveyProduktivitas->delete();
|
$surveyProduktivitas->delete();
|
||||||
|
|
||||||
return back()->with('success', 'Data produktivitas berhasil dihapus.');
|
return $this->redirectBackToFragment($request)->with('success', 'Data produktivitas berhasil dihapus.');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function redirectBackToFragment(Request $request)
|
||||||
|
{
|
||||||
|
$fragment = $request->input('redirect_fragment');
|
||||||
|
|
||||||
|
if (! is_string($fragment) || ! preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) {
|
||||||
|
return back();
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to(Str::before(url()->previous(), '#').'#'.$fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
use App\Models\Pertanian\Petani;
|
use App\Models\Pertanian\Petani;
|
||||||
@@ -97,6 +98,31 @@ class PraktikBudidaya extends Model
|
|||||||
$kebiasaan = $praktikBudidaya->kebiasaan_konservasi_tanah ? count($praktikBudidaya->kebiasaan_konservasi_tanah) : 0;
|
$kebiasaan = $praktikBudidaya->kebiasaan_konservasi_tanah ? count($praktikBudidaya->kebiasaan_konservasi_tanah) : 0;
|
||||||
$pemahaman = $praktikBudidaya->pemahaman_manfaat_konservasi_tanah == 'Ya, tahu manfaatnya' ? 1 : 0;
|
$pemahaman = $praktikBudidaya->pemahaman_manfaat_konservasi_tanah == 'Ya, tahu manfaatnya' ? 1 : 0;
|
||||||
$skor_konservasi_tanah = 0;
|
$skor_konservasi_tanah = 0;
|
||||||
|
$jenisHama = $praktikBudidaya->jenis_hama ?? [];
|
||||||
|
$jenisPenyakit = $praktikBudidaya->jenis_penyakit ?? [];
|
||||||
|
|
||||||
|
if (Schema::hasColumn((new Lahan)->getTable(), 'jenis_hama')
|
||||||
|
&& Schema::hasColumn((new Lahan)->getTable(), 'jenis_penyakit')) {
|
||||||
|
Lahan::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Lahan $lahan) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) {
|
||||||
|
$lahan->update([
|
||||||
|
'jenis_hama' => $jenisHama,
|
||||||
|
'jenis_penyakit' => $jenisPenyakit,
|
||||||
|
'updated_by' => $praktikBudidaya->updated_by,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Schema::hasColumn((new Tanaman)->getTable(), 'jenis_hama')
|
||||||
|
&& Schema::hasColumn((new Tanaman)->getTable(), 'jenis_penyakit')) {
|
||||||
|
Tanaman::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Tanaman $tanaman) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) {
|
||||||
|
$tanaman->update([
|
||||||
|
'jenis_hama' => $jenisHama,
|
||||||
|
'jenis_penyakit' => $jenisPenyakit,
|
||||||
|
'updated_by' => $praktikBudidaya->updated_by,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if ($kebiasaan == 0) {
|
if ($kebiasaan == 0) {
|
||||||
$skor_konservasi_tanah = 1;
|
$skor_konservasi_tanah = 1;
|
||||||
} elseif ($kebiasaan == 1 && $pemahaman == 0) {
|
} elseif ($kebiasaan == 1 && $pemahaman == 0) {
|
||||||
@@ -117,19 +143,6 @@ class PraktikBudidaya extends Model
|
|||||||
'skor_d2_k2_7_penglolaan_air_irigasi' => $praktikBudidaya->kondisi_pengelolaan_air,
|
'skor_d2_k2_7_penglolaan_air_irigasi' => $praktikBudidaya->kondisi_pengelolaan_air,
|
||||||
'skor_d2_k2_8_praktik_konservasi_tanah' => $skor_konservasi_tanah,
|
'skor_d2_k2_8_praktik_konservasi_tanah' => $skor_konservasi_tanah,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
Lahan::where('petani_id', $petani->id)->update([
|
|
||||||
'jenis_hama' => $praktikBudidaya->jenis_hama,
|
|
||||||
'jenis_penyakit' => $praktikBudidaya->jenis_penyakit,
|
|
||||||
]);
|
|
||||||
|
|
||||||
Tanaman::whereIn(
|
|
||||||
'lahan_id',
|
|
||||||
Lahan::where('petani_id', $petani->id)->select('id')
|
|
||||||
)->update([
|
|
||||||
'jenis_hama' => $praktikBudidaya->jenis_hama,
|
|
||||||
'jenis_penyakit' => $praktikBudidaya->jenis_penyakit,
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,4 +150,4 @@ class PraktikBudidaya extends Model
|
|||||||
{
|
{
|
||||||
return $this->belongsTo(Petani::class, 'petani_id');
|
return $this->belongsTo(Petani::class, 'petani_id');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,4 +124,6 @@ return [
|
|||||||
],
|
],
|
||||||
|
|
||||||
'force_https' => env('FORCE_HTTPS', false),
|
'force_https' => env('FORCE_HTTPS', false),
|
||||||
|
|
||||||
|
'desc' => env('APP_DESC', 'Laravel'),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -12,26 +12,46 @@ return new class extends Migration
|
|||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::table('map_lahan', function (Blueprint $table) {
|
Schema::table('map_lahan', function (Blueprint $table) {
|
||||||
$table->jsonb('jenis_hama')->nullable();
|
if (! Schema::hasColumn('map_lahan', 'jenis_hama')) {
|
||||||
$table->jsonb('jenis_penyakit')->nullable();
|
$table->jsonb('jenis_hama')->nullable();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! Schema::hasColumn('map_lahan', 'jenis_penyakit')) {
|
||||||
|
$table->jsonb('jenis_penyakit')->nullable();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Schema::table('map_tanaman', function (Blueprint $table) {
|
Schema::table('map_tanaman', function (Blueprint $table) {
|
||||||
$table->jsonb('jenis_hama')->nullable();
|
if (! Schema::hasColumn('map_tanaman', 'jenis_hama')) {
|
||||||
$table->jsonb('jenis_penyakit')->nullable();
|
$table->jsonb('jenis_hama')->nullable();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! Schema::hasColumn('map_tanaman', 'jenis_penyakit')) {
|
||||||
|
$table->jsonb('jenis_penyakit')->nullable();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::table('map_lahan', function (Blueprint $table) {
|
Schema::table('map_lahan', function (Blueprint $table) {
|
||||||
$table->dropColumn('jenis_hama');
|
if (Schema::hasColumn('map_lahan', 'jenis_hama')) {
|
||||||
$table->dropColumn('jenis_penyakit');
|
$table->dropColumn('jenis_hama');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Schema::hasColumn('map_lahan', 'jenis_penyakit')) {
|
||||||
|
$table->dropColumn('jenis_penyakit');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Schema::table('map_tanaman', function (Blueprint $table) {
|
Schema::table('map_tanaman', function (Blueprint $table) {
|
||||||
$table->dropColumn('jenis_hama');
|
if (Schema::hasColumn('map_tanaman', 'jenis_hama')) {
|
||||||
$table->dropColumn('jenis_penyakit');
|
$table->dropColumn('jenis_hama');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Schema::hasColumn('map_tanaman', 'jenis_penyakit')) {
|
||||||
|
$table->dropColumn('jenis_penyakit');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
<!-- Logo -->
|
<!-- Logo -->
|
||||||
<div class="app-brand justify-content-center mb-6">
|
<div class="app-brand justify-content-center mb-6">
|
||||||
<a href="{{ route('home') }}" class="app-brand-link">
|
<a href="{{ route('home') }}" class="app-brand-link">
|
||||||
|
@if(config('app.name') == 'AgroMonev')
|
||||||
<span class="app-brand-logo demo">
|
<span class="app-brand-logo demo">
|
||||||
<span class="text-primary">
|
<span class="text-primary">
|
||||||
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
@@ -20,10 +21,34 @@
|
|||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<span class="app-brand-text demo menu-text fw-bold ms-3" style="text-transform: capitalize;">AgroMonev</span>
|
<span class="app-brand-text demo menu-text fw-bold ms-3" style="text-transform: capitalize;">AgroMonev</span>
|
||||||
|
@elseif(config('app.name') == 'AgroPro')
|
||||||
|
<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.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;">AgroPro</span>
|
||||||
|
@endif
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<!-- /Logo -->
|
<!-- /Logo -->
|
||||||
<h4 class="mb-1">Selamat datang di AgroMonev!</h4>
|
<h4 class="mb-1">Selamat datang di {{ config('app.name') }}!</h4>
|
||||||
<p class="mb-6">Silakan masuk ke akun Anda</p>
|
<p class="mb-6">Silakan masuk ke akun Anda</p>
|
||||||
@if ($errors->any())
|
@if ($errors->any())
|
||||||
<div class="alert alert-danger">
|
<div class="alert alert-danger">
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
<i class="icon-base ti tabler-trees icon-28px"></i>
|
<i class="icon-base ti tabler-trees icon-28px"></i>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="mb-0">{{ number_format($lahanSummary->sum('luas_lahan'), 0, ',', '.') }}m<sup>2</sup></h4>
|
<h4 class="mb-0">{{ number_format($lahanSummary->sum('luas_lahan') / 10000, 2, ',', '.') }} ha</h4>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb-1">Lahan</p>
|
<p class="mb-1">Lahan</p>
|
||||||
<p class="mb-0">
|
<p class="mb-0">
|
||||||
@@ -701,4 +701,4 @@
|
|||||||
radarKomponen.render();
|
radarKomponen.render();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -88,12 +88,13 @@
|
|||||||
@if($profile)
|
@if($profile)
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="btn btn-sm btn-icon btn-text-secondary rounded-pill"
|
class="btn btn-sm btn-outline-primary d-inline-flex align-items-center gap-1 px-3"
|
||||||
data-bs-toggle="offcanvas"
|
data-bs-toggle="offcanvas"
|
||||||
data-bs-target="#editProfileOffcanvas"
|
data-bs-target="#editProfileOffcanvas"
|
||||||
aria-controls="editProfileOffcanvas"
|
aria-controls="editProfileOffcanvas"
|
||||||
title="Edit profil">
|
title="Edit profil">
|
||||||
<i class="icon-base ti tabler-edit icon-lg"></i>
|
<i class="icon-base ti tabler-edit icon-sm"></i>
|
||||||
|
<span>Edit</span>
|
||||||
</button>
|
</button>
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
name="viewport"
|
name="viewport"
|
||||||
content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" />
|
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" />
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
<title>AgroMonev | {{ $title ?? 'Database Petani' }}</title>
|
<title>{{ config('app.name') }} | {{ $title ?? config('app.desc') }}</title>
|
||||||
|
|
||||||
<meta name="description" content="" />
|
<meta name="description" content="" />
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,13 @@
|
|||||||
<div class="layout-wrapper layout-content-navbar ">
|
<div class="layout-wrapper layout-content-navbar ">
|
||||||
<div class="layout-container">
|
<div class="layout-container">
|
||||||
<!-- Menu -->
|
<!-- Menu -->
|
||||||
|
@if(config('app.name') == 'AgroMonev')
|
||||||
|
@include('layout.sidebar_monev')
|
||||||
|
@elseif(config('app.name') == 'AgroPro')
|
||||||
|
@include('layout.sidebar_pro')
|
||||||
|
@else
|
||||||
@include('layout.sidebar')
|
@include('layout.sidebar')
|
||||||
|
@endif
|
||||||
<!-- / Menu -->
|
<!-- / Menu -->
|
||||||
|
|
||||||
<!-- Layout container -->
|
<!-- Layout container -->
|
||||||
|
|||||||
@@ -338,7 +338,7 @@
|
|||||||
href="javascript:void(0);"
|
href="javascript:void(0);"
|
||||||
data-bs-toggle="dropdown">
|
data-bs-toggle="dropdown">
|
||||||
<div class="avatar avatar-online">
|
<div class="avatar avatar-online">
|
||||||
<img src="../../assets/img/avatars/3.jpg" alt class="rounded-circle" />
|
<img src="{{ asset('assets/img/avatars/3.jpg') }}" alt="Avatar" class="rounded-circle" />
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu dropdown-menu-end">
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
@@ -347,7 +347,7 @@
|
|||||||
<div class="d-flex align-items-center">
|
<div class="d-flex align-items-center">
|
||||||
<div class="flex-shrink-0 me-2">
|
<div class="flex-shrink-0 me-2">
|
||||||
<div class="avatar avatar-online">
|
<div class="avatar avatar-online">
|
||||||
<img src="../../assets/img/avatars/3.jpg" alt class="rounded-circle" />
|
<img src="{{ asset('assets/img/avatars/3.jpg') }}" alt="Avatar" class="rounded-circle" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-grow-1">
|
<div class="flex-grow-1">
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
<a href="{{ route('home') }}" class="app-brand-link">
|
<a href="{{ route('home') }}" class="app-brand-link">
|
||||||
<span class="app-brand-logo demo">
|
<span class="app-brand-logo demo">
|
||||||
<span>
|
<span>
|
||||||
|
<!-- AgroMonev -->
|
||||||
<svg width="32" height="24" viewBox="0 0 32 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<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.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 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" />
|
||||||
@@ -10,6 +11,24 @@
|
|||||||
<path d="M15 15L27 4" stroke="#ED1C24" 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" />
|
<circle cx="27" cy="4" r="2.5" fill="#ED1C24" />
|
||||||
</svg>
|
</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>
|
</span>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,283 @@
|
|||||||
|
<aside id="layout-menu" class="layout-menu menu-vertical menu">
|
||||||
|
<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
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large ms-auto">
|
||||||
|
<i class="icon-base ti menu-toggle-icon d-none d-xl-block"></i>
|
||||||
|
<i class="icon-base ti tabler-x d-block d-xl-none"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu-inner-shadow"></div>
|
||||||
|
|
||||||
|
<ul class="menu-inner py-1">
|
||||||
|
<!-- Dashboards -->
|
||||||
|
@php
|
||||||
|
$userRole = auth()->check() ? (auth()->user()->role instanceof \App\Enums\Role ? auth()->user()->role->value : auth()->user()->role) : null;
|
||||||
|
@endphp
|
||||||
|
|
||||||
|
@if(in_array($userRole, ['super_admin', 'admin', 'fasilitator']) )
|
||||||
|
<li class="menu-item active open">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-smart-home"></i>
|
||||||
|
<div data-i18n="Dashboards">Dashboards</div>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
@if(in_array($userRole, ['super_admin', 'admin']) && env('APP_NAME') == 'AgroMonev')
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('dashboard.produktivitas') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('dashboard.produktivitas') }}" class="menu-link">
|
||||||
|
<div data-i18n="Produktivitas">Produktivitas</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if(in_array($userRole, ['super_admin', 'admin', 'fasilitator']) && env('APP_NAME') == 'AgroMonev')
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('dashboard.survey-petani') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('dashboard.survey-petani') }}" class="menu-link">
|
||||||
|
<div data-i18n="Survey Petani">Survey Petani</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('dashboard.petani') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('dashboard.petani') }}" class="menu-link">
|
||||||
|
<div data-i18n="Profil Petani">Profil Petani</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
@endif
|
||||||
|
</li>
|
||||||
|
@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>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if(in_array($userRole, ['super_admin', 'admin']) && env('APP_NAME') == 'AgroPro')
|
||||||
|
<!-- Ekosistem -->
|
||||||
|
<li class="menu-header small">
|
||||||
|
<span class="menu-header-text" data-i18n="Ekosistem">Ekosistem</span>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs(['profile.*', 'produksi.*', 'lahan.*', 'tanaman.*']) ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-file-description"></i>
|
||||||
|
<div data-i18n="Data Pertanian">Data Pertanian</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('petani.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('petani.index') }}" class="menu-link"><div data-i18n="Profil Petani">Profil Petani</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('produksi.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('produksi.index') }}" class="menu-link"><div data-i18n="Hasil Panen">Hasil Panen</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('lahan.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('lahan.index') }}" class="menu-link"><div data-i18n="Pemantauan Lahan">Pemantauan Lahan</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('tanaman.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('tanaman.index') }}" class="menu-link"><div data-i18n="Pemantauan Tanaman">Pemantauan Tanaman</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="menu-item {{ request()->routeIs(['petani-cpm.*', 'lahan-cpcl.*', 'tabel.data.*']) ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-folder-root"></i>
|
||||||
|
<div data-i18n="Basis Data Ekosistem">Basis Data Ekosistem</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('petani-cpm.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('petani-cpm.index') }}" class="menu-link"><div data-i18n="Petani CPM">Petani CPM</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('lahan-cpcl.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('lahan-cpcl.index') }}" class="menu-link"><div data-i18n="Lahan CPCL">Lahan CPCL</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
@foreach ($tabel_menu ?? [] as $tbl)
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('tabel.data.*') && request()->route('tabel') == $tbl->id ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('tabel.data.index', $tbl->id) }}" class="menu-link">
|
||||||
|
<div data-i18n="{{ $tbl->menu }}">{{ $tbl->menu }}</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
@endforeach
|
||||||
|
</li>
|
||||||
|
<!-- <li class="menu-item">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-line-scan"></i>
|
||||||
|
<div data-i18n="Tracebility">Tracebility</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="#" class="menu-link">
|
||||||
|
<div data-i18n="Manajemen Batch & Kode">Manajemen Batch & Kode</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="#" class="menu-link">
|
||||||
|
<div data-i18n="Penelusuran Product">Penelusuran Product</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li> -->
|
||||||
|
<li class="menu-item {{ request()->routeIs(['realisasi.*', 'kelompok-belajar-tani.*', 'workshop.*']) ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-webhook"></i>
|
||||||
|
<div data-i18n="Program & Komunitas">Program & Komunitas</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('realisasi.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('realisasi.index') }}" class="menu-link"><div data-i18n="Capaian Program">Capaian Program</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('kelompok-belajar-tani.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('kelompok-belajar-tani.index') }}" class="menu-link"><div data-i18n="Kelompok Belajar Petani">Kelompok Belajar Petani</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('workshop.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('workshop.index') }}" class="menu-link"><div data-i18n="Workshop & Lokakarya">Workshop & Lokakarya</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if(in_array($userRole, ['super_admin']))
|
||||||
|
<!-- Master Data -->
|
||||||
|
<li class="menu-header small">
|
||||||
|
<span class="menu-header-text" data-i18n="Master Data">Master Data</span>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-world"></i>
|
||||||
|
<div data-i18n="Wilayah">Wilayah</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item"><a href="{{ route('provinsi.index') }}" class="menu-link"><div data-i18n="Provinsi">Provinsi</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('kabupatenkota.index') }}" class="menu-link"><div data-i18n="Kabupaten Kota">Kabupaten Kota</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('kecamatan.index') }}" class="menu-link"><div data-i18n="Kecamatan">Kecamatan</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('desakelurahan.index') }}" class="menu-link"><div data-i18n="Desa Kelurahan">Desa Kelurahan</div></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="{{ route('adat.index') }}" class="menu-link"><i class="menu-icon icon-base ti tabler-matrix"></i><div data-i18n="Adat">Adat</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="{{ route('keluarga.index') }}" class="menu-link"><i class="menu-icon icon-base ti tabler-sitemap"></i><div data-i18n="Keluarga">Keluarga</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-plant"></i><div data-i18n="Tanaman">Tanaman</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item"><a href="{{ route('komoditas.index') }}" class="menu-link"><div data-i18n="Komoditas">Komoditas</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('jenis-komoditas.index') }}" class="menu-link"><div data-i18n="Jenis Komoditas">Jenis Komoditas</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('varietas.index') }}" class="menu-link"><div data-i18n="Varietas">Varietas</div></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if(in_array($userRole, ['super_admin', 'admin']))
|
||||||
|
<li class="menu-header small">
|
||||||
|
<span class="menu-header-text" data-i18n="Konfigurasi">Konfigurasi</span>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('users.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('users.index') }}" class="menu-link">
|
||||||
|
<i class="menu-icon icon-base ti tabler-users"></i><div data-i18n="Daftar Pengguna">Daftar Pengguna</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
@if(in_array($userRole, ['super_admin', 'admin']) && env('APP_NAME') == 'AgroPro')
|
||||||
|
<li class="menu-item {{ request()->routeIs(['program.*', 'framework.*']) ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-transform"></i><div data-i18n="Program Transformasi">Program Transformasi</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('program.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('program.index') }}" class="menu-link"><div data-i18n="Program Transformasi">Program Transformasi</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('framework.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('framework.index') }}" class="menu-link"><div data-i18n="Framework">Framework</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs(['group.*', 'tabel.*']) && !request()->routeIs('tabel.data.*') ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-database"></i><div data-i18n="Basis Data Ekosistem">Basis Data Ekosistem</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('group.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('group.index') }}" class="menu-link"><div data-i18n="Kelompok">Kelompok</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('tabel.*') && !request()->routeIs('tabel.data.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('tabel.index') }}" class="menu-link"><div data-i18n="Tabel">Tabel</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<!-- Misc -->
|
||||||
|
<!-- <li class="menu-header small">
|
||||||
|
<span class="menu-header-text" data-i18n="Misc">Misc</span>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="https://docs.google.com/spreadsheets/d/1nbh4xW-K_GwRW34-cD81p9B-LnLvkvro/edit?usp=sharing&ouid=103442063105125817060&rtpof=true&sd=true" target="_blank" class="menu-link">
|
||||||
|
<i class="menu-icon icon-base ti tabler-file-description"></i><div data-i18n="Documentation">Documentation</div>
|
||||||
|
</a>
|
||||||
|
</li> -->
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<div class="menu-mobile-toggler d-xl-none rounded-1">
|
||||||
|
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large text-bg-secondary p-2 rounded-1">
|
||||||
|
<i class="ti tabler-menu icon-base"></i>
|
||||||
|
<i class="ti tabler-chevron-right icon-base"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
<aside id="layout-menu" class="layout-menu menu-vertical menu">
|
||||||
|
<div class="app-brand demo ">
|
||||||
|
<a href="{{ route('home') }}" class="app-brand-link">
|
||||||
|
<span class="app-brand-logo demo">
|
||||||
|
<span>
|
||||||
|
<!-- 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;">
|
||||||
|
{{ env('APP_NAME') }}
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large ms-auto">
|
||||||
|
<i class="icon-base ti menu-toggle-icon d-none d-xl-block"></i>
|
||||||
|
<i class="icon-base ti tabler-x d-block d-xl-none"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="menu-inner-shadow"></div>
|
||||||
|
|
||||||
|
<ul class="menu-inner py-1">
|
||||||
|
<!-- Dashboards -->
|
||||||
|
|
||||||
|
@canany(['fasilitator', 'super_admin', 'admin'])
|
||||||
|
<li class="menu-item active open">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-smart-home"></i>
|
||||||
|
<div data-i18n="Dashboards">Dashboards</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
@endcanany
|
||||||
|
|
||||||
|
@canany(['super_admin', 'admin'])
|
||||||
|
<!-- Ekosistem -->
|
||||||
|
<li class="menu-header small">
|
||||||
|
<span class="menu-header-text" data-i18n="Ekosistem">Ekosistem</span>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs(['realisasi.*', 'kelompok-belajar-tani.*', 'workshop.*']) ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-webhook"></i>
|
||||||
|
<div data-i18n="Program & Komunitas">Program & Komunitas</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('realisasi.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('realisasi.index') }}" class="menu-link"><div data-i18n="Capaian Program">Capaian Program</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('kelompok-belajar-tani.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('kelompok-belajar-tani.index') }}" class="menu-link"><div data-i18n="Kelompok Belajar Petani">Kelompok Belajar Petani</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('workshop.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('workshop.index') }}" class="menu-link"><div data-i18n="Workshop & Lokakarya">Workshop & Lokakarya</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
@endcanany
|
||||||
|
|
||||||
|
@canany(['super_admin'])
|
||||||
|
<!-- Master Data -->
|
||||||
|
<li class="menu-header small">
|
||||||
|
<span class="menu-header-text" data-i18n="Master Data">Master Data</span>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-world"></i>
|
||||||
|
<div data-i18n="Wilayah">Wilayah</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item"><a href="{{ route('provinsi.index') }}" class="menu-link"><div data-i18n="Provinsi">Provinsi</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('kabupatenkota.index') }}" class="menu-link"><div data-i18n="Kabupaten Kota">Kabupaten Kota</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('kecamatan.index') }}" class="menu-link"><div data-i18n="Kecamatan">Kecamatan</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('desakelurahan.index') }}" class="menu-link"><div data-i18n="Desa Kelurahan">Desa Kelurahan</div></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="{{ route('adat.index') }}" class="menu-link"><i class="menu-icon icon-base ti tabler-matrix"></i><div data-i18n="Adat">Adat</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="{{ route('keluarga.index') }}" class="menu-link"><i class="menu-icon icon-base ti tabler-sitemap"></i><div data-i18n="Keluarga">Keluarga</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-plant"></i><div data-i18n="Tanaman">Tanaman</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item"><a href="{{ route('komoditas.index') }}" class="menu-link"><div data-i18n="Komoditas">Komoditas</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('jenis-komoditas.index') }}" class="menu-link"><div data-i18n="Jenis Komoditas">Jenis Komoditas</div></a></li>
|
||||||
|
<li class="menu-item"><a href="{{ route('varietas.index') }}" class="menu-link"><div data-i18n="Varietas">Varietas</div></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
@endcanany
|
||||||
|
|
||||||
|
@canany(['super_admin', 'admin'])
|
||||||
|
<li class="menu-header small">
|
||||||
|
<span class="menu-header-text" data-i18n="Konfigurasi">Konfigurasi</span>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('users.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('users.index') }}" class="menu-link">
|
||||||
|
<i class="menu-icon icon-base ti tabler-users"></i><div data-i18n="Daftar Pengguna">Daftar Pengguna</div>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
@endcanany
|
||||||
|
|
||||||
|
@canany(['super_admin', 'admin'])
|
||||||
|
<li class="menu-item {{ request()->routeIs(['program.*', 'framework.*']) ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-transform"></i><div data-i18n="Program Transformasi">Program Transformasi</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('program.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('program.index') }}" class="menu-link"><div data-i18n="Program Transformasi">Program Transformasi</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('framework.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('framework.index') }}" class="menu-link"><div data-i18n="Framework">Framework</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs(['group.*', 'tabel.*']) && !request()->routeIs('tabel.data.*') ? 'active open' : '' }}">
|
||||||
|
<a href="javascript:void(0);" class="menu-link menu-toggle">
|
||||||
|
<i class="menu-icon icon-base ti tabler-database"></i><div data-i18n="Basis Data Ekosistem">Basis Data Ekosistem</div>
|
||||||
|
</a>
|
||||||
|
<ul class="menu-sub">
|
||||||
|
<li class="menu-item {{ request()->routeIs('group.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('group.index') }}" class="menu-link"><div data-i18n="Kelompok">Kelompok</div></a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item {{ request()->routeIs('tabel.*') && !request()->routeIs('tabel.data.*') ? 'active' : '' }}">
|
||||||
|
<a href="{{ route('tabel.index') }}" class="menu-link"><div data-i18n="Tabel">Tabel</div></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
@endcanany
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<div class="menu-mobile-toggler d-xl-none rounded-1">
|
||||||
|
<a href="javascript:void(0);" class="layout-menu-toggle menu-link text-large text-bg-secondary p-2 rounded-1">
|
||||||
|
<i class="ti tabler-menu icon-base"></i>
|
||||||
|
<i class="ti tabler-chevron-right icon-base"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
@@ -93,34 +93,30 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@php($listBentukProduk = ['Buah segar hasil petik', 'Biji basah', 'Biji kering/Biji Kupas', 'Terfermentasi (Rp/kg)'])
|
@foreach ($hargaJualRows as $row)
|
||||||
@php($hargaJualPanen = $hargaJualPanen ?? collect())
|
|
||||||
|
|
||||||
@foreach ($listBentukProduk as $index => $bentuk)
|
|
||||||
@php($existingData = $hargaJualPanen->firstWhere('bentuk_produk', $bentuk))
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<input type="hidden" name="harga_jual[{{ $index }}][bentuk_produk]" value="{{ $bentuk }}">
|
<input type="hidden" name="harga_jual[{{ $row['index'] }}][bentuk_produk]" value="{{ $row['bentuk'] }}">
|
||||||
<strong>{{ $bentuk }}:</strong>
|
<strong>{{ $row['bentuk'] }}:</strong>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">Rp</span>
|
<span class="input-group-text">Rp</span>
|
||||||
<input type="number" min="0" class="form-control" name="harga_jual[{{ $index }}][harga_panen_terakhir]" value="{{ old('harga_jual.' . $index . '.harga_panen_terakhir', $existingData?->harga_panen_terakhir) }}">
|
<input type="text" inputmode="numeric" class="form-control rupiah-input" name="harga_jual[{{ $row['index'] }}][harga_panen_terakhir]" value="{{ old('harga_jual.' . $row['index'] . '.harga_panen_terakhir', $row['harga_panen_terakhir']) }}" placeholder="Contoh: 12.000">
|
||||||
<span class="input-group-text">/kg</span>
|
<span class="input-group-text">/kg</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">Rp</span>
|
<span class="input-group-text">Rp</span>
|
||||||
<input type="number" min="0" class="form-control" name="harga_jual[{{ $index }}][harga_tahun_lalu]" value="{{ old('harga_jual.' . $index . '.harga_tahun_lalu', $existingData?->harga_tahun_lalu) }}">
|
<input type="text" inputmode="numeric" class="form-control rupiah-input" name="harga_jual[{{ $row['index'] }}][harga_tahun_lalu]" value="{{ old('harga_jual.' . $row['index'] . '.harga_tahun_lalu', $row['harga_tahun_lalu']) }}" placeholder="Contoh: 10.000">
|
||||||
<span class="input-group-text">/kg</span>
|
<span class="input-group-text">/kg</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">Rp</span>
|
<span class="input-group-text">Rp</span>
|
||||||
<input type="number" min="0" class="form-control" name="harga_jual[{{ $index }}][harga_dua_tahun_lalu]" value="{{ old('harga_jual.' . $index . '.harga_dua_tahun_lalu', $existingData?->harga_dua_tahun_lalu) }}">
|
<input type="text" inputmode="numeric" class="form-control rupiah-input" name="harga_jual[{{ $row['index'] }}][harga_dua_tahun_lalu]" value="{{ old('harga_jual.' . $row['index'] . '.harga_dua_tahun_lalu', $row['harga_dua_tahun_lalu']) }}" placeholder="Contoh: 8.000">
|
||||||
<span class="input-group-text">/kg</span>
|
<span class="input-group-text">/kg</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
@@ -232,6 +228,16 @@
|
|||||||
const praktikBelumPernahValue = String(@json($praktikBelumPernahValue));
|
const praktikBelumPernahValue = String(@json($praktikBelumPernahValue));
|
||||||
const skorPengalamanBerhentiValues = @json($skorPengalamanBerhentiValues ?? [2,3]).map(Number);
|
const skorPengalamanBerhentiValues = @json($skorPengalamanBerhentiValues ?? [2,3]).map(Number);
|
||||||
|
|
||||||
|
function onlyDigits(value) {
|
||||||
|
return String(value || '').replace(/\D/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatRupiah(value) {
|
||||||
|
const digits = onlyDigits(value);
|
||||||
|
|
||||||
|
return digits.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||||
|
}
|
||||||
|
|
||||||
function syncAlasanBerhenti() {
|
function syncAlasanBerhenti() {
|
||||||
const val = Number($('input[name="skor_pengalaman"]:checked').val());
|
const val = Number($('input[name="skor_pengalaman"]:checked').val());
|
||||||
const isBerhenti = skorPengalamanBerhentiValues.includes(val);
|
const isBerhenti = skorPengalamanBerhentiValues.includes(val);
|
||||||
@@ -256,10 +262,21 @@
|
|||||||
$('input[name="skor_pengalaman"]').on('change', syncAlasanBerhenti);
|
$('input[name="skor_pengalaman"]').on('change', syncAlasanBerhenti);
|
||||||
$('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya);
|
$('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya);
|
||||||
$('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi);
|
$('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi);
|
||||||
|
$(document).on('input', '.rupiah-input', function () {
|
||||||
|
const cursorAtEnd = this.selectionStart === this.value.length;
|
||||||
|
this.value = formatRupiah(this.value);
|
||||||
|
|
||||||
|
if (cursorAtEnd) {
|
||||||
|
this.setSelectionRange(this.value.length, this.value.length);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$('.rupiah-input').each(function () {
|
||||||
|
this.value = formatRupiah(this.value);
|
||||||
|
});
|
||||||
|
|
||||||
syncAlasanBerhenti();
|
syncAlasanBerhenti();
|
||||||
syncSaluranLainnya();
|
syncSaluranLainnya();
|
||||||
syncPraktikFermentasi();
|
syncPraktikFermentasi();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -92,7 +92,13 @@
|
|||||||
? $petani->lahans()->get()
|
? $petani->lahans()->get()
|
||||||
: collect();
|
: collect();
|
||||||
$totalLuasLahan = $petani ? $lahanPetani->where('komoditas_id', $petani->komoditas_id)->sum('luas_lahan') : 0;
|
$totalLuasLahan = $petani ? $lahanPetani->where('komoditas_id', $petani->komoditas_id)->sum('luas_lahan') : 0;
|
||||||
$totalTanaman = $petani ? $lahanPetani->where('komoditas_id', $petani->komoditas_id)->sum('jumlah_tanaman') : 0;
|
$totalLuasLahanHa = $totalLuasLahan / 10000;
|
||||||
|
$lahanKomoditasUtamaIds = $petani
|
||||||
|
? $lahanPetani->where('komoditas_id', $petani->komoditas_id)->pluck('id')
|
||||||
|
: collect();
|
||||||
|
$totalTanaman = $petani && \Illuminate\Support\Facades\Schema::hasTable('map_tanaman')
|
||||||
|
? \App\Models\Pertanian\Tanaman::whereIn('lahan_id', $lahanKomoditasUtamaIds)->count()
|
||||||
|
: 0;
|
||||||
$pendidikanLabel = isset($petani) ? $petani->pendidikan_terakhir?->label() : null;
|
$pendidikanLabel = isset($petani) ? $petani->pendidikan_terakhir?->label() : null;
|
||||||
|
|
||||||
@endphp
|
@endphp
|
||||||
@@ -126,7 +132,7 @@
|
|||||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Lahan & Tanaman</p>
|
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Lahan & Tanaman</p>
|
||||||
<h5 class="mb-0">
|
<h5 class="mb-0">
|
||||||
@if($lahanPetani->isNotEmpty())
|
@if($lahanPetani->isNotEmpty())
|
||||||
{{ number_format($totalLuasLahan, 0, ',', '.') }} ha
|
{{ number_format($totalLuasLahanHa, 2, ',', '.') }} ha
|
||||||
@else
|
@else
|
||||||
-
|
-
|
||||||
@endif
|
@endif
|
||||||
|
|||||||
@@ -15,8 +15,8 @@
|
|||||||
<div class="w-25">
|
<div class="w-25">
|
||||||
<x-summary-card
|
<x-summary-card
|
||||||
title="Lahan & Tanaman"
|
title="Lahan & Tanaman"
|
||||||
count="{{ number_format($lahan?->sum('luas_lahan'), 0, ',', '.') }}ha"
|
count="{{ number_format(($totalLuasLahan ?? 0) / 10000, 2, ',', '.') }} ha"
|
||||||
subtitle="{{ $tanaman?->count() }} tanaman dari {{ $komoditas?->count() }} komoditas utama"
|
subtitle="{{ $totalTanaman ?? 0 }} tanaman dari {{ $komoditas?->count() }} komoditas utama"
|
||||||
icon="trees"
|
icon="trees"
|
||||||
color="success"
|
color="success"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -163,6 +163,10 @@
|
|||||||
z-index: 100000 !important;
|
z-index: 100000 !important;
|
||||||
}
|
}
|
||||||
.foto-lightbox-close:hover { color: #dc3545 !important; }
|
.foto-lightbox-close:hover { color: #dc3545 !important; }
|
||||||
|
.auto-pest-disease-field .form-check-label,
|
||||||
|
.auto-pest-disease-field .text-muted {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
@@ -259,7 +263,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-3 mb-4 form-control-validation">
|
<div class="col-md-3 mb-4 form-control-validation auto-pest-disease-field">
|
||||||
<label class="form-label">Jenis Hama</label>
|
<label class="form-label">Jenis Hama</label>
|
||||||
|
|
||||||
<div class="form-check mt-2">
|
<div class="form-check mt-2">
|
||||||
@@ -267,7 +271,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Penggerek buah"
|
value="Penggerek buah"
|
||||||
id="jenis-hama-penggerek-buah">
|
id="jenis-hama-penggerek-buah"
|
||||||
|
{{ in_array('Penggerek buah', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek buah</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek buah</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -276,7 +281,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Penggerek batang"
|
value="Penggerek batang"
|
||||||
id="jenis-hama-penggerek-batang">
|
id="jenis-hama-penggerek-batang"
|
||||||
|
{{ in_array('Penggerek batang', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek batang</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek batang</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -285,7 +291,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Kutu putih/kutu sisik"
|
value="Kutu putih/kutu sisik"
|
||||||
id="jenis-hama-kutu">
|
id="jenis-hama-kutu"
|
||||||
|
{{ in_array('Kutu putih/kutu sisik', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Kutu putih/kutu sisik</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Kutu putih/kutu sisik</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -294,7 +301,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Ulat pemakan daun"
|
value="Ulat pemakan daun"
|
||||||
id="jenis-hama-ulat">
|
id="jenis-hama-ulat"
|
||||||
|
{{ in_array('Ulat pemakan daun', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Ulat pemakan daun</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Ulat pemakan daun</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -303,15 +311,16 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Tikus"
|
value="Tikus"
|
||||||
id="jenis-hama-tikus">
|
id="jenis-hama-tikus"
|
||||||
|
{{ in_array('Tikus', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Tikus</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Tikus</label>
|
||||||
</div>
|
</div>
|
||||||
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis</small>
|
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis di Praktik Budidaya</small>
|
||||||
@error('jenis_hama')
|
@error('jenis_hama')
|
||||||
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
||||||
@enderror
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 mb-4 form-control-validation">
|
<div class="col-md-3 mb-4 form-control-validation auto-pest-disease-field">
|
||||||
<label class="form-label">Jenis Penyakit</label>
|
<label class="form-label">Jenis Penyakit</label>
|
||||||
|
|
||||||
<div class="form-check mt-2">
|
<div class="form-check mt-2">
|
||||||
@@ -319,7 +328,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Karat daun"
|
value="Karat daun"
|
||||||
id="jenis-penyakit-karat-daun">
|
id="jenis-penyakit-karat-daun"
|
||||||
|
{{ in_array('Karat daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Karat daun</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Karat daun</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -328,7 +338,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Busuk buah/antraknosa"
|
value="Busuk buah/antraknosa"
|
||||||
id="jenis-penyakit-busuk-buah">
|
id="jenis-penyakit-busuk-buah"
|
||||||
|
{{ in_array('Busuk buah/antraknosa', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk buah/antraknosa</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk buah/antraknosa</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -337,7 +348,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Busuk akar"
|
value="Busuk akar"
|
||||||
id="jenis-penyakit-busuk-akar">
|
id="jenis-penyakit-busuk-akar"
|
||||||
|
{{ in_array('Busuk akar', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk akar</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk akar</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -346,7 +358,8 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Bercak daun"
|
value="Bercak daun"
|
||||||
id="jenis-penyakit-bercak-daun">
|
id="jenis-penyakit-bercak-daun"
|
||||||
|
{{ in_array('Bercak daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Bercak daun</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Bercak daun</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -355,10 +368,11 @@
|
|||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Layu fusarium"
|
value="Layu fusarium"
|
||||||
id="jenis-penyakit-layu-fusarium">
|
id="jenis-penyakit-layu-fusarium"
|
||||||
|
{{ in_array('Layu fusarium', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Layu fusarium</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Layu fusarium</label>
|
||||||
</div>
|
</div>
|
||||||
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis</small>
|
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis di praktik budidaya</small>
|
||||||
|
|
||||||
@error('jenis_penyakit')
|
@error('jenis_penyakit')
|
||||||
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
||||||
@@ -940,7 +954,7 @@
|
|||||||
showConfirmButton: false,
|
showConfirmButton: false,
|
||||||
timer: 1500
|
timer: 1500
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
window.location.href = "{{ route('petani.lahan-tanaman.index', ['petani' => $petani->id]) }}";
|
window.location.href = res.redirect || window.location.href;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: function(xhr) {
|
error: function(xhr) {
|
||||||
@@ -977,4 +991,4 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -34,6 +34,10 @@
|
|||||||
.foto-lightbox img { max-width: 90vw !important; max-height: 85vh !important; object-fit: contain !important; border-radius: 8px !important; box-shadow: 0 10px 40px rgba(0,0,0,0.5) !important; }
|
.foto-lightbox img { max-width: 90vw !important; max-height: 85vh !important; object-fit: contain !important; border-radius: 8px !important; box-shadow: 0 10px 40px rgba(0,0,0,0.5) !important; }
|
||||||
.foto-lightbox-close { position: absolute !important; top: 20px !important; right: 30px !important; color: #fff !important; font-size: 40px !important; font-weight: bold !important; cursor: pointer !important; z-index: 100000 !important; }
|
.foto-lightbox-close { position: absolute !important; top: 20px !important; right: 30px !important; color: #fff !important; font-size: 40px !important; font-weight: bold !important; cursor: pointer !important; z-index: 100000 !important; }
|
||||||
.foto-lightbox-close:hover { color: #dc3545 !important; }
|
.foto-lightbox-close:hover { color: #dc3545 !important; }
|
||||||
|
.auto-pest-disease-field .form-check-label,
|
||||||
|
.auto-pest-disease-field .text-muted {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
@@ -161,7 +165,7 @@
|
|||||||
<option value="{{ \App\Enums\PenyakitTanaman::TANAMAN_LAYU }}" {{ old('penyakit_tanaman', $lahanSelected->penyakit_tanaman) == \App\Enums\PenyakitTanaman::TANAMAN_LAYU ? 'selected' : '' }}>Tanaman Layu</option>
|
<option value="{{ \App\Enums\PenyakitTanaman::TANAMAN_LAYU }}" {{ old('penyakit_tanaman', $lahanSelected->penyakit_tanaman) == \App\Enums\PenyakitTanaman::TANAMAN_LAYU ? 'selected' : '' }}>Tanaman Layu</option>
|
||||||
</select>
|
</select>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="col-md-3 mb-4 form-control-validation">
|
<div class="col-md-3 mb-4 form-control-validation auto-pest-disease-field">
|
||||||
<label class="form-label">Jenis Hama</label>
|
<label class="form-label">Jenis Hama</label>
|
||||||
|
|
||||||
<div class="form-check mt-2">
|
<div class="form-check mt-2">
|
||||||
@@ -170,7 +174,7 @@
|
|||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Penggerek buah"
|
value="Penggerek buah"
|
||||||
id="jenis-hama-penggerek-buah"
|
id="jenis-hama-penggerek-buah"
|
||||||
{{ in_array('Penggerek buah', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}>
|
{{ in_array('Penggerek buah', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek buah</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek buah</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -180,7 +184,7 @@
|
|||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Penggerek batang"
|
value="Penggerek batang"
|
||||||
id="jenis-hama-penggerek-batang"
|
id="jenis-hama-penggerek-batang"
|
||||||
{{ in_array('Penggerek batang', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}>
|
{{ in_array('Penggerek batang', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek batang</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Penggerek batang</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -190,7 +194,7 @@
|
|||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Kutu putih/kutu sisik"
|
value="Kutu putih/kutu sisik"
|
||||||
id="jenis-hama-kutu"
|
id="jenis-hama-kutu"
|
||||||
{{ in_array('Kutu putih/kutu sisik', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}>
|
{{ in_array('Kutu putih/kutu sisik', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Kutu putih/kutu sisik</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Kutu putih/kutu sisik</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -200,7 +204,7 @@
|
|||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Ulat pemakan daun"
|
value="Ulat pemakan daun"
|
||||||
id="jenis-hama-ulat"
|
id="jenis-hama-ulat"
|
||||||
{{ in_array('Ulat pemakan daun', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}>
|
{{ in_array('Ulat pemakan daun', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Ulat pemakan daun</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Ulat pemakan daun</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -210,15 +214,15 @@
|
|||||||
name="jenis_hama[]"
|
name="jenis_hama[]"
|
||||||
value="Tikus"
|
value="Tikus"
|
||||||
id="jenis-hama-tikus"
|
id="jenis-hama-tikus"
|
||||||
{{ in_array('Tikus', old('jenis_hama', $lahanSelected->jenis_hama ?? [])) ? 'checked' : '' }}>
|
{{ in_array('Tikus', $jenisHamaOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-hama-bentuk">Tikus</label>
|
<label class="form-check-label" for="jenis-hama-bentuk">Tikus</label>
|
||||||
</div>
|
</div>
|
||||||
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis</small>
|
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis di praktik budidaya</small>
|
||||||
@error('jenis_hama')
|
@error('jenis_hama')
|
||||||
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
||||||
@enderror
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 mb-4 form-control-validation">
|
<div class="col-md-3 mb-4 form-control-validation auto-pest-disease-field">
|
||||||
<label class="form-label">Jenis Penyakit</label>
|
<label class="form-label">Jenis Penyakit</label>
|
||||||
|
|
||||||
<div class="form-check mt-2">
|
<div class="form-check mt-2">
|
||||||
@@ -227,7 +231,7 @@
|
|||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Karat daun"
|
value="Karat daun"
|
||||||
id="jenis-penyakit-karat-daun"
|
id="jenis-penyakit-karat-daun"
|
||||||
{{ in_array('Karat daun', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }}
|
{{ in_array('Karat daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Karat daun</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Karat daun</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -237,7 +241,7 @@
|
|||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Busuk buah/antraknosa"
|
value="Busuk buah/antraknosa"
|
||||||
id="jenis-penyakit-busuk-buah"
|
id="jenis-penyakit-busuk-buah"
|
||||||
{{ in_array('Busuk buah/antraknosa', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }}
|
{{ in_array('Busuk buah/antraknosa', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk buah/antraknosa</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk buah/antraknosa</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -247,7 +251,7 @@
|
|||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Busuk akar"
|
value="Busuk akar"
|
||||||
id="jenis-penyakit-busuk-akar"
|
id="jenis-penyakit-busuk-akar"
|
||||||
{{ in_array('Busuk akar', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }}
|
{{ in_array('Busuk akar', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk akar</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Busuk akar</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -257,7 +261,7 @@
|
|||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Bercak daun"
|
value="Bercak daun"
|
||||||
id="jenis-penyakit-bercak-daun"
|
id="jenis-penyakit-bercak-daun"
|
||||||
{{ in_array('Bercak daun', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }}
|
{{ in_array('Bercak daun', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Bercak daun</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Bercak daun</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -267,10 +271,10 @@
|
|||||||
name="jenis_penyakit[]"
|
name="jenis_penyakit[]"
|
||||||
value="Layu fusarium"
|
value="Layu fusarium"
|
||||||
id="jenis-penyakit-layu-fusarium"
|
id="jenis-penyakit-layu-fusarium"
|
||||||
{{ in_array('Layu fusarium', old('jenis_penyakit', $lahanSelected->jenis_penyakit ?? [])) ? 'checked' : '' }}
|
{{ in_array('Layu fusarium', $jenisPenyakitOtomatis ?? [], true) ? 'checked' : '' }}>
|
||||||
<label class="form-check-label" for="jenis-penyakit-bentuk">Layu fusarium</label>
|
<label class="form-check-label" for="jenis-penyakit-bentuk">Layu fusarium</label>
|
||||||
</div>
|
</div>
|
||||||
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis</small>
|
<small class="text-muted text-secondary">* Tidak diisi, terisi otomatis di Praktik Budidaya</small>
|
||||||
|
|
||||||
@error('jenis_penyakit')
|
@error('jenis_penyakit')
|
||||||
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
||||||
@@ -403,6 +407,7 @@
|
|||||||
<div class="row mt-3">
|
<div class="row mt-3">
|
||||||
<div class="col-12 text-end">
|
<div class="col-12 text-end">
|
||||||
<a href="{{ route('petani.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Kembali</a>
|
<a href="{{ route('petani.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Kembali</a>
|
||||||
|
<button id="delete-lahan"type="button" class="btn btn-danger data-submit wave-effect wave-light"><i class="ti tabler-trash me-2"></i> Hapus Lahan</button>
|
||||||
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan Lahan</button>
|
<button type="submit" class="btn btn-success data-submit wave-effect wave-light"><i class="ti tabler-device-floppy me-2"></i> Simpan Lahan</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -819,7 +824,8 @@
|
|||||||
});
|
});
|
||||||
document.getElementById('path').value = JSON.stringify(pathData);
|
document.getElementById('path').value = JSON.stringify(pathData);
|
||||||
let area = L.GeometryUtil.geodesicArea(latlngs);
|
let area = L.GeometryUtil.geodesicArea(latlngs);
|
||||||
$('#luas_lahan').val(area.toFixed(2));
|
let areaHa = area / 10000;
|
||||||
|
$('#luas_lahan').val(areaHa.toFixed(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
const previewTemplate = `
|
const previewTemplate = `
|
||||||
@@ -1017,7 +1023,7 @@
|
|||||||
showConfirmButton: false,
|
showConfirmButton: false,
|
||||||
timer: 1500
|
timer: 1500
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
window.location.href = "{{ route('petani.index') }}";
|
window.location.href = res.redirect || window.location.href;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: function(xhr) {
|
error: function(xhr) {
|
||||||
@@ -1054,8 +1060,31 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$('#delete-lahan').click(function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
$.ajax({
|
||||||
|
url: "{{ route('petani.lahan-tanaman.destroy', ['petani' => $petani->id, 'lahan_tanaman' => $lahanSelected->id]) }}",
|
||||||
|
type: "POST",
|
||||||
|
data: {
|
||||||
|
_method: 'DELETE',
|
||||||
|
_token: $('input[name="_token"]').val()
|
||||||
|
},
|
||||||
|
success: function(res) {
|
||||||
|
Swal.fire({
|
||||||
|
icon: 'success',
|
||||||
|
title: 'Berhasil!',
|
||||||
|
text: 'Data lahan berhasil dihapus.',
|
||||||
|
showConfirmButton: false,
|
||||||
|
timer: 1500
|
||||||
|
}).then(() => {
|
||||||
|
window.location.href = "{{ route('petani.lahan-tanaman.index', ['petani' => $petani->id]) }}";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
initWilayah();
|
initWilayah();
|
||||||
initKomoditas();
|
initKomoditas();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -29,6 +29,11 @@
|
|||||||
white-space: nowrap !important;
|
white-space: nowrap !important;
|
||||||
line-height: 1.5 !important;
|
line-height: 1.5 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#section-pelatihan,
|
||||||
|
#section-sertifikasi {
|
||||||
|
scroll-margin-top: 96px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
@@ -51,7 +56,7 @@
|
|||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
|
||||||
@include('produktivitas.petani.header', ['petani' => $petani])
|
@include('produktivitas.petani.header', ['petani' => $petani])
|
||||||
<div class="card mb-6">
|
<div class="card mb-6" id="section-pelatihan">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<h5 class="pb-4 border-bottom mb-4">
|
<h5 class="pb-4 border-bottom mb-4">
|
||||||
Riwayat Pelatihan
|
Riwayat Pelatihan
|
||||||
@@ -83,6 +88,7 @@
|
|||||||
class="delete-db-form">
|
class="delete-db-form">
|
||||||
@csrf
|
@csrf
|
||||||
@method('DELETE')
|
@method('DELETE')
|
||||||
|
<input type="hidden" name="redirect_fragment" value="section-pelatihan">
|
||||||
|
|
||||||
<button type="submit" class="btn btn-outline-danger">
|
<button type="submit" class="btn btn-outline-danger">
|
||||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||||
@@ -101,6 +107,7 @@
|
|||||||
action="{{ route('petani.pendidikan-pelatihan.pelatihan.store', $petani->id) }}"
|
action="{{ route('petani.pendidikan-pelatihan.pelatihan.store', $petani->id) }}"
|
||||||
class="form-repeater-pelatihan">
|
class="form-repeater-pelatihan">
|
||||||
@csrf
|
@csrf
|
||||||
|
<input type="hidden" name="redirect_fragment" value="section-sertifikasi">
|
||||||
|
|
||||||
<div data-repeater-list="riwayat_pelatihan">
|
<div data-repeater-list="riwayat_pelatihan">
|
||||||
<div data-repeater-item>
|
<div data-repeater-item>
|
||||||
@@ -170,7 +177,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- SERTIFIKASI KEAHLIAN --}}
|
{{-- SERTIFIKASI KEAHLIAN --}}
|
||||||
<div class="card mb-6">
|
<div class="card mb-6" id="section-sertifikasi">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<h5 class="pb-4 border-bottom mb-4">
|
<h5 class="pb-4 border-bottom mb-4">
|
||||||
Sertifikasi Keahlian
|
Sertifikasi Keahlian
|
||||||
@@ -231,9 +238,10 @@
|
|||||||
<form
|
<form
|
||||||
method="POST"
|
method="POST"
|
||||||
action="{{ route('petani.pendidikan-pelatihan.sertifikasi.destroy', [$petani->id, $row->id]) }}"
|
action="{{ route('petani.pendidikan-pelatihan.sertifikasi.destroy', [$petani->id, $row->id]) }}"
|
||||||
class="delete-db-form">
|
class="delete-db-form">
|
||||||
@csrf
|
@csrf
|
||||||
@method('DELETE')
|
@method('DELETE')
|
||||||
|
<input type="hidden" name="redirect_fragment" value="section-sertifikasi">
|
||||||
|
|
||||||
<button type="submit" class="btn btn-outline-danger">
|
<button type="submit" class="btn btn-outline-danger">
|
||||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||||
@@ -252,6 +260,7 @@
|
|||||||
action="{{ route('petani.pendidikan-pelatihan.sertifikasi.store', $petani->id) }}"
|
action="{{ route('petani.pendidikan-pelatihan.sertifikasi.store', $petani->id) }}"
|
||||||
class="form-repeater-sertifikasi">
|
class="form-repeater-sertifikasi">
|
||||||
@csrf
|
@csrf
|
||||||
|
<input type="hidden" name="redirect_fragment" value="section-sertifikasi">
|
||||||
|
|
||||||
<div data-repeater-list="sertifikasi">
|
<div data-repeater-list="sertifikasi">
|
||||||
<div data-repeater-item>
|
<div data-repeater-item>
|
||||||
@@ -536,4 +545,4 @@ $(function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -517,6 +517,57 @@
|
|||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
||||||
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk').select2();
|
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk').select2();
|
||||||
|
|
||||||
|
function syncTeknikPemangkasanState() {
|
||||||
|
const tidakPernahMemangkas = $('#frekuensi-pemangkasan-komoditas-utama').val() === '{{ \App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama::TIDAK_PERNAH->value }}';
|
||||||
|
const $teknikInputs = $('input[name="teknik_pemangkasan[]"]');
|
||||||
|
const $lainnyaInput = $('#input-teknik-pemangkasan-lainnya');
|
||||||
|
|
||||||
|
$teknikInputs
|
||||||
|
.prop('disabled', tidakPernahMemangkas)
|
||||||
|
.closest('.form-check')
|
||||||
|
.toggleClass('opacity-50', tidakPernahMemangkas);
|
||||||
|
|
||||||
|
if (tidakPernahMemangkas) {
|
||||||
|
$teknikInputs.prop('checked', false);
|
||||||
|
$lainnyaInput.val('');
|
||||||
|
}
|
||||||
|
|
||||||
|
$lainnyaInput.prop('disabled', tidakPernahMemangkas || !$('#teknik-pemangkasan-lainnya').is(':checked'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#frekuensi-pemangkasan-komoditas-utama, #teknik-pemangkasan-lainnya').on('change select2:select select2:clear', syncTeknikPemangkasanState);
|
||||||
|
syncTeknikPemangkasanState();
|
||||||
|
|
||||||
|
function syncPemupukanState() {
|
||||||
|
const tidakPernahMemberiPupuk = $('#pemberian-pupuk').val() === '{{ \App\Enums\PraktikBudidaya\PemberianPupuk::TIDAK_PERNAH->value }}';
|
||||||
|
const $pemupukanFields = $(
|
||||||
|
'#jenis-pupuk, ' +
|
||||||
|
'input[name="frekuensi_pemupukan"], #input-frekuensi-pemupukan-lainnya, ' +
|
||||||
|
'#estimasi-dosis-pupuk-organik, #estimasi-dosis-pupuk-anorganik, ' +
|
||||||
|
'input[name="waktu_pemberian_pupuk"], #input-waktu-pemberian-pupuk-lainnya, ' +
|
||||||
|
'input[name="cara_pemberian_pupuk"], #input-cara-pemberian-pupuk-lainnya'
|
||||||
|
);
|
||||||
|
|
||||||
|
$pemupukanFields
|
||||||
|
.prop('disabled', tidakPernahMemberiPupuk)
|
||||||
|
.closest('.form-check, .form-control-validation')
|
||||||
|
.toggleClass('opacity-50', tidakPernahMemberiPupuk);
|
||||||
|
|
||||||
|
if (tidakPernahMemberiPupuk) {
|
||||||
|
$('#jenis-pupuk').val('').trigger('change.select2');
|
||||||
|
$('input[name="frekuensi_pemupukan"], input[name="waktu_pemberian_pupuk"], input[name="cara_pemberian_pupuk"]').prop('checked', false);
|
||||||
|
$('#input-frekuensi-pemupukan-lainnya, #estimasi-dosis-pupuk-organik, #estimasi-dosis-pupuk-anorganik, #input-waktu-pemberian-pupuk-lainnya, #input-cara-pemberian-pupuk-lainnya').val('');
|
||||||
|
} else {
|
||||||
|
$('#input-frekuensi-pemupukan-lainnya').prop('disabled', !$('input[data-target="#input-frekuensi-pemupukan-lainnya"]').is(':checked'));
|
||||||
|
$('#input-waktu-pemberian-pupuk-lainnya').prop('disabled', !$('input[data-target="#input-waktu-pemberian-pupuk-lainnya"]').is(':checked'));
|
||||||
|
$('#input-cara-pemberian-pupuk-lainnya').prop('disabled', !$('input[data-target="#input-cara-pemberian-pupuk-lainnya"]').is(':checked'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#pemberian-pupuk').on('change select2:select select2:clear', syncPemupukanState);
|
||||||
|
syncPemupukanState();
|
||||||
|
setTimeout(syncPemupukanState, 0);
|
||||||
|
|
||||||
const $switch = $('input[name="disimpan_untuk_diri_sendiri"]');
|
const $switch = $('input[name="disimpan_untuk_diri_sendiri"]');
|
||||||
const $text = $('#switch-text');
|
const $text = $('#switch-text');
|
||||||
@@ -636,6 +687,35 @@
|
|||||||
trigger.addEventListener('change', toggleInput);
|
trigger.addEventListener('change', toggleInput);
|
||||||
toggleInput();
|
toggleInput();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const frekuensiPemangkasan = document.getElementById('frekuensi-pemangkasan-komoditas-utama');
|
||||||
|
const teknikPemangkasanInputs = document.querySelectorAll('input[name="teknik_pemangkasan[]"]');
|
||||||
|
const teknikPemangkasanLainnya = document.getElementById('input-teknik-pemangkasan-lainnya');
|
||||||
|
|
||||||
|
function toggleTeknikPemangkasan() {
|
||||||
|
const tidakPernahMemangkas = frekuensiPemangkasan && frekuensiPemangkasan.value === '{{ \App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama::TIDAK_PERNAH->value }}';
|
||||||
|
|
||||||
|
teknikPemangkasanInputs.forEach(function (input) {
|
||||||
|
input.disabled = tidakPernahMemangkas;
|
||||||
|
input.closest('.form-check')?.classList.toggle('opacity-50', tidakPernahMemangkas);
|
||||||
|
|
||||||
|
if (tidakPernahMemangkas) {
|
||||||
|
input.checked = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (teknikPemangkasanLainnya) {
|
||||||
|
teknikPemangkasanLainnya.disabled = tidakPernahMemangkas || !document.getElementById('teknik-pemangkasan-lainnya')?.checked;
|
||||||
|
|
||||||
|
if (tidakPernahMemangkas) {
|
||||||
|
teknikPemangkasanLainnya.value = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
frekuensiPemangkasan?.addEventListener('change', toggleTeknikPemangkasan);
|
||||||
|
document.getElementById('teknik-pemangkasan-lainnya')?.addEventListener('change', toggleTeknikPemangkasan);
|
||||||
|
toggleTeknikPemangkasan();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -39,7 +39,8 @@
|
|||||||
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="card mb-6">
|
<input type="hidden" name="redirect_fragment" value="section-opt">
|
||||||
|
<div class="card mb-6" id="section-praktik-pemupukan">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<h5 class="pb-4 border-bottom mb-4">Persiapan Lahan & Tanaman</h5>
|
<h5 class="pb-4 border-bottom mb-4">Persiapan Lahan & Tanaman</h5>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -541,8 +542,9 @@
|
|||||||
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
|
<input type="hidden" name="redirect_fragment" value="section-biaya-produksi">
|
||||||
|
|
||||||
<div class="card mb-6">
|
<div class="card mb-6" id="section-opt">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<!-- INFORMASI PETANI -->
|
<!-- INFORMASI PETANI -->
|
||||||
<h5 class="pb-4 border-bottom mb-4">Pengendalian Organisme Pengganggu Tumbuhan (OPT)</h5>
|
<h5 class="pb-4 border-bottom mb-4">Pengendalian Organisme Pengganggu Tumbuhan (OPT)</h5>
|
||||||
@@ -1048,7 +1050,8 @@
|
|||||||
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="card mb-6">
|
<input type="hidden" name="redirect_fragment" value="section-penanganan-panen">
|
||||||
|
<div class="card mb-6" id="section-biaya-produksi">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<h5 class="pb-4 border-bottom mb-4">Struktur Biaya Produksi Permusim</h5>
|
<h5 class="pb-4 border-bottom mb-4">Struktur Biaya Produksi Permusim</h5>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -1360,7 +1363,8 @@
|
|||||||
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="card mb-6">
|
<input type="hidden" name="redirect_fragment" value="section-produktivitas">
|
||||||
|
<div class="card mb-6" id="section-penanganan-panen">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<h5 class="pb-4 border-bottom mb-4">Penanganan Awal Setelah Panen</h5>
|
<h5 class="pb-4 border-bottom mb-4">Penanganan Awal Setelah Panen</h5>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -1546,7 +1550,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="card mb-6">
|
<div class="card mb-6" id="section-produktivitas">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<h5 class="pb-4 border-bottom mb-4">
|
<h5 class="pb-4 border-bottom mb-4">
|
||||||
Produktivitas Rata-rata 3 Musim Panen Terakhir per Komoditas
|
Produktivitas Rata-rata 3 Musim Panen Terakhir per Komoditas
|
||||||
@@ -1579,6 +1583,7 @@
|
|||||||
<form method="POST" action="{{ route('petani.survey-produktivitas.destroy', [$petani->id, $row->id]) }}">
|
<form method="POST" action="{{ route('petani.survey-produktivitas.destroy', [$petani->id, $row->id]) }}">
|
||||||
@csrf
|
@csrf
|
||||||
@method('DELETE')
|
@method('DELETE')
|
||||||
|
<input type="hidden" name="redirect_fragment" value="section-produktivitas">
|
||||||
<button type="submit" class="btn btn-outline-danger">
|
<button type="submit" class="btn btn-outline-danger">
|
||||||
<i class="icon-base ti tabler-trash icon-sm"></i>
|
<i class="icon-base ti tabler-trash icon-sm"></i>
|
||||||
</button>
|
</button>
|
||||||
@@ -1593,41 +1598,66 @@
|
|||||||
action="{{ route('petani.survey-produktivitas.store', $petani->id) }}"
|
action="{{ route('petani.survey-produktivitas.store', $petani->id) }}"
|
||||||
class="form-repeater">
|
class="form-repeater">
|
||||||
@csrf
|
@csrf
|
||||||
|
<input type="hidden" name="redirect_fragment" value="section-produktivitas">
|
||||||
|
|
||||||
|
@php
|
||||||
|
$produktivitasRows = old('produktivitas_komoditas');
|
||||||
|
|
||||||
|
if (!is_array($produktivitasRows) || count($produktivitasRows) === 0) {
|
||||||
|
$produktivitasRows = [
|
||||||
|
[
|
||||||
|
'komoditas_id' => null,
|
||||||
|
'hasil_panen_3_musim' => null,
|
||||||
|
'satuan' => null,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
@endphp
|
||||||
|
|
||||||
<div data-repeater-list="produktivitas_komoditas">
|
<div data-repeater-list="produktivitas_komoditas">
|
||||||
|
@foreach ($produktivitasRows as $index => $produktivitasRow)
|
||||||
<div data-repeater-item>
|
<div data-repeater-item>
|
||||||
<div class="row align-items-end">
|
<div class="row align-items-end">
|
||||||
|
|
||||||
<div class="col-md-4 mb-3">
|
<div class="col-md-4 mb-3">
|
||||||
<label class="form-label">Komoditas</label>
|
<label class="form-label">Komoditas</label>
|
||||||
<select name="komoditas_id" class="form-select">
|
<select name="komoditas_id" class="form-select @error('produktivitas_komoditas.' . $index . '.komoditas_id') is-invalid @enderror">
|
||||||
<option value="">Pilih Komoditas</option>
|
<option value="">Pilih Komoditas</option>
|
||||||
@foreach ($komoditas as $item)
|
@foreach ($komoditas as $item)
|
||||||
<option value="{{ $item->id }}">{{ $item->nama }}</option>
|
<option value="{{ $item->id }}" @selected((string) data_get($produktivitasRow, 'komoditas_id') === (string) $item->id)>{{ $item->nama }}</option>
|
||||||
@endforeach
|
@endforeach
|
||||||
</select>
|
</select>
|
||||||
|
@error('produktivitas_komoditas.' . $index . '.komoditas_id')
|
||||||
|
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3 mb-3">
|
<div class="col-md-3 mb-3">
|
||||||
<label class="form-label">Hasil</label>
|
<label class="form-label">Hasil</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="number" name="hasil_panen_3_musim" class="form-control" step="0.01" min="0">
|
<input type="number" name="hasil_panen_3_musim" class="form-control @error('produktivitas_komoditas.' . $index . '.hasil_panen_3_musim') is-invalid @enderror" step="0.01" min="0" value="{{ data_get($produktivitasRow, 'hasil_panen_3_musim') }}">
|
||||||
<span class="input-group-text">Kg</span>
|
<span class="input-group-text">Kg</span>
|
||||||
</div>
|
</div>
|
||||||
|
@error('produktivitas_komoditas.' . $index . '.hasil_panen_3_musim')
|
||||||
|
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3 mb-3">
|
<div class="col-md-3 mb-3">
|
||||||
<label class="form-label d-block">Satuan</label>
|
<label class="form-label d-block">Satuan</label>
|
||||||
|
|
||||||
<label class="form-check form-check-inline">
|
<label class="form-check form-check-inline">
|
||||||
<input class="form-check-input" type="radio" name="satuan" value="ha_tahun">
|
<input class="form-check-input @error('produktivitas_komoditas.' . $index . '.satuan') is-invalid @enderror" type="radio" name="satuan" value="ha_tahun" @checked(data_get($produktivitasRow, 'satuan') === 'ha_tahun')>
|
||||||
<span class="form-check-label">Ha/Tahun</span>
|
<span class="form-check-label">Ha/Tahun</span>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label class="form-check form-check-inline">
|
<label class="form-check form-check-inline">
|
||||||
<input class="form-check-input" type="radio" name="satuan" value="pohon_tahun">
|
<input class="form-check-input @error('produktivitas_komoditas.' . $index . '.satuan') is-invalid @enderror" type="radio" name="satuan" value="pohon_tahun" @checked(data_get($produktivitasRow, 'satuan') === 'pohon_tahun')>
|
||||||
<span class="form-check-label">Pohon/Tahun</span>
|
<span class="form-check-label">Pohon/Tahun</span>
|
||||||
</label>
|
</label>
|
||||||
|
@error('produktivitas_komoditas.' . $index . '.satuan')
|
||||||
|
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||||
|
@enderror
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-2 mb-3">
|
<div class="col-md-2 mb-3">
|
||||||
@@ -1639,6 +1669,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
</div>
|
</div>
|
||||||
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mt-4 d-flex justify-content-between">
|
<div class="mt-4 d-flex justify-content-between">
|
||||||
@@ -1657,7 +1688,8 @@
|
|||||||
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.update', [$petani->id, $praktikBudidaya->id]) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="card mb-6">
|
<input type="hidden" name="redirect_fragment" value="section-kehilangan-hasil">
|
||||||
|
<div class="card mb-6" id="section-kehilangan-hasil">
|
||||||
<div class="card-body pt-12">
|
<div class="card-body pt-12">
|
||||||
<h5 class="pb-4 border-bottom mb-4">Kehilangan Hasil Akibat Organisme Pengganggu Tumbuhan (OPT)</h5>
|
<h5 class="pb-4 border-bottom mb-4">Kehilangan Hasil Akibat Organisme Pengganggu Tumbuhan (OPT)</h5>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -1706,12 +1738,76 @@
|
|||||||
</div>
|
</div>
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
|
@push('scripts-head')
|
||||||
|
<style>
|
||||||
|
#section-praktik-pemupukan,
|
||||||
|
#section-opt,
|
||||||
|
#section-biaya-produksi,
|
||||||
|
#section-penanganan-panen,
|
||||||
|
#section-produktivitas,
|
||||||
|
#section-kehilangan-hasil {
|
||||||
|
scroll-margin-top: 96px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@push('scripts')
|
@push('scripts')
|
||||||
<script>
|
<script>
|
||||||
'use strict';
|
'use strict';
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
|
||||||
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk, #metode-penanganan-hama-penyakit, #intensitas-serangan, #waktu-kemunculan-terparah, #frekuensi-sanitasi-lahan, #penanganan-sisa-buah-ranting, #penanganan-gulma, #kondisi-pengelolaan-air-irigasi, #kebutuhan-air-permusim, #pemahaman-manfaat-konservasi, #dasar-penentuan-panen, #praktik-sortasi, #bentuk-sortasi, #estimasi-kehilangan-akibat-opt, #tingkat-reject, #tindakan-hasil-reject, #estimasi-kehilangan-akibat-hama, #komoditas-id').select2();
|
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk, #metode-penanganan-hama-penyakit, #intensitas-serangan, #waktu-kemunculan-terparah, #frekuensi-sanitasi-lahan, #penanganan-sisa-buah-ranting, #penanganan-gulma, #kondisi-pengelolaan-air-irigasi, #kebutuhan-air-permusim, #pemahaman-manfaat-konservasi, #dasar-penentuan-panen, #praktik-sortasi, #bentuk-sortasi, #estimasi-kehilangan-akibat-opt, #tingkat-reject, #tindakan-hasil-reject, #estimasi-kehilangan-akibat-hama, #komoditas-id').select2();
|
||||||
|
|
||||||
|
function syncTeknikPemangkasanState() {
|
||||||
|
const tidakPernahMemangkas = $('#frekuensi-pemangkasan-komoditas-utama').val() === '{{ \App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama::TIDAK_PERNAH->value }}';
|
||||||
|
const $teknikInputs = $('input[name="teknik_pemangkasan[]"]');
|
||||||
|
const $lainnyaInput = $('#input-teknik-pemangkasan-lainnya');
|
||||||
|
|
||||||
|
$teknikInputs
|
||||||
|
.prop('disabled', tidakPernahMemangkas)
|
||||||
|
.closest('.form-check')
|
||||||
|
.toggleClass('opacity-50', tidakPernahMemangkas);
|
||||||
|
|
||||||
|
if (tidakPernahMemangkas) {
|
||||||
|
$teknikInputs.prop('checked', false);
|
||||||
|
$lainnyaInput.val('');
|
||||||
|
}
|
||||||
|
|
||||||
|
$lainnyaInput.prop('disabled', tidakPernahMemangkas || !$('#teknik-pemangkasan-lainnya').is(':checked'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#frekuensi-pemangkasan-komoditas-utama, #teknik-pemangkasan-lainnya').on('change select2:select select2:clear', syncTeknikPemangkasanState);
|
||||||
|
syncTeknikPemangkasanState();
|
||||||
|
|
||||||
|
function syncPemupukanState() {
|
||||||
|
const tidakPernahMemberiPupuk = $('#pemberian-pupuk').val() === '{{ \App\Enums\PraktikBudidaya\PemberianPupuk::TIDAK_PERNAH->value }}';
|
||||||
|
const $pemupukanFields = $(
|
||||||
|
'#jenis-pupuk, ' +
|
||||||
|
'input[name="frekuensi_pemupukan"], #input-frekuensi-pemupukan-lainnya, ' +
|
||||||
|
'#estimasi-dosis-pupuk-organik, #estimasi-dosis-pupuk-anorganik, ' +
|
||||||
|
'input[name="waktu_pemberian_pupuk"], #input-waktu-pemberian-pupuk-lainnya, ' +
|
||||||
|
'input[name="cara_pemberian_pupuk"], #input-cara-pemberian-pupuk-lainnya'
|
||||||
|
);
|
||||||
|
|
||||||
|
$pemupukanFields
|
||||||
|
.prop('disabled', tidakPernahMemberiPupuk)
|
||||||
|
.closest('.form-check, .form-control-validation')
|
||||||
|
.toggleClass('opacity-50', tidakPernahMemberiPupuk);
|
||||||
|
|
||||||
|
if (tidakPernahMemberiPupuk) {
|
||||||
|
$('#jenis-pupuk').val('').trigger('change.select2');
|
||||||
|
$('input[name="frekuensi_pemupukan"], input[name="waktu_pemberian_pupuk"], input[name="cara_pemberian_pupuk"]').prop('checked', false);
|
||||||
|
$('#input-frekuensi-pemupukan-lainnya, #estimasi-dosis-pupuk-organik, #estimasi-dosis-pupuk-anorganik, #input-waktu-pemberian-pupuk-lainnya, #input-cara-pemberian-pupuk-lainnya').val('');
|
||||||
|
} else {
|
||||||
|
$('#input-frekuensi-pemupukan-lainnya').prop('disabled', !$('input[data-target="#input-frekuensi-pemupukan-lainnya"]').is(':checked'));
|
||||||
|
$('#input-waktu-pemberian-pupuk-lainnya').prop('disabled', !$('input[data-target="#input-waktu-pemberian-pupuk-lainnya"]').is(':checked'));
|
||||||
|
$('#input-cara-pemberian-pupuk-lainnya').prop('disabled', !$('input[data-target="#input-cara-pemberian-pupuk-lainnya"]').is(':checked'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#pemberian-pupuk').on('change select2:select select2:clear', syncPemupukanState);
|
||||||
|
syncPemupukanState();
|
||||||
|
setTimeout(syncPemupukanState, 0);
|
||||||
|
|
||||||
const $switch = $('input[name="disimpan_untuk_diri_sendiri"]');
|
const $switch = $('input[name="disimpan_untuk_diri_sendiri"]');
|
||||||
const $text = $('#switch-text');
|
const $text = $('#switch-text');
|
||||||
@@ -1822,6 +1918,35 @@
|
|||||||
toggleInput();
|
toggleInput();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const frekuensiPemangkasan = document.getElementById('frekuensi-pemangkasan-komoditas-utama');
|
||||||
|
const teknikPemangkasanInputs = document.querySelectorAll('input[name="teknik_pemangkasan[]"]');
|
||||||
|
const teknikPemangkasanLainnya = document.getElementById('input-teknik-pemangkasan-lainnya');
|
||||||
|
|
||||||
|
function toggleTeknikPemangkasan() {
|
||||||
|
const tidakPernahMemangkas = frekuensiPemangkasan && frekuensiPemangkasan.value === '{{ \App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama::TIDAK_PERNAH->value }}';
|
||||||
|
|
||||||
|
teknikPemangkasanInputs.forEach(function (input) {
|
||||||
|
input.disabled = tidakPernahMemangkas;
|
||||||
|
input.closest('.form-check')?.classList.toggle('opacity-50', tidakPernahMemangkas);
|
||||||
|
|
||||||
|
if (tidakPernahMemangkas) {
|
||||||
|
input.checked = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (teknikPemangkasanLainnya) {
|
||||||
|
teknikPemangkasanLainnya.disabled = tidakPernahMemangkas || !document.getElementById('teknik-pemangkasan-lainnya')?.checked;
|
||||||
|
|
||||||
|
if (tidakPernahMemangkas) {
|
||||||
|
teknikPemangkasanLainnya.value = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
frekuensiPemangkasan?.addEventListener('change', toggleTeknikPemangkasan);
|
||||||
|
document.getElementById('teknik-pemangkasan-lainnya')?.addEventListener('change', toggleTeknikPemangkasan);
|
||||||
|
toggleTeknikPemangkasan();
|
||||||
|
|
||||||
const biayaProduksiFields = [
|
const biayaProduksiFields = [
|
||||||
'upah-tenaga-kerja',
|
'upah-tenaga-kerja',
|
||||||
'biaya-bibit',
|
'biaya-bibit',
|
||||||
@@ -1991,4 +2116,4 @@ $(function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|||||||
@@ -1,5 +1,17 @@
|
|||||||
@extends('layout.main')
|
@extends('layout.main')
|
||||||
|
|
||||||
|
@push('scripts-head')
|
||||||
|
<style>
|
||||||
|
#section-utama,
|
||||||
|
#section-sosial-budaya,
|
||||||
|
#section-keanggotaan-kelompok,
|
||||||
|
#section-akses-keuangan,
|
||||||
|
#section-keterikatan-hutang {
|
||||||
|
scroll-margin-top: 96px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container-xxl flex-grow-1 container-p-y">
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
@if (session('success'))
|
@if (session('success'))
|
||||||
@@ -1062,6 +1074,20 @@
|
|||||||
const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue);
|
const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue);
|
||||||
const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue);
|
const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue);
|
||||||
const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue));
|
const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue));
|
||||||
|
const sectionAnchors = {
|
||||||
|
utama: 'section-utama',
|
||||||
|
sosial_budaya: 'section-sosial-budaya',
|
||||||
|
keanggotaan_kelompok: 'section-keanggotaan-kelompok',
|
||||||
|
akses_keuangan: 'section-akses-keuangan',
|
||||||
|
keterikatan_hutang: 'section-keterikatan-hutang'
|
||||||
|
};
|
||||||
|
const nextSectionAnchors = {
|
||||||
|
utama: 'section-sosial-budaya',
|
||||||
|
sosial_budaya: 'section-keanggotaan-kelompok',
|
||||||
|
keanggotaan_kelompok: 'section-akses-keuangan',
|
||||||
|
akses_keuangan: 'section-keterikatan-hutang',
|
||||||
|
keterikatan_hutang: 'section-keterikatan-hutang'
|
||||||
|
};
|
||||||
const fieldExamples = {
|
const fieldExamples = {
|
||||||
jumlah_tanggungan: 'Contoh: 4',
|
jumlah_tanggungan: 'Contoh: 4',
|
||||||
anak_masih_sekolah: 'Contoh: 2',
|
anak_masih_sekolah: 'Contoh: 2',
|
||||||
@@ -1399,7 +1425,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function syncPihakMembantuFields() {
|
function syncPihakMembantuFields() {
|
||||||
const isTidakAda = $('#pihak-membantu').val() === pihakMembantuTanpaBantuan;
|
const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1';
|
||||||
|
const isTidakAda = !isAdaSengketa || $('#pihak-membantu').val() === pihakMembantuTanpaBantuan;
|
||||||
const $fields = $('#pihak-membantu-nama, #tahun-bantuan');
|
const $fields = $('#pihak-membantu-nama, #tahun-bantuan');
|
||||||
|
|
||||||
$fields.prop('disabled', isTidakAda);
|
$fields.prop('disabled', isTidakAda);
|
||||||
@@ -1409,6 +1436,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function syncSengketaFields() {
|
||||||
|
const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1';
|
||||||
|
const $fields = $('#keterangan-sengketa, #pihak-membantu, #status-konflik');
|
||||||
|
const $assistanceFields = $('#pihak-membantu-nama, #tahun-bantuan');
|
||||||
|
|
||||||
|
$fields.prop('disabled', !isAdaSengketa);
|
||||||
|
|
||||||
|
if (!isAdaSengketa) {
|
||||||
|
$fields.add($assistanceFields).val('');
|
||||||
|
$fields.filter('select').trigger('change.select2');
|
||||||
|
}
|
||||||
|
|
||||||
|
syncPihakMembantuFields();
|
||||||
|
}
|
||||||
|
|
||||||
function syncPernahJualHargaLebihTinggiFields() {
|
function syncPernahJualHargaLebihTinggiFields() {
|
||||||
const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah;
|
const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah;
|
||||||
const $field = $('#penyebab-harga-lebih-tinggi');
|
const $field = $('#penyebab-harga-lebih-tinggi');
|
||||||
@@ -1601,6 +1643,37 @@
|
|||||||
clearPendapatanRowValidation($row);
|
clearPendapatanRowValidation($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setupSectionAnchors() {
|
||||||
|
$('input[name="form_section"]').each(function () {
|
||||||
|
const section = this.value;
|
||||||
|
const anchor = sectionAnchors[section];
|
||||||
|
const nextAnchor = nextSectionAnchors[section] || anchor;
|
||||||
|
const $form = $(this).closest('form');
|
||||||
|
|
||||||
|
if (anchor) {
|
||||||
|
$form.find('> .card').first().attr('id', anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextAnchor && !$form.find('input[name="redirect_fragment"]').length) {
|
||||||
|
$('<input>', {
|
||||||
|
type: 'hidden',
|
||||||
|
name: 'redirect_fragment',
|
||||||
|
value: nextAnchor
|
||||||
|
}).appendTo($form);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (window.location.hash) {
|
||||||
|
const target = document.getElementById(window.location.hash.substring(1));
|
||||||
|
|
||||||
|
if (target) {
|
||||||
|
setTimeout(function () {
|
||||||
|
target.scrollIntoView({ block: 'start' });
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions);
|
$(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions);
|
||||||
$(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () {
|
$(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () {
|
||||||
clearPendapatanRowValidation($(this).closest('.pendapatan-row'));
|
clearPendapatanRowValidation($(this).closest('.pendapatan-row'));
|
||||||
@@ -1636,6 +1709,7 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
$('#pihak-membantu').on('change', syncPihakMembantuFields);
|
$('#pihak-membantu').on('change', syncPihakMembantuFields);
|
||||||
|
$('input[name="ada_sengketa"]').on('change', syncSengketaFields);
|
||||||
$('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields);
|
$('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields);
|
||||||
$('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields);
|
$('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields);
|
||||||
$('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields);
|
$('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields);
|
||||||
@@ -1650,10 +1724,12 @@
|
|||||||
$('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields);
|
$('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields);
|
||||||
$('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields);
|
$('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields);
|
||||||
$('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields);
|
$('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields);
|
||||||
|
setupSectionAnchors();
|
||||||
applySosialEkonomiExamples();
|
applySosialEkonomiExamples();
|
||||||
syncKomoditasLainnyaOptions();
|
syncKomoditasLainnyaOptions();
|
||||||
setupAllPendapatanRows();
|
setupAllPendapatanRows();
|
||||||
syncPihakMembantuFields();
|
syncPihakMembantuFields();
|
||||||
|
syncSengketaFields();
|
||||||
syncPernahJualHargaLebihTinggiFields();
|
syncPernahJualHargaLebihTinggiFields();
|
||||||
syncPanutanFields();
|
syncPanutanFields();
|
||||||
syncTerdaftarKelompokFields();
|
syncTerdaftarKelompokFields();
|
||||||
|
|||||||
@@ -1,5 +1,17 @@
|
|||||||
@extends('layout.main')
|
@extends('layout.main')
|
||||||
|
|
||||||
|
@push('scripts-head')
|
||||||
|
<style>
|
||||||
|
#section-utama,
|
||||||
|
#section-sosial-budaya,
|
||||||
|
#section-keanggotaan-kelompok,
|
||||||
|
#section-akses-keuangan,
|
||||||
|
#section-keterikatan-hutang {
|
||||||
|
scroll-margin-top: 96px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container-xxl flex-grow-1 container-p-y">
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
@if (session('success'))
|
@if (session('success'))
|
||||||
@@ -1058,6 +1070,20 @@
|
|||||||
const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue);
|
const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue);
|
||||||
const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue);
|
const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue);
|
||||||
const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue));
|
const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue));
|
||||||
|
const sectionAnchors = {
|
||||||
|
utama: 'section-utama',
|
||||||
|
sosial_budaya: 'section-sosial-budaya',
|
||||||
|
keanggotaan_kelompok: 'section-keanggotaan-kelompok',
|
||||||
|
akses_keuangan: 'section-akses-keuangan',
|
||||||
|
keterikatan_hutang: 'section-keterikatan-hutang'
|
||||||
|
};
|
||||||
|
const nextSectionAnchors = {
|
||||||
|
utama: 'section-sosial-budaya',
|
||||||
|
sosial_budaya: 'section-keanggotaan-kelompok',
|
||||||
|
keanggotaan_kelompok: 'section-akses-keuangan',
|
||||||
|
akses_keuangan: 'section-keterikatan-hutang',
|
||||||
|
keterikatan_hutang: 'section-keterikatan-hutang'
|
||||||
|
};
|
||||||
const fieldExamples = {
|
const fieldExamples = {
|
||||||
jumlah_tanggungan: 'Contoh: 4',
|
jumlah_tanggungan: 'Contoh: 4',
|
||||||
anak_masih_sekolah: 'Contoh: 2',
|
anak_masih_sekolah: 'Contoh: 2',
|
||||||
@@ -1395,7 +1421,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function syncPihakMembantuFields() {
|
function syncPihakMembantuFields() {
|
||||||
const isTidakAda = $('#pihak-membantu').val() === pihakMembantuTanpaBantuan;
|
const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1';
|
||||||
|
const isTidakAda = !isAdaSengketa || $('#pihak-membantu').val() === pihakMembantuTanpaBantuan;
|
||||||
const $fields = $('#pihak-membantu-nama, #tahun-bantuan');
|
const $fields = $('#pihak-membantu-nama, #tahun-bantuan');
|
||||||
|
|
||||||
$fields.prop('disabled', isTidakAda);
|
$fields.prop('disabled', isTidakAda);
|
||||||
@@ -1405,6 +1432,21 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function syncSengketaFields() {
|
||||||
|
const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1';
|
||||||
|
const $fields = $('#keterangan-sengketa, #pihak-membantu, #status-konflik');
|
||||||
|
const $assistanceFields = $('#pihak-membantu-nama, #tahun-bantuan');
|
||||||
|
|
||||||
|
$fields.prop('disabled', !isAdaSengketa);
|
||||||
|
|
||||||
|
if (!isAdaSengketa) {
|
||||||
|
$fields.add($assistanceFields).val('');
|
||||||
|
$fields.filter('select').trigger('change.select2');
|
||||||
|
}
|
||||||
|
|
||||||
|
syncPihakMembantuFields();
|
||||||
|
}
|
||||||
|
|
||||||
function syncPernahJualHargaLebihTinggiFields() {
|
function syncPernahJualHargaLebihTinggiFields() {
|
||||||
const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah;
|
const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah;
|
||||||
const $field = $('#penyebab-harga-lebih-tinggi');
|
const $field = $('#penyebab-harga-lebih-tinggi');
|
||||||
@@ -1597,6 +1639,37 @@
|
|||||||
clearPendapatanRowValidation($row);
|
clearPendapatanRowValidation($row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setupSectionAnchors() {
|
||||||
|
$('input[name="form_section"]').each(function () {
|
||||||
|
const section = this.value;
|
||||||
|
const anchor = sectionAnchors[section];
|
||||||
|
const nextAnchor = nextSectionAnchors[section] || anchor;
|
||||||
|
const $form = $(this).closest('form');
|
||||||
|
|
||||||
|
if (anchor) {
|
||||||
|
$form.find('> .card').first().attr('id', anchor);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextAnchor && !$form.find('input[name="redirect_fragment"]').length) {
|
||||||
|
$('<input>', {
|
||||||
|
type: 'hidden',
|
||||||
|
name: 'redirect_fragment',
|
||||||
|
value: nextAnchor
|
||||||
|
}).appendTo($form);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (window.location.hash) {
|
||||||
|
const target = document.getElementById(window.location.hash.substring(1));
|
||||||
|
|
||||||
|
if (target) {
|
||||||
|
setTimeout(function () {
|
||||||
|
target.scrollIntoView({ block: 'start' });
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions);
|
$(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions);
|
||||||
$(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () {
|
$(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () {
|
||||||
clearPendapatanRowValidation($(this).closest('.pendapatan-row'));
|
clearPendapatanRowValidation($(this).closest('.pendapatan-row'));
|
||||||
@@ -1632,6 +1705,7 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
$('#pihak-membantu').on('change', syncPihakMembantuFields);
|
$('#pihak-membantu').on('change', syncPihakMembantuFields);
|
||||||
|
$('input[name="ada_sengketa"]').on('change', syncSengketaFields);
|
||||||
$('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields);
|
$('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields);
|
||||||
$('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields);
|
$('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields);
|
||||||
$('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields);
|
$('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields);
|
||||||
@@ -1646,10 +1720,12 @@
|
|||||||
$('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields);
|
$('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields);
|
||||||
$('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields);
|
$('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields);
|
||||||
$('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields);
|
$('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields);
|
||||||
|
setupSectionAnchors();
|
||||||
applySosialEkonomiExamples();
|
applySosialEkonomiExamples();
|
||||||
syncKomoditasLainnyaOptions();
|
syncKomoditasLainnyaOptions();
|
||||||
setupAllPendapatanRows();
|
setupAllPendapatanRows();
|
||||||
syncPihakMembantuFields();
|
syncPihakMembantuFields();
|
||||||
|
syncSengketaFields();
|
||||||
syncPernahJualHargaLebihTinggiFields();
|
syncPernahJualHargaLebihTinggiFields();
|
||||||
syncPanutanFields();
|
syncPanutanFields();
|
||||||
syncTerdaftarKelompokFields();
|
syncTerdaftarKelompokFields();
|
||||||
|
|||||||
@@ -1,12 +1,21 @@
|
|||||||
@forelse($tujuan->aktivitas as $aktivitas)
|
@forelse($tujuan->aktivitas as $aktivitas)
|
||||||
|
@php
|
||||||
|
$aktivitasRowspan = max($aktivitas->target->count(), 1);
|
||||||
|
|
||||||
|
$firstAktivitasRow = true;
|
||||||
|
@endphp
|
||||||
@forelse($aktivitas->target as $targetAktivitas)
|
@forelse($aktivitas->target as $targetAktivitas)
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="text-heading">{{ $transformasi->kode }} {{ $transformasi->nama }} (ID: {{ $transformasi->id }})</span></td>
|
@if($firstAktivitasRow)
|
||||||
<td><span class="{{ $aktivitas->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $aktivitas->kode }} {{ $aktivitas->nama }} (ID: {{ $aktivitas->id }})</span></td>
|
<td rowspan="{{ $aktivitasRowspan }}" class="align-top"><span class="{{ $aktivitas->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $aktivitas->kode }} {{ $aktivitas->nama }}</span></td>
|
||||||
<td><span class="text-muted">{{ $aktivitas->deskripsi }}</span></td>
|
<td rowspan="{{ $aktivitasRowspan }}" class="align-top"><span class="text-muted">{{ $aktivitas->deskripsi }}</span></td>
|
||||||
<td><span class="text-muted">{{ $aktivitas->indikator }}</span></td>
|
<td rowspan="{{ $aktivitasRowspan }}" class="align-top"><span class="text-muted">{{ $aktivitas->indikator }}</span></td>
|
||||||
<td><span class="text-muted">{{ $targetAktivitas->variabel }} (ID: {{ $targetAktivitas->id }}, Tipe: {{ $targetAktivitas->tipe }}, Realiasasi: {{ $targetAktivitas->tipe_realisasi }})</span></td>
|
@php
|
||||||
<td>
|
$firstAktivitasRow = false;
|
||||||
|
@endphp
|
||||||
|
@endif
|
||||||
|
<td class="align-top"><span class="text-muted">{{ $targetAktivitas->variabel }}</span></td>
|
||||||
|
<td class="align-top">
|
||||||
@if($targetAktivitas->tipe === 'integer')
|
@if($targetAktivitas->tipe === 'integer')
|
||||||
<span class="text-muted">{{ $targetAktivitas->target_integer }}</span>
|
<span class="text-muted">{{ $targetAktivitas->target_integer }}</span>
|
||||||
@elseif($targetAktivitas->tipe === 'float')
|
@elseif($targetAktivitas->tipe === 'float')
|
||||||
@@ -15,7 +24,7 @@
|
|||||||
<span class="text-muted">{{ $targetAktivitas->target_boolean ? 'Ya' : 'Tidak' }}</span>
|
<span class="text-muted">{{ $targetAktivitas->target_boolean ? 'Ya' : 'Tidak' }}</span>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td class="align-top">
|
||||||
@if($targetAktivitas->tipe === 'integer')
|
@if($targetAktivitas->tipe === 'integer')
|
||||||
<span class="text-muted">{{ $targetAktivitas->baseline_integer }}</span>
|
<span class="text-muted">{{ $targetAktivitas->baseline_integer }}</span>
|
||||||
@elseif($targetAktivitas->tipe === 'float')
|
@elseif($targetAktivitas->tipe === 'float')
|
||||||
@@ -24,7 +33,7 @@
|
|||||||
<span class="text-muted">{{ $targetAktivitas->baseline_boolean ? 'Ya' : 'Tidak' }}</span>
|
<span class="text-muted">{{ $targetAktivitas->baseline_boolean ? 'Ya' : 'Tidak' }}</span>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td class="align-top">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
||||||
<i class="icon-base ti tabler-dots-vertical"></i>
|
<i class="icon-base ti tabler-dots-vertical"></i>
|
||||||
@@ -44,14 +53,13 @@
|
|||||||
</tr>
|
</tr>
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="text-heading">{{ $transformasi->kode }} {{ $transformasi->nama }} (ID: {{ $transformasi->id }})</span></td>
|
<td class="align-top"><span class="{{ $aktivitas->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $aktivitas->kode }} {{ $aktivitas->nama }}</span></td>
|
||||||
<td><span class="{{ $aktivitas->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $aktivitas->kode }} {{ $aktivitas->nama }} (ID: {{ $aktivitas->id }})</span></td>
|
<td class="align-top"><span class="text-muted">{{ $aktivitas->deskripsi }}</span></td>
|
||||||
<td><span class="text-muted">{{ $aktivitas->deskripsi }}</span></td>
|
<td class="align-top"><span class="text-muted">{{ $aktivitas->indikator }}</span></td>
|
||||||
<td><span class="text-muted">{{ $aktivitas->indikator }}</span></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top">
|
||||||
<td>
|
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
||||||
<i class="icon-base ti tabler-dots-vertical"></i>
|
<i class="icon-base ti tabler-dots-vertical"></i>
|
||||||
|
|||||||
@@ -1,12 +1,40 @@
|
|||||||
|
@php
|
||||||
|
$transformasiRowspan = 0;
|
||||||
|
|
||||||
|
foreach ($transformasi->tujuan as $tujuan) {
|
||||||
|
$transformasiRowspan += max($tujuan->target->count(), 1);
|
||||||
|
|
||||||
|
foreach ($tujuan->aktivitas as $aktivitas) {
|
||||||
|
$transformasiRowspan += max($aktivitas->target->count(), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$firstTransformasiRow = true;
|
||||||
|
@endphp
|
||||||
@forelse($transformasi->tujuan as $tujuan)
|
@forelse($transformasi->tujuan as $tujuan)
|
||||||
|
@php
|
||||||
|
$tujuanRowspan = max($tujuan->target->count(), 1);
|
||||||
|
|
||||||
|
$firstTujuanRow = true;
|
||||||
|
@endphp
|
||||||
@forelse($tujuan->target as $target)
|
@forelse($tujuan->target as $target)
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="text-heading">{{ $transformasi->kode }} {{ $transformasi->nama }} (ID: {{ $transformasi->id }})</span></td>
|
@if($firstTransformasiRow)
|
||||||
<td><span class="{{ $tujuan->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $tujuan->kode }} {{ $tujuan->nama }} (ID: {{ $tujuan->id }})</span></td>
|
<td rowspan="{{ $transformasiRowspan }}" class="align-top">{{ $transformasi->kode }} {{ $transformasi->nama }}</td>
|
||||||
<td><span class="text-muted">{{ $tujuan->deskripsi }}</span></td>
|
@php
|
||||||
<td><span class="text-muted">{{ $tujuan->indikator }}</span></td>
|
$firstTransformasiRow = false;
|
||||||
<td><span class="text-muted">{{ $target->variabel }} (ID: {{ $target->id }}, Tipe: {{ $target->tipe }}, Realiasasi: {{ $target->tipe_realisasi }})</span></td>
|
@endphp
|
||||||
<td>
|
@endif
|
||||||
|
@if($firstTujuanRow)
|
||||||
|
<td rowspan="{{ $tujuanRowspan }}" class="align-top"><span class="{{ $tujuan->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $tujuan->kode }} {{ $tujuan->nama }}</span></td>
|
||||||
|
<td rowspan="{{ $tujuanRowspan }}" class="align-top"><span class="text-muted">{{ $tujuan->deskripsi }}</span></td>
|
||||||
|
<td rowspan="{{ $tujuanRowspan }}" class="align-top"><span class="text-muted">{{ $tujuan->indikator }}</span></td>
|
||||||
|
@php
|
||||||
|
$firstTujuanRow = false;
|
||||||
|
@endphp
|
||||||
|
@endif
|
||||||
|
<td class="align-top"><span class="text-muted">{{ $target->variabel }}</span></td>
|
||||||
|
<td class="align-top">
|
||||||
@if($target->tipe === 'integer')
|
@if($target->tipe === 'integer')
|
||||||
<span class="text-muted">{{ $target->target_integer }}</span>
|
<span class="text-muted">{{ $target->target_integer }}</span>
|
||||||
@elseif($target->tipe === 'float')
|
@elseif($target->tipe === 'float')
|
||||||
@@ -15,7 +43,7 @@
|
|||||||
<span class="text-muted">{{ $target->target_boolean ? 'Ya' : 'Tidak' }}</span>
|
<span class="text-muted">{{ $target->target_boolean ? 'Ya' : 'Tidak' }}</span>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td class="align-top">
|
||||||
@if($target->tipe === 'integer')
|
@if($target->tipe === 'integer')
|
||||||
<span class="text-muted">{{ $target->baseline_integer }}</span>
|
<span class="text-muted">{{ $target->baseline_integer }}</span>
|
||||||
@elseif($target->tipe === 'float')
|
@elseif($target->tipe === 'float')
|
||||||
@@ -24,7 +52,7 @@
|
|||||||
<span class="text-muted">{{ $target->baseline_boolean ? 'Ya' : 'Tidak' }}</span>
|
<span class="text-muted">{{ $target->baseline_boolean ? 'Ya' : 'Tidak' }}</span>
|
||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td class="align-top">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
||||||
<i class="icon-base ti tabler-dots-vertical"></i>
|
<i class="icon-base ti tabler-dots-vertical"></i>
|
||||||
@@ -50,14 +78,14 @@
|
|||||||
</tr>
|
</tr>
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="text-heading">{{ $transformasi->kode }} {{ $transformasi->nama }} (ID: {{ $transformasi->id }})</span></td>
|
<td class="align-top"><span class="text-heading">{{ $transformasi->kode }} {{ $transformasi->nama }}</span></td>
|
||||||
<td><span class="{{ $tujuan->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $tujuan->kode }} {{ $tujuan->nama }} (ID: {{ $tujuan->id }})</span></td>
|
<td class="align-top"><span class="{{ $tujuan->jenis_aktivitas == 'tujuan' ? 'text-heading' : 'text-muted' }}">{{ $tujuan->kode }} {{ $tujuan->nama }} (ID: {{ $tujuan->id }})</span></td>
|
||||||
<td><span class="text-muted">{{ $tujuan->deskripsi }}</span></td>
|
<td class="align-top"><span class="text-muted">{{ $tujuan->deskripsi }}</span></td>
|
||||||
<td><span class="text-muted">{{ $tujuan->indikator }}</span></td>
|
<td class="align-top"><span class="text-muted">{{ $tujuan->indikator }}</span></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td>
|
<td class="align-top">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
||||||
<i class="icon-base ti tabler-dots-vertical"></i>
|
<i class="icon-base ti tabler-dots-vertical"></i>
|
||||||
@@ -84,14 +112,14 @@
|
|||||||
@include('program.framework.view-aktivitas')
|
@include('program.framework.view-aktivitas')
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="text-heading">{{ $transformasi->kode }} {{ $transformasi->nama }}</span></td>
|
<td class="align-top"><span class="text-heading">{{ $transformasi->kode }} {{ $transformasi->nama }}</span></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td></td>
|
<td class="align-top"></td>
|
||||||
<td>
|
<td class="align-top">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
<button type="button" class="btn p-0 dropdown-toggle hide-arrow" data-bs-toggle="dropdown">
|
||||||
<i class="icon-base ti tabler-dots-vertical"></i>
|
<i class="icon-base ti tabler-dots-vertical"></i>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
<h6 class="mb-3">Informasi Kerangka Kerja</h6>
|
<h6 class="mb-3">Informasi Kerangka Kerja</h6>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-3 mb-4 form-control-validation">
|
<div class="col-md-6 mb-4 form-control-validation">
|
||||||
<label class="form-label" for="update-framework-nama">Nama Kerangka Kerja<span class="text-danger">*</span></label>
|
<label class="form-label" for="update-framework-nama">Nama Kerangka Kerja<span class="text-danger">*</span></label>
|
||||||
<input type="text" class="form-control" id="update" name="nama" placeholder="Cth: Tabel Pertanian" value="{{ old('nama', $framework->nama) }}" readonly/>
|
<input type="text" class="form-control" id="update" name="nama" placeholder="Cth: Tabel Pertanian" value="{{ old('nama', $framework->nama) }}" readonly/>
|
||||||
</div>
|
</div>
|
||||||
@@ -21,7 +21,9 @@
|
|||||||
<label class="form-label" for="update-framework-tahun">Tahun Implementasi<span class="text-danger">*</span></label>
|
<label class="form-label" for="update-framework-tahun">Tahun Implementasi<span class="text-danger">*</span></label>
|
||||||
<input type="number" step="1" min="2026" class="form-control" id="update-framework-tahun" name="tahun" placeholder="Cth: 2023" value="{{ old('tahun', $framework->tahun) ?? now()->year }}" readonly/>
|
<input type="number" step="1" min="2026" class="form-control" id="update-framework-tahun" name="tahun" placeholder="Cth: 2023" value="{{ old('tahun', $framework->tahun) ?? now()->year }}" readonly/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 mb-4 form-control-validation">
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 mb-4 form-control-validation">
|
||||||
<label class="form-label" for="update-framework-program">Untuk Program<span class="text-danger">*</span></label>
|
<label class="form-label" for="update-framework-program">Untuk Program<span class="text-danger">*</span></label>
|
||||||
<input type="text" class="form-control" id="update-framework-tahun" name="tahun" placeholder="Cth: 2023" value="{{ old('program_id', $framework->program->nama) }}" readonly/>
|
<input type="text" class="form-control" id="update-framework-tahun" name="tahun" placeholder="Cth: 2023" value="{{ old('program_id', $framework->program->nama) }}" readonly/>
|
||||||
</div>
|
</div>
|
||||||
@@ -41,8 +43,18 @@
|
|||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-md-12 mb-4 form-control-validation">
|
<div class="col-md-12 mb-4 form-control-validation">
|
||||||
|
|
||||||
<div class="table-responsive text-nowrap mb-4">
|
<div class="table-responsive mb-4">
|
||||||
<table class="table table-hover">
|
<table class="table table-hover">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 200px">
|
||||||
|
<col style="width: 300px">
|
||||||
|
<col style="width: 600px">
|
||||||
|
<col style="width: 300px">
|
||||||
|
<col style="width: 200px">
|
||||||
|
<col style="width: 25px; text-align: right">
|
||||||
|
<col style="width: 25px; text-align: right">
|
||||||
|
<col style="width: 10px'>
|
||||||
|
</colgroup>
|
||||||
<thead class="border-top">
|
<thead class="border-top">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Transformasi</th>
|
<th>Transformasi</th>
|
||||||
|
|||||||
Reference in New Issue
Block a user