<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;

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

class ApiController extends Controller
{
    function getDaftarCOARekeningPenempatan()
    {
        $sql = "SELECT * FROM ref_perkiraan WHERE LENGTH(kode_perkiraan) = 9 AND LEFT(kode_perkiraan,7) = '1.1.01.' AND RIGHT(kode_perkiraan,2) NOT IN ('00','01','99')";
        $rekening = DB::select($sql);
        return response()->json($rekening);
    }

    function getDaftarTransaksiJurnalKas(Request $request)
    {
        $trans = DB::select(
            "SELECT trans_id, trans_kode, perk_debet, perk_kredit, nominal_debet, nominal_kredit, trans_catatan, trans_date, trans_tglbuku, user, status, IF(trans_kode = '42', perk_debet, perk_kredit) as kode_perkiraan, IF(trans_kode = '42', nominal_kredit, nominal_debet) as nominal FROM data_trans_akuntansi ta WHERE DATE(trans_tglbuku) >= ? AND DATE(trans_tglbuku) <= ? ORDER BY trans_tglbuku",
            [$request->start_date, $request->end_date]
        );
        return response()->json($trans);
    }

    function getDaftarTransaksiJurnalNonKas(Request $request)
    {

        $trans = DB::select(
            "SELECT * FROM data_trans_akuntansi_nonkas WHERE DATE(trans_tglbuku) >= ? AND DATE(trans_tglbuku) <= ? ORDER BY trans_tglbuku",
            [$request->start_date, $request->end_date]
        );
        return response()->json($trans);
    }

    function getDaftarPembentukanCadanganResiko(Request $request)
    {
        $tanggal = $request->tanggal;
        $desa = $request->desa;
        $arrTanggal = explode('-', $tanggal);
        $tahun = $arrTanggal[0];
        $bulan = $arrTanggal[1];
        $lastDate = date("Y-m-t", strtotime($tahun . "-" . $bulan . "-01"));
        if ($desa == '0') {
            $sql = "select * from(SELECT tp.*,dm.nama_desa,km.jkw, km.plafon,km.tgl_mulai,km.tgl_jatuh_tempo, kel.nama_kelompok, HitungPinjamanSaldo(tp.rekening, '$lastDate') AS bakidebet FROM table_pencadangan tp JOIN data_kredit_master km ON tp.rekening = km.rekening JOIN data_kelompok_master kel ON kel.kelompok_id = km.kelompok_id JOIN data_desa_master dm on kel.desa_id = dm.desa_id WHERE month(tanggal) = '$bulan' and year(tanggal)='$tahun' AND tp.status = '1') as tbx having bakidebet >0";
        } else {
            $sql = "select * from(SELECT tp.*,dm.desa_id, dm.nama_desa,km.jkw, km.plafon,km.tgl_mulai,km.tgl_jatuh_tempo, kel.nama_kelompok, HitungPinjamanSaldo(tp.rekening, '$lastDate') AS bakidebet FROM table_pencadangan tp JOIN data_kredit_master km ON tp.rekening = km.rekening JOIN data_kelompok_master kel ON kel.kelompok_id = km.kelompok_id JOIN data_desa_master dm on kel.desa_id = dm.desa_id WHERE month(tanggal) = '$bulan' and year(tanggal)='$tahun' and dm.desa_id='$desa' AND tp.status = '1') as tbx having bakidebet>0";
        }

        $pembentukan = DB::select($sql);
        return response()->json($pembentukan);
    }

    function getLaporanCadanganResiko(Request $request)
    {
        $tanggal = $request->tanggal;
        $desa = $request->desa;
        $arrTanggal = explode('-', $tanggal);
        $tahun = $arrTanggal[0];
        $bulan = $arrTanggal[1];
        $lastDate = date("Y-m-t", strtotime($tahun . "-" . $bulan . "-01"));
        if ($desa == '0') {
            $sql = "SELECT * FROM(SELECT tp.*,dm.nama_desa,km.jkw, km.plafon,km.tgl_mulai,km.tgl_jatuh_tempo, kel.nama_kelompok, HitungPinjamanSaldo(tp.rekening, '$lastDate') AS bakidebet1 FROM table_pencadangan tp JOIN data_kredit_master km ON tp.rekening = km.rekening JOIN data_kelompok_master kel ON kel.kelompok_id = km.kelompok_id JOIN data_desa_master dm on kel.desa_id = dm.desa_id WHERE month(tanggal) = '$bulan' and year(tanggal)='$tahun' AND tp.status = '1') as tbx having bakidebet1 >0";
        } else {
            $sql = "SELECT * FROM(SELECT tp.*,dm.desa_id, dm.nama_desa,km.jkw, km.plafon,km.tgl_mulai,km.tgl_jatuh_tempo, kel.nama_kelompok, HitungPinjamanSaldo(tp.rekening, '$lastDate') AS bakidebet1 FROM table_pencadangan tp JOIN data_kredit_master km ON tp.rekening = km.rekening JOIN data_kelompok_master kel ON kel.kelompok_id = km.kelompok_id JOIN data_desa_master dm on kel.desa_id = dm.desa_id WHERE month(tanggal) = '$bulan' and year(tanggal)='$tahun' and dm.desa_id='$desa' AND tp.status = '1') as tbx having bakidebet1>0";
        }

        $pembentukan = DB::select($sql);
        return response()->json($pembentukan);
    }

    function getNominatifCadanganResiko(Request $request)
    {
        $tanggal = $request->tanggal;
        $desa = $request->desa;
    }

    function getDaftarPerkiraanAndSaldo()
    {
        $tanggal = date('Y-m-d');
        $sql = "SELECT kategori_perkiraan, p.kode_perkiraan, nama_perkiraan, jurnal, level, HitungPerkSaldo(p.kode_perkiraan, '$tanggal', jurnal, level) as saldo FROM ref_perkiraan p ORDER BY kode_perkiraan";
        $collection = DB::select($sql);
        return $collection;
    }

    function getDaftarKodePerkiraan()
    {
        $collection = DB::table('ref_perkiraan')->orderBy('kode_perkiraan')->get();
        return $collection;
    }

    function getDaftarPerkiraan()
    {
        try {
            $collection = DB::table('ref_perkiraan')->orderBy('kode_perkiraan')->get();
            return response()->json([
                "success" => true,
                "data" => $collection,
            ]);
        } catch (Exception $error) {
            return response()->json([
                "success" => false,
                "error" => $error,
            ]);
        }
    }

    function getSaldoPerkiraan(Request $request)
    {
        $kode_perkiraan = $request->kode_perkiraan;
        $date = $request->tanggal;
        $sql = "SELECT *, HitungPerkSaldo(kode_perkiraan, '$date', jurnal, level) as saldo FROM ref_perkiraan WHERE kode_perkiraan = '$kode_perkiraan'";
        $perk = DB::selectOne($sql);
        return response()->json($perk);
    }

    // function getNeracaBumdes(Request $request)
    // {
    //     $date = $request->tanggal;
    //     $neraca = DB::select("SELECT p.kategori_perkiraan, p.kode_perkiraan, p.jurnal_flag, p.kode_induk,nama_perkiraan, jurnal, LEVEL as level, IFNULL(( SELECT IF ( jurnal = 'D', ( SELECT SUM( debet )- SUM( kredit ) FROM data_trans_jurnal j WHERE j.kode_perkiraan = p.kode_perkiraan AND DATE(trans_tglbuku) <= ? AND status = '1' ), IF ( jurnal = 'K', ( SELECT SUM( kredit )- SUM( debet ) FROM data_trans_jurnal j WHERE j.kode_perkiraan = p.kode_perkiraan AND DATE(trans_tglbuku) <= ? AND status = '1' ), 0 ) ) ),0 ) AS saldo FROM ref_perkiraan p ORDER BY p.kode_perkiraan", [$date, $date]);

    //     $jurnal = collect($neraca);
    //     $jurnal = $jurnal->map(function ($item) {
    //         $item->saldo = intval($item->saldo);
    //         return $item;
    //     });

    //     // hitung level 5
    //     for ($i = 0; $i < count($jurnal); $i++) {
    //         $_jurnal = $jurnal[$i];
    //     }

    //     // hitung level 4
    //     for ($i = 0; $i < count($jurnal); $i++) {
    //         $_jurnal = $jurnal[$i];
    //         // laba tahun berjalan / ikhtisar laba rugi
    //         if ($_jurnal->level == 4 && $_jurnal->kode_perkiraan == "3.9.01.01") {
    //             $pendapatan = $jurnal->filter(function ($item) {
    //                 return $item->kategori_perkiraan == 4 || in_array(substr($item->kode_perkiraan, 0, 4), ["7.1."]);
    //                 // return $item->level == 4 && ($item->kategori_perkiraan == 4 || substr($item->kode_perkiraan, 0, 4) == "7.1.");
    //             })->values()->sum("saldo");
    //             $biaya = $jurnal->filter(function ($item) {
    //                 return in_array($item->kategori_perkiraan, [5, 6]) || in_array(substr($item->kode_perkiraan, 0, 4), ["7.3.", "7.2."]);
    //                 // return $item->level == 4 && (in_array($item->kategori_perkiraan, [5, 4]) || in_array(substr($item->kode_perkiraan, 0, 4) == "7.1.", ['7.2.', '7.3.']));
    //             })->values()->sum("saldo");
    //             $_jurnal->saldo = $pendapatan - $biaya;
    //         }
    //         $total = 0;
    //         if ($_jurnal->level == 4 && in_array($_jurnal->kode_perkiraan, ["1.1.01.02", "1.1.01.01"])) {
    //             $_child = $jurnal->filter(function ($item) use ($_jurnal) {
    //                 return $item->kode_induk == $_jurnal->kode_perkiraan;
    //             })->values();
    //             foreach ($_child as $c) {
    //                 $total += intval($c->saldo);
    //             }
    //             $_jurnal->saldo = $total;
    //         }
    //     }

