Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/e-tepian.aplikasipos.info/app/Helpers/
Upload File :
Current File : /home/aplikasiposinfo/www/e-tepian.aplikasipos.info/app/Helpers/Helper.php

<?php
namespace App\Helpers;

use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

use App\Models\Pengumuman;
use App\Models\Level;
use App\Models\UserLogs;
use App\Models\UraianPasal;

use App\Models\Opd;
use App\Models\PerangkatDaerah;
use App\Models\Urusan;
use App\Models\BidangUrusan;
use App\Models\Program;
use App\Models\Kegiatan;
use App\Models\SubKegiatan;
use App\Models\Kelurahan;
use App\Models\EvaluasiFile;

use App\Models\RenstraProgram;
use App\Models\RenstraKegiatan;
use App\Models\RenstraSubKegiatan;
use App\Models\Rt;
use Illuminate\Support\Facades\Mail;

use Illuminate\Support\Facades\Auth;

class Helper {

    public static function formatPaguKomitmen($input)
    {
        // Hilangkan tanda titik sebagai pemisah ribuan
        $input = str_replace('.', '', $input);
        // Ubah koma menjadi titik untuk desimal
        $input = str_replace(',', '.', $input);
        
        // Kembalikan sebagai float
        return (float)$input;
    }

    public static function hakAkses($nama_menu,$aksi){
        $cek = Level::whereHas('Menu',function ($q) use($nama_menu,$aksi)
        {
            $q->where('nama_menu', $nama_menu)
                ->where('aksi_menu', $aksi);
        })->where('id',Auth::user()->level->id)->count();
        if ( $cek > 0 ) {
            return true;
        } else {
            return false;
        }
    }

    public static function getOpd($id){
        $data = Opd::find($id);
        return $data;
    }

    public static function angka($string)
    {
        // Hilangkan spasi, enter
        // Hilangkan koma, titik
        $result = str_replace(" ", "", trim(preg_replace('/\s+/', '', strtolower($string))));
        $result = str_replace(",","",$result);
        $result = str_replace(".","",$result);
        return $result;
    }

    public static function hitungPersen($value, $ttl)
    {
        $value = (float) $value;
        $ttl = (float) $ttl;
        $result = ($ttl > 0) ? $value / $ttl * 100 : 0;
        
        return round($result, 2);
    }

    public static function hitungAvg($ttl, $jumlah_data)
    {
        $result = ($jumlah_data > 0) ? $ttl / $jumlah_data : 0;
        return round($result, 2);
    }

    public static function checkIfKecamatan(){
        if(count(Auth::user()->perangkatDaerah) > 0){
            foreach (Auth::user()->perangkatDaerah as $pd) {
                if(str_contains(strtolower($pd->nama_perangkat_daerah), 'kecamatan')){
                    return true;
                }
            }
        }

        return false;
    }

    public static function getOnlyKecamatan(){
        $result = [];
        if(count(Auth::user()->perangkatDaerah) > 0){
            foreach (Auth::user()->perangkatDaerah as $pd) {
                if(str_contains(strtolower($pd->nama_perangkat_daerah), 'kecamatan')){
                    $result[] = $pd;
                }
            }
        }

        return $result;
    }

    public static function checkIfKelurahan(){
        if(Auth::user()->level->nama_level == 'Kelurahan'){
            return true;
        }else{
            return false;
        }
    }


    // Ambil Semua Id perangkat daerah berdasarkan login
    public static function getIdPerangkatDaerahLoginUser(){
        $result = [];
        foreach (Auth::user()->perangkatDaerah as $pd) {
            $result[] = $pd->id;
        }

        return $result;
    }

    public static function masterUrusanGetAnggaranPd($perangkat_daerah_id, $tahun){
        $pd = PerangkatDaerah::find($perangkat_daerah_id);
        $pd_bun = $pd->bidangUrusan->toArray();
        $arr_bidang_urusan = [];

        foreach ($pd_bun as $bun) {
            $arr_bidang_urusan[] = $bun['id'];
        }

        $bidang_urusan = BidangUrusan::whereIn('id', $arr_bidang_urusan)->where('tahun_upload', $tahun)->get();

        if ($bidang_urusan) {
            return response()->json([
                'status' => 'success',
                'data' => $bidang_urusan,
            ]);
        }else{
            return response()->json([
                'status' => 'error',
                'message' => 'Data Bidang Urusan Apbd Pada Dinas Ini Tidak Ditemukan',
            ]);
        }
    }

    public static function findKelurahanByKecamatanId($kecamatan_id){
        if (is_array($kecamatan_id)) {
            return Kelurahan::whereIn('kecamatan_id',$kecamatan_id)->get();
        }else{
            return Kelurahan::where('kecamatan_id',$kecamatan_id)->get();
        }
    }

    public static function findRtByKelurahanId($kelurahan_id){
        return Rt::where('kelurahan_id',$kelurahan_id)->get();
    }

    public static function findNameKecamatanById($kecamatan_id){
        return PerangkatDaerah::where('id',$kecamatan_id)->first()->nama_perangkat_daerah;
    }

    public static function findNameKelurahanById($kelurahan_id){
        return Kelurahan::where('id',$kelurahan_id)->first()->nama_kelurahan;
    }

    public static function sendMailProfil($email, $data, $judul, $pesan, $alasan = null, $arr = null){
        try{

            Mail::send('emails.profil', ['data' => $data, 'pesan' => $pesan, 'judul' => $judul, 'alasan' => $alasan], function ($message) use ($judul,$email, $arr)
            {
                $message->subject( '[Notifikasi] ' . $judul);
                $message->from('[email protected]', env("APP_NAME"));
                $message->to($email);
                if ($arr != null) {
                    foreach ($arr as $data) {
                        $message->attach($data);
                    }
                }
            });

        }catch(Exception $e){
            return response(['status' => false, 'errors' => $e->getMessage() ]);
        }
    }


    public static function getMyIP()
    {
        $ipaddress = '';
        if (getenv('HTTP_CLIENT_IP'))
            $ipaddress = getenv('HTTP_CLIENT_IP');
        else if(getenv('HTTP_X_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
        else if(getenv('HTTP_X_FORWARDED'))
            $ipaddress = getenv('HTTP_X_FORWARDED');
        else if(getenv('HTTP_FORWARDED_FOR'))
            $ipaddress = getenv('HTTP_FORWARDED_FOR');
        else if(getenv('HTTP_FORWARDED'))
           $ipaddress = getenv('HTTP_FORWARDED');
        else if(getenv('REMOTE_ADDR'))
            $ipaddress = getenv('REMOTE_ADDR');
        else
            $ipaddress = 'UNKNOWN';
        return $ipaddress;
    }

    public static function getIpDetail($ip)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://ipinfo.io/{$ip}/json");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        return [
            'ip'=>$ip,
            'ip_detail'=>$output
        ];
    }

    public static function addUserLog($action,$actionDetail = null,$ip = null)
    {

        if($ip == null){
            $ip = Helper::getMyIP();
        }

        // Mengonversi $actionDetail ke dalam format JSON jika tidak null
        $actionDetailJson = $actionDetail !== null ? json_encode($actionDetail) : null;

        // Memeriksa panjang data $actionDetailJson
        $max_length = 65535; // Panjang maksimum untuk tipe data TEXT di MySQL
        if ($actionDetailJson !== null && strlen($actionDetailJson) > $max_length) {
            $actionDetailJson = substr($actionDetailJson, 0, $max_length);
        }

        UserLogs::create([
            'action'=>$action,
            'action_detail'=>$actionDetailJson,
            'user_id'=>Auth::user()->id,
            'ip'=>$ip,
            'ip_detail'=>NULL
        ]);
    }

    public static function getPengumuman()
    {
        $pengumuman = Pengumuman::first();

        return ($pengumuman) ? $pengumuman->pengumuman : '';
    }

    public static function hitungKeselarasan($arrayKodeMerge, $tahun, $table, $status1, $status2){
        $hasilKeselarasan = [];
        $tidakSelaras = [];
        $dupe = [];
        $tes = 0;
        foreach(array_count_values($arrayKodeMerge) as $key => $value){
            if($value > 1){
                if($value > 2){
                    if($table == 'pm'){
                        $statusA = Program::where('tahun_upload', '2021')->where('kode_baru', $key)->where('status', $status1)->count();
                        $statusB = Program::where('tahun_upload', $tahun)->where('kode_baru', $key)->where('status', $status2)->count();
                    }
                    if($table == 'kn'){
                        $statusA = Kegiatan::where('tahun_upload', $tahun)->where('kode_baru', $key)->where('status', $status1)->count();
                        $statusB = Kegiatan::where('tahun_upload', $tahun)->where('kode_baru', $key)->where('status', $status2)->count();
                    }
                    if($table == 'sk'){
                        $statusA = SubKegiatan::where('tahun_upload', $tahun)->where('kode_baru', $key)->where('status', $status1)->count();
                        $statusB = SubKegiatan::where('tahun_upload', $tahun)->where('kode_baru', $key)->where('status', $status2)->count();
                    }

                    $min = min($statusA, $statusB);
                    $max = max($statusA, $statusB);

                    $selisih = $max - $min;

                    for ($i=0; $i < $selisih; $i++) {
                        $tidakSelaras[] = $key;
                    }

                    for ($i=0; $i < $min; $i++) {
                        $hasilKeselarasan[] = $key;
                    }

                    $dupe[] = $key. "=" . $value;
                }else{
                    $hasilKeselarasan[] = $key;
                }
            }else{
                $tidakSelaras[] = $key;
            }
        }

        return [
            'tidak_selaras' => $tidakSelaras,
            'hasil_keselarasan' => count($hasilKeselarasan),
            'dupe' => $dupe,
        ];
    }

