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

class ControllerBeranda 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->library('WhatAppsNotif');
        $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_kotkab              = $this->select_model->vd_kotkab();
        // Data Konten
        // Koperasi
        $verifikasi_angsuran      = $this->select_model->vd_verifTransaksiKoperasi();
        $jenis_pinjaman           = $this->select_model->vd_jenisPinjamanAktif();
        $pinjaman_aktif           = $this->select_model->vd_PinjamanAktif();
        $data_transaksi_koperasi      = $this->select_model->vd_transaksiKoperasiBulanan();
        // Arisan
        $data_tagihan                 = $this->select_model->getSemuaVerifikasiArisan(); // Menampilkan table tagihan yang status BELUM
        // echo '<pre>';
        // var_dump($verifikasi_angsuran);
        // die;
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'folder'              => 'beranda',
            'page'                => 'index',
            'judul'               => 'Beranda Kasir || Bagian Kasir',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            'notif'               => $notif,
            'data_kota'           => $data_kotkab,
            // Data Konten
            // Verifikasi Data Angsuran Pinjaman
            'jenis_pinjaman'      => $jenis_pinjaman,
            'verifikasi_angsuran' => $verifikasi_angsuran,
            'pinjaman_aktif'      => $pinjaman_aktif,
            'transaksi_koperasi'  => $data_transaksi_koperasi,
            // Verifikasi Data Angsuran / Iuran Arisan
            'pengajuan_verif'     => $data_tagihan
        );
        $this->load->view('kasir/index', $data);
    }
    // Bagian Verifikasi
    // Verifikasi Pembayaran Pinjaman Koperasi / Angsuran
    public function verifikasi_angsuran($id)
    {
        $kd_nota          = $this->encrypt->decode($id);
        $kd_invoice       = $kd_nota;
        $data_invoice     = $this->db->get_where('nota', ['id' => $kd_nota])->row_array();
        $rinci_nota       = $this->select_model->getDataInvoiceRinciAngsuran($kd_invoice);
        $cek_data_kontrak = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $data_invoice['anggota_id'], 'status_kontrak' => 'AKTIF'])->row_array();
        $data_kontrak     = $this->db->get_where('p_koperasi_kontrak', ['id' => $cek_data_kontrak['id']])->row_array();
        $jml_bayar        = count($this->select_model->get_vdAngsuranBayar($data_kontrak)) + 1;
        $tahun = date('Y', strtotime($data_invoice['tgl_pembayaran']));
        $bulan = date('m', strtotime($data_invoice['tgl_pembayaran']));
        // Melihat Produk ID
        if ($data_invoice['produk_id'] == 121) :
            $lokasi_file = 'assets/invoice/koperasi_mingguan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 122) :
            $lokasi_file = 'assets/invoice/koperasi_dua_mingguan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 123) :
            $lokasi_file = 'assets/invoice/koperasi_bulanan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 124) :
            $lokasi_file = 'assets/invoice/koperasi_musiman/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 125) :
            $lokasi_file = 'assets/invoice/anggota_bulanan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 126) :
            $lokasi_file = 'assets/invoice/karyawan_bulanan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        endif;
        unlink($lokasi_file);
        $data_invoice_baru = array(
            'status_nota' => 'TERIMA',
            'kasir'       => $this->session->userdata('isloggedin')
        );
        $this->db->where('id', $kd_nota);
        $this->db->update('nota', $data_invoice_baru);
        // SImpanan Koperasi
        $produk           = $this->db->get_where('p_koperasi_aturan', ['id' => $cek_data_kontrak['aturan_id']])->row_array();
        $this->_simpananKoperasi($rinci_nota, $produk, $data_kontrak, $data_invoice);
        if ($cek_data_kontrak['tempo_pinjaman'] == $jml_bayar) :
            $jml_macet    = count($this->db->get_where('p_koperasi_angsuran', ['kontrak_id' => $cek_data_kontrak['id'], 'status_angsuran' => 'LUNAS_MACET'])->result());
            if ($jml_macet >= 4) :
                $data_kontrak_baru = array(
                    'status_kontrak' => 'LUNAS_MACET'
                );
                $this->db->where('id', $cek_data_kontrak['id']);
                $this->db->update('p_koperasi_kontrak', $data_kontrak_baru);
            else :
                $data_kontrak_baru = array(
                    'status_kontrak' => 'LUNAS_LANCAR'
                );
                $this->db->where('id', $cek_data_kontrak['id']);
                $this->db->update('p_koperasi_kontrak', $data_kontrak_baru);
            endif;
            $this->_cetakTandaTerimaKasirLunas($kd_nota, $data_invoice);
        else :
            $this->_cetakTandaTerimaKasir($kd_nota, $data_invoice);
        endif;
        $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Verifikasi Tagihan Arisan!</div>');
        redirect('kasir');
    }
    // Bagian Create Read Update Delete data
    // Bagian Pengajuan
    public function crud_pengajuan()
    {
        // Menambahkan data pengajuan Pinjaman
        if (isset($_POST['simpanPengajuanPinjaman'])) :
            // Mengelompokkan data inputan
            $data_inputan       = $this->_dataInputanAnggotaKoperasi(); // Kelompok data inputan
            $alamat_id          = $this->_cekDataAlamat($data_inputan); // Cek data alamat inputan
            $data_anggota       = $this->db->get_where('anggota', ['nik' => $data_inputan['nik']])->row_array(); // Ada anggota di database
            // Cek apakah data anggota ada?
            if ($data_anggota > 0) :
                // Jika jawabannya ada anggota
                // Sudah Melakukan Pengajuan Pinjaman
                $anggota_id = $data_anggota['id']; // Membuat objek Anggota ID
                // Data Pengajuan atau Pinjaman Aktif
                // Pengajuan Pinjaman 
                $data_kasir = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'KASIR'])->row_array();
                // Cek Apakah anggota sudah pernah mengajukan pinjaman dan belum ada konfirmasi dari koperasi
                if ($data_kasir > 0) :
                    // Jika sudah pernah hubungi marketing yang pernah di tunjuk sebagai perantara pengajuan
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Sudah Melakukan Pengajuan Pinjaman!</div>');
                    redirect('kasir');
                endif;
                // Pengajuan Pinjaman
                $data_survey = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'SURVEY'])->row_array();
                // Cek Apakah anggota sudah pernah mengajukan pinjaman dan belum ada konfirmasi dari koperasi
                if ($data_survey > 0) :
                    // Jika sudah pernah hubungi marketing yang pernah di tunjuk sebagai perantara pengajuan
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Sudah Melakukan Pengajuan Pinjaman!</div>');
                    redirect('kasir');
                endif;
                // Pengajuan Pinjaman
                $data_pengajuan = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'KONFIRMASI'])->row_array();
                // Cek Apakah anggota sudah pernah mengajukan pinjaman dan belum ada konfirmasi dari koperasi
                if ($data_pengajuan > 0) :
                    // Jika sudah pernah hubungi marketing yang pernah di tunjuk sebagai perantara pengajuan
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Sudah Melakukan Pengajuan Pinjaman!</div>');
                    redirect('kasir');
                endif;
                // Menunggu Konfirmasi Mas Bowo pengajuan Pinjaman 
                $data_terima = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'TERIMA'])->row_array();
                // Cek Apakah Menunggu Untuk Melakukan Pencairan Pinjaman
                if ($data_terima > 0) :
                    // Jika Jawabannya iya, maka anggota tinggal menunggu untuk pencairan data dari marketing
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Menunggu Untuk Melakukan Pencairan Pinjaman!</div>');
                    redirect('kasir');
                endif;
                // Data Pinjaman Aktif
                $data_aktif = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'AKTIF'])->row_array();
                // Cek Apakah Anggota Ada Pinjaman Aktif
                if ($data_aktif > 0) :
                    // Jika ada pinjaman
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Masih Ada Pinjaman Aktif!</div>');
                    redirect('kasir');
                endif;
                // Data Pinjaman Aktif namun Macet
                // Cek Apakah Anggota Ada Pinjaman Aktif yang Macet
                $data_macet = $this->db->get_where('p_koperasi_kontrak', ['anggota_id' => $anggota_id, 'status_kontrak' => 'MACET'])->row_array();
                if ($data_macet > 0) :
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Masih Ada Pinjaman Aktif!</div>');
                    redirect('kasir');
                endif;
            else :
                // Jika jawaban tidak ada data anggota di database
                // Cek KTP Anggota
                $this->_cekKTPAnggota($data_inputan); // KTP NIK sudah digunakan atau belum
                $this->_validasiComboBox($data_inputan); // Validasi Jenis Kelamin dan RT RW
                $this->_validasiNomorHP($data_inputan); // Validasi Nomor HP Utama dan Cadangan
                // Menyimpan data anggota baru
                $anggota_id = $this->insert_model->simpanDataPengajuanKoperasi($data_inputan, $alamat_id); // Menyimpan data anggota baru
                $this->update_model->menambahFotoKKAnggota($anggota_id); // Menambahkan Foto KK
            endif;
            // Selesai Mengkonfirmasi data diri atau identitas
            // Mulai berhubungan dengan Kontrak Pinjaman
            $kd_produk          = $data_inputan['produk_id'];
            if ($kd_produk == 121) :
                $detail_kontrak = $this->_dataIdentitasPinjamanMingguan($data_inputan, $anggota_id);
                $this->insert_model->tambahPengajuanPinjamanMingguan($detail_kontrak);
            elseif ($kd_produk == 122) :
                $detail_kontrak = $this->_dataIdentitasPinjamanMingguan($data_inputan, $anggota_id);
                $this->insert_model->tambahPengajuanPinjamanMingguan($detail_kontrak);
            elseif ($kd_produk == 124) :
                $detail_kontrak = $this->_dataIdentitasPinjamanMusiman($data_inputan, $anggota_id);
                $this->insert_model->tambahPengajuanPinjamanMusiman($detail_kontrak);
            else :
                $detail_kontrak = $this->_dataIdentitasPinjaman($data_inputan, $anggota_id);
                $this->insert_model->tambahPengajuanPinjaman($detail_kontrak);
            endif;
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Mengajukan Pinjaman!</div>');
            redirect('kasir');
        endif;
    }
    public function verifikasi_motor($id)
    {
        $kd_invoice      = $this->encrypt->decode($id);
        $data_invoice    = $this->select_model->getDataInvoice($kd_invoice);
        $produk_id       = $data_invoice['produk_id'];
        // Nama Marketing
        $this->update_model->vnota_arisan($kd_invoice);
        $this->_cetakInvoice($kd_invoice, $produk_id);
        $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Verifikasi Pembayaran!</div>');
        redirect('kasir');
    }
    // Bagian Pembayaran
    public function crud_pembayaran()
    {
        // Pembayaran Angsuran Pinjaman Reguler
        if (isset($_POST['simpanBayarAngsuranPinjaman'])) :
            // Data inputan identitas pinjaman angsuran
            $data_identitas = $this->_dataAngsuranAnggotaIdentitas();
            // Cek Data Angsuran
            $data_kontrak   = $this->select_model->vd_kontrakBeranda($data_identitas);
            // Cek Apakah pembayaran ini pembayaran terakhir atau bukan
            if ($data_kontrak['angs_ke'] == $data_kontrak['tempo_pinjaman']) :
                // Jika Benar Maka Masuk Ke Pelunasan Reguler
                $this->_bayarAngsuranRegulerLunas($data_kontrak);
            else:
                // Jika Salah Masuk ke pembayaran reguler
                $this->_bayarAngsuranReguler($data_kontrak);
            endif;
        endif;
        // Pembayaran Angsuran Pinjaman Lunas
        if (isset($_POST['simpanBayarLunasAngsuranBeranda'])) :
            $kontrak_id     = htmlspecialchars($this->input->post('kontrak_id_lunas'));
            $data_kontrak   = $this->db->get_where('p_koperasi_kontrak', ['id' => $kontrak_id])->row_array();
            $produk         = $this->db->get_where('p_koperasi_aturan', ['id' => $data_kontrak['aturan_id']])->row_array();
            // Cek Apakah dia Angsuran Bulanan atau tidak
            if ($data_kontrak['aturan_id'] == 3) :
                $diskon_data = array(
                    'bsr_bayar' => $data_kontrak['bsr_pokok'],
                    'bsr_jasa'  => 0,
                    'bsr_simpanan'  => 0
                );
                $this->db->where('kontrak_id', $kontrak_id);
                $this->db->where('status_angsuran', 'BELUM');
                $this->db->update('p_koperasi_angsuran', $diskon_data);
            elseif ($data_kontrak['aturan_id'] == 5):
                $diskon_data = array(
                    'bsr_bayar' => $data_kontrak['bsr_pokok'],
                    'bsr_jasa'  => 0,
                    'bsr_simpanan'  => 0
                );
                $this->db->where('kontrak_id', $kontrak_id);
                $this->db->where('status_angsuran', 'BELUM');
                $this->db->update('p_koperasi_angsuran', $diskon_data);
            elseif ($data_kontrak['aturan_id'] == 6):
                $diskon_data = array(
                    'bsr_bayar' => $data_kontrak['bsr_pokok'],
                    'bsr_jasa'  => 0,
                    'bsr_simpanan'  => 0
                );
                $this->db->where('kontrak_id', $kontrak_id);
                $this->db->where('status_angsuran', 'BELUM');
                $this->db->update('p_koperasi_angsuran', $diskon_data);
            elseif ($data_kontrak['aturan_id'] == 4):
                // Cari selisih bulan
                $data_angsuran = $this->db->get_where('p_koperasi_angsuran', ['kontrak_id' => $kontrak_id])->row_array();
                $tgl_ini      = date_create();
                $tempo        = date_create($data_angsuran['tgl_tempo']);
                $selisih      = date_diff($tgl_ini, $tempo);
                $tempo        = $data_kontrak['tempo_pinjaman'];
                // Hitungan Bulanan
                $bsr_jasa     = $data_kontrak['bsr_jasa'] / $tempo;
                $bsr_simpanan = $data_kontrak['bsr_simpanan'] / $tempo;
                $bsr_admin    = $bsr_jasa + $bsr_simpanan;
                $total_jasa   = (($tempo - $selisih->m) * $bsr_admin);
                $bsr_bayar    = $total_jasa + $data_kontrak['bsr_pokok'];
                $diskon_data = array(
                    'bsr_bayar'     => $bsr_bayar,
                    'bsr_jasa'      => $bsr_jasa * $selisih->m,
                    'bsr_simpanan'  => $bsr_simpanan * $selisih->m
                );
                $this->db->where('kontrak_id', $kontrak_id);
                $this->db->where('status_angsuran', 'BELUM');
                $this->db->update('p_koperasi_angsuran', $diskon_data);
            endif;
            if ($data_kontrak['status_kontrak'] == 'AKTIF') :
                //    Cek Apakah kontrak masih aktif atau tidak
                $data_aturan    = $this->db->get_where('p_koperasi_aturan', ['id' => $data_kontrak['aturan_id']])->row_array();
                $data_anggota   = $this->db->get_where('anggota', ['id' => $data_kontrak['anggota_id']])->row_array();
                // Data Angsuran & Tunggakan
                $data_angsuran  = $this->select_model->vd_DataAngsuranKontrak($kontrak_id);
                $data_tunggakan = $this->select_model->vd_DataTunggakanKontrak($kontrak_id);
                // Nomor Invoice atau Nota ID
                $nomor_invoice  = $data_aturan['produk_id'] . $data_kontrak['id'] . date('ymdhis');
                // Menambahkan Nota
                $total_tunggakan = htmlentities($this->input->post('bayar_tunggakan'));
                $total_angsuran  = $this->select_model->vd_TotalDataAngsuranKontrak($kontrak_id);
                $total_tunggakan = $this->select_model->vd_TotalDataTunggakanKontrak($kontrak_id);
                $this->insert_model->simpanBayarLunasAngsuranBeranda($total_angsuran, $total_tunggakan, $nomor_invoice, $kontrak_id, $data_kontrak, $data_aturan, $data_angsuran, $data_tunggakan);
                $kd_nota        = $nomor_invoice;
                $data_invoice   = $this->db->get_where('nota', ['id' => $kd_nota])->row_array();
                // Membuat Nota PDF
                $this->_cetakTandaTerimaKasirLunas($kd_nota, $data_invoice);
                $kd_invoice   = $kd_nota;
                $rinci_nota   = $this->select_model->getDataInvoiceRinciAngsuran($kd_invoice);
                $this->_simpananKoperasi($rinci_nota, $produk, $data_kontrak, $data_invoice);
                $cek_option = $this->db->get_where('sistem_option')->row_array();
                $this->whatappsnotif->notifWABuktiSetorKasirLunas($data_kontrak, $cek_option, $data_anggota);
                $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Bayar Lunas Angsuran!</div>');
            else :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor Kontrak Tidak di Temukan atau Sudah Lunas!</div>');
            endif;
            redirect('kasir');
        endif;
    }
    // Private Function
    // Bagian 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')),
            'kode_pos'       => htmlspecialchars($this->input->post('tambah_kode_pos')),
            '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,
            'foto_ktp'       => htmlspecialchars($this->input->post('foto_ktp')),
            'produk_id'      => htmlspecialchars($this->input->post('produk_id')),
            'pokok_pinjaman' => htmlspecialchars($this->input->post('pokok_pinjaman'))
        );
        return $data_inputan;
    }
    // Cek Alamat
    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('kasir');
        endif;
    }
    // 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('kasir');
        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('kasir');
        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('kasir');
        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('kasir');
        endif;
    }
    // Validasi Nomor HP
    private function _validasiNomorHP($data_inputan)
    {
        $cek_nomor = $this->db->get_where('anggota', ['no_hp' => $data_inputan['no_hp']])->row_array();
        if ($cek_nomor > 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('kasir');
        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('kasir');
        endif;
    }
    // Identitas Kontrak Pinjaman Mingguan
    private function _dataIdentitasPinjamanMingguan($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'  => 'KASIR'
        );
        return $detail_kontrak;
    }
    // Identitas Kontrak Musiman dan Bulanan
    private function _dataIdentitasPinjamanMusiman($data_inputan, $anggota_id)
    {
        $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');
        $lama_pinjaman      = htmlentities($this->input->post('lama_pinjaman'));
        // 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'];
        $pokokangsuran     = ceil($pokok_angsuran);
        $bsr_pokok         = round($pokokangsuran, -2);
        // Simpanan atau tabungan setiap pembayaran
        $b_simpanan        = ($data_inputan['pokok_pinjaman'] * $cek_ap['simpanan'] / 100) * $lama_pinjaman;
        $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) * $lama_pinjaman);
        // Biaya yang harus di bayar
        $bsr_angsuran      = $bsr_pokok + $bsr_simpanan + $bsr_jasa;
        // Total Pembayaran sampai lunas
        $ttl_bayar         = $bsr_angsuran;
        $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'       => $data_inputan['pokok_pinjaman'],
            'bsr_simpanan'    => $bsr_simpanan,
            'bsr_jasa'        => $bsr_jasa,
            'bsr_angsuran'    => $ttl_bayar,
            'tempo_pinjaman'  => $lama_pinjaman,
            'ttl_bayar'       => $ttl_bayar,
            'status_kontrak'  => 'KASIR'
        );
        return $detail_kontrak;
    }
    // Private function
    private function _cetakInvoice($kd_invoice, $produk_id)
    {
        $data_invoice          = $this->select_model->getDataInvoice($kd_invoice); // DONE
        $data_rinci            = $this->select_model->getDataInvoiceRinci($kd_invoice);
        $tahun = date('Y', strtotime($data_invoice['tgl_pembayaran']));
        $bulan = date('m', strtotime($data_invoice['tgl_pembayaran']));
        $berkas_lama = 'assets/invoice/arisan_motor/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        unlink($berkas_lama);
        // Data Login
        $data_login            = $this->userlogin->user_login();
        $data_id_login         = $this->session->userdata('isloggedin');
        // Nama Marketing
        $data_marketing        = $this->select_model->getDataMarketing($kd_invoice);
        $data_kasir            = $this->select_model->getDataKasir($kd_invoice);
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'title_pdf'           => 'Invoice Pembayaran Arisan Heboh',
            'folder'              => 'arisan/heboh',
            'page'                => 'index',
            'judul'               => 'Kelola Bayar Arisan Heboh || Bagian Kasir',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            // Data isi konten
            'data_invoice'        => $data_invoice,
            'data_rinci'          => $data_rinci,
            'data_marketing'      => $data_marketing,
            'data_kasir'          => $data_kasir
        );
        // filename dari pdf ketika didownload
        $file_pdf = 'invoice_' . $kd_invoice;
        // setting paper
        $paper = 'A5';
        //orientasi paper potrait / landscape
        $orientation = "landscape";
        $html = $this->load->view('document/nota/nota_bayar_arisan_kasir', $data, true);
        // run dompdf
        if ($produk_id == 21) :
            $lokasi_file = 'assets/invoice/arisan_heboh/' . $tahun . '/' . $bulan . '/';
        else :
            $lokasi_file = 'assets/invoice/arisan_motor/' . $tahun . '/' . $bulan . '/';
        endif;
        $this->pdfgenerator->generate($html, $file_pdf, $paper, $lokasi_file, $orientation);
        $data_update22     = array(
            'invoice_pdf' => $file_pdf . '.pdf'
        );
        $this->db->where('id', $kd_invoice);
        $this->db->update('nota', $data_update22);
    }
    // Identitas Kontrak Pinjaman
    private function _dataIdentitasPinjaman($data_inputan, $anggota_id)
    {
        $tempo              = htmlspecialchars($this->input->post('lama_pinjaman'));
        $produk_id          = htmlspecialchars($this->input->post('produk_id'));
        if ($produk_id == 124) :
            if ($tempo < 1) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Tempo Bulan Harus Lebih Dari atau Sama Dengan 1 Bulan!</div>');
                redirect('kasir');
            else :
                if ($tempo > 6) :
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Tempo Bulan Harus Kurang Dari atau Sama Dengan 6 Bulan!</div>');
                    redirect('kasir');
                endif;
            endif;
        else :
            if ($tempo < 1) :
                $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Tempo Bulan Harus Lebih Dari atau Sama Dengan 1 Bulan!</div>');
                redirect('kasir');
            else :
                if ($tempo > 24) :
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Tempo Bulan Harus Kurang Dari atau Sama Dengan 6 Bulan!</div>');
                    redirect('kasir');
                endif;
            endif;
        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'] / $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);
        $simpananpokok     = ceil($b_simpanan);
        $bsr_simpanan      = round($simpananpokok, -2);
        // Besar Angsuran setiap bulan
        // Biaya Jasa Setiap transaksi pembayaran
        $bsr_jasa          =  round(ceil(($data_inputan['pokok_pinjaman'] * $cek_ap['jasa'] / 100)), -2);
        // Biaya yang harus di bayar
        $bsr_angsuran      = round($bsr_pokok + $bsr_simpanan + $bsr_jasa, -3);
        // Total Pembayaran sampai lunas
        $ttl_bayar         = $bsr_angsuran * $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'  => $tempo,
            'ttl_bayar'       => $ttl_bayar,
            'status_kontrak'  => 'KASIR'
        );
        return $detail_kontrak;
    }
    // Menambahkan tabungan atau simpanan
    private function _simpananKoperasi($rinci_nota, $produk, $data_kontrak, $data_invoice)
    {
        $tahun = date('Y', strtotime($data_invoice['tgl_pembayaran']));
        $bulan = date('m', strtotime($data_invoice['tgl_pembayaran']));
        // Melihat Produk ID
        if ($data_invoice['produk_id'] == 121) :
            $lokasi_file = 'assets/invoice/koperasi_mingguan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 122) :
            $lokasi_file = 'assets/invoice/koperasi_dua_mingguan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 123) :
            $lokasi_file = 'assets/invoice/koperasi_bulanan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 124) :
            $lokasi_file = 'assets/invoice/koperasi_musiman/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 125) :
            $lokasi_file = 'assets/invoice/anggota_bulanan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        elseif ($data_invoice['produk_id'] == 126) :
            $lokasi_file = 'assets/invoice/karyawan_bulanan/' . $tahun . '/' . $bulan . '/' . $data_invoice['invoice_pdf'] . '';
        endif;
        $no = 1;
        foreach ($rinci_nota as $Rinci_nota) :
            $data_simpanan = array(
                'anggota_id'      => $Rinci_nota->anggota_id,
                'tgl_simpanan'    => date('Y-m-d'),
                'status_simpanan' => 'MASUK',
                'besar_transaksi' => $Rinci_nota->bsr_simpanan,
                'ket_transaksi'   => 'Simpanan ' . $Rinci_nota->kontrak_id . ' angsuran Ke ' . $Rinci_nota->angs_ke
            );
            $this->db->insert('p_simpanan', $data_simpanan);
            $data_nota_omset = array(
                'id'              => date("YmdHis") . 10 . $produk['produk_id'] . $no,
                'produk_id'       => 10,
                'tgl_pembayaran'  => date('Y-m-d'),
                'qty_pembayaran'  => 1,
                'ttl_bayar'       => $Rinci_nota->bsr_jasa,
                'status_kas'      => 'OMSET',
                'status_nota'     => 'TERIMA',
                'petugas'         => $data_kontrak['login_id'],
                'kasir'           => $this->session->userdata('isloggedin'),
                'ket_nota'        => 'Jasa Pinjaman ' . $Rinci_nota->nm_anggota . ' ' . $Rinci_nota->kontrak_id . ' angsuran Ke ' . $Rinci_nota->angs_ke,
                'invoice_pdf'     => $lokasi_file
            );
            $this->db->insert('nota', $data_nota_omset);
            if ($Rinci_nota->status_angsuran == 'MACET') :
                $data_angsuran = array(
                    'status_angsuran' => 'LUNAS_MACET',
                    'update_at' => date('Y-m-d H:i:s')
                );
                $this->db->where('id', $Rinci_nota->angsuran_id);
                $this->db->update('p_koperasi_angsuran', $data_angsuran);
            else :
                $data_angsuran = array(
                    'status_angsuran' => 'LUNAS_LANCAR',
                    'update_at' => date('Y-m-d H:i:s')
                );
                $this->db->where('id', $Rinci_nota->angsuran_id);
                $this->db->update('p_koperasi_angsuran', $data_angsuran);
            endif;
            $no++;
        endforeach;
    }
    // Mencetak dan menyimpanan tanda bukti terima dari kasir status lunas tagihan
    private function _cetakTandaTerimaKasirLunas($kd_nota, $data_invoice)
    {
        $kd_invoice            = $kd_nota;
        $data_invoice          = $this->select_model->getDataInvoice($kd_invoice); // DONE
        $data_rinci            = $this->select_model->getDataInvoiceRinciAngsuran($kd_invoice);
        // Detail data nota
        $data_marketing = $this->db->get_where('sistem_login', ['id' => $data_invoice['petugas']])->row_array();
        $data_kasir = $this->db->get_where('sistem_login', ['id' => $data_invoice['kasir']])->row_array();
        // End data nota
        $data = array(
            // Data isi konten
            'data_invoice'        => $data_invoice,
            'data_rinci'          => $data_rinci,
            'data_marketing'      => $data_marketing,
            'data_kasir'          => $data_kasir
        );
        // filename dari pdf ketika didownload
        $file_pdf = $data_invoice['invoice_pdf'];
        // 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_pinjaman_koperasi_kasir_lunas', $data, true);
        $tahun = date('Y', strtotime($data_invoice['tgl_pembayaran']));
        $bulan = date('m', strtotime($data_invoice['tgl_pembayaran']));
        // run dompdf
        if ($data_invoice['produk_id'] == 121) :
            $lokasi_file = 'assets/invoice/koperasi_mingguan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 122) :
            $lokasi_file = 'assets/invoice/koperasi_dua_mingguan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 123) :
            $lokasi_file = 'assets/invoice/koperasi_bulanan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 124) :
            $lokasi_file = 'assets/invoice/koperasi_musiman/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 125) :
            $lokasi_file = 'assets/invoice/anggota_bulanan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 126) :
            $lokasi_file = 'assets/invoice/karyawan_bulanan/' . $tahun . '/' . $bulan . '/';
        endif;
        // Cek apakah ada folder di lokasi tersebut
        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_kasir($html, $file_pdf, $paper, $lokasi_file, $orientation);
    }
    // Mencetak dan menyimpanan tanda bukti terima dari kasir
    private function _cetakTandaTerimaKasir($kd_nota, $data_invoice)
    {
        $kd_invoice            = $kd_nota;
        $data_invoice          = $this->select_model->getDataInvoice($kd_invoice); // DONE
        $data_rinci            = $this->select_model->getDataInvoiceRinciAngsuran($kd_invoice);
        // Detail data nota
        $data_marketing = $this->db->get_where('sistem_login', ['id' => $data_invoice['petugas']])->row_array();
        $data_kasir = $this->db->get_where('sistem_login', ['id' => $data_invoice['kasir']])->row_array();
        // End data nota
        $data = array(
            // Data isi konten
            'data_invoice'        => $data_invoice,
            'data_rinci'          => $data_rinci,
            'data_marketing'      => $data_marketing,
            'data_kasir'          => $data_kasir
        );
        // filename dari pdf ketika didownload
        $file_pdf = $data_invoice['invoice_pdf'];
        // 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_pinjaman_koperasi_kasir', $data, true);
        $tahun = date('Y', strtotime($data_invoice['tgl_pembayaran']));
        $bulan = date('m', strtotime($data_invoice['tgl_pembayaran']));
        // run dompdf
        if ($data_invoice['produk_id'] == 121) :
            $lokasi_file = 'assets/invoice/koperasi_mingguan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 122) :
            $lokasi_file = 'assets/invoice/koperasi_dua_mingguan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 123) :
            $lokasi_file = 'assets/invoice/koperasi_bulanan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 124) :
            $lokasi_file = 'assets/invoice/koperasi_musiman/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 125) :
            $lokasi_file = 'assets/invoice/anggota_bulanan/' . $tahun . '/' . $bulan . '/';
        elseif ($data_invoice['produk_id'] == 126) :
            $lokasi_file = 'assets/invoice/karyawan_bulanan/' . $tahun . '/' . $bulan . '/';
        endif;
        // Cek apakah ada folder di lokasi tersebut
        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_kasir($html, $file_pdf, $paper, $lokasi_file, $orientation);
    }
    // Bagian data identitas pembayaran angsuran pinjaman
    private function _dataAngsuranAnggotaIdentitas()
    {
        $data_identitas = array(
            'kontrak_id'      => htmlspecialchars($this->input->post('kontrak_id')),
            'anggota_id'      => htmlspecialchars($this->input->post('anggota_id')),
            'bsr_bayar'       => htmlspecialchars($this->input->post('bsr_bayar')),
            'angs_ke'         => htmlspecialchars($this->input->post('angs_ke')),
            'jml_tunggakan'   => htmlspecialchars($this->input->post('jml_tunggakan')),
            'besar_tunggakan' => htmlspecialchars($this->input->post('besar_tunggakan')),
            'ttl_tunggakan'   => htmlspecialchars($this->input->post('ttl_tunggakan')),
            'ttl_bayar'       => htmlspecialchars($this->input->post('ttl_bayar'))
        );
        return $data_identitas;
    }
    // Bagian Pembayaran angsuran pinjaman reguler
    private function _bayarAngsuranReguler($data_kontrak)
    {
        // Cek apakah nomor kontrak aktif atau tidak
        if ($data_kontrak['status_kontrak'] == 'AKTIF') :
            // Status pinjaman masih aktif
            // Data Anggota
            $data_anggota   = $this->db->get_where('anggota', ['id' => $data_kontrak['anggota_id']])->row_array();
            // Data Aturan / Produk Pinjaman
            $data_aturan   = $this->db->get_where('p_koperasi_aturan', ['id' => $data_kontrak['aturan_id']])->row_array();
            // Membuat Nomor Invoice
            $nomor_invoice = $data_aturan['produk_id'] . $data_kontrak['id'] . date('ymdhis');
            // Menambahkan data pembayaran nota
            $this->insert_model->simpanBayarAngsuranBeranda($nomor_invoice, $data_kontrak, $data_aturan);
            // Data nota yang baru dibuat diatas
            $data_invoice  = $this->db->get_where('nota', ['id' => $nomor_invoice])->row_array();
            // Mencari data petugas dan kasir penerima pembayaran
            $login_sistem  = $this->db->get_where('sistem_login', ['id' => $data_invoice['kasir']])->row_array();
            // Tahun dan Bulan Pembayaran
            $tahun = date('Y', strtotime($data_invoice['tgl_pembayaran']));
            $bulan = date('m', strtotime($data_invoice['tgl_pembayaran']));
            // Menemukan nama file dan membuat lokasi file akan ditambahkan
            if ($data_invoice['produk_id'] == 121) :
                $lokasi_file = 'assets/invoice/koperasi_mingguan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 122) :
                $lokasi_file = 'assets/invoice/koperasi_dua_mingguan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 123) :
                $lokasi_file = 'assets/invoice/koperasi_bulanan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 124) :
                $lokasi_file = 'assets/invoice/koperasi_musiman/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 125) :
                $lokasi_file = 'assets/invoice/anggota_bulanan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 126) :
                $lokasi_file = 'assets/invoice/karyawan_bulanan/' . $tahun . '/' . $bulan . '/';
            endif;
            // Cek apakah ada folder di lokasi tersebut
            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);
            }
            // Konversi Nomor invoice menjadi kd_invoice
            $kd_invoice   = $nomor_invoice;
            $kd_nota = $kd_invoice;
            // Menampilkan rincian nota
            $rinci_nota   = $this->select_model->getDataInvoiceRinciAngsuran($kd_invoice);
            $this->_simpananKoperasiBeranda($rinci_nota, $data_aturan, $data_kontrak, $data_invoice, $lokasi_file);
            $cek_option = $this->db->get_where('sistem_option')->row_array();
            $this->_cetakTandaTerimaKasir($kd_nota, $data_invoice);
            $this->whatappsnotif->notifWABuktiSetorKasir($data_kontrak, $lokasi_file, $cek_option, $data_anggota, $login_sistem);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Bayar Angsuran!</div>');
        else :
            $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor Kontrak Tidak di Temukan atau Sudah Lunas!</div>');
        endif;
        redirect('kasir');
    }
    // Bagian Pembayaran angsuran pinjaman reguler Lunas
    private function _bayarAngsuranRegulerLunas($data_kontrak)
    {
        // Cek apakah nomor kontrak aktif atau tidak
        if ($data_kontrak['status_kontrak'] == 'AKTIF') :
            // Status pinjaman masih aktif
            // Data Anggota
            $data_anggota   = $this->db->get_where('anggota', ['id' => $data_kontrak['anggota_id']])->row_array();
            // Data Aturan / Produk Pinjaman
            $data_aturan   = $this->db->get_where('p_koperasi_aturan', ['id' => $data_kontrak['aturan_id']])->row_array();
            // Membuat Nomor Invoice
            $nomor_invoice = $data_aturan['produk_id'] . $data_kontrak['id'] . date('ymdhis');
            // Menambahkan data pembayaran nota
            $this->insert_model->simpanBayarAngsuranBeranda($nomor_invoice, $data_kontrak, $data_aturan);
            // Data nota yang baru dibuat diatas
            $data_invoice  = $this->db->get_where('nota', ['id' => $nomor_invoice])->row_array();
            // Mencari data petugas dan kasir penerima pembayaran
            $login_sistem  = $this->db->get_where('sistem_login', ['id' => $data_invoice['kasir']])->row_array();
            // Tahun dan Bulan Pembayaran
            $tahun = date('Y', strtotime($data_invoice['tgl_pembayaran']));
            $bulan = date('m', strtotime($data_invoice['tgl_pembayaran']));
            // Menemukan nama file dan membuat lokasi file akan ditambahkan
            if ($data_invoice['produk_id'] == 121) :
                $lokasi_file = 'assets/invoice/koperasi_mingguan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 122) :
                $lokasi_file = 'assets/invoice/koperasi_dua_mingguan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 123) :
                $lokasi_file = 'assets/invoice/koperasi_bulanan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 124) :
                $lokasi_file = 'assets/invoice/koperasi_musiman/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 125) :
                $lokasi_file = 'assets/invoice/anggota_bulanan/' . $tahun . '/' . $bulan . '/';
            elseif ($data_invoice['produk_id'] == 126) :
                $lokasi_file = 'assets/invoice/karyawan_bulanan/' . $tahun . '/' . $bulan . '/';
            endif;
            // Konversi Nomor invoice menjadi kd_invoice
            $kd_invoice   = $nomor_invoice;
            // Menampilkan rincian nota
            $rinci_nota   = $this->select_model->getDataInvoiceRinciAngsuran($kd_invoice);
            $this->_simpananKoperasiBeranda($rinci_nota, $data_aturan, $data_kontrak, $data_invoice, $lokasi_file);
            $cek_option = $this->db->get_where('sistem_option')->row_array();
            // Cek Jumlah Macet Vs Lancar
            $macet  = count($this->db->get_where('p_koperasi_angsuran', ['kontrak_id' => $data_kontrak['kontrak_id'], 'status_angsuran' => 'LUNAS_MACET'])->result());
            $lancar = count($this->db->get_where('p_koperasi_angsuran', ['kontrak_id' => $data_kontrak['kontrak_id'], 'status_angsuran' => 'LUNAS_LANCAR'])->result());
            if ($macet > $lancar) :
                $status_kontrak = 'LUNAS_MACET';
            else:
                $status_kontrak = 'LUNAS_LANCAR';
            endif;
            $data_kontrak_baru = array(
                'status_kontrak' => $status_kontrak
            );
            $this->db->where('id', $data_kontrak['kontrak_id']);
            $this->db->update('p_koperasi_kontrak', $data_kontrak_baru);
            $kd_nota = $nomor_invoice;
            $this->_cetakTandaTerimaKasirLunas($kd_nota, $data_invoice);
            $this->whatappsnotif->notifWABuktiSetorKasirLunas($data_kontrak, $cek_option, $data_anggota);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Bayar Angsuran!</div>');
        else :
            $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nomor Kontrak Tidak di Temukan atau Sudah Lunas!</div>');
        endif;
        redirect('kasir');
    }
    // Menambahkan tabungan atau simpanan
    private function _simpananKoperasiBeranda($rinci_nota, $data_aturan, $data_kontrak, $data_invoice, $lokasi_file)
    {
        foreach ($rinci_nota as $Rinci_nota) :
            $data_nota_omset = array(
                'id'              => date("YmdHis") . 10 . $data_aturan['produk_id'],
                'produk_id'       => 10,
                'tgl_pembayaran'  => date('Y-m-d'),
                'qty_pembayaran'  => 1,
                'ttl_bayar'       => $Rinci_nota->bsr_jasa,
                'status_kas'      => 'OMSET',
                'status_nota'     => 'TERIMA',
                'petugas'         => $data_kontrak['login_id'],
                'kasir'           => $this->session->userdata('isloggedin'),
                'ket_nota'        => 'Jasa Pinjaman ' . $Rinci_nota->nm_anggota . ' ' . $Rinci_nota->kontrak_id . ' angsuran Ke ' . $Rinci_nota->angs_ke,
                'invoice_pdf'     => $lokasi_file . $data_invoice['invoice_pdf']
            );
            $this->db->insert('nota', $data_nota_omset);
            if ($Rinci_nota->status_angsuran == 'MACET') :
                $data_angsuran = array(
                    'status_angsuran' => 'LUNAS_MACET',
                    'update_at' => date('Y-m-d H:i:s')
                );
                $this->db->where('id', $Rinci_nota->angsuran_id);
                $this->db->update('p_koperasi_angsuran', $data_angsuran);
            else :
                $data_angsuran = array(
                    'status_angsuran' => 'LUNAS_LANCAR',
                    'update_at' => date('Y-m-d H:i:s')
                );
                $this->db->where('id', $Rinci_nota->angsuran_id);
                $this->db->update('p_koperasi_angsuran', $data_angsuran);
            endif;
        endforeach;
    }
    // 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;
    }
}

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