<?php
namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

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

class LaporanController extends Controller
{

    function getNeraca()
    {
        $sql = "SELECT
                a.kode_perkiraan,
                a.nama_perkiraan,
                a.level,
                a.jurnal,
                CASE
                    WHEN a.jurnal = 'H' AND a.level = 1 THEN
                        (SELECT SUM(saldo) FROM data_akuntansi_neraca WHERE LEFT(kode_perkiraan, 2) = LEFT(a.kode_perkiraan, 2))
                    WHEN a.jurnal = 'H' AND a.level = 2 THEN
                        (IFNULL((SELECT SUM(saldo) FROM data_akuntansi_neraca WHERE LEFT(kode_perkiraan, 4) = LEFT(a.kode_perkiraan, 4)), 0))
                    WHEN a.jurnal = 'H' AND a.level = 3 THEN
                        (SELECT SUM(saldo) FROM data_akuntansi_neraca WHERE LEFT(kode_perkiraan, 7) = LEFT(a.kode_perkiraan, 7))
                    ELSE
                        IF(b.saldo = 0, 0.00, b.saldo)
                END AS saldo,
                b.tanggal
            FROM
                ref_perkiraan a
            LEFT JOIN
                data_akuntansi_neraca b ON a.kode_perkiraan = b.kode_perkiraan
            WHERE
                (a.kode_perkiraan LIKE '1%' OR a.kode_perkiraan LIKE '2%' OR a.kode_perkiraan LIKE '3%')
                AND DATE(b.tanggal) = '" . $_POST['tgl'] . "'";

        $sql1 = "SELECT kode_perkiraan, nama_perkiraan, level, jurnal, saldo from (SELECT
                a.kode_perkiraan,
                a.nama_perkiraan,
                a.level,
                a.jurnal,
                CASE
                    WHEN a.jurnal = 'H' AND a.level = 1 THEN
                        (SELECT SUM(saldo) FROM data_akuntansi_neraca WHERE LEFT(kode_perkiraan, 2) = LEFT(a.kode_perkiraan, 2))
                    WHEN a.jurnal = 'H' AND a.level = 2 THEN
                        (IFNULL((SELECT SUM(saldo) FROM data_akuntansi_neraca WHERE LEFT(kode_perkiraan, 4) = LEFT(a.kode_perkiraan, 4)), 0))
                    WHEN a.jurnal = 'H' AND a.level = 3 THEN
                        (SELECT SUM(saldo) FROM data_akuntansi_neraca WHERE LEFT(kode_perkiraan, 7) = LEFT(a.kode_perkiraan, 7))
                    ELSE
                        IF(b.saldo = 0, 0.00, b.saldo)
                END AS saldo,
                b.tanggal
                FROM
                ref_perkiraan a
                LEFT JOIN
                data_akuntansi_neraca b ON a.kode_perkiraan = b.kode_perkiraan
                WHERE
                (a.kode_perkiraan LIKE '1%' OR a.kode_perkiraan LIKE '2%' OR a.kode_perkiraan LIKE '3%')
                AND DATE(b.tanggal) = '" . $_POST['tgl'] . "') as c where c.saldo <>0";

        if ($_POST['saldo_nol'] == 0) {
            $coa = DB::select($sql1);
        } else {
            $coa = DB::select($sql);
        }
        $aktiva = 0;
        $pasiva = 0;
        $penyusutan = 0;
        foreach ($coa as $i) {
            if (strpos($i->kode_perkiraan, '1.0.00.00') === 0) {
                $aktiva += floatval($i->saldo);
            }
            if (strpos($i->kode_perkiraan, '1.3.07.00') === 0) {
                $penyusutan += floatval($i->saldo) * 2;
            }
            if (strpos($i->kode_perkiraan, '2.0.00.00') === 0 || strpos($i->kode_perkiraan, '3.0.00.00') === 0) {
                $pasiva += floatval($i->saldo);
            }
        }

