<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Opd;
use App\Models\Kpa;
use App\Models\User;
use App\Models\SumberDana;
use App\Models\Program;
use App\Models\Kegiatan;
use App\Models\SubKegiatan;
use App\Models\Proker;
use App\Models\ProkerProgram;
use App\Models\ProkerKegiatan;
use App\Models\ProkerSubKegiatan;
use App\Models\RincianKegiatan;
use App\Exports\ResumePad;
use PDF;
use DB,Str,File,Auth;
use App\Helpers\HelperString;
use Illuminate\Database\Eloquent\Builder;
use Livewire\WithPagination;
use \Carbon\Carbon;
use Illuminate\Support\Facades\File as FacadesFile;
use setasign\Fpdi\Fpdi;
use Maatwebsite\Excel\Facades\Excel;
class PadController extends Controller
{
use WithPagination;
public function __construct(){
$this->middleware('role:admin|admin-opd|monev');
}
public function index(Request $request)
{
$proker_programs = collect(DB::select("
SELECT
proker_programs.id,
programs.kode,
programs.nama_program,
opds.nama_perangkat_daerah,
SUM(rkgs.pagu) AS total_pagu,
SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rkgs.pagu ELSE 0 END) AS total_pagu_berjalan,
SUM(rkgs.pagu * (rfs.realisasi / rkgs.volume) * 100) AS total_realisasi,
SUM(rks.realisasi) AS realisasi_keuangan,
SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rrks.total_nilai_kontrak ELSE 0 END) AS total_nilai_kontrak,
SUM(CASE WHEN rfs.realisasi IS NULL AND rks.realisasi IS NULL THEN rkgs.pagu ELSE 0 END) AS total_pagu_tanpa_realisasi
FROM proker_programs
LEFT JOIN prokers ON prokers.id = proker_programs.proker_id AND prokers.deleted_at IS NULL
LEFT JOIN opds ON opds.id = prokers.opd_id AND opds.deleted_at IS NULL
LEFT JOIN programs ON programs.id = proker_programs.program_id AND proker_programs.deleted_at IS NULL
LEFT JOIN proker_kegiatans AS pks ON pks.proker_program_id = proker_programs.id AND pks.deleted_at IS NULL
LEFT JOIN proker_sub_kegiatans AS psks ON psks.proker_kegiatan_id = pks.id AND psks.deleted_at IS NULL
LEFT JOIN rincian_kegiatans AS rkgs ON rkgs.proker_sub_kegiatan_id = psks.id AND rkgs.deleted_at IS NULL
LEFT JOIN (
SELECT rrks.rincian_kegiatan_id, SUM(rfs.realisasi) AS realisasi
FROM realisasi_rincian_kegiatans AS rrks
INNER JOIN realisasi_fisiks AS rfs ON rfs.realisasi_rincian_kegiatan_id = rrks.id
WHERE rrks.deleted_at IS NULL AND rfs.deleted_at IS NULL
GROUP BY rrks.rincian_kegiatan_id
) AS rfs ON rfs.rincian_kegiatan_id = rkgs.id
LEFT JOIN (
SELECT rrks.rincian_kegiatan_id, SUM(rks.realisasi) AS realisasi
FROM realisasi_rincian_kegiatans AS rrks
INNER JOIN realisasi_keuangans AS rks ON rks.realisasi_rincian_kegiatan_id = rrks.id
WHERE rrks.deleted_at IS NULL AND rks.deleted_at IS NULL
GROUP BY rrks.rincian_kegiatan_id
) AS rks ON rks.rincian_kegiatan_id = rkgs.id
LEFT JOIN (
SELECT rincian_kegiatan_id, SUM(nilai_kontrak) AS total_nilai_kontrak
FROM realisasi_rincian_kegiatans
WHERE deleted_at IS NULL
GROUP BY rincian_kegiatan_id
) AS rrks ON rrks.rincian_kegiatan_id = rkgs.id
" . (
(Auth::user()->hasRole('admin-opd') || Auth::user()->hasRole('admin-PPTK') || Auth::user()->hasRole('monev')) && Auth::user()->opd_id !== null
? " AND opds.id = " . Auth::user()->opd_id
: ""
) . "
GROUP BY proker_programs.id
"));
foreach ($proker_programs as &$proker_program) {
$proker_kegiatans = collect(DB::select("
SELECT
pks.id,
kegiatans.nama_kegiatan AS nama,
SUM(rfs.realisasi) AS total_realisasi_fisik_sub_kegiatans,
SUM(rks.realisasi) AS total_realisasi_keuangan_sub_kegiatans,
SUM(rkgs.pagu) AS total_pagu_sub_kegiatans,
SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rkgs.pagu ELSE 0 END) AS total_pagu_berjalan_sub_kegiatans,
SUM(rkgs.pagu * (rfs.realisasi / rkgs.volume) * 100) AS total_realisasi_sub_kegiatans,
SUM(rks.realisasi) AS realisasi_keuangan_sub_kegiatans,
SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rrks.total_nilai_kontrak ELSE 0 END) AS total_nilai_kontrak_sub_kegiatans,
SUM(CASE WHEN rfs.realisasi IS NULL AND rks.realisasi IS NULL THEN rkgs.pagu ELSE 0 END) AS total_pagu_tanpa_realisasi_sub_kegiatans
FROM proker_kegiatans AS pks
LEFT JOIN kegiatans ON kegiatans.id = pks.kegiatan_id AND kegiatans.deleted_at IS NULL
LEFT JOIN proker_sub_kegiatans ON proker_sub_kegiatans.proker_kegiatan_id = pks.id AND proker_sub_kegiatans.deleted_at IS NULL
LEFT JOIN rincian_kegiatans AS rkgs ON rkgs.proker_sub_kegiatan_id = proker_sub_kegiatans.id AND rkgs.deleted_at IS NULL
LEFT JOIN (
SELECT rrks.rincian_kegiatan_id, SUM(rfs.realisasi) AS realisasi
FROM realisasi_rincian_kegiatans AS rrks
INNER JOIN realisasi_fisiks AS rfs ON rfs.realisasi_rincian_kegiatan_id = rrks.id
WHERE rrks.deleted_at IS NULL AND rfs.deleted_at IS NULL
GROUP BY rrks.rincian_kegiatan_id
) AS rfs ON rfs.rincian_kegiatan_id = rkgs.id
LEFT JOIN (
SELECT rrks.rincian_kegiatan_id, SUM(rks.realisasi) AS realisasi
FROM realisasi_rincian_kegiatans AS rrks
INNER JOIN realisasi_keuangans AS rks ON rks.realisasi_rincian_kegiatan_id = rrks.id
WHERE rrks.deleted_at IS NULL AND rks.deleted_at IS NULL
GROUP BY rrks.rincian_kegiatan_id
) AS rks ON rks.rincian_kegiatan_id = rkgs.id
LEFT JOIN (
SELECT rincian_kegiatan_id, SUM(nilai_kontrak) AS total_nilai_kontrak
FROM realisasi_rincian_kegiatans
WHERE deleted_at IS NULL
GROUP BY rincian_kegiatan_id
) AS rrks ON rrks.rincian_kegiatan_id = rkgs.id
WHERE pks.proker_program_id = ?
GROUP BY pks.id
", [$proker_program->id]));
foreach ($proker_kegiatans as &$proker_kegiatan) {
$proker_sub_kegiatans = collect(DB::select("
SELECT
psks.id,
sub_kegiatans.nama_sub_kegiatan AS nama,
SUM(rfs.realisasi) AS total_realisasi_fisik_sub_kegiatans,
SUM(rks.realisasi) AS total_realisasi_keuangan_sub_kegiatans,
SUM(rkgs.pagu) AS total_pagu_sub_kegiatans,
SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rkgs.pagu ELSE 0 END) AS total_pagu_berjalan_sub_kegiatans,
SUM(rkgs.pagu * (rfs.realisasi / rkgs.volume) * 100) AS total_realisasi_sub_kegiatans,
SUM(rks.realisasi) AS realisasi_keuangan_sub_kegiatans,
SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rrks.total_nilai_kontrak ELSE 0 END) AS total_nilai_kontrak_sub_kegiatans,
SUM(CASE WHEN rfs.realisasi IS NULL AND rks.realisasi IS NULL THEN rkgs.pagu ELSE 0 END) AS total_pagu_tanpa_realisasi_sub_kegiatans
FROM proker_sub_kegiatans AS psks
LEFT JOIN sub_kegiatans ON sub_kegiatans.id = psks.sub_kegiatan_id AND sub_kegiatans.deleted_at IS NULL
LEFT JOIN rincian_kegiatans AS rkgs ON rkgs.proker_sub_kegiatan_id = psks.id AND rkgs.deleted_at IS NULL
LEFT JOIN (
SELECT rrks.rincian_kegiatan_id, SUM(rfs.realisasi) AS realisasi
FROM realisasi_rincian_kegiatans AS rrks
INNER JOIN realisasi_fisiks AS rfs ON rfs.realisasi_rincian_kegiatan_id = rrks.id
WHERE rrks.deleted_at IS NULL AND rfs.deleted_at IS NULL
GROUP BY rrks.rincian_kegiatan_id
) AS rfs ON rfs.rincian_kegiatan_id = rkgs.id
LEFT JOIN (
SELECT rrks.rincian_kegiatan_id, SUM(rks.realisasi) AS realisasi
FROM realisasi_rincian_kegiatans AS rrks
INNER JOIN realisasi_keuangans AS rks ON rks.realisasi_rincian_kegiatan_id = rrks.id
WHERE rrks.deleted_at IS NULL AND rks.deleted_at IS NULL
GROUP BY rrks.rincian_kegiatan_id
) AS rks ON rks.rincian_kegiatan_id = rkgs.id
LEFT JOIN (
SELECT rincian_kegiatan_id, SUM(nilai_kontrak) AS total_nilai_kontrak
FROM realisasi_rincian_kegiatans
WHERE deleted_at IS NULL
GROUP BY rincian_kegiatan_id
) AS rrks ON rrks.rincian_kegiatan_id = rkgs.id
WHERE psks.proker_kegiatan_id = ?
GROUP BY psks.id
", [$proker_kegiatan->id]));
foreach ($proker_sub_kegiatans as &$proker_sub_kegiatan) {
$rincian_kegiatans = collect(DB::select("
SELECT
rkgs.id,
rkgs.uraian AS nama,
rkgs.pagu
FROM rincian_kegiatans AS rkgs
WHERE rkgs.proker_sub_kegiatan_id = ?
AND rkgs.deleted_at IS NULL
", [$proker_sub_kegiatan->id]));
$proker_sub_kegiatan->rincian_kegiatans_collection = $rincian_kegiatans;
}
$proker_kegiatan->proker_sub_kegiatans_collection = $proker_sub_kegiatans;
}
$proker_program->proker_kegiatans = $proker_kegiatans;
}
return view("resume.pad", compact('proker_programs'));
}
// public function index(Request $request)
// {
// $proker_programs = collect(DB::select("
// SELECT
// proker_programs.id,
// programs.kode,
// programs.nama_program,
// opds.nama_perangkat_daerah,
// SUM(rkgs.pagu) AS total_pagu,
// SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rkgs.pagu ELSE 0 END) AS total_pagu_berjalan,
// SUM(rkgs.pagu * (rfs.realisasi / rkgs.volume) * 100) AS total_realisasi,
// SUM(rks.realisasi) AS realisasi_keuangan,
// SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rrks.total_nilai_kontrak ELSE 0 END) AS total_nilai_kontrak,
// SUM(CASE WHEN rfs.realisasi IS NULL AND rks.realisasi IS NULL THEN rkgs.pagu ELSE 0 END) AS total_pagu_tanpa_realisasi,
// -- Subquery untuk data sub-kegiatan dan rincian kegiatan
// JSON_ARRAYAGG(
// JSON_OBJECT(
// 'id', pks.id,
// 'nama', kegiatans.nama_kegiatan,
// 'total_realisasi_fisik_sub_kegiatans', SUM(rfs.realisasi),
// 'total_realisasi_keuangan_sub_kegiatans', SUM(rks.realisasi),
// 'total_pagu_sub_kegiatans', SUM(rkgs.pagu),
// 'total_pagu_berjalan_sub_kegiatans', SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rkgs.pagu ELSE 0 END),
// 'total_realisasi_sub_kegiatans', SUM(rkgs.pagu * (rfs.realisasi / rkgs.volume) * 100),
// 'total_nilai_kontrak_sub_kegiatans', SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rrks.total_nilai_kontrak ELSE 0 END),
// 'total_pagu_tanpa_realisasi_sub_kegiatans', SUM(CASE WHEN rfs.realisasi IS NULL AND rks.realisasi IS NULL THEN rkgs.pagu ELSE 0 END),
// 'sub_kegiatans', JSON_ARRAYAGG(
// JSON_OBJECT(
// 'id', psks.id,
// 'nama', sub_kegiatans.nama_sub_kegiatan,
// 'total_realisasi_fisik_sub_kegiatans', SUM(rfs.realisasi),
// 'total_realisasi_keuangan_sub_kegiatans', SUM(rks.realisasi),
// 'total_pagu_sub_kegiatans', SUM(rkgs.pagu),
// 'total_pagu_berjalan_sub_kegiatans', SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rkgs.pagu ELSE 0 END),
// 'total_realisasi_sub_kegiatans', SUM(rkgs.pagu * (rfs.realisasi / rkgs.volume) * 100),
// 'total_nilai_kontrak_sub_kegiatans', SUM(CASE WHEN rfs.realisasi > 0 OR rks.realisasi > 0 THEN rrks.total_nilai_kontrak ELSE 0 END),
// 'total_pagu_tanpa_realisasi_sub_kegiatans', SUM(CASE WHEN rfs.realisasi IS NULL AND rks.realisasi IS NULL THEN rkgs.pagu ELSE 0 END),
// 'rincian_kegiatans', JSON_ARRAYAGG(
// JSON_OBJECT(
// 'id', rkgs.id,
// 'nama', rkgs.uraian,
// 'pagu', rkgs.pagu
// )
// )
// )
// )
// )
// ) AS kegiatan_data
// FROM proker_programs
// LEFT JOIN prokers ON prokers.id = proker_programs.proker_id AND prokers.deleted_at IS NULL
// LEFT JOIN opds ON opds.id = prokers.opd_id AND opds.deleted_at IS NULL
// LEFT JOIN programs ON programs.id = proker_programs.program_id AND proker_programs.deleted_at IS NULL
// LEFT JOIN proker_kegiatans AS pks ON pks.proker_program_id = proker_programs.id AND pks.deleted_at IS NULL
// LEFT JOIN kegiatans ON kegiatans.id = pks.kegiatan_id AND kegiatans.deleted_at IS NULL
// LEFT JOIN proker_sub_kegiatans AS psks ON psks.proker_kegiatan_id = pks.id AND psks.deleted_at IS NULL
// LEFT JOIN sub_kegiatans ON sub_kegiatans.id = psks.sub_kegiatan_id AND sub_kegiatans.deleted_at IS NULL
// LEFT JOIN rincian_kegiatans AS rkgs ON rkgs.proker_sub_kegiatan_id = psks.id AND rkgs.deleted_at IS NULL
// LEFT JOIN (
// SELECT rrks.rincian_kegiatan_id, SUM(rfs.realisasi) AS realisasi
// FROM realisasi_rincian_kegiatans AS rrks
// INNER JOIN realisasi_fisiks AS rfs ON rfs.realisasi_rincian_kegiatan_id = rrks.id
// WHERE rrks.deleted_at IS NULL AND rfs.deleted_at IS NULL
// GROUP BY rrks.rincian_kegiatan_id
// ) AS rfs ON rfs.rincian_kegiatan_id = rkgs.id
// LEFT JOIN (
// SELECT rrks.rincian_kegiatan_id, SUM(rks.realisasi) AS realisasi
// FROM realisasi_rincian_kegiatans AS rrks
// INNER JOIN realisasi_keuangans AS rks ON rks.realisasi_rincian_kegiatan_id = rrks.id
// WHERE rrks.deleted_at IS NULL AND rks.deleted_at IS NULL
// GROUP BY rrks.rincian_kegiatan_id
// ) AS rks ON rks.rincian_kegiatan_id = rkgs.id
// LEFT JOIN (
// SELECT rincian_kegiatan_id, SUM(nilai_kontrak) AS total_nilai_kontrak
// FROM realisasi_rincian_kegiatans
// WHERE deleted_at IS NULL
// GROUP BY rincian_kegiatan_id
// ) AS rrks ON rrks.rincian_kegiatan_id = rkgs.id
// WHERE proker_programs.deleted_at IS NULL
// " . (
// (Auth::user()->hasRole('admin-opd') || Auth::user()->hasRole('admin-PPTK') || Auth::user()->hasRole('monev')) && Auth::user()->opd_id !== null
// ? " AND opds.id = " . Auth::user()->opd_id
// : ""
// ) . "
// GROUP BY proker_programs.id
// "));
// // Mengembalikan data dalam bentuk yang lebih mudah digunakan di view
// return view("resume.pad", compact('proker_programs'));
// }
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]