    //     // hitung level 3
    //     for ($i = 0; $i < count($jurnal); $i++) {
    //         $_jurnal = $jurnal[$i];
    //         $total = 0;
    //         if ($_jurnal->level == 3) {
    //             $_child = $jurnal->filter(function ($item) use ($_jurnal) {
    //                 return $item->kode_induk == $_jurnal->kode_perkiraan;
    //             })->values();
    //             foreach ($_child as $c) {
    //                 $total += intval($c->saldo);
    //             }
    //             $_jurnal->saldo = $total;
    //         }
    //     }

    //     // hitung level 2
    //     for ($i = 0; $i < count($jurnal); $i++) {
    //         $_jurnal = $jurnal[$i];
    //         $total = 0;
    //         if ($_jurnal->level == 2) {
    //             $_child = $jurnal->filter(function ($item) use ($_jurnal) {
    //                 return $item->kode_induk == $_jurnal->kode_perkiraan;
    //             })->values();
    //             foreach ($_child as $c) {
    //                 if ($c->jurnal_flag == 1) {
    //                     $total += intval($c->saldo);
    //                 } else {
    //                     $total -= intval($c->saldo);
    //                 }
    //             }
    //             $_jurnal->saldo = $total;
    //         }
    //     }

    //     // hitung level 1
    //     for ($i = 0; $i < count($jurnal); $i++) {
    //         $_jurnal = $jurnal[$i];
    //         $total = 0;
    //         if ($_jurnal->level == 1) {
    //             $_child = $jurnal->filter(function ($item) use ($_jurnal) {
    //                 return $item->kode_induk == $_jurnal->kode_perkiraan;
    //             })->values();
    //             $_jurnal->saldo = $_child->sum("saldo");
    //         }
    //     }

    //     $pendapatan = $jurnal->filter(function ($item) {
    //         return $item->kategori_perkiraan == 4 || in_array(substr($item->kode_perkiraan, 0, 4), ["7.1."]);
    //     })->values();
    //     // dd($pendapatan);
    //     $total_pendapatan = $pendapatan->filter(function ($item) {
    //         return $item->level == 4;
    //     })->sum("saldo");

    //     $biaya = $jurnal->filter(function ($item) {
    //         return in_array($item->kategori_perkiraan, [5, 6]) || in_array(substr($item->kode_perkiraan, 0, 4), ["7.3.", "7.2."]);
    //     })->values();

    //     $total_biaya = $biaya->filter(function ($item) {
    //         return $item->level == 4;
    //     })->sum("saldo");

    //     // hitung aktiva
    //     $aktiva = $jurnal->filter(function ($item) {
    //         return $item->kategori_perkiraan == 1;
    //     })->values();
    //     $total_aktiva = $aktiva->filter(function ($item) {
    //         return $item->level == 1;
    //     })->sum("saldo");

    //     // hitung pasiva
    //     $pasiva = $jurnal->filter(function ($item) {
    //         return $item->kategori_perkiraan == 2 || $item->kategori_perkiraan == 3;
    //     })->values();
    //     $total_pasiva = $pasiva->filter(function ($item) {
    //         return $item->level == 1;
    //     })->sum("saldo");

    //     return response()->json([
    //         // "neraca" => [...$aktiva, ...$pasiva],
    //         "neraca" => $neraca,
    //         "aktiva" => $aktiva,
    //         "total_aktiva" => $total_aktiva,
    //         "pasiva" => $pasiva,
    //         "total_pasiva" => $total_pasiva,
    //         "pendapatan" => $pendapatan,
    //         "total_pendapatan" => $total_pendapatan,
    //         "biaya" => $biaya,
    //         "total_biaya" => $total_biaya,
    //     ]);
    // }

    // function getNeraca2(Request $request)
    // {
    //     $tanggal = $request->tanggal;
    //     $sql = "SELECT IFNULL(SUM(saldo),0) as total_saldo FROM (SELECT kategori_perkiraan, kode_perkiraan, nama_perkiraan, jurnal, level, IF(kategori_perkiraan < 4, (SELECT saldo FROM data_akuntansi_neraca an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' ), (SELECT saldo FROM data_akuntansi_labarugi an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' )) as saldo FROM ref_perkiraan p) as tbl_neraca";
    //     $nrc = DB::selectOne($sql);
    //     $belum_tutup_buku = 0;

    //     $last_close = DB::table('log_close_buku')->select(DB::raw("DATE(tanggal) AS tanggal"))->orderBy('tanggal', 'desc')->first();
    //     if (intval($nrc->total_saldo) == 0) {
    //         $sql = "SELECT p.kategori_perkiraan, p.kode_perkiraan, nama_perkiraan, jurnal, LEVEL as level, IFNULL(( SELECT IF ( jurnal = 'D', ( SELECT SUM( debet )- SUM( kredit ) FROM data_trans_jurnal j WHERE j.kode_perkiraan = p.kode_perkiraan AND DATE(trans_tglbuku) <= '$tanggal' AND status = '1' ), IF ( jurnal = 'K', ( SELECT SUM( kredit )- SUM( debet ) FROM data_trans_jurnal j WHERE j.kode_perkiraan = p.kode_perkiraan AND DATE(trans_tglbuku) <= '$tanggal' AND status = '1' ), 0 ) ) ),0 ) AS saldo FROM ref_perkiraan p ORDER BY p.kode_perkiraan";
    //         $belum_tutup_buku = 1;
    //         $neraca = DB::select($sql);
    //     } else {
    //         if ($last_close->tanggal < $tanggal) {
    //             $sql = "SELECT kategori_perkiraan, kode_perkiraan, nama_perkiraan, jurnal, level ,HitungPerkSaldo(kode_perkiraan, '$tanggal', jurnal, level) AS saldo FROM ref_perkiraan ORDER BY kode_perkiraan";
    //             $neraca = DB::select($sql);
    //         } else {
    //             $sql = "SELECT kategori_perkiraan, kode_perkiraan, nama_perkiraan, jurnal, level, IF(kategori_perkiraan < 4, (SELECT saldo FROM data_akuntansi_neraca an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' ), (SELECT saldo FROM data_akuntansi_labarugi an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' )) as saldo  FROM ref_perkiraan p ORDER BY kode_perkiraan";
    //             $neraca = DB::select($sql);
    //         }
    //     }
    //     $aktiva = [];
    //     $total_aktiva = 0;
    //     $pasiva = [];
    //     $total_pasiva = 0;
    //     $pendapatan = [];
    //     $total_pendapatan = 0;
    //     $biaya = [];
    //     $total_biaya = 0;

    //     for ($i = 0; $i < count($neraca); $i++) {
    //         //! jika belum ada closing pada tanggal itu
    //         if ($belum_tutup_buku == 1) {
    //             if ($neraca[$i]->jurnal == 'H') {
    //                 $header = $neraca[$i];
    //                 $level = $header->level;
    //                 if ($level == 1) {
    //                     $kode = substr($header->kode_perkiraan, 0, 2);
    //                     $saldo = 0;
    //                     for ($a = 0; $a < count($neraca); $a++) {
    //                         if (substr($neraca[$a]->kode_perkiraan, 0, 2) == $kode && $neraca[$a]->jurnal != 'H' && $neraca[$a]->kode_perkiraan != '3.9.01.01') {
    //                             $saldo = $saldo + intval($neraca[$a]->saldo);
    //                         }
    //                     }
    //                     $neraca[$i]->saldo = intval($saldo);
    //                 }
    //                 if ($level == 2) {
    //                     $kode = substr($header->kode_perkiraan, 0, 4);
    //                     $saldo = 0;
    //                     for ($a = 0; $a < count($neraca); $a++) {
    //                         if (substr($neraca[$a]->kode_perkiraan, 0, 4) == $kode && $neraca[$a]->jurnal != 'H' && $neraca[$a]->kode_perkiraan != '3.9.01.01') {
    //                             $saldo = $saldo + intval($neraca[$a]->saldo);
    //                         }
    //                     }
    //                     $neraca[$i]->saldo = intval($saldo);
    //                 }
    //                 if ($level == 3) {
    //                     $kode = substr($header->kode_perkiraan, 0, 6);
    //                     $saldo = 0;
    //                     for ($a = 0; $a < count($neraca); $a++) {
    //                         if (substr($neraca[$a]->kode_perkiraan, 0, 6) == $kode && $neraca[$a]->jurnal != 'H' && $neraca[$a]->kode_perkiraan != '3.9.01.01') {
    //                             $saldo = $saldo + intval($neraca[$a]->saldo);
    //                         }
    //                     }
    //                     $neraca[$i]->saldo = intval($saldo);
    //                     if ($neraca[$i]->kategori_perkiraan == 1) {
    //                         if (!in_array($neraca[$i]->kode_perkiraan, ['1.3.07.00', '1.9.02.00', '1.1.04.00'])) {
    //                             $total_aktiva = $total_aktiva + $saldo;
    //                         } else {
    //                             $total_aktiva = $total_aktiva - $saldo;
    //                         }
    //                     }
    //                     if ($neraca[$i]->kategori_perkiraan == 2 || $neraca[$i]->kategori_perkiraan == 3) {
    //                         $total_pasiva = $total_pasiva + $saldo;
    //                     }
    //                     if ($neraca[$i]->kategori_perkiraan == 4 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.1') {
    //                         $total_pendapatan = $total_pendapatan + $saldo;
    //                     }
    //                     if ($neraca[$i]->kategori_perkiraan == 5 || $neraca[$i]->kategori_perkiraan == 6 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.2' || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.3') {
    //                         $total_biaya = $total_biaya + $saldo;
    //                     }
    //                 }
    //             }
    //         } else {
    //             //! jika ada data di closing tanggal itu
    //             if ($neraca[$i]->level == '3') {
    //                 if ($neraca[$i]->kategori_perkiraan == 1) {

