151 lines
6.2 KiB
PHP
151 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Web\Dashboard;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
use App\Models\Pertanian\Petani;
|
|
use App\Models\Pertanian\Komoditas;
|
|
use App\Models\Pertanian\Lahan;
|
|
use App\Models\Pertanian\Tanaman;
|
|
use App\Models\Pertanian\SkorPetani;
|
|
|
|
class ProfilPetaniController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
|
abort(403);
|
|
}
|
|
$title = 'Dashboard Profil Petani';
|
|
|
|
$komoditas = Komoditas::where('is_utama', true)->get();
|
|
|
|
$petani = Petani::pluck('id');
|
|
$lahan = Lahan::whereIn('petani_id', $petani)->get();
|
|
|
|
$petaniSummary = Petani::select(
|
|
'komoditas_id',
|
|
DB::raw('COUNT(*) as total')
|
|
)
|
|
->groupBy('komoditas_id')
|
|
->get();
|
|
$lahanSummary = Lahan::select(
|
|
'komoditas_id',
|
|
DB::raw('COUNT(*) as total'),
|
|
DB::raw('SUM(luas_lahan) as luas_lahan')
|
|
)
|
|
->whereIn('petani_id', $petani)
|
|
->groupBy('komoditas_id')
|
|
->get();
|
|
$tanamanSummary = Tanaman::select(
|
|
'komoditas_id',
|
|
DB::raw('COUNT(*) as total')
|
|
)
|
|
->whereIn('lahan_id', $lahan->pluck('id'))
|
|
->groupBy('komoditas_id')
|
|
->get();
|
|
|
|
$case = "
|
|
CASE
|
|
WHEN skor_kesiapan_adopsi >= 4.0 THEN 'Penggerak'
|
|
WHEN skor_kesiapan_adopsi >= 3.0 THEN 'Perintis'
|
|
WHEN skor_kesiapan_adopsi >= 2.0 THEN 'Pemerhati'
|
|
WHEN skor_kesiapan_adopsi >= 1.0 THEN 'Pemula'
|
|
ELSE 'Belum Lengkap'
|
|
END
|
|
";
|
|
$skorSummary = SkorPetani::selectRaw("$case AS segmen, COUNT(*) AS total")
|
|
->whereIn('petani_id', $petani)
|
|
->groupByRaw($case)
|
|
->get();
|
|
|
|
$skorKomoditasSummary = SkorPetani::query()
|
|
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
|
->selectRaw("
|
|
petani.komoditas_id,
|
|
$case AS segmen,
|
|
COUNT(petani.id) AS total
|
|
")
|
|
->whereIn('petani_skor.petani_id', $petani)
|
|
->groupBy('petani.komoditas_id')
|
|
->groupByRaw($case)
|
|
->get();
|
|
|
|
|
|
$skorAverage = SkorPetani::query()
|
|
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
|
->whereIn('petani_id', $petani)
|
|
->whereIn('petani.komoditas_id', $komoditas->pluck('id'))
|
|
->avg('skor_kesiapan_adopsi');
|
|
if ($skorAverage >= 4.0) {
|
|
$segmenAverage = 'Penggerak';
|
|
} elseif ($skorAverage >= 3.0) {
|
|
$segmenAverage = 'Perintis';
|
|
} elseif ($skorAverage >= 2.0) {
|
|
$segmenAverage = 'Pemerhati';
|
|
} elseif ($skorAverage >= 1.0) {
|
|
$segmenAverage = 'Pemula';
|
|
} else {
|
|
$segmenAverage = 'Belum Lengkap';
|
|
}
|
|
|
|
$skorDimensi = SkorPetani::query()
|
|
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
|
->whereIn('petani_id', $petani)
|
|
->whereIn('petani.komoditas_id', $komoditas->pluck('id'))
|
|
->selectRaw("
|
|
avg(skor_d2_sistem_praktik_budidaya) as skor_d2_sistem_praktik_budidaya,
|
|
avg(skor_d4_sosial_ekonomi) as skor_d4_sosial_ekonomi,
|
|
avg(skor_d6_rantai_nilai_akses_pasar) as skor_d6_rantai_nilai_akses_pasar")
|
|
->first();
|
|
|
|
$skorKomponen = SkorPetani::query()
|
|
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
|
->whereIn('petani_id', $petani)
|
|
->whereIn('petani.komoditas_id', $komoditas->pluck('id'))
|
|
->selectRaw("avg(skor_komp_1_d4_k3_motivasi_kapasitas_adopsi) as skor_komp_1_d4_k3_motivasi_kapasitas_adopsi,
|
|
avg(skor_komp_2_d4_k2_ekonomi_rumah_tangga) as skor_komp_2_d4_k2_ekonomi_rumah_tangga,
|
|
avg(skor_komp_3_d2_praktik_budidaya_gap) as skor_komp_3_d2_praktik_budidaya_gap,
|
|
avg(skor_komp_4_d4_k4_keterlibatan_kelembagaan) as skor_komp_4_d4_k4_keterlibatan_kelembagaan,
|
|
avg(skor_komp_5_d4_k5_k6_akses_kebebasan_keuangan) as skor_komp_5_d4_k5_k6_akses_kebebasan_keuanga,
|
|
avg(skor_komp_6_d6_k1_k4_k5_rantai_nilai_akses_pasar) as skor_komp_6_d6_k1_k4_k5_rantai_nilai_akses_pasar")
|
|
->first();
|
|
|
|
$skorMultiDimensi = SkorPetani::query()
|
|
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
|
->whereIn('petani_id', $petani)
|
|
->whereIn('petani.komoditas_id', $komoditas->pluck('id'))
|
|
->selectRaw("$case AS segmen,
|
|
avg(skor_kesiapan_adopsi) as skor_kesiapan_adopsi,
|
|
avg(skor_d2_sistem_praktik_budidaya) as skor_d2_sistem_praktik_budidaya,
|
|
avg(skor_d4_sosial_ekonomi) as skor_d4_sosial_ekonomi,
|
|
avg(skor_d6_rantai_nilai_akses_pasar) as skor_d6_rantai_nilai_akses_pasar")
|
|
->groupByRaw($case)
|
|
->get();
|
|
|
|
$petani = Petani::with(['skor'])
|
|
->whereIn('id', $petani)
|
|
->whereIn('komoditas_id', $komoditas->pluck('id'))
|
|
->get();
|
|
|
|
return view('dashboard.petani', compact('title',
|
|
'komoditas',
|
|
'petaniSummary',
|
|
'lahanSummary',
|
|
'tanamanSummary',
|
|
'skorSummary',
|
|
'skorKomoditasSummary',
|
|
'segmenAverage',
|
|
'skorAverage',
|
|
'skorDimensi',
|
|
'skorKomponen',
|
|
'skorMultiDimensi',
|
|
'petani',
|
|
));
|
|
}
|
|
}
|