Update Monitoring dan Verifikasi Petani
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Web\Monitoring;
|
||||
|
||||
use App\Enums\Role;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Web\Concerns\AksesMonitoringPetani;
|
||||
use App\Models\Pertanian\Petani;
|
||||
use App\Models\User;
|
||||
use App\Services\Produktivitas\KelengkapanPetani;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
/**
|
||||
* Menu Verifikasi > 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),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user