<?php
defined('BASEPATH') or exit('No direct script access allowed');

class ControllerRealisasiPinjaman extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();
        check_not_login();
        if ($this->session->userdata('level') != 5) {
            redirect();
        }
        $this->set_timezone();
        $this->load->library('encrypt');
        $this->load->library('form_validation');
        $this->load->library('Mycustom');
        $this->load->library('pdfgenerator');
        $this->load->library('Notifikasi');
        $this->load->model('bagian_kasir/insert_model');
        $this->load->model('bagian_kasir/select_model');
        $this->load->model('bagian_kasir/update_model');
    }
    public function set_timezone()
    {
        date_default_timezone_set("Asia/Jakarta");
    }
    public function index()
    {
                $notif                 = $this->notifikasi->notif_kasir();
        // Data Login
        $data_login            = $this->userlogin->user_login();
        $data_id_login         = $this->session->userdata('isloggedin');
        // Data Isian Konten
        // Tampilkan Jenis Pinjaman
        $data_pengajuan               = $this->select_model->vd_verifPengajuanPinjaman();
        $data_riwayat                 = $this->select_model->vd_RiwayatTransaksiPengajuanPinjaman();
        $verif_realisasiBulanan       = $this->select_model->vd_jmlVerifRealisasiBulanan();
        $realisasiBulanan             = $this->select_model->vd_jmlRealisasiBulanan();
        // echo '<pre>';
        // var_dump($data_pengajuan);
        // die;
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'folder'              => 'pinjaman/realisasi',
            'page'                => 'index',
            'judul'               => 'Realisasi Pinjaman Koperasi || Bagian Kasir',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            'notif'               => $notif,
            // Isi dalam konten
            'data_pengajuan'      => $data_pengajuan,
            'ttl_verif'           => $verif_realisasiBulanan,
            'ttl_cair'            => $realisasiBulanan,
            'data_riwayat'        => $data_riwayat
        );
        $this->load->view('kasir/index', $data);
    }
    public function cetak($id)
    {
        $kontrak_id                   = $this->encrypt->decode($id);
        // Data Login
        $data_login                   = $this->userlogin->user_login();
        $data_id_login                = $this->session->userdata('isloggedin');
        // Nama Marketing
        $identitas_kontrak            = $this->select_model->getDataIdentitasKontrak($kontrak_id);
        $jaminan                      = $this->db->get_where('p_koperasi_agungan', ['kontrak_id' => $kontrak_id])->row_array();
        $petugas                      = $this->db->get_where('sistem_login', ['id' => $identitas_kontrak['login_id']])->row_array();
        // Tentukan nama file yang akan dicari (misalnya dari database)
        $file_kk = $identitas_kontrak['foto_kk'];
        // --- Logika untuk Foto KK ---
        $path_foto_kk = FCPATH . 'assets/foto_ktp/' . $file_kk; // Path di folder 'foto_ktp' (Cek Utama)
        $path_backup_kk = FCPATH . 'assets/foto_kk/' . $file_kk; // Path di folder 'foto_kk' (Cek Backup)
        // Tentukan URL yang akan digunakan untuk gambar KK
        if (file_exists($path_foto_kk) && $file_kk != '') {
            $url_kk = base_url('assets/foto_ktp/' . $file_kk);
        } elseif (file_exists($path_backup_kk) && $file_kk != '') {
            $url_kk = base_url('assets/foto_kk/' . $file_kk);
        } else {
            // URL default jika foto KK tidak ditemukan (misalnya, gambar placeholder 'no-image.jpg')
            $url_kk = base_url('assets/img/noimage.png');
        }
        $data_halaman = array(
            // Untuk memanggil halaman sesuai menu
            'title_pdf'           => 'Form Perjanjian Kontrak ' . $kontrak_id,
            'judul'               => 'Formulir Perjanjian Kontrak Pinjaman',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            // Data isi konten
            'identitas_kontrak'        => $identitas_kontrak,
            'kontrak_id'               => $kontrak_id,
            'jaminan'                  => $jaminan,
            'petugas'                  => $petugas,
            'kk'                       => $url_kk
        );
        $html = $this->load->view('document/kontrak/kontrak_perjanjian_pinjaman', $data_halaman, true);
        // File PDF Ketika Di Download
        $file_pdf = 'SURAT_PENGAKUAN_PINJAMAN_' . $kontrak_id;
        // setting paper
        $paper = 'A4';
        //orientasi paper potrait / landscape
        $orientation = "potrait";
        $this->pdfgenerator->generate_kontrak($html, $file_pdf, $paper, $orientation);
    }
    public function crud()
    {
        if (isset($_POST['pencairanDanaNasabah'])) :
            // Ubah Status Kontrak menjadi Aktif
            $data_kontrak = array(
                'status_kontrak' => 'AKTIF'
            );
            $this->db->where('id', htmlspecialchars($this->input->post('kontrak_id')));
            $this->db->update('p_koperasi_kontrak', $data_kontrak);
            // Menambahkan data tanggal realisasi
            // Menambahkan data dokumen perjanjian
            $this->update_model->pencairanDanaNasabah(); // Merubah Data Doc Kontrak dan tanggal realisasi
            // Menambahkan data bukti terima pencairan
            $this->_buktiTerimaPencairan(); // Bukti Menambahkan kas umum keluar
            // Menambahkan Alur Kas Umum Operasional / Keluar
            $this->insert_model->pencairanKasKeluar();  // Menambahkan transaksi operasional kas umum
            // Menambahkan Alur Kas Umum Omset / Masuk 
            $this->_buktiOmsetPencairan(); // Bukti Omset Admin dan RK
            // Membuat Jadwal Angsuran
            $this->_buatJadwalAngsuran();
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Mencairkan Dana Pinjaman!</div>');
            redirect('kasir/koperasi/pencairan_pinjaman');
        endif;
    }
    // Kumpulan private function
    private function _buktiTerimaPencairan()
    {
        $nomor_kontrak         = htmlspecialchars($this->input->post('kontrak_id'));
        $cek_kontrak           = $this->db->get_where('p_koperasi_kontrak', ['id' => $nomor_kontrak])->row_array();
        $cek_aturan            = $this->db->get_where('p_koperasi_aturan', ['id' => $cek_kontrak['aturan_id']])->row_array();
        $cek_progress          = $this->db->get_where('p_koperasi_progres', ['kontrak_id' => $nomor_kontrak])->row_array();
        $cek_anggota           = $this->db->get_where('anggota', ['id' => $cek_kontrak['anggota_id']])->row_array();
        $cek_kasir             = $this->db->get_where('sistem_login', ['id' => $this->session->userdata('isloggedin')])->row_array();
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'title_pdf'           => 'Bukti Terima Pencairan Pinjaman',
            // Data isi konten
            'kontrak'         => $cek_kontrak,
            'aturan'          => $cek_aturan,
            'progress'        => $cek_progress,
            'anggota'         => $cek_anggota,
            'kasir'           => $cek_kasir
        );
        // $this->load->view('nota/nota_bayar_arisan', $data_halaman);
        // filename dari pdf ketika didownload
        $file_pdf = 'bukti_terima_pencairan_' . $nomor_kontrak;
        // setting paper
        $paper = 'A5';
        //orientasi paper potrait / landscape
        $orientation = "landscape";
        // $this->load->view('nota/nota_bayar_arisan_petugas', $data);
        $html = $this->load->view('document/nota/nota_terima_pencairan', $data, true);
        $tahun = date('Y');
        $bulan = date('m');
        // run dompdf
        $lokasi_file = 'assets/invoice/kas_umum/' . $tahun . '/' . $bulan . '/';
        $this->pdfgenerator->generate($html, $file_pdf, $paper, $lokasi_file, $orientation);
        $data_update_progress     = array(
            'bukti_terima' => $file_pdf . '.pdf'
        );
        $this->db->where('kontrak_id', $nomor_kontrak);
        $this->db->update('p_koperasi_progres', $data_update_progress);
        $nama_file = $file_pdf . '.pdf';
        $cek_option = $this->db->get_where('sistem_option')->row_array();
        $this->_notifWABuktiSetorAsli($nama_file, $lokasi_file, $cek_anggota, $cek_option, $nomor_kontrak);
    }
    private function _buktiOmsetPencairan()
    {
        $nomor_kontrak         = htmlspecialchars($this->input->post('kontrak_id'));
        $cek_kontrak           = $this->db->get_where('p_koperasi_kontrak', ['id' => $nomor_kontrak])->row_array();
        $cek_aturan            = $this->db->get_where('p_koperasi_aturan', ['id' => $cek_kontrak['aturan_id']])->row_array();
        $cek_progress          = $this->db->get_where('p_koperasi_progres', ['kontrak_id' => $nomor_kontrak])->row_array();
        $cek_anggota           = $this->db->get_where('anggota', ['id' => $cek_kontrak['anggota_id']])->row_array();
        $cek_kasir             = $this->db->get_where('sistem_login', ['id' => $this->session->userdata('isloggedin')])->row_array();
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'title_pdf'           => 'Bukti Omset Pencairan Pinjaman',
            // Data isi konten
            'kontrak'         => $cek_kontrak,
            'aturan'          => $cek_aturan,
            'progress'        => $cek_progress,
            'anggota'         => $cek_anggota,
            'kasir'           => $cek_kasir
        );
        // $this->load->view('nota/nota_bayar_arisan', $data_halaman);
        // filename dari pdf ketika didownload
        $file_pdf = 'bukti_omset_pencairan_' . $nomor_kontrak;
        // setting paper
        $paper = 'A5';
        //orientasi paper potrait / landscape
        $orientation = "landscape";
        // $this->load->view('nota/nota_bayar_arisan_petugas', $data);
        $html = $this->load->view('document/nota/nota_omset_pencairan', $data, true);
        $tahun = date('Y');
        $bulan = date('m');
        // run dompdf
        $lokasi_file = 'assets/invoice/kas_umum/' . $tahun . '/' . $bulan . '/';
        $this->pdfgenerator->generate($html, $file_pdf, $paper, $lokasi_file, $orientation);
        $nama_file = $file_pdf . '.pdf';
        $this->insert_model->omsetPencairanKasMasuk($nama_file, $cek_kontrak, $cek_aturan);
    }
    // Jadwal Angsuran
    private function _buatJadwalAngsuran()
    {
        $a = 1;
        $cek_kontrak = $this->db->get_where('p_koperasi_kontrak', ['id' => htmlspecialchars($this->input->post('kontrak_id'))])->row_array();
        if ($cek_kontrak['aturan_id'] == 1) :
            // Mingguan
            while ($a <= $cek_kontrak['tempo_pinjaman']) :
                $data = array(
                    'kontrak_id' => htmlspecialchars($this->input->post('kontrak_id')),
                    'angs_ke'    => $a,
                    'tgl_tempo'  => date('Y-m-d', strtotime('+' . $a . ' week', strtotime(date('Y-m-d')))),
                    'bsr_bayar'  => $cek_kontrak['bsr_angsuran'],
                    'bsr_pokok'  => $cek_kontrak['bsr_pokok'],
                    'bsr_jasa'   => $cek_kontrak['bsr_jasa'],
                    'bsr_simpanan' => $cek_kontrak['bsr_simpanan'],
                    'status_angsuran' => 'BELUM'
                );
                $this->db->insert('p_koperasi_angsuran', $data);
                $a++;
            endwhile;
        elseif ($cek_kontrak['aturan_id'] == 2) :
            // Dua Mingguan
            while ($a <= $cek_kontrak['tempo_pinjaman']) :
                $data = array(
                    'kontrak_id'      => htmlspecialchars($this->input->post('kontrak_id')),
                    'angs_ke'         => $a,
                    'tgl_tempo'       => date('Y-m-d', strtotime('+' . ($a * 2) . ' week', strtotime(date('Y-m-d')))),
                    'bsr_bayar'       => $cek_kontrak['bsr_angsuran'],
                    'bsr_pokok'       => $cek_kontrak['bsr_pokok'],
                    'bsr_jasa'        => $cek_kontrak['bsr_jasa'],
                    'bsr_simpanan'    => $cek_kontrak['bsr_simpanan'],
                    'status_angsuran' => 'BELUM'
                );
                $this->db->insert('p_koperasi_angsuran', $data);
                $a++;
            endwhile;
        elseif ($cek_kontrak['aturan_id'] == 3) :
            // Dua Mingguan
            while ($a <= $cek_kontrak['tempo_pinjaman']) :
                $data = array(
                    'kontrak_id'      => htmlspecialchars($this->input->post('kontrak_id')),
                    'angs_ke'         => $a,
                    'tgl_tempo'       => date('Y-m-d', strtotime('+' . $a . ' month', strtotime(date('Y-m-d')))),
                    'bsr_bayar'       => $cek_kontrak['bsr_angsuran'],
                    'bsr_pokok'       => $cek_kontrak['bsr_pokok'],
                    'bsr_jasa'        => $cek_kontrak['bsr_jasa'],
                    'bsr_simpanan'    => $cek_kontrak['bsr_simpanan'],
                    'status_angsuran' => 'BELUM'
                );
                $this->db->insert('p_koperasi_angsuran', $data);
                $a++;
            endwhile;
        else :
            while ($a <= $cek_kontrak['tempo_pinjaman']) :
                $data = array(
                    'kontrak_id'      => htmlspecialchars($this->input->post('kontrak_id')),
                    'angs_ke'         => $a,
                    'tgl_tempo'       => date('Y-m-d', strtotime('+' . $a . ' month', strtotime(date('Y-m-d')))),
                    'bsr_bayar'       => $cek_kontrak['bsr_angsuran'],
                    'bsr_pokok'       => $cek_kontrak['bsr_pokok'],
                    'bsr_jasa'        => $cek_kontrak['bsr_jasa'],
                    'bsr_simpanan'    => $cek_kontrak['bsr_simpanan'],
                    'status_angsuran' => 'BELUM'
                );
                $this->db->insert('p_koperasi_angsuran', $data);
                $a++;
            endwhile;
        endif;
    }
    // Notifikasi WA Bukti Setor Nomor Saya
    private function _notifWABuktiSetorAsli($nama_file, $lokasi_file, $cek_anggota, $cek_option, $nomor_kontrak)
    {
        $sett_wa = $this->db->get_where('sistem_wa', ['id' => 2])->row_array();
        $cek_nomor = substr($cek_anggota['no_hp'], 0, 1);
        if ($cek_nomor == 0) :
            $no_hp = '62' . substr($cek_anggota['no_hp'], 1, 20);
        else :
            $no_hp = $cek_anggota['no_hp'];
        endif;
        $link_file = base_url($lokasi_file . $nama_file);
        $caption = 'Yth. ' . $cek_anggota['nm_anggota'] . '

Pencairan dana pinjaman anda sudah selesai, mohon untuk pembayaran angsuran sesuai jatuh tempo agar tidak mendapatkan denda keterlambatan, Terimakasih.
        
Sempatkan waktu anda untuk memberikan kritik dan saran kepada kami :

https://kspbinaartha.com/marketing/review_konsumen/' . $this->encrypt->encode($nomor_kontrak) . '

*Info Hub :* ' . $cek_option['cs_koperasi'] . '
*_PESAN OTOMATIS ROBIN_*';

        $footer = '*KSP Bina Artha Prima*';
        $data_inputan = array(
            'api_key'    => $sett_wa['api_key'],
            'sender'     => $sett_wa['no_hp'],
            'number'     => $no_hp,
            'media_type' => 'document',
            'caption'    => $caption,
            'footer'     => $footer,
            'url'        => $link_file
        );
        // Logs WhatApps Sender
        $data_invoc = $this->db->get_where('p_koperasi_kontrak', ['id' => $nomor_kontrak])->row_array();
        $data_logs = array(
            'login_id'     => $data_invoc['login_id'],
            'tgl_kirim'    => date('Y-m-d'),
            'no_hp'        => $no_hp,
            'isi_pesan'    => $caption,
            'ket_pesan'    => 'Pencairan Dana ' . $nomor_kontrak,
            'jml_kirim'    => '1',
            'link_pdf'     => $link_file,
            'link_reviews' => 'https://kspbinaartha.com/marketing/review_konsumen/' . $this->encrypt->encode($nomor_kontrak)
        );
        $this->db->insert('logs_wa', $data_logs);
        // End Logs WhatApps Sender
        $curl = curl_init($sett_wa['endpoint_url']);
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data_inputan));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_exec($curl);
        curl_close($curl);
    }
}

/* End of file ControllerRealisasiPinjaman.php and path \application\controllers\kasir\koperasi\ControllerRealisasiPinjaman.php */