        $data['aktiva'] = $aktiva - $penyusutan;
        $data['pasiva'] = $pasiva;
        $data['coa'] = $coa;
        return json_encode($data);
    }


    function getLabaRugiSaldoNol()
    {
        $sql = "SELECT
        a.kode_perkiraan,
        a.nama_perkiraan,
        a.level,
        a.jurnal,
        CASE
            WHEN a.jurnal = 'H' AND a.level = 1 THEN
                (SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 2) = LEFT(a.kode_perkiraan, 2))
            WHEN a.jurnal = 'H' AND a.level = 2 THEN
                (IFNULL((SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 4) = LEFT(a.kode_perkiraan, 4)), 0))
            WHEN a.jurnal = 'H' AND a.level = 3 THEN
                (SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 7) = LEFT(a.kode_perkiraan, 7))
            ELSE
                IF(b.saldo = 0, 0.00, b.saldo)
        END AS saldo,
        b.tanggal
    FROM
        ref_perkiraan a
    LEFT JOIN
        data_akuntansi_labarugi b ON a.kode_perkiraan = b.kode_perkiraan
    WHERE
        (a.kode_perkiraan LIKE '4%' OR a.kode_perkiraan LIKE '5%' OR a.kode_perkiraan LIKE '6%' OR a.kode_perkiraan LIKE '7%')
        AND DATE(b.tanggal) = '" . $_POST['tgl'] . "' ";
        $coa = DB::select($sql);
        $pendapatan = 0;
        $beban = 0;
        foreach ($coa as $i) {
            if (strpos($i->kode_perkiraan, '4.0.00.00') === 0 || strpos($i->kode_perkiraan, '7.1.00.00') === 0) {
                $pendapatan += floatval($i->saldo);
            } else
            if (strpos($i->kode_perkiraan, '6.0.00.00') === 0 || strpos($i->kode_perkiraan, '7.2.00.00') === 0  || strpos($i->kode_perkiraan, '7.3.00.00') === 0) {
                $beban += floatval($i->saldo);
            } else {
            }
        }
        $data['pendapatan'] = $pendapatan;
        $data['beban'] = $beban;
        $data['coa'] = $coa;
        $data['laba'] = $pendapatan - $beban;
        $data['query'] = $sql;
        $data['count'] = count($coa);
        return json_encode($data);
    }

    function getLabaRugi()
    {
        $sql = "select kode_perkiraan,nama_perkiraan, level,jurnal, saldo, tanggal from (SELECT
        a.kode_perkiraan,
        a.nama_perkiraan,
        a.level,
        a.jurnal,
        CASE
            WHEN a.jurnal = 'H' AND a.level = 1 THEN
                (SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 2) = LEFT(a.kode_perkiraan, 2))
            WHEN a.jurnal = 'H' AND a.level = 2 THEN
                (IFNULL((SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 4) = LEFT(a.kode_perkiraan, 4)), 0))
            WHEN a.jurnal = 'H' AND a.level = 3 THEN
                (SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 7) = LEFT(a.kode_perkiraan, 7))
            ELSE
                IF(b.saldo = 0, 0.00, b.saldo)
        END AS saldo,
        b.tanggal
    FROM
        ref_perkiraan a
    LEFT JOIN
        data_akuntansi_labarugi b ON a.kode_perkiraan = b.kode_perkiraan
    WHERE
        (a.kode_perkiraan LIKE '4%' OR a.kode_perkiraan LIKE '5%' OR a.kode_perkiraan LIKE '6%' OR a.kode_perkiraan LIKE '7%')
        AND DATE(b.tanggal) = '" . $_POST['tgl'] . "' ) as c where c.saldo <>0";

        $sqlSaldoNol = "SELECT
        a.kode_perkiraan,
        a.nama_perkiraan,
        a.level,
        a.jurnal,
        CASE
            WHEN a.jurnal = 'H' AND a.level = 1 THEN
                (SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 2) = LEFT(a.kode_perkiraan, 2))
            WHEN a.jurnal = 'H' AND a.level = 2 THEN
                (IFNULL((SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 4) = LEFT(a.kode_perkiraan, 4)), 0))
            WHEN a.jurnal = 'H' AND a.level = 3 THEN
                (SELECT SUM(saldo) FROM data_akuntansi_labarugi WHERE LEFT(kode_perkiraan, 7) = LEFT(a.kode_perkiraan, 7))
            ELSE
                IF(b.saldo = 0, 0.00, b.saldo)
        END AS saldo,
        b.tanggal
    FROM
        ref_perkiraan a
    LEFT JOIN
        data_akuntansi_labarugi b ON a.kode_perkiraan = b.kode_perkiraan
    WHERE
        (a.kode_perkiraan LIKE '4%' OR a.kode_perkiraan LIKE '5%' OR a.kode_perkiraan LIKE '6%' OR a.kode_perkiraan LIKE '7%')
        AND DATE(b.tanggal) = '" . $_POST['tgl'] . "' ";
        $coa = DB::select($sql);
        $pendapatan = 0;
        $beban = 0;
        foreach ($coa as $i) {
            if (strpos($i->kode_perkiraan, '4.0.00.00') === 0 || strpos($i->kode_perkiraan, '7.1.00.00') === 0) {
                $pendapatan += floatval($i->saldo);
            }
            if (strpos($i->kode_perkiraan, '6.0.00.00') === 0 || strpos($i->kode_perkiraan, '7.2.00.00') === 0  || strpos($i->kode_perkiraan, '7.3.00.00') === 0) {
                $beban += floatval($i->saldo);
            }
        }

        if ($_POST['saldo_nol'] == 0) {
            $coa = DB::select($sql);
        } else {
            $coa = DB::select($sqlSaldoNol);
        }

        $data['pendapatan'] = $pendapatan;
        $data['beban'] = $beban;
        $data['coa'] = $coa;
        $data['laba'] = $pendapatan - $beban;
        return json_encode($data);
    }

    function cetakNeraca(Request $request)
    {
        $tgl = $request->tgl;
        $jenis = $request->jenis;
        $opsi = $request->opsi;
        return view('page.laporan.cetak_neraca', ['tgl' => $tgl, 'jenis' => $jenis, 'opsi' => $opsi]);
    }
    function cetakLr(Request $request)
    {
        $tgl = $request->tgl;
        $jenis = $request->jenis;
        $opsi = $request->opsi;
        return view('page.laporan.cetak_lr', ['tgl' => $tgl, 'jenis' => $jenis, 'opsi' => $opsi]);
    }

    function getRiwayatJurnal()
    {

        $kode = $_POST['kode'];
        if ($_POST['level'] == 1) {
            $kode = substr($kode, 0, 2);
        } else if ($_POST['level'] == 2) {
            $kode = substr($kode, 0, 4);
        } else if ($_POST['level'] == 3) {
            $kode = substr($kode, 0, 6);
        } else {
            $kode = $kode;
        }
        $query = "SELECT data_trans_jurnal.*, ref_perkiraan.nama_perkiraan, ref_transaksi.nama_transaksi
        FROM data_trans_jurnal
        LEFT JOIN ref_perkiraan ON data_trans_jurnal.kode_perkiraan = ref_perkiraan.kode_perkiraan
        LEFT JOIN ref_transaksi ON data_trans_jurnal.trans_kode = ref_transaksi.kode_transaksi
        WHERE data_trans_jurnal.trans_tglbuku >= '" . $_POST['start'] . "'
            AND data_trans_jurnal.trans_tglbuku <= '" . $_POST['end'] . "'
            AND data_trans_jurnal.kode_perkiraan LIKE '" . $kode . "%' AND data_trans_jurnal.trans_kode !='99' order by data_trans_jurnal.trans_tglbuku asc";
        $hariSebelumnya =  date('Y-m-d', (strtotime('-1 day', strtotime($_POST['start']))));
        $querySaldo = "SELECT HitungPerkSaldo('$kode','$hariSebelumnya', '" . $_POST['jurnal'] . "', '" . $_POST['level'] . "') as saldo";
        $dataSaldo = DB::selectOne($querySaldo);
        $jurnal = DB::select($query);
        $data['jurnal'] = $jurnal;
        $data['saldo'] = $dataSaldo->saldo;
        echo json_encode($data);
    }

    function Nominatifinventaris()
    {
        $jenis = DB::select("SELECT * from data_inventaris_produk");
        return view('page.index', ['page' => 'page.laporan.nominatif_inventaris', 'jenis' => $jenis]);
    }


    function getLaporanArusKas(Request $request)
    {
        $tanggal1 = $request->tanggal_awal;
        $tanggal2 = $request->tanggal_akhir;

        $laporan = DB::table('setup_laporan_arus_kas')->get();
        $sql = "SELECT
        (SELECT IFNULL(SUM(debet),0) FROM data_trans_jurnal WHERE trans_kode IN ('22.1','23.1') AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') AS penerimaan_angsuran,
        (SELECT IFNULL(SUM(kredit),0) FROM data_trans_jurnal WHERE trans_kode='13.1' and kode_perkiraan IN ('7.1.01.01', '7.1.02.01') AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') AS penerimaan_bunga_deviden,
        (select IFNULL(sum(kredit),0) from data_trans_jurnal where `status`=1 and trans_kode='21' and trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as realisasi,
        (select IFNULL(sum(debet),0) from data_trans_jurnal  where  trans_kode='42' and kode_perkiraan in ('6.1.01.01','6.1.01.08','6.1.01.09','6.2.01.01','6.3.01.01') and `status`=1 and trans_tglbuku >= '$tanggal1' AND  trans_tglbuku<= '$tanggal2')  as beban_gaji,
        (select IFNULL(sum(debet),0) from data_trans_jurnal  where  trans_kode='13.3' and kode_perkiraan like '7.3.%' and `status`=1 and trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2'
        )  as beban_pajak,
        (select IFNULL(sum(debet),0) from data_trans_jurnal  where  trans_kode='42' and kode_perkiraan='7.2.02.01' and `status`=1 and trans_tglbuku >= '$tanggal1' AND trans_tglbuku<= '$tanggal2'
        )  as beban_bunga,
        (select IFNULL(sum(debet),0) from data_trans_jurnal  where  (kode_perkiraan LIKE '6.1.04.%' OR kode_perkiraan LIKE '6.1.02.%'  OR kode_perkiraan LIKE '6.1.05.%' OR kode_perkiraan LIKE '6.1.03.%' OR kode_perkiraan LIKE '6.1.06.%' OR kode_perkiraan LIKE '6.2.02.%'  OR kode_perkiraan LIKE '6.2.99.%' OR kode_perkiraan LIKE '7.2.01.%' OR kode_perkiraan LIKE '6.1.99.%'  OR kode_perkiraan LIKE '6.3.02.%' OR kode_perkiraan LIKE '6.3.06.%') and `status`=1 and trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2'
        )  as beban_lain,
        (SELECT IFNULL(SUM(debet), 0)FROM data_trans_jurnal WHERE trans_kode = '41'AND (kode_perkiraan LIKE '1.3.01%' OR kode_perkiraan LIKE '1.3.02%' OR kode_perkiraan LIKE '1.3.03%' OR kode_perkiraan LIKE '1.3.04%' OR kode_perkiraan LIKE '1.3.05%' OR kode_perkiraan LIKE '1.3.06%' OR kode_perkiraan LIKE '1.3.99%' ) AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as penerimaan_penjualan_aset,
        (SELECT IFNULL(SUM(kredit), 0)FROM data_trans_jurnal WHERE trans_kode = '42'AND (kode_perkiraan LIKE '1.3.01%' OR kode_perkiraan LIKE '1.3.02%' OR kode_perkiraan LIKE '1.3.03%' OR kode_perkiraan LIKE '1.3.04%' OR kode_perkiraan LIKE '1.3.05%' OR kode_perkiraan LIKE '1.3.06%' OR kode_perkiraan LIKE '1.3.99%' ) AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as pengeluaran_pembelian_aset,
        (SELECT IFNULL(SUM(kredit), 0)FROM data_trans_jurnal WHERE trans_kode = '41'AND kode_perkiraan LIKE '1.2%'  AND `status` = 1 AND  trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as penerimaan_penjualan_investasi,
        (SELECT IFNULL(SUM(debet), 0)FROM data_trans_jurnal WHERE trans_kode = '42'AND kode_perkiraan LIKE '1.2%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as pengeluaran_pembelian_investasi,
        (SELECT IFNULL(SUM(kredit), 0)FROM data_trans_jurnal WHERE trans_kode = '41'AND kode_perkiraan LIKE '3.1.01%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as penyertaan_modal_desa,
        (SELECT IFNULL(SUM(kredit), 0)FROM data_trans_jurnal WHERE trans_kode = '41'AND kode_perkiraan LIKE '3.1.02%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as penyertaan_modal_masyarakat,
        (SELECT IFNULL(SUM(kredit), 0)FROM data_trans_jurnal WHERE trans_kode = '41'AND kode_perkiraan LIKE '3.1.03%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as penyertaan_modal_masyarakat_eks_pnpm,
        (SELECT IFNULL(SUM(kredit), 0)FROM data_trans_jurnal WHERE trans_kode = '41'AND kode_perkiraan LIKE '3.4%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as modal_donasi,
        (SELECT IFNULL(SUM(kredit), 0)FROM data_trans_jurnal WHERE trans_kode = '41'AND (kode_perkiraan LIKE '2.2.02%' OR kode_perkiraan like '2.2.99')  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND  trans_tglbuku <= '$tanggal2') as kas_dari_utang_jk_panjang,
        (SELECT IFNULL(SUM(debet), 0)FROM data_trans_jurnal WHERE trans_kode = '42'AND kode_perkiraan LIKE '3.1.01%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku<= '$tanggal2') as bagi_hasil_penyertaan_modal_desa,
        (SELECT IFNULL(SUM(debet), 0)FROM data_trans_jurnal WHERE trans_kode = '42'AND kode_perkiraan LIKE '3.1.02%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as bagi_hasil_penyertaan_modal_masyarakat,
        (SELECT IFNULL(SUM(debet), 0)FROM data_trans_jurnal WHERE trans_kode = '42'AND kode_perkiraan LIKE '3.1.03%'  AND `status` = 1 AND trans_tglbuku >= '$tanggal1' AND trans_tglbuku <= '$tanggal2') as bagi_hasil_penyertaan_modal_masyarakat_eks_pnpm,
        (SELECT IFNULL(SUM(debet), 0)FROM data_trans_jurnal WHERE trans_kode = '42'AND (kode_perkiraan LIKE '2.2.02%' OR kode_perkiraan like '2.2.99')  AND `status` = 1 AND trans_tglbuku <= '$tanggal1' AND trans_tglbuku<= '$tanggal2') as pembayaran_utang_jk_panjang,
        (SELECT IFNULL(SUM(debet), 0) - IFNULL(SUM(kredit), 0) FROM data_trans_jurnal WHERE kode_perkiraan LIKE '1.1.01%' AND `status` = 1 AND trans_tglbuku <= '$tanggal1') AS saldo_awal,
        (SELECT IFNULL(SUM(debet), 0) - IFNULL(SUM(kredit), 0) FROM data_trans_jurnal WHERE kode_perkiraan LIKE '1.1.01%' AND `status` = 1 AND trans_tglbuku <= '$tanggal2')AS saldo_akhir";
        $kas = DB::selectOne($sql);
        return response()->json([
            'server' => 'online',
            'success' => true,
            'data' => $laporan,
            'arus_kas' => $kas,
        ]);
    }

    function getLaporanTingkatKesehatan(Request $request)
    {
        $tanggal = $request->tanggal;
        try {
            $sql = "SELECT
            --  HitungPerkSaldo('3.1.01.00', '$tanggal','H', 2) as modal_desa,
            --  HitungPerkSaldo('3.1.03.00', '$tanggal','H', 2) as modal_eks_pnpm,
             HitungPerkSaldo('1.1.03.00', '$tanggal','H', 3) as piutang,
             HitungPerkSaldo('1.1.04.00', '$tanggal','H', 3) as cadangan_resiko_kredit,
             HitungPerkSaldo('1.1.03.04', '$tanggal','D', 4) as saldo_kredit_spp,
             HitungPerkSaldo('1.1.03.05', '$tanggal','D', 4) as saldo_kredit_uep,
             HitungPerkSaldo('1.1.01.02', '$tanggal','D', 4) as kas_bsi,
             HitungPerkSaldo('1.1.01.03', '$tanggal','D', 4) as kas_mandiri,
             HitungPerkSaldo('1.1.01.04', '$tanggal','D', 4) as kas_bri,
             HitungPerkSaldo('1.1.01.05', '$tanggal','D', 4) as kas_bpd,
             HitungPerkSaldo('1.1.01.06', '$tanggal','D', 4) as kas_bkk,
             HitungPerkSaldo('1.1.02.01', '$tanggal','D', 4) as deposito,
             HitungPerkSaldo('1.1.99.00', '$tanggal','H', 3) as rk_unit_usaha,
             HitungPerkSaldo('1.1.05.00', '$tanggal','H', 3) as persediaan,
             HitungPerkSaldo('3.9.00.00', '$tanggal','H', 2) as laba_rugi,
             HitungPerkSaldo('4.0.00.00', '$tanggal','H', 1) as pendapatan,
             HitungPerkSaldo('6.0.00.00', '$tanggal','H', 1) as biaya_usaha,
             HitungPerkSaldo('6.1.00.00', '$tanggal','H', 2) as biaya_adm_umum";
            $data = DB::selectOne($sql);

            //HITUNG MODAL AWAL TERBARU
            $modalAwal =DB::selectOne("select sum(nominal) as modal_awal from data_trans_akuntansi_nonkas where trans_tglbuku='2023-01-02' and trans_catatan='Koreksi Pencatatan Modal' and status=1")->modal_awal;

            $tunggakan_pokok = DB::selectOne("select sum(HitungTungPokok(rekening, '" . $tanggal . "')) as total_tunggakan_pokok from data_kredit_master where data_kredit_master.status=1")->total_tunggakan_pokok;

            $data->tunggakan = $tunggakan_pokok;

            $sql = "SELECT rekening, HitungPinjamanSaldo(rekening, '$tanggal') as saldo_pinjaman, HitungPinjamanKolek(rekening, '$tanggal') as kolek  from data_kredit_master where data_kredit_master.status=1";

            $datakolek = DB::select($sql);

            $cadangan_wajib_dibentuk = 0;
            $rasio = [0.5, 10, 25, 50, 100];

            foreach ($datakolek as $i) {
                $cadangan_wajib_dibentuk += (int)$i->saldo_pinjaman * $rasio[$i->kolek - 1] / 100;
            }

            $cadangan_wajib_dibentuk = (int)$cadangan_wajib_dibentuk;
            // $modal_awal = (int)$data->modal_desa + (int)$data->modal_eks_pnpm;
            $modal_awal = (int)$modalAwal;
            $saldo_upk = (int)$data->piutang;
            $cadangan_resiko = (int)$data->cadangan_resiko_kredit;
            $kekayaan_uep_spp = (int)$data->saldo_kredit_uep + (int)$data->saldo_kredit_spp;
            $kekayaan_produktif = (int)$data->kas_bkk + (int)$data->kas_bpd + (int)$data->kas_bri + (int)$data->kas_mandiri + (int)$data->kas_bsi + (int)$data->piutang + (int)$data->persediaan + (int)$data->rk_unit_usaha;
            $laba = (int)$data->laba_rugi;
            $pendapatan_operasional = (int)$data->pendapatan;
            $biaya_operasional = (int)$data->biaya_usaha;
            $operasional_upk = (int)$data->biaya_adm_umum;
            $tunggakan = (int)$data->tunggakan;

            $tingkat_tunggakan = number_format($tunggakan / $saldo_upk * 100, 1, '.', '');
            $tingkat_cadangan_resiko = number_format($cadangan_resiko / $cadangan_wajib_dibentuk * 100, '2', '.', '');
            $tingkat_laba_berjalan = number_format(($laba - ($cadangan_wajib_dibentuk - $cadangan_resiko)) / $kekayaan_produktif * 100, '2', '.', '');
            $tingkat_biaya = number_format($biaya_operasional / $pendapatan_operasional * 100, '2', '.', '');
            $tingkat_produktifitas = number_format($saldo_upk / $kekayaan_uep_spp * 100, '2', '.', '');
            $tingkat_kekayaan = number_format(($kekayaan_uep_spp - $cadangan_wajib_dibentuk) / ($modal_awal + $operasional_upk) * 100, '2', '.', '');

            //SET VALUE TINGKAT TUNGGAKAN
            if (!isset($skor_tingkat_tunggakan)) {
                if ($tingkat_tunggakan < 5) {
                    $skor_tingkat_tunggakan = 40;
                } elseif ($tingkat_tunggakan >= 5 && $tingkat_tunggakan < 10) {
                    $skor_tingkat_tunggakan = 35;
                } elseif ($tingkat_tunggakan >= 10 && $tingkat_tunggakan < 12.5) {
                    $skor_tingkat_tunggakan = 30;
                } elseif ($tingkat_tunggakan >= 12.5 && $tingkat_tunggakan < 15) {
                    $skor_tingkat_tunggakan = 25;
                } elseif ($tingkat_tunggakan >= 15 && $tingkat_tunggakan < 17.5) {
                    $skor_tingkat_tunggakan = 20;
                } elseif ($tingkat_tunggakan >= 17.5 && $tingkat_tunggakan < 20) {
                    $skor_tingkat_tunggakan = 15;
                } elseif ($tingkat_tunggakan >= 20 && $tingkat_tunggakan < 25) {
                    $skor_tingkat_tunggakan = 10;
                } else {
                    $skor_tingkat_tunggakan = 0;
                }
            }

            // SET VALUE TINGKAT CADANGAN RESIKO
            if (!isset($skor_tingkat_cadangan_resiko)) {
                if ($tingkat_cadangan_resiko < 50) {
                    $skor_tingkat_cadangan_resiko = 0;
                } elseif ($tingkat_cadangan_resiko >= 50 && $tingkat_cadangan_resiko < 60) {
                    $skor_tingkat_cadangan_resiko = 5;
                } elseif ($tingkat_cadangan_resiko >= 60 && $tingkat_cadangan_resiko < 70) {
                    $skor_tingkat_cadangan_resiko = 7.5;
                } elseif ($tingkat_cadangan_resiko >= 70 && $tingkat_cadangan_resiko < 80) {
                    $skor_tingkat_cadangan_resiko = 10;
                } elseif ($tingkat_cadangan_resiko >= 80 && $tingkat_cadangan_resiko < 90) {
                    $skor_tingkat_cadangan_resiko = 12.5;
                } elseif ($tingkat_cadangan_resiko >= 90 && $tingkat_cadangan_resiko < 100) {
                    $skor_tingkat_cadangan_resiko = 15;
                } elseif ($tingkat_cadangan_resiko >= 100) {
                    $skor_tingkat_cadangan_resiko = 20;
                } else {
                    $skor_tingkat_cadangan_resiko = 0; // Nilai default
                }
            }

            // SET VALUE TINGKAT LABA BERJALAN
            if (!isset($skor_tingkat_laba_berjalan)) {
                if ($tingkat_laba_berjalan <= 0) {
                    $skor_tingkat_laba_berjalan = 0;
                } elseif ($tingkat_laba_berjalan > 0 && $tingkat_laba_berjalan <= 0.15) {
                    $skor_tingkat_laba_berjalan = 2.5;
                } elseif ($tingkat_laba_berjalan > 0.15 && $tingkat_laba_berjalan <= 0.45) {
                    $skor_tingkat_laba_berjalan = 3.75;
                } elseif ($tingkat_laba_berjalan > 0.45 && $tingkat_laba_berjalan <= 0.6) {
                    $skor_tingkat_laba_berjalan = 6.25;
                } elseif ($tingkat_laba_berjalan > 0.6 && $tingkat_laba_berjalan <= 0.75) {
                    $skor_tingkat_laba_berjalan = 7.5;
                } elseif ($tingkat_laba_berjalan > 0.75 && $tingkat_laba_berjalan <= 1) {
                    $skor_tingkat_laba_berjalan = 8.75;
                } elseif ($tingkat_laba_berjalan > 1) {
                    $skor_tingkat_laba_berjalan = 10;
                } else {
                    $skor_tingkat_laba_berjalan = 0; // Nilai default (tidak diperlukan karena sudah ditangani, tetapi untuk jaga-jaga)
                }
            }

            //SET VALUE SKOR TINGKAT BIAYA
            if (!isset($skor_tingkat_biaya)) {
                if ($tingkat_biaya <= 40) {
                    $skor_tingkat_biaya = 10;
                } elseif ($tingkat_biaya > 40 && $tingkat_biaya <= 50) {
                    $skor_tingkat_biaya = 8.75;
                } elseif ($tingkat_biaya > 50 && $tingkat_biaya <= 60) {
                    $skor_tingkat_biaya = 7.5;
                } elseif ($tingkat_biaya > 60 && $tingkat_biaya <= 70) {
                    $skor_tingkat_biaya = 6.25;
                } elseif ($tingkat_biaya > 70 && $tingkat_biaya <= 80) {
                    $skor_tingkat_biaya = 5.75;
                } elseif ($tingkat_biaya > 80 && $tingkat_biaya <= 90) {
                    $skor_tingkat_biaya = 3.75;
                } elseif ($tingkat_biaya > 90 && $tingkat_biaya <= 100) {
                    $skor_tingkat_biaya = 2.5;
                } else {
                    $skor_tingkat_biaya = 0; // Nilai default
                }
            }

            // SET VALUE SKOR TINGKAT PRODUKTIFITAS
            if (!isset($skor_tingkat_produktifitas)) {
                if ($tingkat_produktifitas < 60) {
                    $skor_tingkat_produktifitas = 0;
                } elseif ($tingkat_produktifitas >= 60 && $tingkat_produktifitas < 65) {
                    $skor_tingkat_produktifitas = 2.5;
                } elseif ($tingkat_produktifitas >= 65 && $tingkat_produktifitas < 70) {
                    $skor_tingkat_produktifitas = 3.75;
                } elseif ($tingkat_produktifitas >= 70 && $tingkat_produktifitas < 75) {
                    $skor_tingkat_produktifitas = 5;
                } elseif ($tingkat_produktifitas >= 75 && $tingkat_produktifitas < 80) {
                    $skor_tingkat_produktifitas = 6.25;
                } elseif ($tingkat_produktifitas >= 80 && $tingkat_produktifitas < 85) {
                    $skor_tingkat_produktifitas = 7.5;
                } elseif ($tingkat_produktifitas >= 85) {
                    $skor_tingkat_produktifitas = 10;
                } else {
                    $skor_tingkat_produktifitas = 0; // Nilai default (jaga-jaga)
                }
            }

            //SET VALUE SKOR TINGKAT KEKAYAAN
            if (!isset($skor_tingkat_kekayaan)) {
                if ($tingkat_kekayaan <= 95) {
                    $skor_tingkat_kekayaan = 0;
                } elseif ($tingkat_kekayaan > 95 && $tingkat_kekayaan <= 97.5) {
                    $skor_tingkat_kekayaan = 2.5;
                } elseif ($tingkat_kekayaan > 97.5 && $tingkat_kekayaan <= 100) {
                    $skor_tingkat_kekayaan = 3.75;
                } elseif ($tingkat_kekayaan > 100 && $tingkat_kekayaan <= 102.5) {
                    $skor_tingkat_kekayaan = 5;
                } elseif ($tingkat_kekayaan > 102.5 && $tingkat_kekayaan <= 105) {
                    $skor_tingkat_kekayaan = 6.25;
                } elseif ($tingkat_kekayaan > 105 && $tingkat_kekayaan <= 107.5) {
                    $skor_tingkat_kekayaan = 7.5;
                } elseif ($tingkat_kekayaan > 107.5 && $tingkat_kekayaan <= 110) {
                    $skor_tingkat_kekayaan = 8.75;
                } elseif ($tingkat_kekayaan > 110) {
                    $skor_tingkat_kekayaan = 10;
                } else {
                    $skor_tingkat_kekayaan = 0; // Nilai default jika kondisi tidak terpenuhi
                }
            }

            // $skor_tingkat_kekayaan ??= $tingkat_kekayaan <= 95 ? 0 : ($tingkat_kekayaan > 95 && $tingkat_kekayaan <= 9.75 ? 2.5 : ($tingkat_kekayaan > 9.75 && $tingkat_kekayaan <= 100 ? 3.75 : ($tingkat_kekayaan > 100 && $tingkat_kekayaan <= 102.5 ? 5 : ($tingkat_kekayaan > 102.5 && $tingkat_kekayaan <= 105 ? 6.25 : ($tingkat_kekayaan > 102.5 && $tingkat_kekayaan <= 105 ? 6.25 : ($tingkat_kekayaan > 105 && $tingkat_kekayaan <= 107.5 ? 7.5 : ($tingkat_kekayaan > 107.5 && $tingkat_kekayaan <= 110 ? 8.75 : ($tingkat_kekayaan > 110 ? 10 : 0))))))));
            $total_skor = $skor_tingkat_tunggakan + $skor_tingkat_cadangan_resiko + $skor_tingkat_laba_berjalan + $skor_tingkat_biaya + $skor_tingkat_produktifitas + $skor_tingkat_kekayaan;

            //SET TINGKAT KESEHATAN TUNGGAKAN
            if (!isset($tingkat_kesehatan_tunggakan)) {
                if ($tingkat_tunggakan < 10) {
                    $tingkat_kesehatan_tunggakan = 'SEHAT';
                } elseif ($tingkat_tunggakan >= 10 && $tingkat_tunggakan < 15) {
                    $tingkat_kesehatan_tunggakan = 'CUKUP SEHAT';
                } elseif ($tingkat_tunggakan >= 15 && $tingkat_tunggakan < 20) {
                    $tingkat_kesehatan_tunggakan = 'KURANG SEHAT';
                } elseif ($tingkat_tunggakan >= 20) {
                    $tingkat_kesehatan_tunggakan = 'TIDAK SEHAT';
                } else {
                    $tingkat_kesehatan_tunggakan = ''; // Nilai default jika kondisi tidak terpenuhi
                }
            }


            //SET TINGKAT KESEHATAN CADANGAN RESIKO
            if ($tingkat_cadangan_resiko < 60) {
                $tingkat_kesehatan_cadangan_resiko = 'SEHAT';
            } elseif ($tingkat_cadangan_resiko >= 60 && $tingkat_cadangan_resiko <= 80) {
                $tingkat_kesehatan_cadangan_resiko = 'KURANG SEHAT';
            } elseif ($tingkat_cadangan_resiko > 80 && $tingkat_cadangan_resiko < 100) {
                $tingkat_kesehatan_cadangan_resiko = 'CUKUP SEHAT';
            } elseif ($tingkat_cadangan_resiko >= 100) {
                $tingkat_kesehatan_cadangan_resiko = 'SEHAT';
            } else {
                $tingkat_kesehatan_cadangan_resiko = ''; // Nilai default jika kondisi tidak terpenuhi
            }

            // SET TINGKAT KESEHATAN LABA
            if ($skor_tingkat_laba_berjalan <= 0.15) {
                $tingkat_kesehatan_laba = 'TIDAK SEHAT';
            } elseif ($skor_tingkat_laba_berjalan > 0.15 && $skor_tingkat_laba_berjalan <= 0.45) {
                $tingkat_kesehatan_laba = 'KURANG SEHAT';
            } elseif ($skor_tingkat_laba_berjalan > 0.45 && $skor_tingkat_laba_berjalan <= 0.75) {
                $tingkat_kesehatan_laba = 'CUKUP SEHAT';
            } elseif ($skor_tingkat_laba_berjalan > 0.75) {
                $tingkat_kesehatan_laba = 'SEHAT';
            } else {
                $tingkat_kesehatan_laba = ''; // Nilai default jika kondisi tidak terpenuhi
            }

            // SET TINGKAT KESEHATAN BIAYA
            if ($tingkat_biaya <= 50) {
                $tingkat_kesehatan_biaya = 'SEHAT';
            } elseif ($tingkat_biaya > 50 && $tingkat_biaya <= 70) {
                $tingkat_kesehatan_biaya = 'CUKUP SEHAT';
            } elseif ($tingkat_biaya > 70 && $tingkat_biaya <= 90) {
                $tingkat_kesehatan_biaya = 'KURANG SEHAT';
            } elseif ($tingkat_biaya > 90) {
                $tingkat_kesehatan_biaya = 'TIDAK SEHAT';
            } else {
                $tingkat_kesehatan_biaya = ''; // Nilai default jika kondisi tidak terpenuhi
            }

            //SET TINGKAT KESEHATAN PRODUKTIFITAS
            if ($tingkat_produktifitas <= 65) {
                $tingkat_kesehatan_produktifitas = 'TIDAK SEHAT';
            } elseif ($tingkat_produktifitas > 65 && $tingkat_produktifitas <= 75) {
                $tingkat_kesehatan_produktifitas = 'KURANG SEHAT';
            } elseif ($tingkat_produktifitas > 75 && $tingkat_produktifitas <= 85) {
                $tingkat_kesehatan_produktifitas = 'CUKUP SEHAT';
            } elseif ($tingkat_produktifitas > 85) {
                $tingkat_kesehatan_produktifitas = 'SEHAT';
            } else {
                $tingkat_kesehatan_produktifitas = ''; // Nilai default jika kondisi tidak terpenuhi
            }

            //SET TINGKAT KESEHATAN KEKAYAAN
            if ($tingkat_kekayaan <= 97.5) {
                $tingkat_kesehatan_kekayaan = 'TIDAK SEHAT';
            } elseif ($tingkat_kekayaan > 97.5 && $tingkat_kekayaan <= 102.5) {
                $tingkat_kesehatan_kekayaan = 'KURANG SEHAT';
            } elseif ($tingkat_kekayaan > 102.5 && $tingkat_kekayaan <= 107.5) {
                $tingkat_kesehatan_kekayaan = 'CUKUP SEHAT';
            } elseif ($tingkat_kekayaan > 107.5) {
                $tingkat_kesehatan_kekayaan = 'SEHAT';
            } else {
                $tingkat_kesehatan_kekayaan = ''; // Nilai default jika kondisi tidak terpenuhi
            }

            //SET TINGKAT KESEHATAN UPK
            if ($total_skor <= 37.5) {
                $tingkat_kesehatan_upk = 'TIDAK SEHAT';
            } elseif ($total_skor > 37.5 && $total_skor <= 62.5) {
                $tingkat_kesehatan_upk = 'KURANG SEHAT';
            } elseif ($total_skor > 62.5 && $total_skor <= 87.5) {
                $tingkat_kesehatan_upk = 'CUKUP SEHAT';
            } elseif ($total_skor > 87.5) {
                $tingkat_kesehatan_upk = 'SEHAT';
            } else {
                $tingkat_kesehatan_upk = ''; // Nilai default jika kondisi tidak terpenuhi
            }
            return response()->json([
                'success' => true,
                'data' => $data,
                'kolek' => $datakolek,
                'modal_awal' => $modal_awal,
                'saldo_upk' => $saldo_upk,
                'cadangan_resiko' => $cadangan_resiko,
                'kekayaan_uep_spp' => $kekayaan_uep_spp,
                'kekayaan_produktif' => $kekayaan_produktif,
                'laba' => $laba,
                'pendapatan_operasional' => $pendapatan_operasional,
                'biaya_operasional' => $biaya_operasional,
                'operasional_upk' => $operasional_upk,
                'tunggakan' => $tunggakan,
                'pencadangan' => $cadangan_wajib_dibentuk,
                'tingkat_tunggakan' => $tingkat_tunggakan,
                'tingkat_cadangan_resiko' => $tingkat_cadangan_resiko,
                'tingkat_laba_berjalan' => $tingkat_laba_berjalan,
                'tingkat_biaya' => $tingkat_biaya,
                'tingkat_produktifitas' => $tingkat_produktifitas,
                'tingkat_kekayaan' => $tingkat_kekayaan,
                'skor_tingkat_tunggakan' => $skor_tingkat_tunggakan,
                'skor_tingkat_cadangan_resiko' => $skor_tingkat_cadangan_resiko,
                'skor_tingkat_laba_berjalan' => $skor_tingkat_laba_berjalan,
                'skor_tingkat_biaya' => $skor_tingkat_biaya,
                'skor_tingkat_produktifitas' => $skor_tingkat_produktifitas,
                'skor_tingkat_kekayaan' => $skor_tingkat_kekayaan,
                'total_skor' => $total_skor,
                'tingkat_kesehatan_tunggakan' => $tingkat_kesehatan_tunggakan,
                'tingkat_kesehatan_cadangan_resiko' => $tingkat_kesehatan_cadangan_resiko,
                'tingkat_kesehatan_laba' => $tingkat_kesehatan_laba,
                'tingkat_kesehatan_biaya' => $tingkat_kesehatan_biaya,
                'tingkat_kesehatan_produktifitas' => $tingkat_kesehatan_produktifitas,
                'tingkat_kesehatan_kekayaan' => $tingkat_kesehatan_kekayaan,
                'tingkat_kesehatan_upk' => $tingkat_kesehatan_upk,
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error->getMessage(),
            ]);
        }
    }

    function getLaporanTingkatKesehatan2(Request $request)
    {
        DB::setDefaultConnection("db_cilongok_backup");
        $tanggal = $request->tanggal;
        try {
            $sql = "SELECT
             HitungPerkSaldo('3.1.01.00', '$tanggal','H', 2) as modal_desa,
             HitungPerkSaldo('3.1.03.00', '$tanggal','H', 2) as modal_eks_pnpm,
             HitungPerkSaldo('1.1.03.00', '$tanggal','H', 3) as piutang,
             HitungPerkSaldo('1.1.04.00', '$tanggal','H', 3) as cadangan_resiko_kredit,
             HitungPerkSaldo('1.1.03.04', '$tanggal','D', 4) as saldo_kredit_spp,
             HitungPerkSaldo('1.1.03.05', '$tanggal','D', 4) as saldo_kredit_uep,
             HitungPerkSaldo('1.1.01.02', '$tanggal','D', 4) as kas_bsi,
             HitungPerkSaldo('1.1.01.03', '$tanggal','D', 4) as kas_mandiri,
             HitungPerkSaldo('1.1.01.04', '$tanggal','D', 4) as kas_bri,
             HitungPerkSaldo('1.1.01.05', '$tanggal','D', 4) as kas_bpd,
             HitungPerkSaldo('1.1.01.06', '$tanggal','D', 4) as kas_bkk,
             HitungPerkSaldo('1.1.02.01', '$tanggal','D', 4) as deposito,
             HitungPerkSaldo('1.1.99.00', '$tanggal','H', 3) as rk_unit_usaha,
             HitungPerkSaldo('1.1.05.00', '$tanggal','H', 3) as persediaan,
             HitungPerkSaldo('3.9.00.00', '$tanggal','H', 2) as laba_rugi,
             HitungPerkSaldo('4.0.00.00', '$tanggal','H', 1) as pendapatan,
             HitungPerkSaldo('6.0.00.00', '$tanggal','H', 1) as biaya_usaha,
             HitungPerkSaldo('6.1.00.00', '$tanggal','H', 2) as biaya_adm_umum";
            $data = DB::selectOne($sql);

            $tunggakan_pokok = DB::selectOne("select sum(HitungTungPokok(rekening, '" . $tanggal . "')) as total_tunggakan_pokok from data_kredit_master where data_kredit_master.status=1")->total_tunggakan_pokok;

            $data->tunggakan = $tunggakan_pokok;

            $sql = "SELECT rekening, HitungPinjamanSaldo(rekening, '$tanggal') as saldo_pinjaman, HitungPinjamanKolek(rekening, '$tanggal') as kolek from data_kredit_master where data_kredit_master.status=1";

            $datakolek = DB::select($sql);

            $cadangan_wajib_dibentuk = 0;
            $rasio = [0.5, 10, 25, 50, 100];

            // $null = array_filter($datakolek, function ($item) {
            //     return $item->kolek != 1 &&  $item->kolek != 2 && $item->kolek != 3 && $item->kolek != 4 && $item->kolek != 5;
            // });

            foreach ($datakolek as $i) {
                $index = $i->kolek - 1;
                $r = 0;
                switch ($i->kolek) {
                    case 1:
                        $r = 0.5;
                        break;
                    case 2:
                        $r = 10;
                        break;
                    case 3:
                        $r = 25;
                        break;
                    case 4:
                        $r = 50;
                        break;
                    case 5:
                        $r = 100;
                        break;
                }
                $cadangan_wajib_dibentuk += intval($i->saldo_pinjaman) * $r / 100;
            }

            $cadangan_wajib_dibentuk = (int)$cadangan_wajib_dibentuk;
            $modal_awal = (int)$data->modal_desa + (int)$data->modal_eks_pnpm;
            $saldo_upk = (int)$data->piutang;
            $cadangan_resiko = (int)$data->cadangan_resiko_kredit;
            $kekayaan_uep_spp = (int)$data->saldo_kredit_uep + (int)$data->saldo_kredit_spp;
            $kekayaan_produktif = (int)$data->kas_bkk + (int)$data->kas_bpd + (int)$data->kas_bri + (int)$data->kas_mandiri + (int)$data->kas_bsi + (int)$data->piutang + (int)$data->persediaan + (int)$data->rk_unit_usaha;
            $laba = (int)$data->laba_rugi;
            $pendapatan_operasional = (int)$data->pendapatan;
            $biaya_operasional = (int)$data->biaya_usaha;
            $operasional_upk = (int)$data->biaya_adm_umum;
            $tunggakan = (int)$data->tunggakan;

            $tingkat_tunggakan = number_format($tunggakan / $saldo_upk * 100, 1, '.', '');
            $tingkat_cadangan_resiko = number_format($cadangan_resiko / $cadangan_wajib_dibentuk * 100, '2', '.', '');
            $tingkat_laba_berjalan = number_format(($laba - ($cadangan_wajib_dibentuk - $cadangan_resiko)) / $kekayaan_produktif * 100, '2', '.', '');
            $tingkat_biaya = number_format($biaya_operasional / $pendapatan_operasional * 100, '2', '.', '');
            $tingkat_produktifitas = number_format($saldo_upk / $kekayaan_uep_spp * 100, '2', '.', '');
            $tingkat_kekayaan = number_format(($kekayaan_uep_spp - $cadangan_wajib_dibentuk) / ($modal_awal + $operasional_upk) * 100, '2', '.', '');

            $skor_tingkat_tunggakan ??= $tingkat_tunggakan < 5 ? 40 : ($tingkat_tunggakan >= 5 && $tingkat_tunggakan < 10 ? 35 : ($tingkat_tunggakan >= 10 && $tingkat_tunggakan < 12.5 ? 30 : ($tingkat_tunggakan >= 12.5 && $tingkat_tunggakan < 15 ? 25 : ($tingkat_tunggakan >= 15 && $tingkat_tunggakan < 17.5 ? 20 : ($tingkat_tunggakan >= 17.5 && $tingkat_tunggakan < 20 ? 15 : ($tingkat_tunggakan >= 20 && $tingkat_tunggakan < 25 ? 10 : 0))))));

            $skor_tingkat_cadangan_resiko ??= $tingkat_cadangan_resiko < 50 ? 0 : ($tingkat_cadangan_resiko >= 50 && $tingkat_cadangan_resiko < 60 ? 5 : ($tingkat_cadangan_resiko >= 60 && $tingkat_cadangan_resiko < 70 ? 7.5 : ($tingkat_cadangan_resiko >= 70 && $tingkat_cadangan_resiko < 80 ? 10 : ($tingkat_cadangan_resiko >= 80 && $tingkat_cadangan_resiko < 90 ? 12.5 : ($tingkat_cadangan_resiko >= 90 && $tingkat_cadangan_resiko < 100 ? 15 : ($tingkat_cadangan_resiko >= 100 ? 20 : 0))))));

            $skor_tingkat_laba_berjalan ??= $tingkat_laba_berjalan <= 0 ? 0 : ($tingkat_laba_berjalan > 0 && $tingkat_laba_berjalan <= 0.15 ? 2.5 : ($tingkat_laba_berjalan > 0.15 && $tingkat_laba_berjalan <= 0.45 ? 3.75 : ($tingkat_laba_berjalan > 3.75 && $tingkat_laba_berjalan <= 0.6 ? 6.25 : ($tingkat_laba_berjalan > 0.6 && $tingkat_laba_berjalan <= 0.75 ? 7.5 : ($tingkat_laba_berjalan > 0.75 && $tingkat_laba_berjalan <= 1 ? 8.75 : ($tingkat_laba_berjalan > 1 ? 10 : 0))))));

            $skor_tingkat_biaya ??= $tingkat_biaya <= 40 ? 10 : ($tingkat_biaya > 40 && $tingkat_biaya <= 50 ? 8.75 : ($tingkat_biaya > 50 && $tingkat_biaya <= 60 ? 7.5 : ($tingkat_biaya > 60 && $tingkat_biaya <= 70 ? 6.25 : ($tingkat_biaya > 70 && $tingkat_biaya <= 80 ? 5.75 : ($tingkat_biaya > 80 && $tingkat_biaya <= 90 ? 3.75 : ($tingkat_biaya > 90 && $tingkat_biaya <= 100 ? 2.5 : 0))))));

            $skor_tingkat_produktifitas ??= $tingkat_produktifitas < 60 ? 0 : ($tingkat_produktifitas >= 60 && $tingkat_produktifitas < 65 ? 2.5 : ($tingkat_produktifitas >= 65 && $tingkat_produktifitas < 70 ? 3.75 : ($tingkat_produktifitas >= 70 && $tingkat_produktifitas < 75 ? 5 : ($tingkat_produktifitas >= 75 && $tingkat_produktifitas < 80 ? 6.25 : ($tingkat_produktifitas >= 80 && $tingkat_produktifitas < 8.5 ? 7.5 : ($tingkat_produktifitas >= 8.5 ? 10 : 0))))));

            $skor_tingkat_kekayaan ??= $tingkat_kekayaan <= 95 ? 0 : ($tingkat_kekayaan > 95 && $tingkat_kekayaan <= 9.75 ? 2.5 : ($tingkat_kekayaan > 9.75 && $tingkat_kekayaan <= 100 ? 3.75 : ($tingkat_kekayaan > 100 && $tingkat_kekayaan <= 102.5 ? 5 : ($tingkat_kekayaan > 102.5 && $tingkat_kekayaan <= 105 ? 6.25 : ($tingkat_kekayaan > 102.5 && $tingkat_kekayaan <= 105 ? 6.25 : ($tingkat_kekayaan > 105 && $tingkat_kekayaan <= 107.5 ? 7.5 : ($tingkat_kekayaan > 107.5 && $tingkat_kekayaan <= 110 ? 8.75 : ($tingkat_kekayaan > 110 ? 10 : 0))))))));
            $total_skor = $skor_tingkat_tunggakan + $skor_tingkat_cadangan_resiko + $skor_tingkat_laba_berjalan + $skor_tingkat_biaya + $skor_tingkat_produktifitas + $skor_tingkat_kekayaan;

            $tingkat_kesehatan_tunggakan ??= $tingkat_tunggakan < 10 ? 'SEHAT' : ($tingkat_tunggakan >= 10 && $tingkat_tunggakan < 15 ? 'CUKUP SEHAT' : ($tingkat_tunggakan >= 15 && $tingkat_tunggakan < 20 ? 'KURANG SEHAT' : ($tingkat_tunggakan >= 20 ? 'TIDAK SEHAT' : '')));
            $tingkat_kesehatan_cadangan_resiko = $tingkat_cadangan_resiko < 60 ? 'SEHAT' : ($tingkat_cadangan_resiko >= 60 && $tingkat_cadangan_resiko <= 80 ? 'KURANG SEHAT' : ($tingkat_cadangan_resiko >= 80 && $tingkat_cadangan_resiko < 100 ? 'CUKUP SEHAT' : ($tingkat_cadangan_resiko >= 100 ? 'SEHAT' : '')));

            $tingkat_kesehatan_laba = $skor_tingkat_laba_berjalan <= 0.15 ? 'TIDAK SEHAT' : ($skor_tingkat_laba_berjalan > 0.15 && $skor_tingkat_laba_berjalan <= 0.45 ? 'KURANG SEHAT' : ($skor_tingkat_laba_berjalan > 0.45 && $skor_tingkat_laba_berjalan <= 0.75 ? 'CUKUP SEHAT' : ($skor_tingkat_laba_berjalan > 0.75 ? 'SEHAT' : '')));

            $tingkat_kesehatan_biaya = $tingkat_biaya <= 50 ? 'SEHAT' : ($tingkat_biaya > 50 && $tingkat_biaya <= 70 ? 'CUKUP SEHAT' : ($tingkat_biaya > 70 && $tingkat_biaya <= 90 ? 'KURANG SEHAT' : ($tingkat_biaya > 90 ? 'TIDAK SEHAT' : '')));
            $tingkat_kesehatan_produktifitas = $tingkat_produktifitas <= 65 ? 'TIDAK SEHAT' : ($tingkat_produktifitas > 65 && $tingkat_produktifitas <= 75 ? 'KURANG SEHAT' : ($tingkat_produktifitas > 75 && $tingkat_produktifitas <= 85 ? 'CUKUP SEHAT' : ($tingkat_produktifitas > 85 ? 'SEHAT' : '')));

            $tingkat_kesehatan_kekayaan = $tingkat_kekayaan <= 97.5 ? 'TIDAK SEHAT' : ($tingkat_kekayaan > 97.5 && $tingkat_kekayaan <= 102.5 ? 'KURANG SEHAT' : ($tingkat_kekayaan > 102.5 && $tingkat_kekayaan <= 107.5 ? 'CUKUP SEHAT' : ($tingkat_kekayaan > 107.5 ? 'SEHAT' : '')));

            $tingkat_kesehatan_upk = $total_skor <= 37.5 ? 'TIDAK SEHAT' : ($total_skor > 37.5 && $total_skor <= 62.5 ? 'KURANG SEHAT' : ($total_skor > 62.5 && $total_skor <= 87.5 ? 'CUKUP SEHAT' : ($total_skor > 87.5 ? 'SEHAT' : '')));

            return response()->json([
                'success' => true,
                'data' => $data,
                'kolek' => $datakolek,
                'modal_awal' => $modal_awal,
                'saldo_upk' => $saldo_upk,
                'cadangan_resiko' => $cadangan_resiko,
                'kekayaan_uep_spp' => $kekayaan_uep_spp,
                'kekayaan_produktif' => $kekayaan_produktif,
                'laba' => $laba,
                'pendapatan_operasional' => $pendapatan_operasional,
                'biaya_operasional' => $biaya_operasional,
                'operasional_upk' => $operasional_upk,
                'tunggakan' => $tunggakan,
                'pencadangan' => $cadangan_wajib_dibentuk,
                'tingkat_tunggakan' => $tingkat_tunggakan,
                'tingkat_cadangan_resiko' => $tingkat_cadangan_resiko,
                'tingkat_laba_berjalan' => $tingkat_laba_berjalan,
                'tingkat_biaya' => $tingkat_biaya,
                'tingkat_produktifitas' => $tingkat_produktifitas,
                'tingkat_kekayaan' => $tingkat_kekayaan,
                'skor_tingkat_tunggakan' => $skor_tingkat_tunggakan,
                'skor_tingkat_cadangan_resiko' => $skor_tingkat_cadangan_resiko,
                'skor_tingkat_laba_berjalan' => $skor_tingkat_laba_berjalan,
                'skor_tingkat_biaya' => $skor_tingkat_biaya,
                'skor_tingkat_produktifitas' => $skor_tingkat_produktifitas,
                'skor_tingkat_kekayaan' => $skor_tingkat_kekayaan,
                'total_skor' => $total_skor,
                'tingkat_kesehatan_tunggakan' => $tingkat_kesehatan_tunggakan,
                'tingkat_kesehatan_cadangan_resiko' => $tingkat_kesehatan_cadangan_resiko,
                'tingkat_kesehatan_laba' => $tingkat_kesehatan_laba,
                'tingkat_kesehatan_biaya' => $tingkat_kesehatan_biaya,
                'tingkat_kesehatan_produktifitas' => $tingkat_kesehatan_produktifitas,
                'tingkat_kesehatan_kekayaan' => $tingkat_kesehatan_kekayaan,
                'tingkat_kesehatan_upk' => $tingkat_kesehatan_upk,
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error->getMessage(),
            ]);
        }
    }

    function getLaporanCalk(Request $request)
    {
        $tanggal = $request->tanggal;
        $calk = DB::table('data_calk')->where('tanggal', $tanggal)->first();
        return response()->json([
            'success' => true,
            'data' => $calk
        ]);
    }

    function simpanLaporanCalk(Request $request)
    {
        try {
            if (isset($request->id)) {
                $lap = DB::table('data_calk')->where('id', $request->id)->first();
                if ($lap->tanggal != $request->tanggal) {
                    DB::table('data_calk')->insert([
                        'tanggal' => $request->tanggal,
                        'point_a' => $request->point_a,
                        'point_b' => $request->point_b,
                        'point_c' => $request->point_c,
                        'point_e' => $request->point_e,
                    ]);
                } else {
                    DB::table('data_calk')
                        ->where('id', $request->id)
                        ->update([
                            'point_a' => $request->point_a,
                            'point_b' => $request->point_b,
                            'point_c' => $request->point_c,
                            'point_e' => $request->point_e,
                        ]);
                }
            } else {
                DB::table('data_calk')->insert([
                    'tanggal' => $request->tanggal,
                    'point_a' => $request->point_a,
                    'point_b' => $request->point_b,
                    'point_c' => $request->point_c,
                    'point_e' => $request->point_e,
                ]);
            }
            return response()->json([
                'success' => true,
                'message' => "Data berhasil disimpan"
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error->getMessage()
            ]);
        }
    }


    function getLaporanPerubahanEkuitas(Request $request)
    {
        try {
            $tanggal = $request->tanggal;
            $arrTanggal = explode('-', $tanggal);
            $tahunSebelumnya = $arrTanggal[0] - 1;
            $tglSebelumnya = $tahunSebelumnya . '-12-31';
            $awalTahun = $arrTanggal[0] . '-01-01';

            $sql_modal_awal = "select *, HitungPerkSaldo(kode_perkiraan,'$tglSebelumnya', 'K','4') as saldo from (SELECT * from ref_perkiraan where kode_perkiraan like '3.1.01.%' and level ='4' UNION SELECT * from ref_perkiraan where kode_perkiraan like '3.1.02.%' and level ='4' UNION SELECT * from ref_perkiraan where kode_perkiraan like '3.1.03.%' and level ='4')as tbx";
            $modal_awal = DB::select($sql_modal_awal);

            $sql_modal_terkini = "SELECT * from(select *, saldo_kredit-saldo_debet as saldo from(SELECT *, (SELECT IFNULL(sum(kredit),0) from data_trans_jurnal where kode_perkiraan= tbx.kode_perkiraan and trans_tglbuku>='$awalTahun' and trans_tglbuku <='$tanggal') as saldo_kredit, (SELECT IFNULL(sum(debet),0) from data_trans_jurnal where kode_perkiraan= tbx.kode_perkiraan and trans_tglbuku>='$awalTahun' and trans_tglbuku <='$tanggal') as saldo_debet from (SELECT * from ref_perkiraan where kode_perkiraan like '3.1.01.%' and level ='4' UNION SELECT * from ref_perkiraan where kode_perkiraan like '3.1.02.%' and level ='4' UNION SELECT * from ref_perkiraan where kode_perkiraan like '3.1.03.%' and level ='4') as tbx) as tb_y) as tb_result where saldo !=0";
            $modal_terkini = DB::select($sql_modal_terkini);

            $sql = "select *, HitungPerkSaldo(kode_perkiraan, '$tanggal', 'K', '4') as saldo from(SELECT * from ref_perkiraan where kode_perkiraan like '3.3.01.%' and level ='4' and kode_perkiraan not in ('3.3.01.01')) as tbx";
            $laba_awal = DB::select($sql);

            $sql = "select HitungPerkSaldo('3.9.01.01', '$tanggal', 'K', '4') as saldo";
            $laba_berjalan = DB::selectOne($sql)->saldo;

            $sql = "select *, HitungPerkSaldo(kode_perkiraan,'$tanggal', 'K','4') as saldo from (SELECT * from ref_perkiraan where kode_perkiraan like '3.2.01.%' and level ='4' UNION SELECT * from ref_perkiraan where kode_perkiraan like '3.2.02.%' and level ='4' UNION SELECT * from ref_perkiraan where kode_perkiraan like '3.2.03.%' and level ='4')as tbx";
            $bagi_hasil = DB::select($sql);

            $sql = "select HitungPerkSaldo('3.4.01.01', '$tanggal', 'K', '4') as saldo";
            $donasi = DB::selectOne($sql)->saldo;


            $total_modal_awal = 0;
            $total_penambahan_modal = 0;
            $total_laba_awal = 0;
            $total_bagi_hasil = 0;

            foreach ($modal_awal as $i) {
                $total_modal_awal += (int)$i->saldo;
            }
            foreach ($modal_terkini as $i) {
                $total_penambahan_modal += (int)$i->saldo;
            }
            foreach ($laba_awal as $i) {
                $total_laba_awal += (int)$i->saldo;
            }
            $total_laba_awal += $laba_berjalan;
            foreach ($bagi_hasil as $i) {
                $total_bagi_hasil += (int)$i->saldo;
            }

            $modalakhir = $total_modal_awal + $total_penambahan_modal + $total_laba_awal + $total_bagi_hasil + $donasi;
            $total_bagi_hasil = $total_bagi_hasil + $total_laba_awal + $laba_berjalan;
            $penyertaan_modal_akhir = $total_modal_awal + $total_penambahan_modal;

            return response()->json([
                'success' => true,
                'data' => $modal_awal,
                'terkini' => $modal_terkini,
                'laba_awal' => $laba_awal,
                'laba_berjalan' => $laba_berjalan,
                'bagi_hasil' => $bagi_hasil,
                'donasi' => $donasi,
                'total_modal_terkini' => $total_penambahan_modal,
                'modal_akhir' => $modalakhir,
                'total_modal_awal' => $total_modal_awal,
                'total_bagi_hasil' => $total_bagi_hasil,
                'penyertaan_modal_akhir' => $penyertaan_modal_akhir
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error->getMessage()
            ]);
        }
    }

    function pendapatanDesa(Request $request)
    {
        try {
            $tanggal = $request->tanggal;

            $sql = "SELECT a.desa_id, a.nama_desa, (select IFNULL(sum(kredit),0) from view_pendapatan where desa_id =a.desa_id and YEAR(trans_tglbuku)= YEAR('$tanggal') and trans_tglbuku <='$tanggal' ) as kredit from data_desa_master a";
            $data = DB::select($sql);
            return response()->json([
                'success' => true,
                'tanggal' => $request->tanggal,
                'data' => $data,
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error->getMessage()
            ]);
        }
    }
}