    //                     if (!in_array($neraca[$i]->kode_perkiraan, ['1.3.07.00', '1.9.02.00', '1.1.04.00'])) {
    //                         // if ($neraca[$i]->kode_perkiraan != '1.3.07.00' && $neraca[$i]->kode_perkiraan != '1.9.02.00' && $neraca[$i]->kode_perkiraan != '1.1.04.00') {
    //                         $total_aktiva = $total_aktiva + intval($neraca[$i]->saldo);
    //                     } else {
    //                         $total_aktiva = $total_aktiva - intval($neraca[$i]->saldo);
    //                     }
    //                 }
    //             }
    //             if ($neraca[$i]->level == '4') {
    //                 if ($neraca[$i]->kategori_perkiraan == 2 || $neraca[$i]->kategori_perkiraan == 3) {
    //                     $total_pasiva = $total_pasiva + intval($neraca[$i]->saldo);
    //                 }
    //                 if ($neraca[$i]->kategori_perkiraan == 4 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.1') {
    //                     $total_pendapatan = $total_pendapatan + intval($neraca[$i]->saldo);
    //                 }
    //                 if ($neraca[$i]->kategori_perkiraan == 5 || $neraca[$i]->kategori_perkiraan == 6 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.2' || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.3') {
    //                     $total_biaya = $total_biaya + intval($neraca[$i]->saldo);
    //                 }
    //             }
    //         }


    //         //******/
    //         // pisahkan perkiraan berdasarkan posisinya di neraca dan laba rugi
    //         if ($neraca[$i]->kategori_perkiraan == 1) {
    //             array_push($aktiva, $neraca[$i]);
    //         }
    //         if ($neraca[$i]->kategori_perkiraan == 2 || $neraca[$i]->kategori_perkiraan == 3) {
    //             array_push($pasiva, $neraca[$i]);
    //         }
    //         if ($neraca[$i]->kategori_perkiraan == 4 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.1') {
    //             array_push($pendapatan, $neraca[$i]);
    //         }
    //         if ($neraca[$i]->kategori_perkiraan == 5 || $neraca[$i]->kategori_perkiraan == 6 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.2' || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.3') {
    //             array_push($biaya, $neraca[$i]);
    //         }
    //     }

    //     // * DIHITUNG MANUAL
    //     if ($belum_tutup_buku == 1) {
    //         for ($i = 0; $i < count($aktiva); $i++) {
    //         }

    //         for ($i = 0; $i < count($aktiva); $i++) {
    //             if ($aktiva[$i]->kode_perkiraan == '1.1.00.00') {
    //                 $aktiva[$i]->saldo = 0;
    //                 for ($a = 0; $a < count($aktiva); $a++) {
    //                     if (in_array($aktiva[$a]->kode_perkiraan, ['1.1.01.00', '1.1.03.00'])) {
    //                         $aktiva[$i]->saldo += $aktiva[$a]->saldo;
    //                     }
    //                     if (in_array($aktiva[$a]->kode_perkiraan, ['1.1.04.00'])) {
    //                         $aktiva[$i]->saldo -= $aktiva[$a]->saldo;
    //                     }
    //                 }
    //             }
    //         }
    //         for ($i = 0; $i < count($aktiva); $i++) {
    //             if ($aktiva[$i]->kode_perkiraan == '1.3.00.00') {
    //                 $aktiva[$i]->saldo = 0;
    //                 for ($a = 0; $a < count($aktiva); $a++) {
    //                     if (in_array($aktiva[$a]->kode_perkiraan, ['1.3.01.00', '1.3.02.00', '1.3.03.00', '1.3.04.00', '1.3.05.00', '1.3.06.00', '1.3.99.00'])) {
    //                         $aktiva[$i]->saldo += $aktiva[$a]->saldo;
    //                     }
    //                     if (in_array($aktiva[$a]->kode_perkiraan, ['1.3.07.00'])) {
    //                         $aktiva[$i]->saldo -= $aktiva[$a]->saldo;
    //                     }
    //                 }
    //             }
    //         }
    //         for ($i = 0; $i < count($aktiva); $i++) {
    //             if ($aktiva[$i]->kode_perkiraan == '1.0.00.00') {
    //                 $aktiva[$i]->saldo = 0;
    //                 for ($a = 0; $a < count($aktiva); $a++) {
    //                     if (in_array($aktiva[$a]->kode_perkiraan, ['1.1.00.00', '1.2.00.00', '1.3.00.00', '1.4.00.00', '1.9.00.00'])) {
    //                         $aktiva[$i]->saldo += $aktiva[$a]->saldo;
    //                     }
    //                 }
    //             }
    //         }
    //     }

    //     if ($belum_tutup_buku == 1) {
    //         for ($i = 0; $i < count($pasiva); $i++) {
    //             if ($pasiva[$i]->kode_perkiraan == '3.0.00.00') {
    //                 $pasiva[$i]->saldo = 0;
    //                 for ($a = 0; $a < count($pasiva); $a++) {
    //                     if (in_array($pasiva[$a]->kode_perkiraan, ['3.1.00.00', '3.2.00.00', '3.3.00.00'])) {
    //                         $pasiva[$i]->saldo += $pasiva[$a]->saldo;
    //                     }
    //                     if (in_array($pasiva[$a]->kode_perkiraan, ['3.9.00.00'])) {
    //                         $pasiva[$i]->saldo += $total_pendapatan - $total_biaya;
    //                     }
    //                 }
    //             }
    //         }
    //     }

    //     $total_pasiva = 0;
    //     for ($i = 0; $i < count($pasiva); $i++) {
    //         if ($pasiva[$i]->jurnal != 'H') {
    //             if ($pasiva[$i]->kode_perkiraan != '3.9.01.01') {
    //                 $total_pasiva += $pasiva[$i]->saldo;
    //             }
    //         }
    //     }



    //     return response()->json([
    //         "neraca" => $neraca,
    //         "aktiva" => $aktiva,
    //         "total_aktiva" => $total_aktiva,
    //         "pasiva" => $pasiva,
    //         "total_pasiva" => $total_pasiva + intval($total_pendapatan) - intval($total_biaya),
    //         "pendapatan" => $pendapatan,
    //         "total_pendapatan" => $total_pendapatan,
    //         "biaya" => $biaya,
    //         "total_biaya" => $total_biaya,
    //         // "sql" => $sql,
    //         // "last_close" => $last_close->tanggal == $tanggal,
    //         // "nrc" => $nrc
    //     ]);
    // }

