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

class ControllerPengajuanPinjaman extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();
        check_not_login();
        if ($this->session->userdata('level') != 7) {
            redirect();
        }
        $this->load->library('encrypt');
        $this->load->library('form_validation');
        $this->load->library('mycustom');
        $this->load->library('pdfgenerator');
        $this->load->library('WhatAppsNotif');
        $this->load->model('marketing/insert_model');
        $this->load->model('marketing/select_model');
        $this->load->model('marketing/update_model');
        $this->set_timezone();
    }
    public function set_timezone()
    {
        date_default_timezone_set("Asia/Jakarta");
    }
    public function index()
    {
        // Data Login
        $data_login            = $this->userlogin->user_login();
        $data_id_login         = $this->session->userdata('isloggedin');
        $data_kotkab           = $this->select_model->vd_kotkab();
        // Data Isian Konten
        // Tampilkan Jenis Pinjaman
        $jenis_pinjaman        = $this->select_model->vd_jenisPinjamanAktif();
        $data_pengajuan        = $this->select_model->vd_pengajuanPinjaman();
        // echo '<pre>';
        // var_dump($data_pengajuan);
        // die;
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'folder'              => 'kegiatan/pengajuan',
            'page'                => 'index',
            'judul'               => 'Kegiatan Pengajuan Pinjaman || Bagian Marketing',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            'data_kota'           => $data_kotkab,
            // Isi dalam konten
            'jenis_pinjaman'      => $jenis_pinjaman,
            'data_pengajuan'      => $data_pengajuan
        );
        $this->load->view('marketing/index', $data);
    }
    public function riwayat()
    {
        // Data Login
        $data_login            = $this->userlogin->user_login();
        $data_id_login         = $this->session->userdata('isloggedin');
        $data_kotkab            = $this->select_model->vd_kotkab();

        // Data Isian Konten
        // Tampilkan Jenis Pinjaman
        $jenis_pinjaman        = $this->select_model->vd_jenisPinjamanAktif();
        $data_pengajuan        = $this->select_model->vd_RiwayatPengajuanPinjaman();

        $data = array(
            // Untuk memanggil halaman sesuai menu
            'folder'              => 'kegiatan/riwayat',
            'page'                => 'index',
            'judul'               => 'Riwayat Pengajuan Pinjaman || Bagian Marketing',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            'data_kota'           => $data_kotkab,
            // Isi dalam konten
            'jenis_pinjaman'      => $jenis_pinjaman,
            'data_pengajuan'      => $data_pengajuan
        );
        $this->load->view('marketing/index', $data);
    }
    public function crud()
    {
        // Mulai Proses Pengajuan Pinjaman
        if (isset($_POST['simpanPengajuanPinjaman'])) :
            // Melakukan Pengelompokan Inputan Jadi Satu Array
            $data_inputan       = $this->_dataInputanAnggotaKoperasi();
            $alamat_id          = $this->_cekDataAlamat($data_inputan);
            // Cek Anggota Peminjaman
            $this->_cekAnggotaPinjaman($data_inputan);
            // Cek Apakah KTP Anggota Berjumlah 16 Karakter
            $this->_cekKTPAnggota($data_inputan);
            // Cek apakah kolom option Jenis Kelamin, RT, dan RW diisi
            $this->_validasiComboBox($data_inputan);
            // Cek apakah Nomor HP sudah di pakai atau belum
            $this->_validasiNomorHP($data_inputan);
            // Cek Apakah Nomor KK Sudah di pakai atau belum
            // Membuat File Baru
            $isi_index          = $this->_membuatFileBaruIndex();
            $cek_anggota        = $this->db->get_where('anggota', ['nik' => $data_inputan['nik']])->row_array();
            if ($cek_anggota > 0):
                $anggota_id = $cek_anggota['id'];
            else:
                $anggota_id = $this->insert_model->simpanDataPengajuanKoperasi($data_inputan, $alamat_id, $isi_index);
            endif;
            // Cek Nomor KK
            $this->_validasiNomorKK($data_inputan, $anggota_id);
            // Cek Detail Kontrak
            $detail_kontrak     = $this->_dataIdentitasPinjaman($data_inputan, $anggota_id);
            $this->insert_model->tambahPengajuanPinjaman($detail_kontrak);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Mengajukan Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif; // Clear
        // Merubah kontrak pinjaman atau merubah waktu tempo dan besaran pinjaman
        if (isset($_POST['ubahDetailPinjaman'])) :
            $this->_dataUbahKontrak();
            $this->update_model->dataUbahProgress();
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Merubah Kontrak Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        // Merubah identitas peminjam
        if (isset($_POST['ubahDetailIdentitas'])) :
            $data_input = array(
                'nik_anggota_lama' => htmlspecialchars($this->input->post('nik_anggota')),
                'nik_anggota_baru' => htmlspecialchars($this->input->post('nik_anggota_baru')),
                'kk_lama'          => htmlspecialchars($this->input->post('nomor_kk')),
                'kk_baru'          => htmlspecialchars($this->input->post('nomor_kk_baru')),
                'no_hp_lama'       => htmlspecialchars($this->input->post('no_hp_lama')),
                'no_hp_baru'       => htmlspecialchars($this->input->post('no_hp'))
            );
            $ubah_nik   = ($data_input['nik_anggota_lama'] != $data_input['nik_anggota_baru']);
            $ubah_kk    = ($data_input['kk_lama'] != $data_input['kk_baru']);
            $ubah_no_hp = ($data_input['no_hp_lama'] != $data_input['no_hp_baru']);
            if (!$ubah_nik && !$ubah_kk && !$ubah_no_hp) {
                $this->update_model->ubahDetailIdentitas11($data_input);
                $this->update_model->ubahDetailIdentitas11KK($data_input);
                $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Merubah Identitas Pinjaman!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            } else {
                $data_validasi = [];
                if ($ubah_nik)   $data_validasi['nik']   = $data_input['nik_anggota_baru'];
                if ($ubah_kk)    $data_validasi['kk']    = $data_input['kk_baru'];
                if ($ubah_no_hp) $data_validasi['no_hp'] = $data_input['no_hp_baru'];
                $data_fix = $this->vInputan2($data_validasi);
                $this->update_model->ubahDetailIdentitas111($data_fix);
                $this->update_model->ubahDetailIdentitas111KK($data_fix);
                $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Merubah Identitas Pinjaman!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            }
        endif;
        // Merubah kontrak pinjaman atau merubah waktu tempo dan besaran pinjaman
        if (isset($_POST['ubahDetailAlamat'])) :
            $data_inputan       = $this->_dataInputanAlamatUbah();
            $alamat_id          = $this->_cekDataAlamat($data_inputan);
            $data_kontrak = array(
                'alamat_lengkap' => $data_inputan['alamat_lengkap'],
                'nm_rt'          => $data_inputan['nm_rt'],
                'nm_rw'          => $data_inputan['nm_rw'],
                'id_alamat'      => $alamat_id
            );
            $this->db->where('nik', $data_inputan['nik']);
            $this->db->update('anggota', $data_kontrak);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Merubah Detail Rumah Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        if (isset($_POST['ubahDetailAlamatRiwayat'])) :
            $data_inputan       = $this->_dataInputanAlamatUbah();
            $alamat_id          = $this->_cekDataAlamat($data_inputan);
            $data_kontrak = array(
                'alamat_lengkap' => $data_inputan['alamat_lengkap'],
                'nm_rt'          => $data_inputan['nm_rt'],
                'nm_rw'          => $data_inputan['nm_rw'],
                'id_alamat'      => $alamat_id
            );
            $this->db->where('nik', $data_inputan['nik']);
            $this->db->update('anggota', $data_kontrak);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Merubah Detail Rumah Pinjaman!</div>');
            redirect('marketing/kegiatan/riwayat_pengajuan');
        endif;
        // Merubah kontrak pinjaman atau merubah waktu tempo dan besaran pinjaman
        if (isset($_POST['ajukanKembaliKontrak'])) :
            $this->_dataUbahKontrak();
            $this->update_model->dataUbahProgress();
            $data_kontrak = array(
                'status_kontrak' => 'KONFIRMASI'
            );
            $this->db->where('id', htmlspecialchars($this->input->post('kontrak_id')));
            $this->db->update('p_koperasi_kontrak', $data_kontrak);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Merubah Kontrak Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        // Merubah identitas peminjam
        if (isset($_POST['ajukanKembaliIdentitas'])) :
            $data_validasi = $this->vInputan();
            $this->update_model->ubahDetailIdentitas1($data_validasi);
            $this->update_model->ubahDetailIdentitas1KK($data_validasi);
            $data_kontrak = array(
                'status_kontrak' => 'KONFIRMASI'
            );
            $this->db->where('id', htmlspecialchars($this->input->post('kontrak_id')));
            $this->db->update('p_koperasi_kontrak', $data_kontrak);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Merubah Identitas Pinjaman!</div>');
            redirect('marketing/kegiatan/riwayat_pengajuan');
        endif;
        // Menambahkan Foto Jaminan
        if (isset($_POST['tambahFotoJaminan'])) :
            $this->update_model->tambahFotoJaminan1();
            $this->update_model->tambahFotoJaminan2();
            $this->update_model->tambahFotoJaminan3();
            $this->update_model->tambahFotoJaminan4();
            $data_proses = array(
                'status_kontrak'       => 'KONFIRMASI'
            );
            $this->db->where('id', htmlspecialchars($this->input->post('kontrak_id')));
            $this->db->update('p_koperasi_kontrak', $data_proses);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Menambah Foto Jaminan Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        if (isset($_POST['tambahFotoJaminanRiwayat'])) :
            $this->update_model->tambahFotoJaminan1();
            $this->update_model->tambahFotoJaminan2();
            $this->update_model->tambahFotoJaminan3();
            $this->update_model->tambahFotoJaminan4();
            $data_proses = array(
                'status_kontrak'       => 'KONFIRMASI'
            );
            $this->db->where('id', htmlspecialchars($this->input->post('kontrak_id')));
            $this->db->update('p_koperasi_kontrak', $data_proses);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Menambah Foto Jaminan Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        // Pencairan dana nasabah
        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 
            $isi_index = $this->_membuatFileBaruIndex();
            $this->update_model->pencairanDanaNasabah($isi_index); // 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('marketing/kegiatan/riwayat_pengajuan');
        endif;
        // Terima Permintaan pengajuan pinjaman
        if (isset($_POST['terimaPermintaanPinjaman'])) :
            $kontrak_id = htmlspecialchars($this->input->post('kontrak_id'));
            $data = array(
                'status_kontrak' => 'KONFIRMASI'
            );
            $this->db->where('id', $kontrak_id);
            $this->db->update('p_koperasi_kontrak', $data);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Menerima Pengajuan Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        if (isset($_POST['tolakPermintaanPinjaman'])) :
            $kontrak_id = htmlspecialchars($this->input->post('kontrak_id'));
            $data = array(
                'status_kontrak' => 'TOLAK'
            );
            $this->db->where('id', $kontrak_id);
            $this->db->update('p_koperasi_kontrak', $data);
            $data_progress = array(
                'tgl_konfirmasi' => date('Y-m-d'),
                'ket_progress'   => htmlspecialchars($this->input->post('alasan_tolak'))
            );
            $this->db->where('kontrak_id', $kontrak_id);
            $this->db->update('p_koperasi_progres', $data_progress);
            $this->whatappsnotif->notifWADitolak($kontrak_id);
            // $this->_notifWADitolak($kontrak_id);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Menolak Pengajuan Pinjaman!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
    }
    // Cek Apakah Anggota Punya Pinjaman atau Tidak
    private function _cekAnggotaPinjaman($data_inputan)
    {
        $cek_anggota        = $this->db->get_where('anggota', ['nik' => $data_inputan['nik']])->row_array();
        if ($cek_anggota > 0) :
            $anggota_id = $cek_anggota['id'];
            $cek_pengajuan = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'KONFIRMASI'])->row_array();
            if ($cek_pengajuan > 0) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Sudah Melakukan Pengajuan Pinjaman!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            endif;
            $cek_terima = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'TERIMA'])->row_array();
            if ($cek_terima > 0) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Menunggu Untuk Melakukan Pencairan Pinjaman!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            endif;
            $cek_aktif = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'AKTIF'])->row_array();
            if ($cek_aktif > 0) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Masih Ada Pinjaman Aktif!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            endif;
            $cek_macet = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'MACET'])->row_array();
            if ($cek_macet > 0) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Masih Ada Pinjaman Aktif!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            endif;
        endif;
    }
    // Cek apakah anggota memiliki keluarga atau kk
    private function _validasiNomorKK($data_inputan, $anggota_id)
    {
        // Cek Nomor KK
        $cek_kk = $this->db->get_where('anggota_keluarga', ['nomor_kk' => $data_inputan['nomor_kk']])->row_array();
        // Nomor KK
        if ($cek_kk != null) :
            // Tambah Anggota Keluarga
            $this->insert_model->uploadGambarKK($data_inputan, $anggota_id);
            $data_detail_keluarga = array(
                'kk_id' => $data_inputan['nomor_kk'],
                'anggota_id' => $anggota_id,
                'status_keluarga' => 'anggota_keluarga'
            );
            $this->db->insert('anggota_keluarga_detail', $data_detail_keluarga);
            // Edit Jumlah Anggota Keluarga
            $data_keluarga = array(
                'jml_keluarga' => $cek_kk['jml_keluarga'] + 1
            );
            $this->db->where('nomor_kk', $data_inputan['nomor_kk']);
            $this->db->update('anggota_keluarga', $data_keluarga);
        else :
            $this->insert_model->uploadGambarKK($data_inputan, $anggota_id);
            $data_keluarga = array(
                'nomor_kk'     => $data_inputan['nomor_kk'],
                'anggota_id'   => $anggota_id,
                'jml_keluarga' => 1
            );
            $this->db->insert('anggota_keluarga', $data_keluarga);
            $data_detail_keluarga = array(
                'kk_id'           => $data_inputan['nomor_kk'],
                'anggota_id'      => $anggota_id,
                'status_keluarga' => 'suami_istri'
            );
            $this->db->insert('anggota_keluarga_detail', $data_detail_keluarga);
        endif;
    }
    // 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;
        endif;
    }
    // Kelompok Data Inputan
    private function _dataInputanAnggotaKoperasi()
    {
        // Cek Status Hubungan
        if (htmlspecialchars($this->input->post('status_hubungan')) == 0) :
            $suami_istri = 'BELUM MENIKAH';
        elseif (htmlspecialchars($this->input->post('status_hubungan')) == 1) :
            $suami_istri = htmlspecialchars($this->input->post('tambah_suami_istri'));
        elseif (htmlspecialchars($this->input->post('status_hubungan')) == 2) :
            $suami_istri = 'DUDA/JANDA';
        endif;
        $data_inputan = array(
            'nik'            => htmlspecialchars($this->input->post('tambah_nik_anggota')),
            'login_id'       => htmlspecialchars($this->input->post('login_id')),
            'nomor_kk'       => htmlspecialchars($this->input->post('tambah_nomor_kk')),
            'nm_anggota'     => htmlspecialchars($this->input->post('tambah_nm_anggota')),
            'jk'             => htmlspecialchars($this->input->post('tambah_jk')),
            'alamat_lengkap' => htmlspecialchars($this->input->post('tambah_alamat_lengkap')),
            'nm_rt'          => htmlspecialchars($this->input->post('tambah_nm_rt')),
            'nm_rw'          => htmlspecialchars($this->input->post('tambah_nm_rw')),
            'nm_desa'        => htmlspecialchars($this->input->post('tambah_dk_ds')),
            'nm_kecamatan'   => htmlspecialchars($this->input->post('tambah_kecamatan_baru')),
            'kot_kab'        => htmlspecialchars($this->input->post('tambah_kota_kabupaten')),
            'tempat_lahir'   => htmlspecialchars($this->input->post('tambah_tempat_lahir')),
            'tgl_lahir'      => htmlspecialchars($this->input->post('tambah_tgl_lahir')),
            'no_hp'          => htmlspecialchars($this->input->post('tambah_no_hp')),
            'pekerjaan'      => htmlspecialchars($this->input->post('tambah_pekerjaan')),
            'suami_istri'    => $suami_istri,
            'produk_id'      => htmlspecialchars($this->input->post('produk_id')),
            'pokok_pinjaman' => htmlspecialchars($this->input->post('pokok_pinjaman'))
        );
        return $data_inputan;
    }
    // Data inputan ngasal
    private function _dataInputanAlamatUbah()
    {
        $data_inputan = array(
            'nik'            => htmlspecialchars($this->input->post('nik_anggota')),
            'alamat_lengkap' => htmlspecialchars($this->input->post('alamat_lengkap')),
            'nm_rt'          => htmlspecialchars($this->input->post('nm_rt')),
            'nm_rw'          => htmlspecialchars($this->input->post('nm_rw')),
            'nm_desa'        => htmlspecialchars($this->input->post('dk_ds')),
            'nm_kecamatan'   => htmlspecialchars($this->input->post('kecamatan_baru')),
            'kot_kab'        => htmlspecialchars($this->input->post('kota_kabupaten'))
        );
        return $data_inputan;
    }
    // Menunjukkan data identitas pinjaman
    public function cek_angsuran_new()
    {
        $cek_ap             = $this->db->get_where('p_koperasi_aturan', ['produk_id' => 122])->row_array();
        $nomor_kontrak      = 1 . 122 . date('ymdhis');
        // Potongan Awal saat pencairan
        $pot_admin          = $pokok_pinjaman * $cek_ap['administrasi'] / 100;
        $pot_rk             = $pokok_pinjaman * $cek_ap['rk'] / 100;
        // Besaran Pokok Setiap kali Pembayaran
        $pokok_angsuran    = $pokok_pinjaman / $cek_ap['tempo'];
        $pokokangsuran     = ceil($pokok_angsuran);
        $bsr_pokok         = round($pokokangsuran, -2);
        // Simpanan atau tabungan setiap pembayaran
        $b_simpanan        = ($pokok_pinjaman * $cek_ap['simpanan'] / 100) / $cek_ap['tempo'];
        $simpananpokok     = ceil($b_simpanan);
        $bsr_simpanan      = round($simpananpokok, -2);
        // Besar Angsuran setiap bulan
        // Biaya Jasa Setiap transaksi pembayaran
        $bsr_jasa          = ($pokok_pinjaman * $cek_ap['jasa'] / 100) / $cek_ap['tempo'];
        // Biaya yang harus di bayar
        $bsr_angsuran      = $bsr_pokok + $bsr_simpanan + $bsr_jasa;
        // Total Pembayaran sampai lunas
        $ttl_bayar         = $bsr_angsuran * $cek_ap['tempo'];
        $detail_kontrak = array(
            'id'              => $nomor_kontrak,
            'aturan_id'       => $cek_ap['id'],
            'bsr_admin'       => $pot_admin,
            'bsr_rk'          => $pot_rk,
            'bsr_pokok'       => $bsr_pokok,
            'bsr_simpanan'    => $bsr_simpanan,
            'bsr_jasa'        => $bsr_jasa,
            'bsr_angsuran'    => $bsr_angsuran,
            'tempo_pinjaman'  => $cek_ap['tempo'],
            'ttl_bayar'       => $ttl_bayar,
            'status_kontrak'  => 'KONFIRMASI'
        );
        echo '<pre>';
        var_dump($cek_ap, $cek_ap['tempo'], $detail_kontrak);
        die;
    }
    private function _dataIdentitasPinjaman($data_inputan, $anggota_id)
    {
        if ($data_inputan['produk_id'] == 122) :
            if ($data_inputan['pokok_pinjaman'] == 1000000) :
                $tambahan = 500;
            elseif ($data_inputan['pokok_pinjaman'] == 1500000) :
                $tambahan = 750;
            elseif ($data_inputan['pokok_pinjaman'] == 2000000) :
                $tambahan = 1000;
            elseif ($data_inputan['pokok_pinjaman'] == 2500000) :
                $tambahan = 1250;
            elseif ($data_inputan['pokok_pinjaman'] == 3000000) :
                $tambahan = 1500;
            elseif ($data_inputan['pokok_pinjaman'] == 3500000) :
                $tambahan = 1750;
            elseif ($data_inputan['pokok_pinjaman'] == 4000000) :
                $tambahan = 2000;
            elseif ($data_inputan['pokok_pinjaman'] == 4500000) :
                $tambahan = 2250;
            elseif ($data_inputan['pokok_pinjaman'] == 5000000) :
                $tambahan = 2500;
            elseif ($data_inputan['pokok_pinjaman'] == 5500000) :
                $tambahan = 2750;
            elseif ($data_inputan['pokok_pinjaman'] == 6000000) :
                $tambahan = 3000;
            elseif ($data_inputan['pokok_pinjaman'] == 6500000) :
                $tambahan = 3250;
            elseif ($data_inputan['pokok_pinjaman'] == 7000000) :
                $tambahan = 3500;
            elseif ($data_inputan['pokok_pinjaman'] == 7500000) :
                $tambahan = 3750;
            elseif ($data_inputan['pokok_pinjaman'] == 8000000) :
                $tambahan = 4000;
            elseif ($data_inputan['pokok_pinjaman'] == 8500000) :
                $tambahan = 4250;
            elseif ($data_inputan['pokok_pinjaman'] == 9000000) :
                $tambahan = 4500;
            elseif ($data_inputan['pokok_pinjaman'] == 9500000) :
                $tambahan = 4750;
            elseif ($data_inputan['pokok_pinjaman'] == 10000000) :
                $tambahan = 0;
            endif;
        else :
            $tambahan = 0;
        endif;
        $cek_ap             = $this->db->get_where('p_koperasi_aturan', ['produk_id' => $data_inputan['produk_id']])->row_array();
        $nomor_kontrak      = $data_inputan['login_id'] . $data_inputan['produk_id'] . date('ymdhis');
        // Potongan Awal saat pencairan
        $pot_admin          = $data_inputan['pokok_pinjaman'] * $cek_ap['administrasi'] / 100;
        $pot_rk             = $data_inputan['pokok_pinjaman'] * $cek_ap['rk'] / 100;
        // Besaran Pokok Setiap kali Pembayaran
        $pokok_angsuran    = $data_inputan['pokok_pinjaman'] / $cek_ap['tempo'];
        $pokokangsuran     = ceil($pokok_angsuran);
        $bsr_pokok         = round($pokokangsuran, -2);
        // Simpanan atau tabungan setiap pembayaran
        $b_simpanan        = ($data_inputan['pokok_pinjaman'] * $cek_ap['simpanan'] / 100) / $cek_ap['tempo'];
        $simpananpokok     = ceil($b_simpanan);
        $bsr_simpanan      = round($simpananpokok, -2);
        // Besar Angsuran setiap bulan
        // Biaya Jasa Setiap transaksi pembayaran
        $bsr_jasa          = (($data_inputan['pokok_pinjaman'] * $cek_ap['jasa'] / 100) / $cek_ap['tempo']) + $tambahan;
        // Biaya yang harus di bayar
        $bsr_angsuran      = $bsr_pokok + $bsr_simpanan + $bsr_jasa;
        // Total Pembayaran sampai lunas
        $ttl_bayar         = $bsr_angsuran * $cek_ap['tempo'];
        $detail_kontrak = array(
            'id'              => $nomor_kontrak,
            'anggota_id'      => $anggota_id,
            'aturan_id'       => $cek_ap['id'],
            'pokok_pinjaman'  => $data_inputan['pokok_pinjaman'],
            'bsr_admin'       => $pot_admin,
            'bsr_rk'          => $pot_rk,
            'bsr_pokok'       => $bsr_pokok,
            'bsr_simpanan'    => $bsr_simpanan,
            'bsr_jasa'        => $bsr_jasa,
            'bsr_angsuran'    => $bsr_angsuran,
            'tempo_pinjaman'  => $cek_ap['tempo'],
            'ttl_bayar'       => $ttl_bayar,
            'status_kontrak'  => 'KONFIRMASI',
            'login_id'        => $data_inputan['login_id']
        );
        return $detail_kontrak;
    }
    private function _dataUbahKontrak()
    {
        $cek_ap             = $this->db->get_where('p_koperasi_aturan', ['produk_id' => htmlspecialchars($this->input->post('produk_id'))])->row_array();
        $nomor_kontrak      = htmlspecialchars($this->input->post('kontrak_id'));
        // Potongan Awal saat pencairan
        $pot_admin          = htmlspecialchars($this->input->post('pokok_pinjaman')) * $cek_ap['administrasi'] / 100;
        $pot_rk             = htmlspecialchars($this->input->post('pokok_pinjaman')) * $cek_ap['rk'] / 100;
        // Besaran Pokok Setiap kali Pembayaran
        $pokok_angsuran    = htmlspecialchars($this->input->post('pokok_pinjaman')) / $cek_ap['tempo'];
        $pokokangsuran     = ceil($pokok_angsuran);
        $bsr_pokok         = round($pokokangsuran, -2);
        // Simpanan atau tabungan setiap pembayaran
        $b_simpanan        = (htmlspecialchars($this->input->post('pokok_pinjaman')) * $cek_ap['simpanan'] / 100) / $cek_ap['tempo'];
        $simpananpokok     = ceil($b_simpanan);
        $bsr_simpanan      = round($simpananpokok, -2);
        // Besar Angsuran setiap bulan
        // Biaya Jasa Setiap transaksi pembayaran
        $bsr_jasa          = (htmlspecialchars($this->input->post('pokok_pinjaman')) * $cek_ap['jasa'] / 100) / $cek_ap['tempo'];
        // Biaya yang harus di bayar
        $bsr_angsuran      = $bsr_pokok + $bsr_simpanan + $bsr_jasa;
        // Total Pembayaran sampai lunas
        $ttl_bayar         = $bsr_angsuran * $cek_ap['tempo'];
        $detail_kontrak = array(
            'aturan_id'       => $cek_ap['id'],
            'pokok_pinjaman'  => htmlspecialchars($this->input->post('pokok_pinjaman')),
            'bsr_admin'       => $pot_admin,
            'bsr_rk'          => $pot_rk,
            'bsr_pokok'       => $bsr_pokok,
            'bsr_simpanan'    => $bsr_simpanan,
            'bsr_jasa'        => $bsr_jasa,
            'bsr_angsuran'    => $bsr_angsuran,
            'tempo_pinjaman'  => $cek_ap['tempo'],
            'ttl_bayar'       => $ttl_bayar
        );
        $this->db->where('id', $nomor_kontrak);
        $this->db->update('p_koperasi_kontrak', $detail_kontrak);
    }
    // Validasi KTP
    private function _cekKTPAnggota($data_inputan)
    {
        $nik = $data_inputan['nik'];
        // Cek Apakah 16 karakter
        $hitung_nik      = strlen($nik);
        if ($hitung_nik != 16) :
            $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">NIK Harus 16 Karakter!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
    }
    // Validasi Inputan Combo Box
    private function _validasiComboBox($data_inputan)
    {
        if ($data_inputan['jk'] == 'ok') :
            $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Jenis Kelamin Harus Di Isi!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        if ($data_inputan['nm_rt'] == 'ok') :
            $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Kolom RT Harus Diisi!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
        if ($data_inputan['nm_rw'] == 'ok') :
            $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Kolom RW Harus Diisi!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
    }
    private function _validasiNomorHP($data_inputan)
    {
        $cek_nomor = $this->db->get_where('anggota', ['no_hp' => $data_inputan['no_hp'], 'nik' => $data_inputan['nik']])->row_array();
        if ($cek_nomor == NULL) :
            $cek_nomor_hp = $this->db->get_where('anggota', ['no_hp' => $data_inputan['no_hp']])->row_array();
            if ($cek_nomor_hp > 0) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor HP Sudah Di Gunakan Anggota Lain!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            endif;
            $cek_nomor_cadangan = $this->db->get_where('anggota_hp_cadangan', ['no_hp' => $data_inputan['no_hp']])->row_array();
            if ($cek_nomor_cadangan > 0) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor HP Sudah Di Gunakan Anggota Lain!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            endif;
        endif;
    }
    private function _cekDataAlamat($data_inputan)
    {
        $cek_alamat = $this->db->get_where('sistem_alamat', ['nm_desa' => $data_inputan['nm_desa'], 'nm_kecamatan' => $data_inputan['nm_kecamatan'], 'kot_kab' => $data_inputan['kot_kab']])->row_array();
        if ($cek_alamat > 0) :
            $alamat_id = $cek_alamat['id'];
            return $alamat_id;
        else :
            $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Alamat Tidak Tersedia, Hubungi Developer!</div>');
            redirect('marketing/kegiatan/pengajuan_pinjaman');
        endif;
    }
    // Validasi inputan ubah detail anggota peminjam
    private function vInputan()
    {
        // Cek NIK
        if (htmlspecialchars($this->input->post('nik_anggota')) == htmlspecialchars($this->input->post('nik_anggota_baru'))) :
            $nik = htmlspecialchars($this->input->post('nik_anggota'));
        else :
            $cek_nik = $this->db->get_where('anggota', ['nik' => htmlspecialchars($this->input->post('nik_anggota_baru'))])->row_array();
            if ($cek_nik > 0) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">NIK Sudah Terdaftar di Anggota Lain!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            else :
                $nik = htmlspecialchars($this->input->post('nik_anggota_baru'));
            endif;;
        endif;
        // Cek KK
        $cek_kk = $this->db->get_where('anggota_keluarga', ['nomor_kk' => htmlspecialchars($this->input->post('nomor_kk_baru'))])->row_array();
        if ($cek_kk > 0) :
            $anggota_id = $cek_kk['anggota_id'];
            if ($anggota_id != htmlspecialchars($this->input->post('anggota_id'))) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor KK Sudah Terdaftar di Anggota Lain!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            else :
                $no_kk = htmlspecialchars($this->input->post('nomor_kk_baru'));
            endif;;
        else :
            $no_kk = htmlspecialchars($this->input->post('nomor_kk_baru'));
        endif;
        // Cek HP
        $cek_hp = $this->db->get_where('anggota', ['no_hp' => htmlspecialchars($this->input->post('no_hp'))])->row_array();
        if ($cek_hp > 0) :
            if ($cek_hp['id'] != htmlspecialchars($this->input->post('anggota_id'))) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor HP Sudah Terdaftar di Anggota Lain!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            else :
                $no_hp = htmlspecialchars($this->input->post('no_hp'));
            endif;
        else :
            $no_hp = htmlspecialchars($this->input->post('no_hp'));
        endif;
        // Validasi Selesai
        $data_validasi = array(
            'nik'   => $nik,
            'no_kk' => $no_kk,
            'no_hp' => $no_hp
        );
        return $data_validasi;
    }
    // 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();
        $data_invoice          = $this->db->get_where('anggota', ['id' => $cek_kontrak['anggota_id']])->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);
        // $this->load->view('document/nota/nota_terima_pencairan', $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 . '/';
        if (!is_dir($lokasi_file))
            mkdir($lokasi_file, 0777, TRUE);
        // Membuat File Baru
        $isi_index = $this->_membuatFileBaruIndex();
        $index_file = $lokasi_file . 'index.html';
        if (!file_exists($index_file)) {
            file_put_contents($index_file, $isi_index);
        }
        $this->pdfgenerator->generate_bukti_terima_pencairan($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';
        $this->whatappsnotif->notifWABuktiSetorAsli($nama_file, $lokasi_file, $data_invoice, $nomor_kontrak);
        // $this->_notifWABuktiSetorAsli($nama_file, $lokasi_file, $data_invoice, $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');
        // Membuat Folder baru
        $lokasi_file = 'assets/invoice/kas_umum/' . $tahun . '/' . $bulan . '/';
        if (!is_dir($lokasi_file))
            mkdir($lokasi_file, 0777, TRUE);
        // Membuat File Baru
        $isi_index = $this->_membuatFileBaruIndex();
        $index_file = $lokasi_file . 'index.html';
        if (!file_exists($index_file)) {
            file_put_contents($index_file, $isi_index);
        }
        // run dompdf
        $this->pdfgenerator->generate_bukti_omset_pencairan($html, $file_pdf, $paper, $lokasi_file, $orientation);
        $nama_file = $file_pdf . '.pdf';
        $this->insert_model->omsetPencairanKasMasuk($nama_file, $cek_kontrak, $cek_aturan);
    }
    // Membuat File Index
    private function _membuatFileBaruIndex()
    {
        $isi_index = <<<HTML
        <!DOCTYPE html>
        <html>
        <head>
            <title>403 Forbidden</title>
        </head>
        <body>
        <p>Directory access is forbidden.</p>
        </body>
        </html>
        HTML;
        return $isi_index;
    }
    private function vInputan2($data_validasi = [])
    {
        $result = [];

        // NIK
        if (isset($data_validasi['nik'])) {
            $cek_nik = $this->db->get_where('anggota', ['nik' => $data_validasi['nik']])->row_array();
            if ($cek_nik) {
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">NIK Sudah Terdaftar di Anggota Lain!</div>');
                redirect('marketing/kegiatan/pengajuan_pinjaman');
            } else {
                $result['nik'] = $data_validasi['nik'];
            }
        } else {
            $result['nik'] = htmlspecialchars($this->input->post('nik_anggota'));
        }

        // KK
        if (isset($data_validasi['kk'])) {
            $cek_kk = $this->db->get_where('anggota_keluarga', ['nomor_kk' => $data_validasi['kk']])->row_array();
            if ($cek_kk) {
                if ($cek_kk['anggota_id'] != htmlspecialchars($this->input->post('anggota_id'))) {
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor KK Sudah Terdaftar di Anggota Lain!</div>');
                    redirect('marketing/kegiatan/pengajuan_pinjaman');
                } else {
                    $result['no_kk'] = $data_validasi['kk'];
                }
            } else {
                $result['no_kk'] = $data_validasi['kk'];
            }
        } else {
            $result['no_kk'] = htmlspecialchars($this->input->post('nomor_kk'));
        }

        // No HP
        if (isset($data_validasi['no_hp'])) {
            $cek_hp = $this->db->get_where('anggota', ['no_hp' => $data_validasi['no_hp']])->row_array();
            if ($cek_hp) {
                if ($cek_hp['id'] != htmlspecialchars($this->input->post('anggota_id'))) {
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor HP Sudah Terdaftar di Anggota Lain!</div>');
                    redirect('marketing/kegiatan/pengajuan_pinjaman');
                } else {
                    $result['no_hp'] = $data_validasi['no_hp'];
                }
            } else {
                $result['no_hp'] = $data_validasi['no_hp'];
            }
        } else {
            $result['no_hp'] = htmlspecialchars($this->input->post('no_hp_lama'));
        }

        return $result;
    }
}

/* End of file ControllerPengajuanPinjaman.php and path \application\controllers\marketing\kegiatan\ControllerPengajuanPinjaman.php */