    public static function hitungKeselarasan2($kode_table1, $kode_table2, $tahun, $table, $status1, $status2, $debug = false){
        $hasilKeselarasan = [];
        $tidakSelarasTable1Table2 = [];
        $tidakSelarasTable2Table1 = [];
        $dupe = [];
        $tes = 0;

        $min = min(count($kode_table1), count($kode_table2));
        $max = max(count($kode_table1), count($kode_table2));

        for ($i=0; $i < $max; $i++) {
            try {
                $index_kode_table_min = array_search($kode_table1[$i], $kode_table2);
                if(is_numeric($index_kode_table_min)){
                    $hasilKeselarasan[] = $kode_table1[$i];
                    unset($kode_table1[$i]);
                    unset($kode_table2[$index_kode_table_min]);
                }
            } catch (\Throwable $th) {
                //throw $th;
            }
        }

        foreach ($kode_table1 as $kode1) {
            $tidakSelarasTable1Table2[] = $kode1;
        }

        foreach ($kode_table2 as $kode2) {
            $tidakSelarasTable2Table1[] = $kode2;
        }

        return [
            'tidak_selaras_table1_table2' => $tidakSelarasTable1Table2,
            'tidak_selaras_table2_table1' => $tidakSelarasTable2Table1,
            'hasil_keselarasan' => count($hasilKeselarasan)
        ];
    }

    public static function penjabaranDanKeselarasanProgramRpjmdRkpdByBun($masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];
        $tidak_selaras_table1_table2[0] = [];
        $tidak_selaras_table2_table1[0] = [];
        $i = 0;