    //! yang dipakai
    function getNeraca(Request $request)
    {
        $tanggal = $request->tanggal;
        $sql = "SELECT IFNULL(SUM(saldo),0) as total_saldo FROM (SELECT kategori_perkiraan, kode_perkiraan, nama_perkiraan, jurnal, level, IF(kategori_perkiraan < 4, (SELECT saldo FROM data_akuntansi_neraca an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' ), (SELECT saldo FROM data_akuntansi_labarugi an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' )) as saldo FROM ref_perkiraan p) as tbl_neraca";
        $nrc = DB::selectOne($sql);
        $belum_tutup_buku = 0;

        $last_close = DB::table('log_close_buku')->select(DB::raw("DATE(tanggal) AS tanggal"))->orderBy('tanggal', 'desc')->first();
        if (intval($nrc->total_saldo) == 0) {
            $sql = "SELECT p.kategori_perkiraan, p.kode_perkiraan, nama_perkiraan, jurnal, LEVEL as level, IFNULL(( SELECT IF ( jurnal = 'D', ( SELECT SUM( debet )- SUM( kredit ) FROM data_trans_jurnal j WHERE j.kode_perkiraan = p.kode_perkiraan AND DATE(trans_tglbuku) <= '$tanggal' AND status = '1' ), IF ( jurnal = 'K', ( SELECT SUM( kredit )- SUM( debet ) FROM data_trans_jurnal j WHERE j.kode_perkiraan = p.kode_perkiraan AND DATE(trans_tglbuku) <= '$tanggal' AND status = '1' ), 0 ) ) ),0 ) AS saldo FROM ref_perkiraan p ORDER BY p.kode_perkiraan";
            $belum_tutup_buku = 1;
            $neraca = DB::select($sql);
        } else {
            if ($last_close->tanggal < $tanggal) {
                $sql = "SELECT kategori_perkiraan, kode_perkiraan, nama_perkiraan, jurnal, level ,HitungPerkSaldo(kode_perkiraan, '$tanggal', jurnal, level) AS saldo FROM ref_perkiraan ORDER BY kode_perkiraan";
                $neraca = DB::select($sql);
            } else {
                $sql = "SELECT kategori_perkiraan, kode_perkiraan, nama_perkiraan, jurnal, level, IF(kategori_perkiraan < 4, (SELECT saldo FROM data_akuntansi_neraca an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' ), (SELECT saldo FROM data_akuntansi_labarugi an WHERE kode_perkiraan = p.kode_perkiraan AND tanggal = '$tanggal' )) as saldo  FROM ref_perkiraan p ORDER BY kode_perkiraan";
                $neraca = DB::select($sql);
            }
        }
        $aktiva = [];
        $total_aktiva = 0;
        $pasiva = [];
        $total_pasiva = 0;
        $pendapatan = [];
        $total_pendapatan = 0;
        $biaya = [];
        $total_biaya = 0;

        $tglNeraca = Carbon::parse($tanggal);

        for ($i = 0; $i < count($neraca); $i++) {
            //! jika belum ada closing pada tanggal itu
            if ($belum_tutup_buku == 1) {

                //! perlakuan khusus untuk pembagian kas
                if (in_array($neraca[$i]->kode_perkiraan, ['1.1.01.01', '1.1.01.06'])) {
                    if ($tglNeraca->format('Y') > '2024') {
                        $neraca[$i]->jurnal = 'H';
                    }
                }
                //! perlakuan khusus untuk pembagian kas

                if ($neraca[$i]->jurnal == 'H') {
                    $header = $neraca[$i];
                    $level = $header->level;

                    if ($level == 1) {
                        $kode = substr($header->kode_perkiraan, 0, 2);
                        $saldo = 0;
                        for ($a = 0; $a < count($neraca); $a++) {
                            if (substr($neraca[$a]->kode_perkiraan, 0, 2) == $kode && $neraca[$a]->jurnal != 'H' && $neraca[$a]->kode_perkiraan != '3.9.01.01') {
                                $saldo = $saldo + intval($neraca[$a]->saldo);
                            }
                        }
                        $neraca[$i]->saldo = intval($saldo);
                    }
                    if ($level == 2) {
                        $kode = substr($header->kode_perkiraan, 0, 4);
                        $saldo = 0;
                        for ($a = 0; $a < count($neraca); $a++) {
                            if (substr($neraca[$a]->kode_perkiraan, 0, 4) == $kode && $neraca[$a]->jurnal != 'H' && $neraca[$a]->kode_perkiraan != '3.9.01.01') {
                                $saldo = $saldo + intval($neraca[$a]->saldo);
                            }
                        }
                        $neraca[$i]->saldo = intval($saldo);
                    }
                    if ($level == 3) {
                        $kode = substr($header->kode_perkiraan, 0, 6);
                        $saldo = 0;
                        for ($a = 0; $a < count($neraca); $a++) {
                            if (substr($neraca[$a]->kode_perkiraan, 0, 6) == $kode && $neraca[$a]->jurnal != 'H' && $neraca[$a]->kode_perkiraan != '3.9.01.01') {
                                $saldo = $saldo + intval($neraca[$a]->saldo);
                            }
                        }
                        $neraca[$i]->saldo = intval($saldo);
                        if ($neraca[$i]->kategori_perkiraan == 1) {
                            if (!in_array($neraca[$i]->kode_perkiraan, ['1.3.07.00', '1.9.02.00', '1.1.04.00'])) {
                                $total_aktiva = $total_aktiva + $saldo;
                            } else {
                                $total_aktiva = $total_aktiva - $saldo;
                            }
                        }
                        if ($neraca[$i]->kategori_perkiraan == 2 || $neraca[$i]->kategori_perkiraan == 3) {
                            $total_pasiva = $total_pasiva + $saldo;
                        }
                        if ($neraca[$i]->kategori_perkiraan == 4 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.1') {
                            $total_pendapatan = $total_pendapatan + $saldo;
                        }
                        if ($neraca[$i]->kategori_perkiraan == 5 || $neraca[$i]->kategori_perkiraan == 6 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.2' || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.3') {
                            $total_biaya = $total_biaya + $saldo;
                        }
                    }
                    if ($level == 4) {
                        $kode = substr($header->kode_perkiraan, 0, 9);
                        $saldo = 0;
                        for ($a = 0; $a < count($neraca); $a++) {
                            if (substr($neraca[$a]->kode_perkiraan, 0, 9) == $kode && $neraca[$a]->jurnal != 'H') {
                                $saldo = $saldo + intval($neraca[$a]->saldo);
                            }
                        }
                        $neraca[$i]->saldo = intval($saldo);
                    }
                }
            } else {
                //! jika ada data di closing tanggal itu
                if ($neraca[$i]->level == '3') {
                    if ($neraca[$i]->kategori_perkiraan == 1) {

                        if (!in_array($neraca[$i]->kode_perkiraan, ['1.3.07.00', '1.9.02.00', '1.1.04.00'])) {
                            // if ($neraca[$i]->kode_perkiraan != '1.3.07.00' && $neraca[$i]->kode_perkiraan != '1.9.02.00' && $neraca[$i]->kode_perkiraan != '1.1.04.00') {
                            $total_aktiva = $total_aktiva + intval($neraca[$i]->saldo);
                        } else {
                            $total_aktiva = $total_aktiva - intval($neraca[$i]->saldo);
                        }
                    }
                }
                if ($neraca[$i]->level == '4') {
                    if ($neraca[$i]->kategori_perkiraan == 2 || $neraca[$i]->kategori_perkiraan == 3) {
                        $total_pasiva = $total_pasiva + intval($neraca[$i]->saldo);
                    }
                    if ($neraca[$i]->kategori_perkiraan == 4 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.1') {
                        $total_pendapatan = $total_pendapatan + intval($neraca[$i]->saldo);
                    }
                    if ($neraca[$i]->kategori_perkiraan == 5 || $neraca[$i]->kategori_perkiraan == 6 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.2' || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.3') {
                        $total_biaya = $total_biaya + intval($neraca[$i]->saldo);
                    }
                }
            }


            //******/
            // pisahkan perkiraan berdasarkan posisinya di neraca dan laba rugi
            if ($neraca[$i]->kategori_perkiraan == 1) {
                array_push($aktiva, $neraca[$i]);
            }
            if ($neraca[$i]->kategori_perkiraan == 2 || $neraca[$i]->kategori_perkiraan == 3) {
                array_push($pasiva, $neraca[$i]);
            }
            if ($neraca[$i]->kategori_perkiraan == 4 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.1') {
                array_push($pendapatan, $neraca[$i]);
            }
            if ($neraca[$i]->kategori_perkiraan == 5 || $neraca[$i]->kategori_perkiraan == 6 || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.2' || substr($neraca[$i]->kode_perkiraan, 0, 3) == '7.3') {
                array_push($biaya, $neraca[$i]);
            }
        }

        // * DIHITUNG MANUAL
        if ($belum_tutup_buku == 1) {
            for ($i = 0; $i < count($aktiva); $i++) {
                // Jika Asset Lancar
                if ($aktiva[$i]->kode_perkiraan == '1.1.00.00') {
                    $aktiva[$i]->saldo = 0;
                    for ($a = 0; $a < count($aktiva); $a++) {
                        if (in_array($aktiva[$a]->kode_perkiraan, ['1.1.01.00', '1.1.03.00'])) {
                            $aktiva[$i]->saldo += $aktiva[$a]->saldo;
                        }
                        if (in_array($aktiva[$a]->kode_perkiraan, ['1.1.04.00'])) {
                            $aktiva[$i]->saldo -= $aktiva[$a]->saldo;
                        }
                    }
                }
            }

            for ($i = 0; $i < count($aktiva); $i++) {
                // Jika Asset Tetap
                if ($aktiva[$i]->kode_perkiraan == '1.3.00.00') {
                    $aktiva[$i]->saldo = 0;
                    for ($a = 0; $a < count($aktiva); $a++) {
                        if (in_array($aktiva[$a]->kode_perkiraan, ['1.3.01.00', '1.3.02.00', '1.3.03.00', '1.3.04.00', '1.3.05.00', '1.3.06.00', '1.3.99.00'])) {
                            $aktiva[$i]->saldo += $aktiva[$a]->saldo;
                        }
                        if (in_array($aktiva[$a]->kode_perkiraan, ['1.3.07.00'])) {
                            $aktiva[$i]->saldo -= $aktiva[$a]->saldo;
                        }
                    }
                }
            }

            for ($i = 0; $i < count($aktiva); $i++) {
                // Jika Total Asset
                if ($aktiva[$i]->kode_perkiraan == '1.0.00.00') {
                    $aktiva[$i]->saldo = 0;
                    for ($a = 0; $a < count($aktiva); $a++) {
                        if (in_array($aktiva[$a]->kode_perkiraan, ['1.1.00.00', '1.2.00.00', '1.3.00.00', '1.4.00.00', '1.9.00.00'])) {
                            $aktiva[$i]->saldo += $aktiva[$a]->saldo;
                        }
                    }
                }
            }

            for ($i = 0; $i < count($pasiva); $i++) {
                // Jika Ekuitas
                if ($pasiva[$i]->kode_perkiraan == '3.0.00.00') {
                    $pasiva[$i]->saldo = 0;
                    for ($a = 0; $a < count($pasiva); $a++) {
                        if (in_array($pasiva[$a]->kode_perkiraan, ['3.1.00.00', '3.2.00.00', '3.3.00.00'])) {
                            $pasiva[$i]->saldo += $pasiva[$a]->saldo;
                        }
                        if (in_array($pasiva[$a]->kode_perkiraan, ['3.9.00.00'])) {
                            $pasiva[$i]->saldo += $total_pendapatan - $total_biaya;
                        }
                    }
                }
            }
        }

        $total_pasiva = 0;
        for ($i = 0; $i < count($pasiva); $i++) {
            if ($pasiva[$i]->jurnal != 'H') {
                if ($pasiva[$i]->kode_perkiraan != '3.9.01.01') {
                    $total_pasiva += $pasiva[$i]->saldo;
                }
            }
        }



        return response()->json([
            "neraca" => $neraca,
            "aktiva" => $aktiva,
            "total_aktiva" => $total_aktiva,
            "pasiva" => $pasiva,
            "total_pasiva" => $total_pasiva + intval($total_pendapatan) - intval($total_biaya),
            "pendapatan" => $pendapatan,
            "total_pendapatan" => $total_pendapatan,
            "biaya" => $biaya,
            "total_biaya" => $total_biaya,
        ]);
    }

