summary realisasi capaian
This commit is contained in:
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
use App\Models\Program\Framework;
|
use App\Models\Program\Framework;
|
||||||
use App\Models\Program\Realisasi;
|
use App\Models\Program\Realisasi;
|
||||||
@@ -26,7 +27,89 @@ class RealisasiController extends Controller
|
|||||||
abort(404);
|
abort(404);
|
||||||
}
|
}
|
||||||
|
|
||||||
return view('program.realisasi.index', compact('framework'));
|
$ringkasanIsiRealisasi = DB::select('select count(pt.id) count_target, sum(case when rl.id > 0 then 1 else 0 end) count_realisasi
|
||||||
|
from program_target pt
|
||||||
|
inner join program_aktivitas pa on pt.aktivitas_id = pa.id
|
||||||
|
inner join program_transformasi ptr on pa.transformasi_id = ptr.id
|
||||||
|
inner join program_framework pf on ptr.framework_id = pf.id
|
||||||
|
left join
|
||||||
|
(select target_id, max(id) id from program_realisasi pr
|
||||||
|
group by target_id) rl on pt.id = rl.target_id
|
||||||
|
where
|
||||||
|
pt.deleted_at is null
|
||||||
|
and pa.deleted_at is null
|
||||||
|
and ptr.deleted_at is null
|
||||||
|
and pf.id = ?
|
||||||
|
', [$framework->id]);
|
||||||
|
$ringkasanIsiRealisasi = collect($ringkasanIsiRealisasi)->map(function ($item) {
|
||||||
|
$item->persentase = $item->count_target > 0 ? round(($item->count_realisasi / $item->count_target) * 100, 2) : 0;
|
||||||
|
return $item;
|
||||||
|
})->first();
|
||||||
|
|
||||||
|
$ringkasanCapaianRealisasi = DB::select("select round(avg(percent_realisasi)::numeric * 100, 2) persentase,
|
||||||
|
sum(case when percent_realisasi >= 0.8 then 1 else 0 end) capaian_80,
|
||||||
|
sum(case when percent_realisasi >= 0.5 and percent_realisasi < 0.8 then 1 else 0 end) capaian_50_80,
|
||||||
|
sum(case when percent_realisasi < 0.5 then 1 else 0 end) capaian_50
|
||||||
|
from
|
||||||
|
(select pt.id target_id, pr.id realisasi_id,
|
||||||
|
pt.tipe,
|
||||||
|
case
|
||||||
|
when pt.tipe = 'integer' then pt.target_integer
|
||||||
|
when pt.tipe = 'float' then pt.target_float
|
||||||
|
when pt.tipe = 'boolean' then pt.target_boolean::integer
|
||||||
|
end target,
|
||||||
|
case
|
||||||
|
when pt.tipe = 'integer' then pr.realisasi_integer
|
||||||
|
when pt.tipe = 'float' then pr.realisasi_float
|
||||||
|
when pt.tipe = 'boolean' then pr.realisasi_boolean::integer
|
||||||
|
end realisasi,
|
||||||
|
case
|
||||||
|
when pt.tipe = 'integer' then pr.realisasi_integer::float / pt.target_integer::float
|
||||||
|
when pt.tipe = 'float' then pr.realisasi_float / pt.target_float
|
||||||
|
when pt.tipe = 'boolean' then pr.realisasi_boolean::integer / pt.target_boolean::integer
|
||||||
|
end percent_realisasi
|
||||||
|
from program_target pt
|
||||||
|
inner join program_aktivitas pa on pt.aktivitas_id = pa.id
|
||||||
|
inner join program_transformasi ptr on pa.transformasi_id = ptr.id
|
||||||
|
inner join program_framework pf on ptr.framework_id = pf.id
|
||||||
|
left join
|
||||||
|
(select target_id, max(id) id from program_realisasi pr
|
||||||
|
group by target_id) rl on pt.id = rl.target_id
|
||||||
|
left join program_realisasi pr on rl.id = pr.id and pr.target_id = pt.id
|
||||||
|
where
|
||||||
|
pt.deleted_at is null
|
||||||
|
and pa.deleted_at is null
|
||||||
|
and ptr.deleted_at is null
|
||||||
|
and pf.id = ?) v",
|
||||||
|
[$framework->id]);
|
||||||
|
$ringkasanCapaianRealisasi = collect($ringkasanCapaianRealisasi)->first();
|
||||||
|
|
||||||
|
$ringkasanVerifikasi = DB::select("select count(pt.id) count_target,
|
||||||
|
sum(case when count_verifikasi > 0 then 1 else 0 end) count_verifikasi,
|
||||||
|
sum(case when count_verifikasi = 0 or count_verifikasi is null then 1 else 0 end) count_unverifikasi
|
||||||
|
from program_target pt
|
||||||
|
inner join program_aktivitas pa on pt.aktivitas_id = pa.id
|
||||||
|
inner join program_transformasi ptr on pa.transformasi_id = ptr.id
|
||||||
|
inner join program_framework pf on ptr.framework_id = pf.id
|
||||||
|
left join
|
||||||
|
(select target_id, max(id) id from program_realisasi pr
|
||||||
|
group by target_id) rl on pt.id = rl.target_id
|
||||||
|
left join
|
||||||
|
(select realisasi_id, count(pv.id) count_verifikasi from program_verifikasi pv
|
||||||
|
group by realisasi_id) rv
|
||||||
|
on rv.realisasi_id = rl.id
|
||||||
|
where
|
||||||
|
pt.deleted_at is null
|
||||||
|
and pa.deleted_at is null
|
||||||
|
and ptr.deleted_at is null
|
||||||
|
and pf.id = ?",
|
||||||
|
[$framework->id]);
|
||||||
|
$ringkasanVerifikasi = collect($ringkasanVerifikasi)->map(function ($item) {
|
||||||
|
$item->persentase = $item->count_target > 0 ? round(($item->count_verifikasi / $item->count_target) * 100, 2) : 0;
|
||||||
|
return $item;
|
||||||
|
})->first();
|
||||||
|
|
||||||
|
return view('program.realisasi.index', compact('framework', 'ringkasanIsiRealisasi', 'ringkasanCapaianRealisasi', 'ringkasanVerifikasi'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create()
|
public function create()
|
||||||
|
|||||||
@@ -7,9 +7,85 @@
|
|||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="container-xxl flex-grow-1 container-p-y">
|
<div class="container-xxl flex-grow-1 container-p-y">
|
||||||
|
<div class="row g-6 mb-6">
|
||||||
|
|
||||||
|
<div class="col-sm-6 col-xl-4">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="d-flex align-items-start justify-content-between">
|
||||||
|
<div class="content-left">
|
||||||
|
<span class="text-heading">Capaian Realisasi</span>
|
||||||
|
<div class="d-flex align-items-center my-1">
|
||||||
|
<h4 class="mb-0 me-2 {{ $ringkasanCapaianRealisasi->persentase >= 80 ? 'text-success' : ($ringkasanIsiRealisasi->persentase >= 50 ? 'text-warning' : 'text-danger') }}">
|
||||||
|
{{ $ringkasanCapaianRealisasi->persentase ?? 0 }}%
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<small class="mb-0">
|
||||||
|
{{ $ringkasanCapaianRealisasi->capaian_80 ?? 0 }} Capaian ≥ 80%,
|
||||||
|
{{ $ringkasanCapaianRealisasi->capaian_50_80 ?? 0 }} Capaian 50% - 80%,
|
||||||
|
{{ $ringkasanCapaianRealisasi->capaian_50 ?? 0 }} Capaian < 50%</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="avatar">
|
||||||
|
<span class="avatar-initial rounded bg-label-success">
|
||||||
|
<i class="icon-base ti tabler-gauge icon-26px"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6 col-xl-4">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="d-flex align-items-start justify-content-between">
|
||||||
|
<div class="content-left">
|
||||||
|
<span class="text-heading">Keterisian Data Capaian Realisasi</span>
|
||||||
|
<div class="d-flex align-items-center my-1">
|
||||||
|
<h4 class="mb-0 me-2 {{ $ringkasanIsiRealisasi->persentase >= 80 ? 'text-success' : ($ringkasanIsiRealisasi->persentase >= 50 ? 'text-warning' : 'text-danger') }}">
|
||||||
|
{{ $ringkasanIsiRealisasi->persentase ?? 0 }}%
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<small class="mb-0">{{ $ringkasanIsiRealisasi->count_realisasi ?? 0 }} Data Terisi / {{ $ringkasanIsiRealisasi->count_target ?? 0 }} Data Target</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="avatar">
|
||||||
|
<span class="avatar-initial rounded bg-label-primary">
|
||||||
|
<i class="icon-base ti tabler-chart-dots icon-26px"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6 col-xl-4">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="d-flex align-items-start justify-content-between">
|
||||||
|
<div class="content-left">
|
||||||
|
<span class="text-heading">Kelengkapan Dokumen Verifikasi</span>
|
||||||
|
<div class="d-flex align-items-center my-1">
|
||||||
|
<h4 class="mb-0 me-2 {{ $ringkasanVerifikasi->persentase >= 80 ? 'text-success' : ($ringkasanVerifikasi->persentase >= 50 ? 'text-warning' : 'text-danger') }}">
|
||||||
|
{{ $ringkasanVerifikasi->persentase ?? 0 }}%
|
||||||
|
</h4>
|
||||||
|
</div>
|
||||||
|
<small class="mb-0">{{ $ringkasanVerifikasi->count_unverifikasi ?? 0 }} Realisasi Belum Dilengkapi Dokumen</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="avatar">
|
||||||
|
<span class="avatar-initial rounded bg-label-secondary">
|
||||||
|
<i class="icon-base ti tabler-files icon-26px"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header border-bottom mb-4">
|
<div class="card-header border-bottom mb-4">
|
||||||
<h5 class="card-title mb-0">Lihat Realiasi</h5>
|
<h5 class="card-title mb-0">Realiasi Capaian</h5>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|||||||
Reference in New Issue
Block a user