        foreach ($masterUrusan as $mun) {

            $data_mbun = [];
            $ttl_table1 = 0;
            $ttl_table2 = 0;
            $ttl_sesuai = 0;

            foreach ($mun->masterBidangUrusan as $mbun) {
                // KESELARASAN PROGRAM Table1 - Table2

                // Cari Data Program Sesuai Perangkat Daerah
                $program_rkpd = Program::where('tahun_upload', $tahun)->whereHas('bidangUrusan', function($bun) use($mbun) {
                    $bun->where('master_bidang_urusan_id', $mbun->id);
                })->where('status', 'rkpd_perubahan')->get();

                // HASIL Keselerasan PROGRAM Table1 - Table2

                $kode_table1 = [];
                $kode_table2 = [];

                foreach($program_rkpd as $item){
                    $kode_table2[] = $item->kode_baru;
                }

                $program_rpjmd = Program::where('tahun_upload', '2021')->orderBy('kode', "ASC")->whereHas('bidangUrusan', function($bun) use($mbun) {
                    $bun->where('master_bidang_urusan_id', $mbun->id);
                })->where('status', 'rpjmd')->get();

                foreach($program_rpjmd as $item){
                    $kode_table1[] = $item->kode_baru;
                }
                if($mbun->id == 5){
                    // dd($kode_table2);
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'pm', 'rpjmd', 'rkpd_perubahan');

                // Merge Ke Array data Ketidak Selarasan Table 1 Dan Table 2
                if($i == 0){
                    $tidak_selaras_table1_table2[0] = $callFunc['tidak_selaras_table1_table2'];

                    $tidak_selaras_table2_table1[0] = $callFunc['tidak_selaras_table2_table1'];
                }else{
                    $tidak_selaras_table1_table2[0] = array_merge($tidak_selaras_table1_table2[0], $callFunc['tidak_selaras_table1_table2']);

                    $tidak_selaras_table2_table1[0] = array_merge($tidak_selaras_table2_table1[0], $callFunc['tidak_selaras_table2_table1']);
                }
                $i++;

                $keselarasan_program = $callFunc['hasil_keselarasan'];

                $count_table1 = $program_rpjmd->count();
                $count_table2 = $program_rkpd->count();

                $data_mbun[] = [
                    "id" => $mbun->id,
                    "nama" => $mbun->nama_bidang_urusan,
                    "table1" => $count_table1,
                    "table2" => $count_table2,
                    "sesuai" => $keselarasan_program,
                    "selisih_table1" => ( $count_table1 - $keselarasan_program),
                    "selisih_table2" => ( $count_table2 - $keselarasan_program),
                ];
                $ttl_table1 += $count_table1;
                $ttl_table2 += $count_table2;
                $ttl_sesuai += $keselarasan_program;
            }
            $datas[] = [
                "id" => $mun->id,
                "nama" => $mun->nama_urusan,
                "table1" => $ttl_table1,
                "table2" => $ttl_table2,
                "sesuai" => $ttl_sesuai,
                "selisih_table1" => ( $ttl_table1 - $ttl_sesuai),
                "selisih_table2" => ( $ttl_table2 - $ttl_sesuai),
                "data_mbun" => $data_mbun,
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            foreach ($data['data_mbun'] as $d) {
                $table1 += $d['table1'];
                $table2 += $d['table2'];
                $sesuai += $d['sesuai'];
                $selisih_table1 += $d['selisih_table1'];
                $selisih_table2 += $d['selisih_table2'];
            }
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $program_table1_tidak_dijabarkan_table2 = [];
        $program_table2_tidak_dijabarkan_table1 = [];

        // Hitung Ketidak Selarasan Table 1 Ke Table 2
        foreach($tidak_selaras_table1_table2[0] as $item){
            $sk = Program::where('kode_baru', $item)->first();
            $program_table1_tidak_dijabarkan_table2[] = $sk;
        }

        // Hitung Ketidak Selarasan Table 2 Ke Table 1
        foreach($tidak_selaras_table2_table1[0] as $item){
            $sk = Program::where('kode_baru', $item)->first();
            $program_table2_tidak_dijabarkan_table1[] = $sk;
        }

        $result = [
            'total' => $total,
            'datas' => $datas,
            'program_rpjmd_tidak_dijabarkan_rkpd' => $program_table1_tidak_dijabarkan_table2,
            'program_rkpd_tidak_direncanakan_rpjmd' => $program_table2_tidak_dijabarkan_table1,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanProgramByBun($table1, $table2, $masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];
        $tidak_selaras_table1_table2[0] = [];
        $tidak_selaras_table2_table1[0] = [];
        $i = 0;

        foreach ($masterUrusan as $mun) {
            $data_mbun = [];
            $ttl_table1 = 0;
            $ttl_table2 = 0;
            $ttl_sesuai = 0;
            foreach ($mun->masterBidangUrusan as $mbun) {
                // KESELARASAN PROGRAM Table1 - Table2

                // Cari Data Program Sesuai Bidang Urusan
                $data_program = Program::where('tahun_upload', $tahun)->whereHas('bidangUrusan', function($bun) use($mbun) {
                    $bun->where('master_bidang_urusan_id', $mbun->id);
                })->whereIn('status', [$table1, $table2])->get();

                $program_table1 = $data_program->where('status', $table1)->count();
                $program_table2 = $data_program->where('status', $table2)->count();
                // HASIL Keselerasan PROGRAM Table1 - Table2

                $kode_table1 = [];
                $kode_table2 = [];

                foreach($data_program as $item){
                    if ($item->status == $table1) {
                        $kode_table1[] = $item->kode_baru;
                    }elseif($item->status == $table2) {
                        $kode_table2[] = $item->kode_baru;
                    }
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'pm', $table1, $table2);

                // Merge Ke Array data Ketidak Selarasan Table 1 Dan Table 2
                if($i == 0){
                    $tidak_selaras_table1_table2[0] = $callFunc['tidak_selaras_table1_table2'];

                    $tidak_selaras_table2_table1[0] = $callFunc['tidak_selaras_table2_table1'];
                }else{
                    $tidak_selaras_table1_table2[0] = array_merge($tidak_selaras_table1_table2[0], $callFunc['tidak_selaras_table1_table2']);

                    $tidak_selaras_table2_table1[0] = array_merge($tidak_selaras_table2_table1[0], $callFunc['tidak_selaras_table2_table1']);
                }
                $i++;

                $keselarasan_program = $callFunc['hasil_keselarasan'];

                $data_mbun[] = [
                    "id" => $mbun->id,
                    "nama" => $mbun->nama_bidang_urusan,
                    "table1" => $program_table1,
                    "table2" => $program_table2,
                    "sesuai" => $keselarasan_program,
                    "selisih_table1" => ( $program_table1 - $keselarasan_program),
                    "selisih_table2" => ( $program_table2 - $keselarasan_program),
                ];

                $ttl_table1 += $program_table1;
                $ttl_table2 += $program_table2;
                $ttl_sesuai += $keselarasan_program;
            }
            $datas[] = [
                "id" => $mun->id,
                "nama" => $mun->nama_urusan,
                "table1" => $ttl_table1,
                "table2" => $ttl_table2,
                "sesuai" => $ttl_sesuai,
                "selisih_table1" => ( $ttl_table1 - $ttl_sesuai),
                "selisih_table2" => ( $ttl_table2 - $ttl_sesuai),
                "data_mbun" => $data_mbun,
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            foreach ($data['data_mbun'] as $d) {
                $table1 += $d['table1'];
                $table2 += $d['table2'];
                $sesuai += $d['sesuai'];
                $selisih_table1 += $d['selisih_table1'];
                $selisih_table2 += $d['selisih_table2'];
            }
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $program_table1_tidak_dijabarkan_table2 = [];
        $program_table2_tidak_dijabarkan_table1 = [];

        // Hitung Ketidak Selarasan Table 1 Ke Table 2
        foreach($tidak_selaras_table1_table2[0] as $item){
            $sk = Program::where('kode_baru', $item)->first();
            $program_table1_tidak_dijabarkan_table2[] = $sk;
        }

        // Hitung Ketidak Selarasan Table 2 Ke Table 1
        foreach($tidak_selaras_table2_table1[0] as $item){
            $sk = Program::where('kode_baru', $item)->first();
            $program_table2_tidak_dijabarkan_table1[] = $sk;
        }

        $result = [
            'total' => $total,
            'datas' => $datas,
            'program_rkpd_tidak_dijabarkan_apbd' => $program_table1_tidak_dijabarkan_table2,
            'program_apbd_tidak_direncanakan_rkpd' => $program_table2_tidak_dijabarkan_table1,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanKegiatanByBun($table1, $table2, $masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];

        $tidak_selaras_table1_table2[0] = [];
        $tidak_selaras_table2_table1[0] = [];
        $i = 0;

        foreach ($masterUrusan as $mun) {
            $data_mbun = [];
            $ttl_table1 = 0;
            $ttl_table2 = 0;
            $ttl_sesuai = 0;
            foreach ($mun->masterBidangUrusan as $mbun) {
                // KESELARASAN Kegiatan Table1 - Table2

                // Cari Data Kegiatan Sesuai Perangkat Daerah
                $data_kegiatan = Kegiatan::where('tahun_upload', $tahun)->whereHas('program', function($pm)use($mbun){
                    $pm->whereHas('bidangUrusan', function($bun) use($mbun){
                        $bun->where('master_bidang_urusan_id', $mbun->id);
                    });
                })->whereIn('status', [$table1, $table2])->get();

                $kegiatan_table1 = $data_kegiatan->where('status', $table1)->count();
                $kegiatan_table2 = $data_kegiatan->where('status', $table2)->count();

                // HASIL Keselerasan Kegiatan Table1 - Table2
                $kode_table1 = [];
                $kode_table2 = [];

                foreach($data_kegiatan as $item){
                    if ($item->status == $table1) {
                        $kode_table1[] = $item->kode_baru;
                    }elseif($item->status == $table2) {
                        $kode_table2[] = $item->kode_baru;
                    }
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'kn', $table1, $table2);
                $keselarasan_kegiatan = $callFunc['hasil_keselarasan'];

                // Merge Ke Array data Ketidak Selarasan Table 1 Dan Table 2
                if($i == 0){
                    $tidak_selaras_table1_table2[0] = $callFunc['tidak_selaras_table1_table2'];

                    $tidak_selaras_table2_table1[0] = $callFunc['tidak_selaras_table2_table1'];
                }else{
                    $tidak_selaras_table1_table2[0] = array_merge($tidak_selaras_table1_table2[0], $callFunc['tidak_selaras_table1_table2']);

                    $tidak_selaras_table2_table1[0] = array_merge($tidak_selaras_table2_table1[0], $callFunc['tidak_selaras_table2_table1']);
                }
                $i++;
                // $keselarasan_kegiatan = $data_kegiatan->where($appendKeselarasan, '1')->count() / 2;

                $data_mbun[] = [
                    "id" => $mbun->id,
                    "nama" => $mbun->nama_bidang_urusan,
                    "table1" => $kegiatan_table1,
                    "table2" => $kegiatan_table2,
                    "sesuai" => $keselarasan_kegiatan,
                    "selisih_table1" => ( $kegiatan_table1 - $keselarasan_kegiatan),
                    "selisih_table2" => ( $kegiatan_table2 - $keselarasan_kegiatan),
                ];
                $ttl_table1 += $kegiatan_table1;
                $ttl_table2 += $kegiatan_table2;
                $ttl_sesuai += $keselarasan_kegiatan;
            }
            $datas[] = [
                "id" => $mun->id,
                "nama" => $mun->nama_urusan,
                "table1" => $ttl_table1,
                "table2" => $ttl_table2,
                "sesuai" => $ttl_sesuai,
                "selisih_table1" => ( $ttl_table1 - $ttl_sesuai),
                "selisih_table2" => ( $ttl_table2 - $ttl_sesuai),
                "data_mbun" => $data_mbun,
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $kegiatan_table1_tidak_dijabarkan_table2 = [];
        $kegiatan_table2_tidak_dijabarkan_table1 = [];

        // Hitung Ketidak Selarasan Table 1 Ke Table 2
        foreach($tidak_selaras_table1_table2[0] as $item){
            $k = Kegiatan::where('kode_baru', $item)->first();
            $kegiatan_table1_tidak_dijabarkan_table2[] = $k;
        }

        // Hitung Ketidak Selarasan Table 2 Ke Table 1
        foreach($tidak_selaras_table2_table1[0] as $item){
            $kn = Kegiatan::where('kode_baru', $item)->first();
            $kegiatan_table2_tidak_dijabarkan_table1[] = $kn;
        }

        $result = [
            'total' => $total,
            'datas' => $datas,
            'kegiatan_rkpd_tidak_dijabarkan_apbd' => $kegiatan_table1_tidak_dijabarkan_table2,
            'kegiatan_apbd_tidak_direncanakan_rkpd' => $kegiatan_table2_tidak_dijabarkan_table1,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanSubKegiatanByBun($table1, $table2, $masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $append1 = $table1;
        $append2 = $table2;

        if ($table1 == 'rkpd_perubahan') {
            $append1 = 'rkpd';
        }
        if ($table2 == 'rkpd_perubahan') {
            $append2 = 'rkpd';
        }

        if ($table1 == 'belanja_perubahan') {
            $append1 = 'apbd';
        }
        if ($table2 == 'belanja_perubahan') {
            $append2 = 'apbd';
        }

        $appendKeselarasan = $append1 . '_' . $append2;

        $datas = [];
        $tidak_selaras_table1_table2[0] = [];
        $tidak_selaras_table2_table1[0] = [];
        $i = 0;
        foreach ($masterUrusan as $mun) {

            $data_mbun = [];
            $ttl_table1 = 0;
            $ttl_table2 = 0;
            $ttl_sesuai = 0;

            foreach ($mun->masterBidangUrusan as $mbun) {
                // KESELARASAN Sub Kegiatan Table1 - Table2

                // Cari Data Sub Kegiatan Sesuai Perangkat Daerah
                $data_sub_kegiatan = SubKegiatan::where('tahun_upload', $tahun)->whereHas('kegiatan', function($kn) use($mbun){
                    $kn->whereHas('program', function($pm) use($mbun){
                        $pm->whereHas('bidangUrusan', function($bun) use($mbun){
                            $bun->where('master_bidang_urusan_id', $mbun->id);
                        });
                    });
                })->whereIn('status', [$table1, $table2])->get();

                $sub_kegiatan_table1 = $data_sub_kegiatan->where('status', $table1)->count();
                $sub_kegiatan_table2 = $data_sub_kegiatan->where('status', $table2)->count();

                // HASIL Keselerasan Sub Kegiatan Table1 - Table2
                $kode_table1 = [];
                $kode_table2 = [];

                foreach($data_sub_kegiatan as $item){
                    if ($item->status == $table1) {
                        $kode_table1[] = $item->kode_baru;
                    }elseif($item->status == $table2) {
                        $kode_table2[] = $item->kode_baru;
                    }
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'sk', $table1, $table2, true);
                $keselarasan_sub_kegiatan = $callFunc['hasil_keselarasan'];

                // Merge Ke Array data Ketidak Selarasan Table 1 Dan Table 2
                if($i == 0){
                    $tidak_selaras_table1_table2[0] = $callFunc['tidak_selaras_table1_table2'];

                    $tidak_selaras_table2_table1[0] = $callFunc['tidak_selaras_table2_table1'];
                }else{
                    $tidak_selaras_table1_table2[0] = array_merge($tidak_selaras_table1_table2[0], $callFunc['tidak_selaras_table1_table2']);

                    $tidak_selaras_table2_table1[0] = array_merge($tidak_selaras_table2_table1[0], $callFunc['tidak_selaras_table2_table1']);
                }
                $i++;
                // $keselarasan_sub_kegiatan = $data_sub_kegiatan->where($appendKeselarasan, '1')->count() / 2;

                $data_mbun[] = [
                    "id" => $mbun->id,
                    "nama" => $mbun->nama_bidang_urusan,
                    "table1" => $sub_kegiatan_table1,
                    "table2" => $sub_kegiatan_table2,
                    "sesuai" => $keselarasan_sub_kegiatan,
                    "selisih_table1" => ( $sub_kegiatan_table1 - $keselarasan_sub_kegiatan),
                    "selisih_table2" => ( $sub_kegiatan_table2 - $keselarasan_sub_kegiatan),
                ];
                $ttl_table1 += $sub_kegiatan_table1;
                $ttl_table2 += $sub_kegiatan_table2;
                $ttl_sesuai += $keselarasan_sub_kegiatan;
            }
            $datas[] = [
                "id" => $mun->id,
                "nama" => $mun->nama_urusan,
                "table1" => $ttl_table1,
                "table2" => $ttl_table2,
                "sesuai" => $ttl_sesuai,
                "selisih_table1" => ( $ttl_table1 - $ttl_sesuai),
                "selisih_table2" => ( $ttl_table2 - $ttl_sesuai),
                "data_mbun" => $data_mbun,
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            foreach ($data['data_mbun'] as $d) {
                $table1 += $d['table1'];
                $table2 += $d['table2'];
                $sesuai += $d['sesuai'];
                $selisih_table1 += $d['selisih_table1'];
                $selisih_table2 += $d['selisih_table2'];
            }
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $sub_kegiatan_table1_tidak_dijabarkan_table2 = [];
        $sub_kegiatan_table2_tidak_dijabarkan_table1 = [];

        // Hitung Ketidak Selarasan Table 1 Ke Table 2
        foreach($tidak_selaras_table1_table2[0] as $item){
            $sk = SubKegiatan::where('kode_baru', $item)->first();
            $sub_kegiatan_table1_tidak_dijabarkan_table2[] = $sk;
        }

        // Hitung Ketidak Selarasan Table 2 Ke Table 1
        foreach($tidak_selaras_table2_table1[0] as $item){
            $sk = SubKegiatan::where('kode_baru', $item)->first();
            $sub_kegiatan_table2_tidak_dijabarkan_table1[] = $sk;
        }

        $result = [
            'total' => $total,
            'datas' => $datas,
            'sub_kegiatan_rkpd_tidak_dijabarkan_apbd' => $sub_kegiatan_table1_tidak_dijabarkan_table2,
            'sub_kegiatan_apbd_tidak_direncanakan_rkpd' => $sub_kegiatan_table2_tidak_dijabarkan_table1,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanProgramRpjmdRkpdByPd($masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];
        foreach ($masterUrusan as $mun) {

            $perangkatDaerah = PerangkatDaerah::whereHas('bidangUrusan', function($bun) use($mun) {
                $bun->whereHas('masterBidangUrusan', function($mbun) use($mun) {
                    $mbun->where('master_urusan_id', $mun->id);
                });
            })->get();

            foreach ($perangkatDaerah as $pd) {
                // KESELARASAN PROGRAM Table1 - Table2

                // Cari Data Program Sesuai Perangkat Daerah
                $program_rkpd = Program::where('tahun_upload', $tahun)->whereHas('bidangUrusan', function($bun) use($pd, $mun) {
                    $bun->whereHas('masterBidangUrusan', function($mbun) use($mun){
                        $mbun->where('master_urusan_id', $mun->id);
                    })->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                        $bun_pd->where('perangkat_daerah_id', $pd->id);
                    });
                })->where('status', 'rkpd_perubahan')->get();

                // HASIL Keselerasan PROGRAM Table1 - Table2

                $kode_table1 = [];
                $kode_table2 = [];

                foreach($program_rkpd as $item){
                    $kode_table2[] = $item->kode_baru;
                }

                $program_rpjmd = Program::where('tahun_upload', '2021')->orderBy('kode', "ASC")->whereHas('bidangUrusan', function($bun) use($pd, $mun) {
                    $bun->whereHas('masterBidangUrusan', function($mbun) use($mun){
                        $mbun->where('master_urusan_id', $mun->id);
                    })->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                        $bun_pd->where('perangkat_daerah_id', $pd->id);
                    });
                })->where('status', 'rpjmd')->get();

                foreach($program_rpjmd as $item){
                    $kode_table1[] = $item->kode_baru;
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'pm', 'rpjmd', 'rkpd_perubahan');

                $keselarasan_program = $callFunc['hasil_keselarasan'];

                $datas[] = [
                    "id" => $pd->id,
                    "nama" => $pd->nama_perangkat_daerah,
                    "table1" => $program_rpjmd->count(),
                    "table2" => $program_rkpd->count(),
                    "sesuai" => $keselarasan_program,
                    "selisih_table1" => ( $program_rpjmd->count() - $keselarasan_program),
                    "selisih_table2" => ( $program_rkpd->count() - $keselarasan_program),
                ];
   
            }
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanProgramByPd($table1, $table2, $masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');
        $append1 = $table1;
        $append2 = $table2;

        if ($table1 == 'rkpd_perubahan') {
            $append1 = 'rkpd';
        }
        if ($table2 == 'rkpd_perubahan') {
            $append2 = 'rkpd';
        }

        if ($table1 == 'belanja_perubahan') {
            $append1 = 'apbd';
        }
        if ($table2 == 'belanja_perubahan') {
            $append2 = 'apbd';
        }
        $appendKeselarasan = $append1 . '_' . $append2;

        $datas = [];

        foreach ($masterUrusan as $mun) {
            $data_pd = [];
            $ttl_table1 = 0;
            $ttl_table2 = 0;
            $ttl_sesuai = 0;

            $perangkatDaerah = PerangkatDaerah::whereHas('bidangUrusan', function($bun) use($mun) {
                $bun->whereHas('masterBidangUrusan', function($mbun) use($mun) {
                    $mbun->where('master_urusan_id', $mun->id);
                });
            })->get();

            foreach ($perangkatDaerah as $pd) {
                // KESELARASAN PROGRAM Table1 - Table2

                // Cari Data Program Sesuai Perangkat Daerah
                $data_program = Program::where('tahun_upload', $tahun)->whereHas('bidangUrusan', function($bun) use($pd,$mun) {
                    $bun->whereHas('masterBidangUrusan', function($mbun) use($mun){
                        $mbun->where('master_urusan_id', $mun->id);
                    })->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                        $bun_pd->where('perangkat_daerah_id', $pd->id);
                    });
                })->whereIn('status', [$table1, $table2])->get();

                $program_table1 = $data_program->where('status', $table1)->count();
                $program_table2 = $data_program->where('status', $table2)->count();
                // HASIL Keselerasan PROGRAM Table1 - Table2

                $kode_table1 = [];
                $kode_table2 = [];

                foreach($data_program as $item){
                    if ($item->status == $table1) {
                        $kode_table1[] = $item->kode_baru;
                    }elseif($item->status == $table2) {
                        $kode_table2[] = $item->kode_baru;
                    }
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'pm', $table1, $table2);
                $keselarasan_program = $callFunc['hasil_keselarasan'];

                $data_pd[] = [
                    "id" => $pd->id,
                    "nama" => $pd->nama_perangkat_daerah,
                    "table1" => $program_table1,
                    "table2" => $program_table2,
                    "sesuai" => $keselarasan_program,
                    "selisih_table1" => ( $program_table1 - $keselarasan_program),
                    "selisih_table2" => ( $program_table2 - $keselarasan_program),
                ];

                $ttl_table1 += $program_table1;
                $ttl_table2 += $program_table2;
                $ttl_sesuai += $keselarasan_program;
            }

            $datas[] = [
                "id" => $mun->id,
                "nama" => $mun->nama_urusan,
                "table1" => $ttl_table1,
                "table2" => $ttl_table2,
                "sesuai" => $ttl_sesuai,
                "selisih_table1" => ( $ttl_table1 - $ttl_sesuai),
                "selisih_table2" => ( $ttl_table2 - $ttl_sesuai),
                "data_pd" => $data_pd,
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanKegiatanByPd($table1, $table2, $masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $append1 = $table1;
        $append2 = $table2;

        if ($table1 == 'rkpd_perubahan') {
            $append1 = 'rkpd';
        }
        if ($table2 == 'rkpd_perubahan') {
            $append2 = 'rkpd';
        }

        if ($table1 == 'belanja_perubahan') {
            $append1 = 'apbd';
        }
        if ($table2 == 'belanja_perubahan') {
            $append2 = 'apbd';
        }

        $appendKeselarasan = $append1 . '_' . $append2;

        $datas = [];

        foreach ($masterUrusan as $mun) {
            $data_mbun = [];
            $ttl_table1 = 0;
            $ttl_table2 = 0;
            $ttl_sesuai = 0;

            $perangkatDaerah = PerangkatDaerah::whereHas('bidangUrusan', function($bun) use($mun) {
                $bun->whereHas('masterBidangUrusan', function($mbun) use($mun) {
                    $mbun->where('master_urusan_id', $mun->id);
                });
            })->get();

            foreach ($perangkatDaerah as $pd) {
                // KESELARASAN Kegiatan Table1 - Table2

                // Cari Data Kegiatan Sesuai Perangkat Daerah
                $data_kegiatan = Kegiatan::where('tahun_upload', $tahun)->whereHas('program', function($pm)use($pd){
                    $pm->whereHas('bidangUrusan', function($bun) use($pd){
                        $bun->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                            $bun_pd->where('perangkat_daerah_id', $pd->id);
                        });
                    });
                })->whereIn('status', [$table1, $table2])->get();

                $kegiatan_table1 = $data_kegiatan->where('status', $table1)->count();
                $kegiatan_table2 = $data_kegiatan->where('status', $table2)->count();

                // HASIL Keselerasan Kegiatan Table1 - Table2
                $kode_table1 = [];
                $kode_table2 = [];

                foreach($data_kegiatan as $item){
                    if ($item->status == $table1) {
                        $kode_table1[] = $item->kode_baru;
                    }elseif($item->status == $table2) {
                        $kode_table2[] = $item->kode_baru;
                    }
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'pm', $table1, $table2);
                $keselarasan_kegiatan = $callFunc['hasil_keselarasan'];

                $data_pd[] = [
                    "id" => $pd->id,
                    "nama" => $pd->nama_perangkat_daerah,
                    "table1" => $kegiatan_table1,
                    "table2" => $kegiatan_table2,
                    "sesuai" => $keselarasan_kegiatan,
                    "selisih_table1" => ( $kegiatan_table1 - $keselarasan_kegiatan),
                    "selisih_table2" => ( $kegiatan_table2 - $keselarasan_kegiatan),
                ];
                $ttl_table1 += $kegiatan_table1;
                $ttl_table2 += $kegiatan_table2;
                $ttl_sesuai += $keselarasan_kegiatan;
            }
            $datas[] = [
                "id" => $mun->id,
                "nama" => $mun->nama_urusan,
                "table1" => $ttl_table1,
                "table2" => $ttl_table2,
                "sesuai" => $ttl_sesuai,
                "selisih_table1" => ( $ttl_table1 - $ttl_sesuai),
                "selisih_table2" => ( $ttl_table2 - $ttl_sesuai),
                "data_pd" => $data_pd,
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanProgramRpjmd($perangkatDaerah, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];
        $opd_gak_dipakai = [13, 22, 24, 26, 27, 29, 35];
        $tes = [];

        foreach ($perangkatDaerah as $pd) {
            // KESELARASAN Program Table1 - Table2

            // Cari Data Program Sesuai Perangkat Daerah
            $program_rkpd = Program::where('tahun_upload', $tahun)->whereHas('bidangUrusan', function($bun) use($pd){
                $bun->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                    $bun_pd->where('perangkat_daerah_id', $pd->id);
                });
            })->whereIn('status', ['rkpd_perubahan'])->get();

            $kode_table1 = [];
            $kode_table2 = [];

            if(in_array($pd->id, $opd_gak_dipakai) && $getTahun == '2022'){
                $program_rkpd = collect();
            }

            foreach($program_rkpd as $item){
                $kode_table2[] = $item->kode_baru;
            }

            $program_rpjmd = Program::where('tahun_upload', '2021')->whereHas('bidangUrusan', function($bun) use($pd){
                $bun->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                    $bun_pd->where('perangkat_daerah_id', $pd->id);
                });
            })->whereIn('status', ['rpjmd'])->get();

            foreach($program_rpjmd as $item){
                $kode_table1[] = $item->kode_baru;
            }
            // $tes = array_merge($tes, $kode_table1);

            // if(in_array("2-13-programpemberdayaanlembagakemasyarakatan,lembagaadatdanmasyarakathukumadat", $kode_table1)){
            //     dd($pd);
            // }

            $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'pm', 'rpjmd', 'rkpd_perubahan');
            $keselarasan_program = $callFunc['hasil_keselarasan'];

            $datas[] = [
                "id" => $pd->id,
                "nama" => $pd->nama_perangkat_daerah,
                "table1" => $program_rpjmd->count(),
                "table2" => $program_rkpd->count(),
                "sesuai" => $keselarasan_program,
                "selisih_table1" => ( $program_rpjmd->count() - $keselarasan_program),
                "selisih_table2" => ( $program_rkpd->count() - $keselarasan_program),
            ];
        }

        // $dups = [];
        // foreach(array_count_values($tes) as $val => $c){
        //     if($c > 1) $dups[] = $val;
        // }
        // dd($tes);

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanProgram($perangkatDaerah, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];
        $opd_gak_dipakai = [13, 22, 24, 26, 27, 29, 35];
        $tes = [];

        foreach ($perangkatDaerah as $pd) {
            if(in_array($pd->id, $opd_gak_dipakai) && $getTahun == '2022'){
                continue;
            }
            // KESELARASAN Program Table1 - Table2

            // Cari Data Program Sesuai Perangkat Daerah
            $data_program = Program::where('tahun_upload', $tahun)->whereHas('bidangUrusan', function($bun) use($pd){
                $bun->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                    $bun_pd->where('perangkat_daerah_id', $pd->id);
                });
            })->whereIn('status', ['rkpd_perubahan', 'belanja_perubahan'])->get();

            $program_table1 = $data_program->where('status', 'rkpd_perubahan')->count();
            $program_table2 = $data_program->where('status', 'belanja_perubahan')->count();

            // HASIL Keselerasan program Table1 - Table2
            $kode_table1 = [];
            $kode_table2 = [];

            foreach($data_program as $item){
                if ($item->status == 'rkpd_perubahan') {
                    $kode_table1[] = $item->kode_baru;
                }elseif($item->status == 'belanja_perubahan') {
                    $kode_table2[] = $item->kode_baru;
                }
            }
            // $tes = array_merge($tes, $kode_table1);

            // if(in_array("2-13-programpemberdayaanlembagakemasyarakatan,lembagaadatdanmasyarakathukumadat", $kode_table1)){
            //     dd($pd);
            // }

            $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'kn', 'rkpd_perubahan', 'belanja_perubahan');
            $keselarasan_program = $callFunc['hasil_keselarasan'];
            // $keselarasan_program = $data_program->where($appendKeselarasan, '1')->count() / 2;

            $datas[] = [
                "id" => $pd->id,
                "nama" => $pd->nama_perangkat_daerah,
                "table1" => $program_table1,
                "table2" => $program_table2,
                "sesuai" => $keselarasan_program,
                "selisih_table1" => ( $program_table1 - $keselarasan_program),
                "selisih_table2" => ( $program_table2 - $keselarasan_program),
            ];
        }

        // $dups = [];
        // foreach(array_count_values($tes) as $val => $c){
        //     if($c > 1) $dups[] = $val;
        // }
        // dd($dups);

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }
    
    public static function penjabaranDanKeselarasanKegiatan($perangkatDaerah, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];
        $opd_gak_dipakai = [13, 22, 24, 26, 27, 29, 35];

        foreach ($perangkatDaerah as $pd) {
            if(in_array($pd->id, $opd_gak_dipakai) && $getTahun == '2022'){
                continue;
            }
            // KESELARASAN Kegiatan Table1 - Table2

            // Cari Data Kegiatan Sesuai Perangkat Daerah
            $data_kegiatan = Kegiatan::where('tahun_upload', $tahun)->whereHas('program', function($pm)use($pd){
                $pm->whereHas('bidangUrusan', function($bun) use($pd){
                    $bun->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                        $bun_pd->where('perangkat_daerah_id', $pd->id);
                    });
                });
            })->whereIn('status', ['rkpd_perubahan', 'belanja_perubahan'])->get();

            $kegiatan_table1 = $data_kegiatan->where('status', 'rkpd_perubahan')->count();
            $kegiatan_table2 = $data_kegiatan->where('status', 'belanja_perubahan')->count();

            // HASIL Keselerasan Kegiatan Table1 - Table2
            $kode_table1 = [];
            $kode_table2 = [];

            foreach($data_kegiatan as $item){
                if ($item->status == 'rkpd_perubahan') {
                    $kode_table1[] = $item->kode_baru;
                }elseif($item->status == 'belanja_perubahan') {
                    $kode_table2[] = $item->kode_baru;
                }
            }

            $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'kn', 'rkpd_perubahan', 'belanja_perubahan');
            $keselarasan_kegiatan = $callFunc['hasil_keselarasan'];
            // $keselarasan_kegiatan = $data_kegiatan->where($appendKeselarasan, '1')->count() / 2;

            $datas[] = [
                "id" => $pd->id,
                "nama" => $pd->nama_perangkat_daerah,
                "table1" => $kegiatan_table1,
                "table2" => $kegiatan_table2,
                "sesuai" => $keselarasan_kegiatan,
                "selisih_table1" => ( $kegiatan_table1 - $keselarasan_kegiatan),
                "selisih_table2" => ( $kegiatan_table2 - $keselarasan_kegiatan),
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanSubKegiatan($perangkatDaerah, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $datas = [];
        $tidak_selaras[0] = [];
        $i = 0;

        $opd_gak_dipakai = [13, 22, 24, 26, 27, 29, 35];

        foreach ($perangkatDaerah as $pd) {
            if(in_array($pd->id, $opd_gak_dipakai) && $getTahun == '2022'){
                continue;
            }
            // KESELARASAN Sub Kegiatan Table1 - Table2

            // Cari Data Sub Kegiatan Sesuai Perangkat Daerah
            $data_sub_kegiatan = SubKegiatan::where('tahun_upload', $tahun)->whereHas('kegiatan', function($kn) use($pd){
                $kn->whereHas('program', function($pm) use($pd){
                    $pm->whereHas('bidangUrusan', function($bun) use($pd){
                        $bun->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                            $bun_pd->where('perangkat_daerah_id', $pd->id);
                        });
                    });
                });
            })->whereIn('status', ['rkpd_perubahan', 'belanja_perubahan'])->get();

            $sub_kegiatan_table1 = $data_sub_kegiatan->where('status', 'rkpd_perubahan')->count();
            $sub_kegiatan_table2 = $data_sub_kegiatan->where('status', 'belanja_perubahan')->count();

            // HASIL Keselerasan Sub Kegiatan Table1 - Table2
            $kode_table1 = [];
            $kode_table2 = [];

            foreach($data_sub_kegiatan as $item){
                if ($item->status == 'rkpd_perubahan') {
                    $kode_table1[] = $item->kode_baru;
                }elseif($item->status == 'belanja_perubahan') {
                    $kode_table2[] = $item->kode_baru;
                }
            }

            $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'sk', 'rkpd_perubahan', 'belanja_perubahan');
            $keselarasan_sub_kegiatan = $callFunc['hasil_keselarasan'];
            // $keselarasan_kegiatan = $data_kegiatan->where($appendKeselarasan, '1')->count() / 2;

            $datas[] = [
                "id" => $pd->id,
                "nama" => $pd->nama_perangkat_daerah,
                "table1" => $sub_kegiatan_table1,
                "table2" => $sub_kegiatan_table2,
                "sesuai" => $keselarasan_sub_kegiatan,
                "selisih_table1" => ( $sub_kegiatan_table1 - $keselarasan_sub_kegiatan),
                "selisih_table2" => ( $sub_kegiatan_table2 - $keselarasan_sub_kegiatan),
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }

    public static function penjabaranDanKeselarasanSubKegiatanByPd($table1, $table2, $masterUrusan, $getTahun = null)
    {
        $tahun = ($getTahun) ?? date('Y');

        $append1 = $table1;
        $append2 = $table2;

        if ($table1 == 'rkpd_perubahan') {
            $append1 = 'rkpd';
        }
        if ($table2 == 'rkpd_perubahan') {
            $append2 = 'rkpd';
        }

        if ($table1 == 'belanja_perubahan') {
            $append1 = 'apbd';
        }
        if ($table2 == 'belanja_perubahan') {
            $append2 = 'apbd';
        }

        $appendKeselarasan = $append1 . '_' . $append2;

        $datas = [];

        foreach ($masterUrusan as $mun) {
            $data_mbun = [];
            $ttl_table1 = 0;
            $ttl_table2 = 0;
            $ttl_sesuai = 0;

            $perangkatDaerah = PerangkatDaerah::whereHas('bidangUrusan', function($bun) use($mun) {
                $bun->whereHas('masterBidangUrusan', function($mbun) use($mun) {
                    $mbun->where('master_urusan_id', $mun->id);
                });
            })->get();

            foreach ($perangkatDaerah as $pd) {
                // KESELARASAN Kegiatan Table1 - Table2

                // Cari Data Kegiatan Sesuai Perangkat Daerah
                $data_sub_kegiatan = SubKegiatan::where('tahun_upload', $tahun)->whereHas('kegiatan', function($kn) use($pd){
                    $kn->whereHas('program', function($pm) use($pd){
                        $pm->whereHas('bidangUrusan', function($bun) use($pd){
                            $bun->whereHas('perangkatDaerah', function($bun_pd) use($pd){
                                $bun_pd->where('perangkat_daerah_id', $pd->id);
                            });
                        });
                    });
                })->whereIn('status', [$table1, $table2])->get();

                $sub_kegiatan_table1 = $data_sub_kegiatan->where('status', $table1)->count();
                $sub_kegiatan_table2 = $data_sub_kegiatan->where('status', $table2)->count();

                // HASIL Keselerasan Kegiatan Table1 - Table2
                $kode_table1 = [];
                $kode_table2 = [];

                foreach($data_sub_kegiatan as $item){
                    if ($item->status == $table1) {
                        $kode_table1[] = $item->kode_baru;
                    }elseif($item->status == $table2) {
                        $kode_table2[] = $item->kode_baru;
                    }
                }

                $callFunc = \Helper::hitungKeselarasan2($kode_table1, $kode_table2, $tahun, 'sk', $table1, $table2);
                $keselarasan_sub_kegiatan = $callFunc['hasil_keselarasan'];

                $data_pd[] = [
                    "id" => $pd->id,
                    "nama" => $pd->nama_perangkat_daerah,
                    "table1" => $sub_kegiatan_table1,
                    "table2" => $sub_kegiatan_table2,
                    "sesuai" => $keselarasan_sub_kegiatan,
                    "selisih_table1" => ( $sub_kegiatan_table1 - $keselarasan_sub_kegiatan),
                    "selisih_table2" => ( $sub_kegiatan_table2 - $keselarasan_sub_kegiatan),
                ];
                $ttl_table1 += $sub_kegiatan_table1;
                $ttl_table2 += $sub_kegiatan_table2;
                $ttl_sesuai += $keselarasan_sub_kegiatan;
            }
            $datas[] = [
                "id" => $mun->id,
                "nama" => $mun->nama_urusan,
                "table1" => $ttl_table1,
                "table2" => $ttl_table2,
                "sesuai" => $ttl_sesuai,
                "selisih_table1" => ( $ttl_table1 - $ttl_sesuai),
                "selisih_table2" => ( $ttl_table2 - $ttl_sesuai),
                "data_pd" => $data_pd,
            ];
        }

        $table1 = 0;
        $table2 = 0;
        $sesuai = 0;
        $selisih_table1 = 0;
        $selisih_table2 = 0;

        foreach ($datas as $data) {
            $table1 += $data['table1'];
            $table2 += $data['table2'];
            $sesuai += $data['sesuai'];
            $selisih_table1 += $data['selisih_table1'];
            $selisih_table2 += $data['selisih_table2'];
        }

        $total = [
            'table1' => $table1,
            'table2' => $table2,
            'sesuai' => $sesuai,
            'selisih_table1' => $selisih_table1,
            'selisih_table2' => $selisih_table2,
        ];

        $result = [
            'total' => $total,
            'datas' => $datas,
        ];

        return $result;
    }

    /**
     * Digunakan Untuk Mencari Data RKPD Lama di Menu Rician RKPD PERUBAHAN
     */
    public static function findRkpd($kode, $table, $tahun)
    {
        if($table == 'bun'){
            $rkpd = BidangUrusan::where('kode', $kode)->where('status', 'rkpd_perubahan')->whereNotNull('pagu_indikatif')->where('tahun_upload', $tahun)->first();
        }elseif($table == 'pm'){
            $rkpd = Program::where('kode', $kode)->where('status', 'rkpd_perubahan')->whereNotNull('pagu_indikatif')->where('tahun_upload', $tahun)->first();
        }elseif($table == 'kn'){
            $rkpd = Kegiatan::where('kode', $kode)->where('status', 'rkpd_perubahan')->whereNotNull('pagu_indikatif')->where('tahun_upload', $tahun)->first();
        }elseif($table == 'sk'){
            $rkpd = SubKegiatan::where('kode', $kode)->where('status', 'rkpd_perubahan')->whereNotNull('pagu_indikatif')->where('tahun_upload', $tahun)->first();
        }
        return ($rkpd) ?? '-';
    }

    public static function findApbd($kode, $table, $tahun = null)
    {
        if (!$tahun) {
            $tahun = date("Y");
        }

        if($table == 'un'){
            $apbd = Urusan::where('kode', $kode)->where('status', 'belanja_perubahan')->whereNotNull('jumlah_belanja')->where('tahun_upload', $tahun)->first();
        }elseif($table == 'bun'){
            $apbd = BidangUrusan::where('kode', $kode)->where('status', 'belanja_perubahan')->whereNotNull('jumlah_belanja')->where('tahun_upload', $tahun)->first();
        }elseif($table == 'pm'){
            $apbd = Program::where('kode', $kode)->where('status', 'belanja_perubahan')->whereNotNull('jumlah_belanja')->where('tahun_upload', $tahun)->first();
        }elseif($table == 'kn'){
            $apbd = Kegiatan::where('kode', $kode)->where('status', 'belanja_perubahan')->whereNotNull('jumlah_belanja')->where('tahun_upload', $tahun)->first();
        }elseif($table == 'sk'){
            $apbd = SubKegiatan::where('kode', $kode)->where('status', 'belanja_perubahan')->whereNotNull('jumlah_belanja')->where('tahun_upload', $tahun)->first();
        }

        return ($apbd) ?? '-';
    }

    /**
     * Digunakan Untuk Mencari Renstra (Tolak Ukur) Berdasarkan Table
     */
    public static function findRenstraTk($nama, $table, $pd)
    {
        $tk = '';
        if ($table == "pm") {
            $tk = RenstraProgram::where('nama_renstra', $nama)->where('perangkat_daerah_id', $pd)->first();
        }elseif ($table == "kn") {
            $tk = RenstraKegiatan::where('nama_renstra', $nama)->whereHas('renstraProgram', function($pm) use($pd){
                $pm->where('perangkat_daerah_id', $pd);
            })->first();
        }elseif ($table == "sk") {
            $tk = RenstraSubKegiatan::where('nama_renstra', $nama)->whereHas('renstraKegiatan', function($kn) use($pd){
                $kn->whereHas('renstraProgram', function($pm) use($pd){
                    $pm->where('perangkat_daerah_id', $pd);
                });
            })->first();
        }

        return ($tk) ? $tk->indikator_kinerja : '';
    }

    /**
     * Digunakan Untuk Mencari Renstra (Target) Berdasarkan Table
     */
    public static function findRenstraT($nama, $table, $tahun, $pd)
    {
        $tk = '';
        if ($table == "pm") {
            $tk = RenstraProgram::where('nama_renstra', $nama)->where('perangkat_daerah_id', $pd)->first();
        }elseif ($table == "kn") {
            $tk = RenstraKegiatan::where('nama_renstra', $nama)->whereHas('renstraProgram', function($pm) use($pd){
                $pm->where('perangkat_daerah_id', $pd);
            })->first();
        }elseif ($table == "sk") {
            $tk = RenstraSubKegiatan::where('nama_renstra', $nama)->whereHas('renstraKegiatan', function($kn) use($pd){
                $kn->whereHas('renstraProgram', function($pm) use($pd){
                    $pm->where('perangkat_daerah_id', $pd);
                });
            })->first();
        }


        if ($tk) {
            $kurang = $tahun - $tk->tahun_upload;
            if ($kurang == 0) {
                return $tk->kondisi_awal_1;
            }

            if ($kurang == 1) {
                return $tk->c_rp_1;
            }

            if ($kurang == 2) {
                return $tk->c_rp_2;
            }

            if ($kurang == 3) {
                return $tk->c_rp_3;
            }

            if ($kurang == 4) {
                return $tk->c_rp_4;
            }

            if ($kurang == 5) {
                return $tk->c_rp_5;
            }

            return '';
        }

        return '';
    }

    /**
     * Digunakan Untuk Mencari Indikaotr Data RPJMD yang berhubungan dengan data Evaluasi
     */
    public static function findIndikatorRkpd($data, $table, $tahun, $debug = false)
    {
        $indikator = "";
        if(!$data){
            return null;
        }

        if ($table == 'pm') {
            $rkpd = Program::where('status', 'rkpd_perubahan')->where('kode_baru', $data->kode_baru)->where('tahun_upload', $tahun)->first();

            if ($rkpd) {
                // $indikator = $rkpd->k_tolak_ukur;
                $indikator = $rkpd->indikator;
            }
        }

        if ($table == 'kn') {
            $rkpd = Kegiatan::where('status', 'rkpd_perubahan')->where('kode_baru', $data->kode_baru)->where('tahun_upload', $tahun)->first();

            if ($rkpd) {
                // $indikator = $rkpd->k_tolak_ukur;
                $indikator = $rkpd->indikator;
            }
        }

        if ($table == 'sk') {
            $rkpd = SubKegiatan::where('status', 'rkpd_perubahan')->where('kode_baru', $data->kode_baru)->where('tahun_upload', $tahun)->first();

            if ($rkpd) {
                $indikator = $rkpd->indikator;
            }
        }

        if($indikator != ""){
            return $indikator;
        }else{
            return [];
        }
    }

    /**
     * Digunakan Untuk Mencari Indikaotr Data RPJMD yang berhubungan dengan data Evaluasi
     */
    public static function findIndikatorRpjmd($data, $table, $tahun, $debug = false)
    {
        $indikator = "";
        if ($table == 'pm') {
            $nama_program = trim(preg_replace('/\s+/', ' ', $data->nama_program));
            $rpjmd = Program::where('status', 'rpjmd')->where('kode_baru', $data->kode_baru)->first();

            if ($rpjmd) {
                $cariTahun = $tahun - $rpjmd->tahun_upload;
                foreach ($rpjmd->detailProgram as $detailProgram) {
                    $value_target = $detailProgram->indikator_kinerja . "<br> <br>";
                    $indikator = $indikator . $value_target;
                }
            }
        }
        return $indikator;
    }

    /**
     * Digunakan Untuk Mencari Indikaotr Data RPJMD yang berhubungan dengan data Evaluasi
     */
    public static function findKTargetRkpd($data, $table, $tahun, $debug = false)
    {
        $indikator = "";
        if(!$data){
            return null;
        }
        if ($table == 'pm') {
            $rkpd = Program::where('status', 'rkpd_perubahan')->where('kode_baru', $data->kode_baru)->where('tahun_upload', $tahun)->first();

            if ($rkpd) {
                $indikator = $rkpd->k_target;
            }
        }

        if ($table == 'kn') {
            $rkpd = Kegiatan::where('status', 'rkpd_perubahan')->where('kode_baru', $data->kode_baru)->where('tahun_upload', $tahun)->first();

            if ($rkpd) {
                $indikator = $rkpd->k_target;
            }
        }
        return $indikator;
    }

    /**
     * Digunakan Untuk Mencari Realisasi RKPD yang berhubungan dengan data Evaluasi
     */
    public static function findRealisasiRkpd($data, $table, $tahun, $debug = false)
    {
        $indikator = "";
        if(!$data){
            return null;
        }
        if ($table == 'pm') {
            $rkpd = Program::where('status', 'rkpd_perubahan')->where('kode_baru', $data->kode_baru)->where('tahun_upload', $tahun)->first();

            if ($rkpd) {
                $indikator = $rkpd->realisasi_target;
            }
        }

        if ($table == 'kn') {
            $rkpd = Kegiatan::where('status', 'rkpd_perubahan')->where('kode_baru', $data->kode_baru)->where('tahun_upload', $tahun)->first();

            if ($rkpd) {
                $indikator = $rkpd;
            }
        }
        return $indikator;
    }

    /**
     * Digunakan Untuk Mencari K Target (Akhir) Data RPJMD yang berhubungan dengan data Evaluasi
     */
    public static function findKTargetRpjmd($data, $table, $tahun, $debug = false)
    {
        $k_target = "";
        if ($table == 'pm') {
            $nama_program = trim(preg_replace('/\s+/', ' ', $data->nama_program));
            $rpjmd = Program::where('status', 'rpjmd')->where('kode_baru', $data->kode_baru)->first();

            if ($rpjmd) {
                $cariTahun = $tahun - $rpjmd->tahun_upload;
                foreach ($rpjmd->detailProgram as $detailProgram) {
                    if($cariTahun == 0){
                        $value_target = $detailProgram->kondisi_awal_0 . "<br> <br>";
                    }elseif($cariTahun == 1){
                        $value_target = $detailProgram->kondisi_awal_1 . "<br> <br>";
                    }elseif($cariTahun == 2){
                        $value_target = $detailProgram->c_target_1 . "<br> <br>";
                    }elseif($cariTahun == 3){
                        $value_target = $detailProgram->c_target_2 . "<br> <br>";
                    }elseif($cariTahun == 4){
                        $value_target = $detailProgram->c_target_3 . "<br> <br>";
                    }elseif($cariTahun == 5){
                        $value_target = $detailProgram->c_target_4 . "<br> <br>";
                    }elseif($cariTahun == 6){
                        $value_target = $detailProgram->c_target_5 . "<br> <br>";
                    }
                    $k_target = $k_target . $value_target;
                }
            }
        }

        if ($table == 'bun') {
            foreach ($data->program as $pm) {
                $nama_program = trim(preg_replace('/\s+/', ' ', $pm->nama_program));
                $rpjmd = Program::where('status', 'rpjmd')->where('tahun_upload', $tahun)->where('nama_program', $nama_program)->get();

                $rpjm = $rpjmd->where('pd', $pm->bidangUrusan->urusan->perangkatDaerah->kode)->first();

                if ($rpjm) {
                    $k_target += $rpjm->total_akhir_k_detail_program;
                }
            }
        }

        if ($table == 'un') {
            foreach ($data->bidangUrusan as $bun) {
                foreach ($bun->program as $pm) {
                    $nama_program = trim(preg_replace('/\s+/', ' ', $pm->nama_program));
                    $rpjmd = Program::where('status', 'rpjmd')->where('tahun_upload', $tahun)->where('nama_program', $nama_program)->get();

                    $rpjm = $rpjmd->where('pd', $pm->bidangUrusan->urusan->perangkatDaerah->kode)->first();

                    if ($rpjm) {
                        $k_target += $rpjm->total_akhir_k_detail_program;
                    }
                }
            }
        }
        return $k_target;
    }

    /**
     * Digunakan Untuk Mencari Rp Target Data RPJMD yang berhubungan dengan data Evaluasi
     */
    public static function findRpTargetRpjmd($data, $table, $tahun)
    {
        $k_target = 0;
        if ($table == 'pm') {
            $nama_program = trim(preg_replace('/\s+/', ' ', $data->nama_program));
            $rpjmd = Program::where('status', 'rpjmd')->where('tahun_upload', $tahun)->where('nama_program', $nama_program)->get();

            $rpjm = $rpjmd->where('pd', $data->bidangUrusan->urusan->perangkatDaerah->kode)->first();

            if ($rpjm) {
                $k_target += $rpjm->total_akhir_rp_detail_program;
            }
        }

        if ($table == 'bun') {
            foreach ($data->program as $pm) {
                $nama_program = trim(preg_replace('/\s+/', ' ', $pm->nama_program));
                $rpjmd = Program::where('status', 'rpjmd')->where('tahun_upload', $tahun)->where('nama_program', $nama_program)->get();

                $rpjm = $rpjmd->where('pd', $pm->bidangUrusan->urusan->perangkatDaerah->kode)->first();

                if ($rpjm) {
                    $k_target += $rpjm->total_akhir_rp_detail_program;
                }
            }
        }

        if ($table == 'un') {
            foreach ($data->bidangUrusan as $bun) {
                foreach ($bun->program as $pm) {
                    $nama_program = trim(preg_replace('/\s+/', ' ', $pm->nama_program));
                    $rpjmd = Program::where('status', 'rpjmd')->where('tahun_upload', $tahun)->where('nama_program', $nama_program)->get();

                    $rpjm = $rpjmd->where('pd', $pm->bidangUrusan->urusan->perangkatDaerah->kode)->first();

                    if ($rpjm) {
                        $k_target += $rpjm->total_akhir_rp_detail_program;
                    }
                }
            }
        }
        return $k_target;
    }

    /**
     * Digunakan Untuk Mencari Realisasi Kinerja Tahun Lalu
     */
    public static function findRealisasiTahunLalu($kode, $table, $tahun)
    {
        $realisasi = [];
        if ($table == 'un') {
            $realisasi = Urusan::where('kode', $kode)->where('tahun_upload', $tahun)->where('status', 'belanja_perubahan')->first();
        }elseif($table == 'bun'){
            $realisasi = BidangUrusan::where('kode', $kode)->where('tahun_upload', $tahun)->where('status', 'belanja_perubahan')->first();
        }elseif($table == 'pm'){
            $realisasi = Program::where('kode', $kode)->where('tahun_upload', $tahun)->where('status', 'belanja_perubahan')->first();
        }elseif($table == 'kn'){
            $realisasi = Kegiatan::where('kode', $kode)->where('tahun_upload', $tahun)->where('status', 'belanja_perubahan')->first();
        }elseif($table == 'sk'){
            $realisasi = SubKegiatan::where('kode', $kode)->where('tahun_upload', $tahun)->where('status', 'belanja_perubahan')->first();
        }

        return ($realisasi) ?? '-';
    }

    public static function numberToRoman($number) {
        $map = array('M' => 1000, 'CM' => 900, 'D' => 500, 'CD' => 400, 'C' => 100, 'XC' => 90, 'L' => 50, 'XL' => 40, 'X' => 10, 'IX' => 9, 'V' => 5, 'IV' => 4, 'I' => 1);
        $returnValue = '';
        while ($number > 0) {
            foreach ($map as $roman => $int) {
                if($number >= $int) {
                    $number -= $int;
                    $returnValue .= $roman;
                    break;
                }
            }
        }
        return $returnValue;
    }

    public static function checkIfNotSame($string1, $string2)
    {
        // Hilangkan Spasi
        // Hilangkan Enter
        // Str To Lower
        return str_replace(" ", "", trim(preg_replace('/\s+/', '', strtolower(@$string1))))  != str_replace(" ", "", trim(preg_replace('/\s+/', '', strtolower($string2))));
    }

    public static function checkIfImage($path){
        $imageExtensions = ['jpg', 'jpeg', 'gif', 'png', 'bmp', 'svg', 'svgz', 'cgm', 'djv', 'djvu', 'ico', 'ief','jpe', 'pbm', 'pgm', 'pnm', 'ppm', 'ras', 'rgb', 'tif', 'tiff', 'wbmp', 'xbm', 'xpm', 'xwd'];

        $explodeImage = explode('.', $path);
        $extension = end($explodeImage);

        if(in_array($extension, $imageExtensions))
        {
            return true;
        }else
        {
            return false;
        }
    }

    public static function getExtension($path){
        $imageExtensions = ['jpg', 'jpeg', 'gif', 'png', 'bmp', 'svg', 'svgz', 'cgm', 'djv', 'djvu', 'ico', 'ief','jpe', 'pbm', 'pgm', 'pnm', 'ppm', 'ras', 'rgb', 'tif', 'tiff', 'wbmp', 'xbm', 'xpm', 'xwd'];

        $explodeImage = explode('.', $path);
        $extension = end($explodeImage);

        return $extension;
    }

    public static function clean($string)
    {
        // Hilangkan Spasi
        // Hilangkan Enter
        // Str To Lower
        try {
            $result = str_replace(" ", "", trim(preg_replace('/\s+/', '', strtolower($string))));
            $result = str_replace(",",".",$result);
            return round($result, 2);
        } catch (\Throwable $th) {
            $integer = 0;
            $cleanEnter = trim(preg_replace('/\s+/', ' ', $string));
            $seperate = explode(' ', $cleanEnter);

            for ($i=0; $i < count($seperate); $i++) {
                $integer += (int) filter_var( $seperate[$i], FILTER_SANITIZE_NUMBER_INT);
            }
            return $integer;
            $result = ($integer) ? $this->k_tri_4 / $integer * 100 : 0;

            return ltrim(\Helper::removeString($string), '-');
        }
    }

    public static function removeString($string)
    {
        return $result = preg_replace('/[^.0-9]/', '', $string);
    }

    public static function removeEnterAndSpace($string)
    {
        // Hilangkan Spasi
        // Hilangkan Enter
        $result = trim(preg_replace('/\s+/', ' ', $string));
        $result = str_replace(' ', '', $result);
        return strtolower($result);
    }

    public static function removeEnter($string)
    {
        // Hilangkan Enter
        return $result = trim(preg_replace('/\s+/', ' ', $string));
    }

    // Bulan ini triwulan berapa ?
    public static function hitungTriwulan()
    {
        $month = date('m');
        $result = 'tri1';
        if ($month < 4) {
            return $result = 'tri1';
        } else if ($month < 7) {
            return $result = 'tri2';
        } else if ($month < 10) {
            return $result = 'tri3';
        } else {
            return $result = 'tri4';
        }

        return $result;
    }

    public static function hitungPredikat($persen)
    {
        if ($persen <= 50.99 ) {
            $predikat = 'SR';
        }elseif ($persen <= 65.99 ) {
            $predikat = 'R';
        }elseif ($persen <= 75.99 ) {
            $predikat = 'S';
        }elseif ($persen <= 90.99 ) {
            $predikat = 'T';
        }else{
            $predikat = 'ST';
        }

        return $predikat;
    }

    public static function judulUntukPasal($pasal = null){
        $title = '';
        if($pasal){
            $findPasal = UraianPasal::find($pasal);
            $title = ' Untuk ' . $findPasal->NomorPasal->pasal . ' ' . $findPasal->kode_uraian . '. ' . $findPasal->NomorPasal->desc;
        }
        return $title;
    }

    public static function checkIfDokumenEvaluasiUploaded($sk_id, $triwulan){
        $files = EvaluasiFile::where('sub_kegiatan_id',$sk_id)->get();
        
        if ($files->where('triwulan', $triwulan)->count() > 0) {
            return 'btn-success';
        }else{
            return 'btn-danger';
        }
    }

    public static function getTotalAnggaran(){
        $opd = Opd::all()->map(function($item,$key){
                return $item->anggaran;
            })->sum();

        return $opd;
    }

}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]