    function getLabaRugi(Request $request)
    {
        $tanggal = $request->tanggal;
        $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) = '$tanggal' ) as c where c.saldo <>0";
        $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);
            }
        }
        $data['pendapatan'] = $pendapatan;
        $data['beban'] = $beban;
        $data['coa'] = $coa;
        $data['laba'] = $pendapatan - $beban;
        return response()->json($data);
    }

    function getNominatifKredit(Request $request)
    {
        $tanggal = $request->tanggal;
        $desa_id = $request->desa;
        $desa  = $desa_id == 0 ? "" : "AND d.desa_id = '$desa_id'";
        $kolek = $request->kolek;
        $kolektibilitas = $kolek == 0 ? "" : "WHERE kolek = '$kolek'";

        $sql = "SELECT * FROM (SELECT m.rekening, m.kelompok_id, k.nama_kelompok, k.desa_id, d.nama_desa, m.kredit_produk, m.plafon, m.bunga, m.jkw, m.tgl_mulai, m.tgl_jatuh_tempo, m.tgl_tutup, m.nomer_pk, HitungPinjamanSaldo(m.rekening, '$tanggal')as bakidebet, HitungTungPokok ( m.rekening, '$tanggal' ) AS tunggak_pokok, HitungTungBunga ( m.rekening, '$tanggal' ) AS tunggak_bunga, IFNULL( admin, 0 ) AS admin, IFNULL( m.provisi, 0 ) AS provisi, HitungPinjamanKolek ( m.rekening, '$tanggal' ) AS kolek, m.status  FROM data_kredit_master m JOIN data_kelompok_master k ON m.kelompok_id = k.kelompok_id JOIN data_desa_master d ON k.desa_id = d.desa_id WHERE tgl_mulai <= '$tanggal' AND tgl_tutup > '$tanggal' AND m.`status` NOT IN (0,9) $desa) as table_kredit $kolektibilitas ORDER BY nama_desa";
        $nominatif = DB::select($sql);
        return $nominatif;
    }

    // function getNominatifCadanganResiko(Request $request)
    // {
    //     $tanggal = $request->tanggal;
    //     $desa_id = $request->desa;
    //     $desa  = $desa_id == 0 ? "" : "AND d.desa_id = '$desa_id'";
    //     $kolek = $request->kolek;
    //     $kolektibilitas = $kolek == 0 ? "" : "WHERE kolek = '$kolek'";
    //     // $sql = "SELECT * FROM (SELECT m.rekening, m.kelompok_id, k.nama_kelompok, k.desa_id, d.nama_desa, m.kredit_produk, m.plafon, m.bunga, m.jkw, m.tgl_mulai, m.tgl_jatuh_tempo, m.tgl_tutup, m.nomer_pk, m.bakidebet, HitungTungPokok ( m.rekening, '$tanggal' ) AS tunggak_pokok, HitungTungBunga ( m.rekening, '$tanggal' ) AS tunggak_bunga, IFNULL( admin, 0 ) AS admin, IFNULL( m.provisi, 0 ) AS provisi, HitungPinjamanKolek ( m.rekening, '$tanggal' ) AS kolek, m.status  FROM data_kredit_master m JOIN data_kelompok_master k ON m.kelompok_id = k.kelompok_id JOIN data_desa_master d ON k.desa_id = d.desa_id WHERE tgl_mulai <= '$tanggal' AND tgl_tutup > '$tanggal' AND m.`status` NOT IN (0,3,9) $desa) as table_kredit $kolektibilitas";
    //     $sql = "SELECT * FROM (SELECT m.rekening, m.kelompok_id, k.nama_kelompok, k.desa_id, d.nama_desa, m.kredit_produk, m.plafon, m.bunga, m.jkw, m.tgl_mulai, m.tgl_jatuh_tempo, m.tgl_tutup, m.nomer_pk, HitungPinjamanSaldo(m.rekening, '$tanggal')as bakidebet, HitungTungPokok ( m.rekening, '$tanggal' ) AS tunggak_pokok, HitungTungBunga ( m.rekening, '$tanggal' ) AS tunggak_bunga, IFNULL( admin, 0 ) AS admin, IFNULL( m.provisi, 0 ) AS provisi, HitungPinjamanKolek ( m.rekening, '$tanggal' ) AS kolek, m.status  FROM data_kredit_master m JOIN data_kelompok_master k ON m.kelompok_id = k.kelompok_id JOIN data_desa_master d ON k.desa_id = d.desa_id WHERE tgl_mulai <= '$tanggal' AND tgl_tutup > '$tanggal' AND m.`status` NOT IN (0,3,9) $desa) as table_kredit $kolektibilitas";
    //     $nominatif = DB::select($sql);
    //     return $nominatif;
    // }

    function getNominatifKolektibilitas(Request $request)
    {
        $tanggal = $request->tanggal;
        $desa_id = $request->desa;
        $desa  = $desa_id == 0 ? "" : "AND c.desa_id = '$desa_id'";
        $kolek = $request->kolek;
        $kolektibilitas = $kolek == 0 ? "" : "WHERE kolek = '$kolek'";

        // ganti hitung baki debet menggunakan fungsi hitungSaldoPinjaman
        $sql = "SELECT * FROM (SELECT a.rekening as rekening, a.plafon as plafon, c.nama_kelompok as kelompok, c.desa_id, dm.nama_desa ,a.tgl_mulai as tanggal_mulai, a.tgl_jatuh_tempo as tanggal_jatuh_tempo, HitungPinjamanSaldo(a.rekening, '$tanggal')as saldo_pinjaman, HitungTungPokok(a.rekening, '$tanggal') as tunggakan_pokok, a.angsuran_pokok, HitungTungPkHari(a.rekening, '$tanggal') as tg_hari_pokok, HitungTungBunga(a.rekening, '$tanggal') as tunggakan_bunga, a.angsuran_bunga, HitungTungBgHari(a.rekening, '$tanggal') as tg_hari_bunga, HitungPinjamanKolek(a.rekening, '$tanggal') as kolek FROM data_kredit_master a LEFT JOIN data_kelompok_master c ON a.kelompok_id=c.kelompok_id JOIN data_desa_master dm ON dm.desa_id = c.desa_id WHERE tgl_tutup > '$tanggal' AND tgl_mulai <= '$tanggal' $desa) as table_kolek $kolektibilitas";

        $nominatif = DB::select($sql);
        return response()->json($nominatif);
    }

    function getNominatifInventaris(Request $request)
    {
        $tanggal = $request->tanggal;
        $jenis = $request->jenis;
        $perolehan = $request->perolehan;
        $jenis_inventaris = $jenis == 0 ? "" : "WHERE tb.inventaris_jenis = '$jenis'";
        $perolehan = $perolehan == 0 ? "" : " AND tb.inventaris_sumber='$perolehan'";
        $sql = "SELECT * FROM (SELECT inventaris_id, inventaris_nama, inventaris_jenis, nama as inventaris_nama_jenis ,inventaris_jml, inventaris_umur, inventaris_sumber ,inventaris_nilai, penyusutan as akumulasi_penyusutan, inventaris_nilai-penyusutan as nilai_buku, inventaris_tgl_beli, inventaris_tgl_habis, inventaris_tgl_hapus, inventaris_catatan ,status FROM (SELECT *, IFNULL((SELECT SUM(nominal) FROM data_inventaris_trans WHERE inventaris_id = tb_asset.inventaris_id AND trans_kode = '32' AND trans_tglbuku <= '$tanggal' AND status = '1'),0) as penyusutan FROM (SELECT * FROM data_inventaris_master WHERE inventaris_tgl_beli <= '$tanggal' AND status = '1' ) as tb_asset) as tb JOIN data_inventaris_produk ip ON tb.inventaris_jenis = ip.id $jenis_inventaris $perolehan) AS table_nominatif WHERE nilai_buku <> 0";
        $nominatif = DB::select($sql);
        return response()->json($nominatif);
    }

    function getMutasiJurnal(Request $request)
    {
        $kode_perkiraan = $request->kode_perkiraan;
        $level_perkiraan = $request->level;
        $tanggal_awal = $request->tanggal_awal;
        $tanggal_akhir = $request->tanggal_akhir;

        $date1 = date_create($tanggal_awal);
        $tahun_awal = date_format($date1, 'Y');
        $date2 = date_create($tanggal_akhir);
        $tahun_akhir = date_format($date2, 'Y');
        $beda_tahun = $tahun_awal != $tahun_akhir;

        $kode = $kode_perkiraan;
        if ($level_perkiraan == 1) {
            $kode = substr($kode, 0, 2);
        }
        if ($level_perkiraan == 2) {
            $kode = substr($kode, 0, 4);
        }
        if ($level_perkiraan == 3) {
            $kode = substr($kode, 0, 6);
        }

        $sql = "SELECT data_trans_jurnal.*, ref_perkiraan.nama_perkiraan FROM data_trans_jurnal LEFT JOIN ref_perkiraan ON data_trans_jurnal.kode_perkiraan = ref_perkiraan.kode_perkiraan WHERE data_trans_jurnal.trans_tglbuku >= '$tanggal_awal' AND data_trans_jurnal.trans_tglbuku <= '$tanggal_akhir' AND data_trans_jurnal.kode_perkiraan LIKE '$kode%' AND data_trans_jurnal.status = '1' ORDER BY data_trans_jurnal.trans_tglbuku, data_trans_jurnal.trans_date ASC";
        $data = DB::select($sql);

        $penempatan_kode = ['11.1', '11.2', '12.1', '12.2'];
        $kredit_angsuran_kode = ['22.1', '22.2', '23.1', '23.2', '24', '29'];
        $kredit_realisasi_kode = ['21', '24'];
        $inventaris_kode = ['31.1', '32.1', '32', '33.1', '33.2', '34', '39'];
        $akuntansi_kode = ['41', '42', '43', '99'];
        $akuntansi_non_kas_kode = ['1', '44'];
        $data_uraian = [];
        for ($i = 0; $i < count($data); $i++) {
            $trans_kode = $data[$i]->trans_kode;
            $trans_id = $data[$i]->trans_id;

            if (in_array($trans_kode, $penempatan_kode)) {
                $sql = "SELECT * FROM data_penempatan_trans WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $kredit_angsuran_kode)) {
                $sql = "SELECT * FROM data_kredit_trans_angsuran WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $kredit_realisasi_kode)) {
                $sql = "SELECT * FROM data_kredit_trans_realisasi WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $inventaris_kode)) {
                $sql = "SELECT * FROM data_inventaris_trans WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $akuntansi_kode)) {
                $sql = "SELECT * FROM data_trans_akuntansi WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $akuntansi_non_kas_kode)) {
                $sql = "SELECT * FROM data_trans_akuntansi_nonkas WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            array_push($data_uraian, isset($uraian) ? $uraian : "");
        }
        $data_mutasi = [];
        $data_uraian_mutasi = [];

        if (!$beda_tahun) {
            for ($i = 0; $i < count($data); $i++) {
                if ($data[$i]->trans_kode != '99') {
                    array_push($data_mutasi, $data[$i]);
                    array_push($data_uraian_mutasi, $data_uraian[$i]);
                }
            }
        }

        $date = date('Y-m-d', strtotime($tanggal_awal . ' -1 day'));

        $sql = "SELECT *, HitungPerkSaldo(kode_perkiraan, '$date', jurnal, level) as saldo FROM ref_perkiraan WHERE kode_perkiraan = '$kode_perkiraan'";
        $perk = DB::selectOne($sql);

        return response()->json([
            "data" => $beda_tahun ? $data : $data_mutasi,
            "uraian" => $beda_tahun ? $data : $data_mutasi,
            // "uraian" => $beda_tahun ? $data_uraian : $data_uraian_mutasi,
            "beda" => $beda_tahun,
            "saldo_awal" => $perk->saldo
        ]);
    }

    function getDaftarLogTutupBuku()
    {
        $sql = "SELECT * FROM log_close_buku WHERE status = '1' ORDER BY tanggal DESC";
        $log = DB::select($sql);
        return response()->json($log);
    }

    function getDaftarLogTutupBukuAkhirTahun()
    {
        $sql = "SELECT id, user, YEAR(tanggal) as tanggal, trans_tglbuku, trans_date FROM log_close_akhir_tahun WHERE status = '1' ORDER BY tanggal DESC";
        $log = DB::select($sql);
        return response()->json($log);
    }

    function saveProfile(Request $request)
    {
        try {
            DB::table('table_profil')->insert([
                "nama" => $request->nama,
                "alamat" => $request->alamat,
                "kelurahan" => $request->kelurahan,
                "kecamatan" => $request->kecamatan,
                "kabupaten" => $request->kabupaten,
                "provinsi" => $request->provinsi,
                "direktur" => $request->direktur,
                "logo" => $request->logo,
                "telp" => $request->telp,
            ]);
            return response()->json([
                "success" => true,
                "message" => "Data berhasil disimpan"
            ]);
        } catch (Exception $error) {
            return response()->json([
                "success" => false,
                "error" => $error
            ]);
        }
    }

    function updateProfile(Request $request)
    {
        try {
            DB::table('table_profil')->where('id', $request->id)->update([
                "nama" => $request->nama,
                "alamat" => $request->alamat,
                "kelurahan" => $request->kelurahan,
                "kecamatan" => $request->kecamatan,
                "kabupaten" => $request->kabupaten,
                "provinsi" => $request->provinsi,
                "direktur" => $request->direktur,
                "logo" => $request->logo,
                "telp" => $request->telp,
            ]);
            return response()->json([
                "success" => true,
                "message" => "Data berhasil disimpan"
            ]);
        } catch (Exception $error) {
            return response()->json([
                "success" => false,
                "error" => $error
            ]);
        }
    }

    function getProfile()
    {
        $sql = "SELECT * FROM table_profil";
        $profiles = DB::select($sql);
        if (count($profiles) == 0) {
            return response()->json(["success" => false, "data" => []]);
        }
        if (count($profiles) == 1) {
            return response()->json(["success" => true, "data" => $profiles[0]]);
        }
    }

    function getJurnalTransaksiPenyusutan(Request $request)
    {
        $tanggal = $request->tanggal;
        $sql = "SELECT tj.*, (SELECT nama_perkiraan FROM ref_perkiraan rp WHERE kode_perkiraan = tj.kode_perkiraan ) as nama_perkiraan FROM data_trans_jurnal tj JOIN (SELECT * FROM log_penyusutan_inventaris pi WHERE tanggal = '$tanggal') tp ON tj.trans_id = tp.trans_id WHERE tj.status = '1' ORDER BY trans_id, kode_perkiraan";
        $trans_penyusutan = DB::select($sql);
        return response()->json([
            "success" => true,
            "data" => $trans_penyusutan
        ]);
    }

    function getLaporanTransaksi(Request $request)
    {
        $tanggal_awal = $request->tanggal_awal;
        $tanggal_akhir = $request->tanggal_akhir;
        $jenis_laporan = $request->jenis;
        $group_transaksi = $request->group_transaksi;
        $array_trans = [];
        $array_jenis_trans = [];
        try {
            if ($jenis_laporan == 1) {
                if ($group_transaksi == 0 || $group_transaksi == 1) {
                    $sql = "SELECT j.trans_tglbuku, rp.kategori_perkiraan ,j.kode_perkiraan, rp.nama_perkiraan, j.debet as masuk, j.kredit as keluar, ta.trans_catatan FROM data_trans_jurnal j LEFT JOIN data_trans_akuntansi ta ON j.trans_id = ta.trans_id LEFT JOIN ref_perkiraan rp ON rp.kode_perkiraan = j.kode_perkiraan WHERE j.trans_tglbuku >= '$tanggal_awal' AND j.trans_tglbuku <= '$tanggal_akhir' AND j.trans_kode IN ('41','42','43') AND j.kode_perkiraan IN ('1.1.01.01','1.1.01.01.01','1.1.01.01.02') AND j.status = '1'";
                    $transaksi_kas = DB::select($sql);
                    array_push($array_trans, $transaksi_kas);
                    array_push($array_jenis_trans, "Transaksi Kas");
                }

                if ($group_transaksi == 0 || $group_transaksi == 2) {
                    // $sql = "SELECT trans_tglbuku, kategori_perkiraan ,tj.kode_perkiraan, nama_perkiraan, trans_catatan, debet as masuk, kredit as keluar FROM data_trans_jurnal tj JOIN ref_perkiraan rp ON tj.kode_perkiraan = rp.kode_perkiraan WHERE trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND trans_kode IN ('13.1','13.2','13.3','19') AND kategori_perkiraan IN (1,2)";
                    $sql = "SELECT j.trans_tglbuku, rp.kategori_perkiraan ,j.kode_perkiraan, rp.nama_perkiraan, j.debet as masuk, j.kredit as keluar, pt.trans_catatan FROM data_trans_jurnal j LEFT JOIN data_penempatan_trans pt ON j.trans_id = pt.trans_id LEFT JOIN ref_perkiraan rp ON rp.kode_perkiraan = j.kode_perkiraan WHERE j.trans_tglbuku >= '$tanggal_awal' AND j.trans_tglbuku <= '$tanggal_akhir' AND j.trans_kode IN ('11.1','11.2','12.1','12.2','13.1','13.2','13.3','19') AND j.kode_perkiraan IN ('1.1.01.01','1.1.01.01.01','1.1.01.01.02') AND j.status = '1'";
                    $transaksi_penempatan = DB::select($sql);
                    array_push($array_trans, $transaksi_penempatan);
                    array_push($array_jenis_trans, "Transaksi Penempatan");
                }

                if ($group_transaksi == 0 || $group_transaksi == 3) {
                    // $transaksi_kredit = DB::select("SELECT j.trans_tglbuku, rp.kategori_perkiraan ,j.kode_perkiraan, rp.nama_perkiraan, j.debet as masuk, j.kredit as keluar, IFNULL(r.trans_catatan,a.trans_catatan) as trans_catatan FROM data_trans_jurnal j LEFT JOIN data_kredit_trans_realisasi r ON j.trans_id = r.trans_id LEFT JOIN data_kredit_trans_angsuran a ON j.trans_id = a.trans_id LEFT JOIN ref_perkiraan rp ON rp.kode_perkiraan = j.kode_perkiraan WHERE j.trans_tglbuku >= '$tanggal_awal' AND j.trans_tglbuku <= '$tanggal_akhir' AND j.trans_kode IN ('21','22.1','22.2','23.1','23.2','23.3','29') AND j.kode_perkiraan IN ('1.1.01.01') AND j.status = '1'");

                    $transaksi_kredit = DB::select("SELECT trans_id, '1.1.01.01.02' AS kode_perkiraan ,(pokok + bunga) AS masuk, '0' AS keluar, trans_catatan, trans_tglbuku, trans_date FROM data_kredit_trans_angsuran WHERE status = 1 AND trans_tglbuku >= ? AND trans_tglbuku <= ? UNION SELECT trans_id, '1.1.01.01.02' AS kode_perkiraan ,'0' AS masuk, penerimaan AS keluar, trans_catatan, trans_tglbuku, trans_date FROM data_kredit_trans_realisasi WHERE status = 1 AND trans_tglbuku >= ? AND trans_tglbuku <= ? ORDER BY trans_date", [$tanggal_awal, $tanggal_akhir, $tanggal_awal, $tanggal_akhir]);

                    array_push($array_trans, $transaksi_kredit);
                    array_push($array_jenis_trans, "Transaksi Kredit");
                }

                if ($group_transaksi == 0 || $group_transaksi == 4) {
                    // $sql = "SELECT trans_tglbuku, kategori_perkiraan ,tj.kode_perkiraan, nama_perkiraan, trans_catatan, debet as masuk, kredit as keluar FROM data_trans_jurnal tj JOIN ref_perkiraan rp ON tj.kode_perkiraan = rp.kode_perkiraan WHERE trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND trans_kode IN ('31.1','31.2','32','33.1','33.2','34','39') AND kategori_perkiraan IN (1,2)";
                    $sql = "SELECT j.trans_tglbuku, rp.kategori_perkiraan ,j.kode_perkiraan, rp.nama_perkiraan, j.debet as masuk, j.kredit as keluar, it.trans_catatan FROM data_trans_jurnal j LEFT JOIN data_inventaris_trans it ON j.trans_id = it.trans_id LEFT JOIN ref_perkiraan rp ON rp.kode_perkiraan = j.kode_perkiraan WHERE j.trans_tglbuku >= '$tanggal_awal' AND j.trans_tglbuku <= '$tanggal_akhir' AND j.trans_kode IN ('31.1','31.2','32','33.1','33.2','34','39') AND j.kode_perkiraan IN ('1.1.01.01') AND j.status = '1'";
                    $transaksi_inventaris = DB::select($sql);
                    array_push($array_trans, $transaksi_inventaris);
                    array_push($array_jenis_trans, "Transaksi Inventaris");
                }

                $data = [];
                $index = 0;
                for ($i = 0; $i < count($array_trans); $i++) {
                    $trans = $array_trans[$i];
                    for ($a = 0; $a < count($trans); $a++) {
                        $index = $index + 1;
                        $trans_array = $trans[$a];
                        $trans_array->index = $index;
                        $trans_array->jenis = $array_jenis_trans[$i];
                        $trans_array->kode_jenis = $i + 1;
                        array_push($data, $trans_array);
                    }
                }
                $date = new DateTime($tanggal_awal); // For today/now, don't pass an arg.
                $date->modify("-1 day");
                $date_awal = $date->format("Y-m-d");
                $saldo  = DB::selectOne(
                    "SELECT HitungPerkSaldo(kode_perkiraan, ?, jurnal, level) as saldo_awal, HitungPerkSaldo(kode_perkiraan, ?, jurnal, level) as saldo_akhir FROM ref_perkiraan WHERE kode_perkiraan = '1.1.01.01'",
                    [$date_awal, $tanggal_akhir]
                );
                return response()->json([
                    "success" => true,
                    "data" => $data,
                    "saldo_awal_kas" => $saldo->saldo_awal,
                    "saldo_akhir_kas" => $saldo->saldo_akhir,
                    "array_trans" => $array_trans,
                    "message" => "laporan transaksi rincian"
                ]);
            }
            if ($jenis_laporan == 2) {
                //* get rekap

                // $sql = "SELECT * FROM (SELECT kode_transaksi, nama_transaksi, (SELECT IFNULL(SUM(debet),0) FROM data_trans_jurnal tj WHERE trans_kode = kode_transaksi AND trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND kode_perkiraan = '1.1.01.01' AND status = '1' ) as debet, (SELECT IFNULL(SUM(kredit),0) FROM data_trans_jurnal tj WHERE trans_kode = kode_transaksi AND trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND kode_perkiraan = '1.1.01.01' AND status = '1') as kredit, (SELECT count(*) FROM data_trans_jurnal tj WHERE trans_kode = kode_transaksi AND trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND kode_perkiraan = '1.1.01.01' AND status = '1' ) as jumlah_transaksi FROM ref_transaksi rt) as table_rekap";
                $sql = "SELECT * FROM (SELECT kode_transaksi, nama_transaksi, (SELECT IFNULL(SUM(debet),0) FROM data_trans_jurnal tj WHERE trans_kode = kode_transaksi AND trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND LEFT(kode_perkiraan,9) = '1.1.01.01' AND status = '1' ) as debet, (SELECT IFNULL(SUM(kredit),0) FROM data_trans_jurnal tj WHERE trans_kode = kode_transaksi AND trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND LEFT(kode_perkiraan,9) = '1.1.01.01' AND status = '1') as kredit, (SELECT count(*) FROM data_trans_jurnal tj WHERE trans_kode = kode_transaksi AND trans_tglbuku >= '$tanggal_awal' AND trans_tglbuku <= '$tanggal_akhir' AND LEFT(kode_perkiraan,9) = '1.1.01.01' AND status = '1' ) as jumlah_transaksi FROM ref_transaksi rt) as table_rekap";
                $data = DB::select($sql);

                $date = new DateTime($tanggal_awal); // For today/now, don't pass an arg.
                $date->modify("-1 day");
                $date_awal = $date->format("Y-m-d");
                // $sql = "SELECT HitungPerkSaldo(kode_perkiraan, '$date_awal', jurnal, level) as saldo_awal, HitungPerkSaldo(kode_perkiraan, '$tanggal_akhir', jurnal, level) as saldo_akhir FROM ref_perkiraan WHERE kode_perkiraan = '1.1.01.01'";
                $sql = "SELECT HitungPerkSaldo(kode_perkiraan, '$date_awal', jurnal, level) as saldo_awal, HitungPerkSaldo(kode_perkiraan, '$tanggal_akhir', jurnal, level) as saldo_akhir FROM ref_perkiraan WHERE LEFT(kode_perkiraan,9) = '1.1.01.01'";
                $saldo  = DB::selectOne($sql);
                return response()->json([
                    "success" => true,
                    "data" => $data,
                    "saldo_awal_kas" => $saldo->saldo_awal,
                    "saldo_akhir_kas" => $saldo->saldo_akhir,
                    "message" => "laporan transaksi rekap"
                ]);
            }
        } catch (Exception $error) {
            return response()->json([
                "success" => false,
                "error" => $error->getMessage()
            ]);
        }
    }

    function getLaporanTransaksi2(Request $request)
    {
        $kode_perkiraan = $request->kode_perkiraan;
        $level_perkiraan = $request->level;
        $tanggal_awal = $request->tanggal_awal;
        $tanggal_akhir = $request->tanggal_akhir;

        $date1 = date_create($tanggal_awal);
        $tahun_awal = date_format($date1, 'Y');
        $date2 = date_create($tanggal_akhir);
        $tahun_akhir = date_format($date2, 'Y');
        $beda_tahun = $tahun_awal != $tahun_akhir;

        $kode = $kode_perkiraan;
        if ($level_perkiraan == 1) {
            $kode = substr($kode, 0, 2);
        }
        if ($level_perkiraan == 2) {
            $kode = substr($kode, 0, 4);
        }
        if ($level_perkiraan == 3) {
            $kode = substr($kode, 0, 6);
        }
        $sql = "SELECT data_trans_jurnal.*, ref_perkiraan.nama_perkiraan FROM data_trans_jurnal LEFT JOIN ref_perkiraan ON data_trans_jurnal.kode_perkiraan = ref_perkiraan.kode_perkiraan WHERE data_trans_jurnal.trans_tglbuku >= '$tanggal_awal' AND data_trans_jurnal.trans_tglbuku <= '$tanggal_akhir' AND data_trans_jurnal.kode_perkiraan LIKE '$kode%' AND status = '1' ORDER BY data_trans_jurnal.trans_date ASC";
        $data = DB::select($sql);
        $penempatan_kode = ['11.1', '11.2', '12.1', '12.2'];
        $kredit_angsuran_kode = ['22.1', '22.2', '23.1', '23.2', '29'];
        $kredit_realisasi_kode = ['21'];
        $inventaris_kode = ['31.1', '32.1', '32', '33.1', '33.2', '34', '39'];
        $akuntansi_kode = ['41', '42', '43', '99'];
        $data_uraian = [];
        for ($i = 0; $i < count($data); $i++) {
            $trans_kode = $data[$i]->trans_kode;
            $trans_id = $data[$i]->trans_id;

            if (in_array($trans_kode, $penempatan_kode)) {
                $sql = "SELECT * FROM data_penempatan_trans WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $kredit_angsuran_kode)) {
                $sql = "SELECT * FROM data_kredit_trans_angsuran WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $kredit_realisasi_kode)) {
                $sql = "SELECT * FROM data_kredit_trans_realisasi WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $inventaris_kode)) {
                $sql = "SELECT * FROM data_inventaris_trans WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            if (in_array($trans_kode, $akuntansi_kode)) {
                $sql = "SELECT * FROM data_trans_akuntansi WHERE trans_id = '$trans_id'";
                $uraian = DB::selectOne($sql);
            }
            array_push($data_uraian, isset($uraian) ? $uraian : "");
        }
        $data_mutasi = [];
        $data_uraian_mutasi = [];

        if (!$beda_tahun) {
            for ($i = 0; $i < count($data); $i++) {
                if ($data[$i]->trans_kode != '99') {
                    array_push($data_mutasi, $data[$i]);
                    array_push($data_uraian_mutasi, $data_uraian[$i]);
                }
            }
        }
        return response()->json([
            "data" => $beda_tahun ? $data : $data_mutasi,
            "uraian" => $beda_tahun ? $data_uraian : $data_uraian_mutasi,
            "beda" => $beda_tahun
        ]);
    }

    function getPengaturanLaporan()
    {
        $setup = DB::table("setup_laporan")->get();
        return response()->json([
            "success" => true,
            "data" => $setup
        ]);
    }

    function setPengaturanLaporan(Request $request)
    {
        $data = $request->data;
        try {
            for ($i = 0; $i < count($data); $i++) {
                $id = $data[$i]['id'];
                $laporan_nama = $data[$i]['laporan_nama'];
                $dibuat = $data[$i]['laporan_dibuat_oleh'];
                $diperiksa = $data[$i]['laporan_diperiksa_oleh'];
                $disetujui = $data[$i]['laporan_disetujui_oleh'];
                $count_row = DB::table('setup_laporan')->where('id', $id)->count();
                if ($count_row == 0) {
                    DB::table('setup_laporan')->insert([
                        'id' => $id,
                        'laporan_nama' => $laporan_nama,
                        'laporan_dibuat_oleh' => $dibuat,
                        'laporan_diperiksa_oleh' => $diperiksa,
                        'laporan_disetujui_oleh' => $disetujui,
                    ]);
                } else {
                    DB::table('setup_laporan')->where('id', $id)->update([
                        'laporan_dibuat_oleh' => $dibuat,
                        'laporan_diperiksa_oleh' => $diperiksa,
                        'laporan_disetujui_oleh' => $disetujui,
                    ]);
                }
            }
            return response()->json([
                "success" => true,
                "message" => "Data berhasil disimpan",
                "data" => $data
            ]);
        } catch (Exception $error) {
            return response()->json([
                "success" => false,
                "error" => $error
            ]);
        }
    }

    function getLaporanHarian(Request $request)
    {
        $tanggal_awal = $request->tanggal_awal;
        $tanggal_akhir = $request->tanggal_akhir;
        $sql = "SELECT kode_transaksi ,
         nama_transaksi,
        (SELECT sum(debet) from data_penempatan_trans where trans_kode= kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir' )as debet,
        (SELECT sum(kredit) from data_penempatan_trans where trans_kode= kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir')as kredit,
        (select sum(plafon) from data_kredit_trans_realisasi where trans_kode =kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as plafon,
        (select sum(penerimaan) from data_kredit_trans_realisasi where trans_kode =kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as penerimaan,
        (select sum(pokok) from data_kredit_trans_angsuran  where trans_kode= kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as pokok,
        (select sum(bunga) from data_kredit_trans_angsuran  where trans_kode= kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as bunga,
        (select sum(denda) from data_kredit_trans_angsuran  where trans_kode= kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as denda,
        (select sum(total) from data_kredit_trans_angsuran  where trans_kode= kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as total_angs,
        (select sum(nominal) from data_inventaris_trans where trans_kode=kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as total_inv,
        (SELECT sum(nominal_debet) from data_trans_akuntansi where trans_kode=kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir')as debet_akunt,
        (SELECT sum(nominal_kredit) from data_trans_akuntansi where trans_kode=kode_transaksi AND trans_tglbuku BETWEEN '$tanggal_awal' AND '$tanggal_akhir') as kredit_akunt
        FROM ref_transaksi
        WHERE status = 1 AND kode_transaksi <>99";
        $data = DB::select($sql);
        return response()->json($data);
    }



    function getDaftarProsesPencadanganResiko()
    {
        $sql = "SELECT tanggal, sum(bakidebet) as bakidebet, sum(pencadangan) as pencadangan, SUM(pembentukan) as pembentukan, sum(pemulihan) as pemulihan, user, trans_tglbuku ,trans_date, status FROM table_pencadangan WHERE status = '1' GROUP BY tanggal ORDER BY tanggal DESC";
        $pencadangan = DB::select($sql);

        return response()->json([
            "success" => true,
            "data" => $pencadangan
        ]);
    }

    function getDetailPembentukanCadanganResiko(Request $request)
    {
        $tanggal = $request->tanggal;
        $sql = "SELECT tp.*, kel.nama_kelompok FROM table_pencadangan tp LEFT JOIN data_kredit_master km ON tp.rekening = km.rekening LEFT JOIN data_kelompok_master kel ON kel.kelompok_id = km.kelompok_id WHERE tanggal = '$tanggal' AND tp.status = '1'";
        $pembentukan = DB::select($sql);

        $result = collect([]);
        foreach ($pembentukan as $kredit) {
            if ($kredit->pembentukan > 0 || $kredit->pemulihan > 0) {
                $result->push($kredit);
            }
        }

        return response()->json([
            "success" => true,
            // "data" => $pembentukan,
            "data" => $result
        ]);
    }

    function getProgresDesa(Request $request)
    {
        $tanggal = $request->tanggal;
        $desa = $request->desa;
        if ($desa == 0) {
            $filter = '';
        } else {
            $filter = " WHERE dm.desa_id=$desa";
        }
        $sql = "SELECT
        dm.desa_id,
        dm.nama_desa,
        (
            SELECT COUNT(km.kelompok_id)
            FROM data_kelompok_master km
            WHERE km.desa_id = dm.desa_id
        ) AS total_kelompok,
        (
            SELECT COUNT(dam.anggota_id)
            FROM data_anggota_master dam
            WHERE dam.desa = dm.desa_id
        ) AS total_anggota,
        (
            SELECT COUNT(dkm.kelompok_id)
            FROM data_kredit_master dkm
            LEFT JOIN data_kelompok_master km ON dkm.kelompok_id = km.kelompok_id
            WHERE km.desa_id = dm.desa_id
              AND dkm.tgl_mulai <= '$tanggal'
              AND dkm.tgl_tutup > '$tanggal'
              AND dkm.status NOT IN (0, 9)
        ) AS total_kelompok_aktif,
        (
            SELECT COUNT(dam.anggota_id)
            FROM data_anggota_master dam
            LEFT JOIN data_kredit_master dkm ON dkm.kelompok_id = dam.kelompok_id
            WHERE dam.desa = dm.desa_id
              AND dkm.tgl_mulai <= '$tanggal'
              AND dkm.tgl_tutup > '$tanggal'
              AND dkm.status NOT IN (0, 9)
        ) AS total_anggota_aktif,
        (
            SELECT SUM(HitungPinjamanSaldo(dkm.rekening, '$tanggal'))
            FROM data_kredit_master dkm
            LEFT JOIN data_kelompok_master km ON dkm.kelompok_id = km.kelompok_id
            WHERE km.desa_id = dm.desa_id
              AND dkm.tgl_mulai <= '$tanggal'
              AND dkm.tgl_tutup > '$tanggal'
              AND dkm.status NOT IN (0,9)
        ) AS total_saldo_pinjaman
    FROM
        data_desa_master dm" . $filter;
        $data = DB::select($sql);
        return response()->json($data);
    }

    function getDaftarMenu()
    {
        $menu = DB::table('table_menu2')->where('status', 1)->get();
        return response()->json($menu);
    }

    function simpanGroupAkses(Request $request)
    {
        $group_id = $request->group_id;
        $nama = $request->nama;
        try {
            if (isset($group_id)) {
                $sql = "UPDATE table_group_akses SET group_name = '$nama' WHERE group_id = '$group_id'";
                DB::update('UPDATE table_group_akses SET group_name = ? WHERE group_id = ?', [$nama, $group_id]);
            } else {
                $sql = "INSERT INTO table_group_akses(group_name) VALUES('$nama')";
                DB::insert('INSERT INTO table_group_akses(group_name) VALUES(?)', [$nama]);
            }
            return response()->json([
                'success' => true,
                'message' => "Data berhasil disimpan",
                'sql' => $sql
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error
            ]);
        }
    }

    function simpanMenuAkses(Request $request)
    {
        $menu = $request->menu;
        $group_id = $request->group_id;
        try {
            DB::update('UPDATE table_group_akses SET menu_akses = ? WHERE group_id = ?', [$menu, $group_id]);
            return response()->json([
                'success' => true,
                'message' => "Data berhasil disimpan"
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error
            ]);
        }
    }

    function getDaftarGroupAkses()
    {
        $group = DB::table('table_group_akses')->get();
        return response()->json($group);
    }

    function getDaftarPendidikan(Request $request)
    {
        try {
            $pendidikan = DB::table('ref_pendidikan')->get();
            return response()->json([
                'success' => true,
                'data' => $pendidikan
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error->getMessage()
            ]);
        }
    }

    function getListCoaPemegangSaham(Request $request)
    {
        try {
            $coa = DB::select("SELECT * FROM ref_perkiraan WHERE kode_perkiraan LIKE '3.1.01.%' AND jurnal ='K'");
            return response()->json([
                'success' => true,
                'data' => $coa
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error
            ]);
        }
    }

    function getListModal(Request $request)
    {
        try {
            $modal = DB::select("SELECT kategori_perkiraan, kode_perkiraan, nama_perkiraan, jurnal, level ,HitungPerkSaldo(kode_perkiraan, '" . date('Y-m-d') . "', jurnal, level) AS saldo FROM ref_perkiraan where kode_perkiraan like '3.1.%' ORDER BY kode_perkiraan");
            return response()->json([
                'success' => true,
                'data' => $modal,
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error
            ]);
        }
    }

    function getLaporanTingkatKesehatan1(Request $request)
    {
        try {
            $tanggal = $request->tanggal;
            $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 `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 `status`=1";
            $datakolek = DB::select($sql);
            return response()->json([
                'success' => true,
                'data' => $data,
                'kolek' => $datakolek,
            ]);
        } catch (Exception $error) {
            return response()->json([
                'success' => false,
                'error' => $error,
            ]);
        }
    }
}
