Petani, tab Monitoring (sub-tab Petani & Enumerator). */ class MonitoringPetaniController extends Controller { use AksesMonitoringPetani; public function index(Request $request) { $this->izinkan(); // Sub-tab Petani $petani = $this->queryPetani() ->with('creator:id,name') ->when($this->kataCari($request, 'search'), fn ($q, $cari) => $q->whereRaw('lower(nama) like ?', ["%{$cari}%"])) ->latest() ->paginate($this->perPage($request, 'per_page')) ->withQueryString() ->appends('sub', 'petani'); // Sub-tab Enumerator: jumlah petani yang diinput (created_by) $enumerator = User::query() ->where('role', Role::ENUMERATOR) ->withCount(['petaniDibuat as jumlah_petani' => fn (Builder $q) => $this->batasiKomoditas($q)]) ->when($this->kataCari($request, 'search_enumerator'), fn ($q, $cari) => $q->whereRaw('lower(name) like ?', ["%{$cari}%"])) ->orderByDesc('jumlah_petani') ->orderBy('name') ->paginate($this->perPage($request, 'per_page_enumerator'), ['*'], 'page_enumerator') ->withQueryString() ->appends('sub', 'enumerator'); return view('monitoring-verifikasi.monitoring', [ 'menu' => 'petani', 'petani' => $petani, 'ringkasan' => $this->ringkasan($petani->getCollection()), 'enumerator' => $enumerator, 'perPage' => self::PER_PAGE, ]); } /** Kartu rincian saat badge Input Skor / Wajib / Lainnya diklik (HTML, dimuat lewat fetch). */ public function detail(Petani $petani, string $jenis) { $this->izinkanPetani($petani); $petani->loadMissing(['desaKelurahan.kecamatan.kabupatenKota', 'skor:id,petani_id,skor_kesiapan_adopsi']); $kelengkapan = KelengkapanPetani::untuk($petani); return view('monitoring-verifikasi.petani-monitoring', [ 'bagian' => 'rincian', 'petani' => $petani, 'ringkasan' => $kelengkapan->ringkasanInput()[$jenis], 'rincian' => $kelengkapan->rincian($jenis)->groupBy('grup'), ]); } /** Kartu rincian saat jumlah petani seorang enumerator diklik: daftar petani + 3 hitungan input. */ public function enumerator(User $user) { $this->izinkan(); abort_unless($user->role === Role::ENUMERATOR, 404); $daftarPetani = $this->queryPetani() ->where('created_by', $user->id) ->orderBy('nama') ->get(); return view('monitoring-verifikasi.enumerator', [ 'bagian' => 'rincian', 'user' => $user, 'daftarPetani' => $daftarPetani, 'ringkasan' => $this->ringkasan($daftarPetani), ]); } }