<?php

use Dompdf\Positioner\Fixed;

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

class ControllerUndianAktifitas extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();
        check_not_login();
        if ($this->session->userdata('level') != 4) {
            redirect();
        }
        $this->set_timezone();
        $this->load->library('encrypt');
        $this->load->library('form_validation');
        $this->load->library('Mycustom');
        $this->load->library('pdfgenerator');
        $this->load->model('notifikasi_arisan');
        $this->load->model('bagian_arisan/insert_model');
        $this->load->model('bagian_arisan/select_model');
        $this->load->model('bagian_arisan/update_model');
    }
    public function set_timezone()
    {
        date_default_timezone_set("Asia/Jakarta");
    }
    public function proses($id)
    {
        // Notifikasi
        $jml_pengajuan        = count($this->notifikasi_arisan->Notifikasi_pengajuan());
        // End_notifikasi 
        $id_arisan             = $this->encrypt->decode($id);
        $ttl_idArisan          = strlen($this->encrypt->decode($id));
        if ($ttl_idArisan == 7) :
            $cek_jadwalArisan       = $this->db->get_where('p_arisan_jadwal', ['regist_arisan' => $id_arisan, 'status_undian' => 'PROSES'])->row_array();
            if ($cek_jadwalArisan > 0) :
                $regist_arisan          = $id_arisan;
                $undian_ke              = $cek_jadwalArisan['undian_ke'];
            else :
                redirect('arisan/aktifitas/tagihan/kelompok/' . $this->encrypt->encode($id_arisan));
            endif;
        else :
            $regist_arisan            = substr($this->encrypt->decode($id), 0, 7);
            $undian_ke                = substr($this->encrypt->decode($id), 7);
        endif;
        $cek_produk = substr($regist_arisan, 2, 2);
        if ($cek_produk == 22) :
            redirect('arisan/aktifitas/lelang/proses/' . $this->encrypt->encode($regist_arisan));
        endif;
        // Kode Inputan ID
        $jadwal_data            = $this->db->get_where('p_arisan_jadwal', ['regist_arisan' => $regist_arisan, 'undian_ke' => $undian_ke])->row_array();
        $jadwal_id              = $jadwal_data['id'];
        // Data Login Identitas Karyawan
        $data_id_login            = $this->session->userdata('isloggedin');
        $data_login               = $this->userlogin->user_login();
        // Data Konten Isi
        $data_arisan              = $this->db->get_where('p_arisan', ['id' => $regist_arisan])->row_array(); // Menampilkan data arisan sesuai kode arisan
        $kode_arisan              = $regist_arisan;
        $data_anggota_belum_bayar = $this->select_model->getDataAnggotaTagihan($jadwal_id, $kode_arisan);
        $data_anggota_bayar       = $this->select_model->getDataAnggotaTagihanSelesai($jadwal_id, $kode_arisan);
        $ttl_belum_bayar          = count($data_anggota_belum_bayar);
        $anggota_aktif            = $this->select_model->getDataAnggotaArisanHebohAktif($regist_arisan);
        $jml_aktif                = count($anggota_aktif);
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'folder'              => 'aktifitas/undian',
            'page'                => 'undian',
            'judul'               => 'Detail Tagihan Arisan || Bagian Arisan',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            // Isi data
            'data_arisan'         => $data_arisan,
            'jadwal_arisan'       => $jadwal_data,
            'anggota_belum_bayar' => $data_anggota_belum_bayar,
            'blm_bayar'           => $ttl_belum_bayar,
            'jml_aktif'           => $jml_aktif,
            'anggota_bayar'       => $data_anggota_bayar,
            'jml_pengajuan'       => $jml_pengajuan

        );
        $this->load->view('arisan/index', $data);
    }
    public function lelang($id)
    {
        // Notifikasi
        $jml_pengajuan        = count($this->notifikasi_arisan->Notifikasi_pengajuan());
        // End_notifikasi  
        $regist_arisan         = $this->encrypt->decode($id);
        $ttl_idArisan          = strlen($this->encrypt->decode($id));
        if ($ttl_idArisan == 7) :
            $cek_jadwalArisan       = $this->db->get_where('p_arisan_jadwal', ['regist_arisan' => $regist_arisan, 'status_undian' => 'PROSES'])->row_array();
            if ($cek_jadwalArisan > 0) :
                $kode_arisan            = $regist_arisan;
                $arisan_ke              = $cek_jadwalArisan['undian_ke'];
            else :
                redirect('arisan/aktifitas/tagihan/kelompok/' . $this->encrypt->encode($regist_arisan));
            endif;
        else :
            $kode_arisan            = substr($this->encrypt->decode($id), 0, 7);
            $arisan_ke              = substr($this->encrypt->decode($id), 7);
        endif;
        $cek_produk = substr($kode_arisan, 2, 2);
        if ($cek_produk == 21) :
            redirect('arisan/aktifitas/undian/proses/' . $this->encrypt->encode($regist_arisan));
        endif;
        // Kode Inputan ID
        $jadwal_data            = $this->db->get_where('p_arisan_jadwal', ['regist_arisan' => $kode_arisan, 'undian_ke' => $arisan_ke])->row_array();
        $jadwal_id              = $jadwal_data['id']; // Masih Di pakai
        // Data Login Identitas Karyawan
        $data_id_login            = $this->session->userdata('isloggedin');
        $data_login               = $this->userlogin->user_login();
        // Data Konten Isi
        $data_arisan              = $this->db->get_where('p_arisan', ['id' => $kode_arisan])->row_array(); // Menampilkan data arisan sesuai kode arisan  || Masih Di Pakai
        $data_jadwal              = $this->db->get_where('p_arisan_jadwal', ['regist_arisan' => $kode_arisan])->row_array(); // Menampilkan data jadwal arisan sesuai kode arisan
        $data_anggota_bayar       = $this->select_model->getDataAnggotaTagihanSelesai($jadwal_id, $kode_arisan); // Masih dipakai
        // Data lampau
        $jadwal_kemarin           = $this->db->get_where('p_arisan_jadwal', ['undian_ke' => ($data_jadwal['undian_ke'] - 1), 'regist_arisan' => $kode_arisan])->row_array();
        $syarat_2unit             = $data_arisan['hg_standar'] + $data_arisan['dana_kehilangan'];
        if ($jadwal_kemarin > 0) :
            $jadwal_id_kemarin           = $jadwal_kemarin['id'];
            $lelang_bulan_kemarin        = $this->select_model->getDataLapLelangKemarin($kode_arisan, $jadwal_id_kemarin);
            $tunggakan_bulan_lalu        = $this->db->get_where('lap_arisan_nunggak', ['regist_arisan' => $kode_arisan, 'status_tunggakan' => 'LUNAS'])->row_array();
            $ttl_anggota_bayar_tunggakan = count($tunggakan_bulan_lalu);
            // Data yang diambil
            $saldo_kelompok_bulan_lalu        = $lelang_bulan_kemarin['saldo_akhir'];
            $saldo_tunggakan_bulan_lalu_bayar = $ttl_anggota_bayar_tunggakan * $data_arisan['tagihan_iuran'];
        else :
            $saldo_kelompok_bulan_lalu  = 0;
            $saldo_tunggakan_bulan_lalu_bayar = 0;
        endif;
        $data_lelang_sekarang         = $this->select_model->getData1LelangSekarang($jadwal_id);
        $anggota_lelang_tertinggi     = $data_lelang_sekarang['lelang_tertinggi'];
        $saldo_akhir_bulan_ini        = ((count($data_anggota_bayar) * $data_arisan['tagihan_iuran']) + ($saldo_kelompok_bulan_lalu + $saldo_tunggakan_bulan_lalu_bayar)) - ($data_arisan['admin_arisan'] + $data_arisan['dana_kehilangan']) - ($data_arisan['hg_standar'] - $anggota_lelang_tertinggi);
        // Saldo Masuk ( SM )
        // ((count($data_anggota_bayar) * $data_arisan['tagihan_iuran']) + ($saldo_kelompok_bulan_lalu + $saldo_tunggakan_bulan_lalu_bayar))
        // Dana Administrasi ( DA )
        // ($data_arisan['fee_admin'] + $data_arisan['dana_kehilangan'])
        // Dana Diterima Pemenang ( DP )
        // ($data_arisan['hg_modal'] - $dua_anggota_lelang_tertinggi)
        // Rumus Saldo AKhir = ( SM - DA - DP )
        $data_lelang_sekarang2               = $this->select_model->getData2LelangSekarang($jadwal_id);
        $anggota_lelang_tertinggi_nomor2     = $data_lelang_sekarang2['dua_lelang_tertinggi'] - $anggota_lelang_tertinggi;
        // Cek apakah bisa keluar unit 2 atau tidak
        if (($saldo_akhir_bulan_ini + $anggota_lelang_tertinggi_nomor2) > $syarat_2unit) :
            $unit = 2;
            $this->session->set_flashdata('notifikasi_beli2', '<div class="alert alert-success" id="notifikasi_beli2" role="alert">Kelompok Arisan Dapat Beli 2 Unit!</div>');
        else :
            $unit = 1;
        endif;
        // Data Baru
        $anggota_lelang = $this->select_model->getDataAnggotaLelang($jadwal_id); // Menampilkan data anggota lelang
        $jml_lelang     = count($anggota_lelang);
        $saldo_lelang   = $this->select_model->getDataSaldoLelang($jadwal_id); // Menampilkan saldo lelang bulan ini
        $saldo_iuran    = $this->select_model->getDataSaldoIuran($jadwal_id); // Menampilkan saldo lelang bulan ini
        $data = array(
            // Untuk memanggil halaman sesuai menu
            'folder'              => 'aktifitas/undian',
            'page'                => 'lelang',
            'judul'               => 'Proses Lelang Arisan Motor || Bagian Arisan',
            'data_id_login'       => $data_id_login,
            'data_login'          => $data_login,
            // Isi dalam Konten
            'data_arisan'         => $data_arisan,
            'jadwal_arisan'       => $data_jadwal,
            'anggota_bayar'       => $data_anggota_bayar,
            'saldo_terakhir'      => $saldo_kelompok_bulan_lalu,
            'anggota_lelang'      => $anggota_lelang,
            'jml_lelang'          => $jml_lelang,
            'saldo_lelang'        => $saldo_lelang,
            'saldo_iuran'         => $saldo_iuran,
            'unit'                => $unit,
            'jml_pengajuan'       => $jml_pengajuan

        );
        $this->load->view('arisan/index', $data);
    }
    public function crud()
    {
        if (isset($_POST['mulaiUndianArisan'])) {
            $regist_arisan  = htmlspecialchars($this->input->post('regist_arisan'));
            $jadwal_id      = htmlspecialchars($this->input->post('jadwal_id'));
            $data = array(
                'status_undian' => 'PROSES'
            );
            $this->db->where('regist_arisan', $regist_arisan);
            $this->db->where('id', $jadwal_id);
            $this->db->update('p_arisan_jadwal', $data);
            $this->_notifUndianDimulai($regist_arisan, $jadwal_id);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Memulai Undian!</div>');
            redirect('arisan/aktifitas/undian/proses/' . $this->encrypt->encode($regist_arisan));
        }
        if (isset($_POST['simpanLaporanUndian'])) {
            // Inputan
            $inputan                = $this->_vInputan();
            $data_arisan            = $this->db->get_where('p_arisan', ['id' => $inputan['regist_arisan']])->row_array();
            $jadwal_arisan_sekarang = $this->db->get_where('p_arisan_jadwal', ['id' => $inputan['jadwal_id']])->row_array();
            $da_menang              = $this->db->get_where('p_arisan_anggota', ['regist_arisan' => $inputan['regist_arisan'], 'no_urut' => $inputan['nomor_urut']])->row_array();
            $jadwal_id              = $inputan['jadwal_id'];
            $kode_arisan            = $inputan['regist_arisan'];
            $da_belum_bayar         = $this->select_model->getDataAnggotaTagihan($jadwal_id, $kode_arisan);
            $jml_belum_bayar        = count($da_belum_bayar);
            $laporan                = $this->_mLaporan($jadwal_arisan_sekarang);
            // Cek apakah arisan di undi pertama kalia tau kesekian kali
            $saldo_diterima = $data_arisan['hg_target'] - $data_arisan['hg_standar'];
            if (($jadwal_arisan_sekarang['undian_ke'] - 1) == 0) :
                // Ini adalah undian pertama
                // Mengisi tabel laporan
                $this->insert_model->tambahLaporanArisanHeboh($laporan, $inputan, $jadwal_arisan_sekarang, $jml_belum_bayar);
                $this->insert_model->tambahPemenangArisanHeboh($laporan, $saldo_diterima, $da_menang);
                $this->update_model->ubahStatusAnggotaAH($da_menang);
                $this->insert_model->anggotaArisanHebohNunggak($inputan, $laporan, $da_belum_bayar, $jadwal_arisan_sekarang);
                $this->update_model->ubahJadwalSekarang($jadwal_arisan_sekarang);
                $this->insert_model->tambahPendapatanArisanHeboh($inputan, $data_arisan, $jadwal_arisan_sekarang);
                $this->_documentLapArisanHeboh($laporan);
            else :
                // Ini adalah undian kedua
                $data_jadwal_kemarin        = $this->db->get_where('p_arisan_jadwal', ['undian_ke' => ($jadwal_arisan_sekarang['undian_ke'] - 1), 'regist_arisan' => $kode_arisan])->row_array();
                $data_laporan_kemarin       = $this->db->get_where('lap_arisan', ['jadwal_id' => $data_jadwal_kemarin['id']])->row_array();
                $data_tunggakan_kemarin     = $this->db->get_where('lap_arisan_nunggak', ['regist_arisan' => $kode_arisan, 'status_tunggakan' => 'AKTIF'])->result();
                $jml_sisa_tunggakan_kemarin = count($data_tunggakan_kemarin);
                $dana_masuk_susulan         = ($data_laporan_kemarin['jml_tunggakan'] - $jml_sisa_tunggakan_kemarin) * $data_arisan['tagihan_iuran'];
                $fee_admin_lanjutan         = $data_arisan['hg_standar'] - ($data_arisan['admin_arisan'] * ($jadwal_arisan_sekarang['undian_ke'] - 1));
                // Mengisi tabel laporan
                $this->insert_model->tambahLaporanArisanHeboh2($laporan, $inputan, $jadwal_arisan_sekarang, $jml_belum_bayar, $data_laporan_kemarin, $dana_masuk_susulan, $fee_admin_lanjutan, $jml_sisa_tunggakan_kemarin);
                // Mengisi tabel rincian laporan pemenang
                $this->insert_model->tambahPemenangArisanHeboh($laporan, $saldo_diterima, $da_menang);
                // Mengubah status tbl_arisan_anggota
                $this->update_model->ubahStatusAnggotaAH($da_menang);
                // Mengubah status jadwal arisan
                $this->update_model->ubahJadwalSekarang($jadwal_arisan_sekarang);
                $this->insert_model->tambahPendapatanArisanHeboh($inputan, $data_arisan, $jadwal_arisan_sekarang);
                // Menghapus data tunggakan
                $this->db->where('regist_arisan', $kode_arisan);
                $this->db->where('status_tunggakan', 'LUNAS');
                $this->db->delete('lap_arisan_nunggak');
                $this->_documentLapArisanHeboh($laporan);
            endif;
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Membuat Laporan Arisan Bulanan!</div>');
            redirect('arisan/laporan/laporan_heboh/kelompok/' . $this->encrypt->encode($kode_arisan));
        }
        if (isset($_POST['mulaiLelangArisan'])) {
            $regist_arisan  = htmlspecialchars($this->input->post('regist_arisan'));
            $jadwal_id      = htmlspecialchars($this->input->post('jadwal_id'));
            $data = array(
                'status_undian' => 'PROSES'
            );
            $this->db->where('regist_arisan', $regist_arisan);
            $this->db->where('id', $jadwal_id);
            $this->db->update('p_arisan_jadwal', $data);
            $this->_notifUndianDimulaiLelang($regist_arisan, $jadwal_id);
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Memulai Undian!</div>');
            redirect('arisan/aktifitas/lelang/proses/' . $this->encrypt->encode($regist_arisan . $undian_ke));
        }
        if (isset($_POST['simpanAnggotaLelang'])) {
            $jadwal_id     = htmlspecialchars($this->input->post('jadwal_id'));
            $regist_undian = htmlspecialchars($this->input->post('regist_undian'));
            $total_lelang  = htmlspecialchars($this->input->post('total_lelang'));
            $regist_arisan = htmlspecialchars($this->input->post('regist_arisan'));
            // Cek sudah pernah masuk lelang atau belum
            $cek_lelang_anggota = $this->db->get_where('p_arisan_lelang_undian', ['jadwal_id' => $jadwal_id, 'regist_undian' => $regist_undian])->row_array();
            if ($cek_lelang_anggota > 0) :
                if ($total_lelang > $cek_lelang_anggota['total_lelang']) :
                    $data_update = array(
                        'total_lelang' => $total_lelang,
                        'tgl_lelang'   => date('Y-m-d')
                    );
                    $this->db->where('jadwal_id', $jadwal_id);
                    $this->db->where('regist_undian', $regist_undian);
                    $this->db->update('p_arisan_lelang_undian', $data_update);
                    $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Melakukan Bid Lelang!</div>');
                else :
                    $this->session->set_flashdata('pesan_gagal', '<div class="alert alert-danger" id="pesan_gagal" role="alert">Nominal Lelang Lebih Kecil atau sama dengan dari pada nominal awal!</div>');
                endif;
            else :
                $data = array(
                    'jadwal_id'      => $jadwal_id,
                    'regist_undian'  => $regist_undian,
                    'tgl_lelang'     => date('Y-m-d'),
                    'total_lelang'   => $total_lelang,
                    'status_lelang'  => 'AKTIF'
                );
                $this->db->insert('p_arisan_lelang_undian', $data);
                $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Melakukan Bid Lelang!</div>');
            endif;
            redirect('arisan/aktifitas/lelang/proses/' . $this->encrypt->encode($regist_arisan));
        }
        // Pemenang Lelang 1
        if (isset($_POST['simpanLaporanLelang'])) {
            // Inputan 1 pemenang
            $jadwal_id                = htmlspecialchars($this->input->post('jadwal_id'));
            $regist_arisan            = htmlspecialchars($this->input->post('regist_arisan'));
            $regist_undian            = htmlspecialchars($this->input->post('regist_undian'));
            $lelang_tertinggi         = htmlspecialchars($this->input->post('lelang_tertinggi'));
            $fee_dealer               = htmlspecialchars($this->input->post('fee_dealer'));
            // Identitas Jadwal Undian
            $jadwal_arisan = $this->db->get_where('p_arisan_jadwal', ['id' => $jadwal_id])->row_array();
            // Identitas Arisan
            $data_arisan   = $this->db->get_where('p_arisan', ['id' => $regist_arisan])->row_array();
            // Cek Dana Arisan
            $data_iuran = $this->select_model->getTotalIuranArisan($jadwal_id);
            $total_iuran = $data_iuran['ttl_iuran'];
            // Cek Tunggakan
            $data_tunggakan = $this->select_model->getDataAnggotaBelumBayarMotor($jadwal_id, $regist_arisan);
            $ttl_tunggakan = count($data_tunggakan);
            // Membuat Kode Laporan
            $produk_id                 = $data_arisan['produk_id'];
            $kelompok_arisan           = $data_arisan['nm_kelompok'];
            $tahun_pembentukan_arisan  = substr($regist_arisan, 0, 2);
            $bln_tahun_lelang          = date('ym');
            $undian_ke                 = $jadwal_arisan['undian_ke'];
            $lelang_ke                 = $jadwal_arisan['lelang_ke'];
            $total_huruf               = strlen($undian_ke);
            if ($kelompok_arisan == 1) :
                $kd_laporan_arisan = 'LAP-' . $produk_id . '/00' . $kelompok_arisan . '/' . $tahun_pembentukan_arisan . '/' . $bln_tahun_lelang . '/' . $undian_ke . '/' . $lelang_ke;
            elseif ($total_huruf == 2) :
                $kd_laporan_arisan = 'LAP-' . $produk_id . '/0' . $kelompok_arisan . '/' . $tahun_pembentukan_arisan . '/' . $bln_tahun_lelang . '/' . $undian_ke . '/' . $lelang_ke;
            else :
                $kd_laporan_arisan = 'LAP-' . $produk_id . '/' . $kelompok_arisan . '/' . $tahun_pembentukan_arisan . '/' . $bln_tahun_lelang . '/' . $undian_ke . '/' . $lelang_ke;
            endif;
            // Untuk 1 Pemenang arisan motor
            if (($undian_ke - 1) == 0) :
                // Laporan awal 1 pemenang
                // Data inputan tabel Laporan
                $this->insert_model->tambahLapArisanMotor01($kd_laporan_arisan, $jadwal_arisan, $lelang_tertinggi, $total_iuran, $data_arisan, $ttl_tunggakan);
                // Menambah data detail laporan pemenang
                $this->insert_model->tambahPemenangArisanMotor01($kd_laporan_arisan, $regist_undian, $data_arisan, $lelang_tertinggi);
                // Mengubah status tbl_arisan_anggota
                $this->update_model->ubahDataPemenangMotor01($regist_undian);
                // Mengubah dam membaut jadwal baru arisan motor
                $this->update_model->ubahTambahJadwalMotor01($jadwal_arisan, $data_arisan);
                // Menambahkan omset atau pendapatan arisan motor
                $this->insert_model->tambahPendapatanArisanMotor01($regist_arisan, $regist_undian, $data_arisan, $jadwal_arisan, $lelang_tertinggi);
                // Menambah data tunggakan
                if ($ttl_tunggakan > 0) :
                    foreach ($data_tunggakan as $Anggota_nunggak) :
                        $data_tunggakan = array(
                            'laporan_id'        => $kd_laporan_arisan,
                            'jadwal_id'         => $jadwal_id,
                            'regist_arisan'     => $regist_arisan,
                            'regist_undian'     => $Anggota_nunggak->regist_undian,
                            'bayar'             => $data_arisan['tagihan_iuran'],
                            'status_tunggakan'  => 'AKTIF'
                        );
                        $this->db->insert('tbl_tagihan_arisan_nunggak', $data_tunggakan);
                    endforeach;
                endif;
                $this->_documentLapArisanMotor($kd_laporan_arisan, $regist_undian, $lelang_tertinggi);
            else :
                // Inputan Laporan selanjutnya 1 pemenang
                $data_jadwal_lampau         = $this->db->get_where('p_arisan_jadwal', ['undian_ke' => ($jadwal_arisan_sekarang['undian_ke'] - 1), 'regist_arisan' => $kode_arisan])->row_array();
                $data_laporan_lampau        = $this->db->get_where('tbl_lap_arisan', ['undian_ke' => $data_jadwal_lampau['id']])->row_array();
                $data_tunggakan_lampau      = $this->db->get_where('tbl_tagihan_arisan_nunggak', ['regist_arisan' => $id_ariasn, 'status_tunggakan' => 'AKTIF'])->result();
                $jml_sisa_tunggakan_lampau  = count($data_tunggakan_lampau);
                $dana_masuk_susulan         = ($data_laporan_lampau['jml_tunggakan'] - $jml_sisa_tunggakan_lampau) * $data_arisan['tagihan_iuran'];
                $jml_sisa_tunggakan_kemarin = $data_laporan_lampau['jml_tunggakan'] - $jml_sisa_tunggakan_lampau;
                // Data inputan tabel Laporan
                $data_laporan = array(
                    'id'             => $kd_laporan_arisan,
                    'tgl_laporan'    => date('Y-m-d'),
                    'regist_arisan'  => $regist_arisan,
                    'undian_ke'      => $jadwal_id,
                    'tgl_undian'     => $jadwal_arisan['tgl_undian'],
                    'qty'            => 1,
                    'saldo_awal'     => $data_laporan_lampau['saldo_akhir'],
                    'saldo_masuk'    => $lelang_tertinggi + $total_iuran + $dana_masuk_susulan,
                    'saldo_pemenang' => $data_arisan['hg_modal'] - $lelang_tertinggi,
                    'saldo_akhir'    => ($data_laporan_lampau['saldo_akhir'] + $lelang_tertinggi + $total_iuran + $dana_masuk_susulan) - ($data_arisan['fee_admin'] + $data_arisan['dana_kehilangan']) - ($data_arisan['hg_modal'] - $lelang_tertinggi),
                    'fee_admin'      => $data_arisan['fee_admin'],
                    'dn_kehilangan'  => $data_arisan['dana_kehilangan'],
                    'fee_dealer'     => $fee_dealer,
                    'status_laporan' => 'MANAGER',
                    'jml_tunggakan'  => $ttl_tunggakan,
                    'akum_tunggakan' => $ttl_tunggakan + ($data_laporan_lampau['jml_tunggakan'] - $jml_sisa_tunggakan_lampau),
                    'kantor'         => 0,
                    'ttl_kantor'     => 0,
                    'login_id'       => $this->session->userdata('isloggedin')
                );
                $this->db->insert('tbl_lap_arisan', $data_laporan);

                // Menambah data detail laporan pemenang
                $data_laporan_detail = array(
                    'laporan_id'      => $kd_laporan_arisan,
                    'regist_undian'   => $regist_undian
                );
                $this->db->insert('tbl_lap_pemenang_arisan', $data_laporan_detail);
                $regist_anggota           = $regist_undian;
                // Mengubah status tbl_arisan_anggota
                $data_arisan_anggota = array(
                    'status'     => 'MENANG',
                    'updated_at' => date("Y-m-d H:i:s")
                );
                $this->db->where('no_regist', $regist_anggota);
                $this->db->update('tbl_arisan_anggota', $data_arisan_anggota);
                // Mengubah status jadwal arisan
                $data_jadwal = array(
                    'status_undian' => 'SELESAI',
                    'updated_at' => date("Y-m-d H:i:s")
                );
                $this->db->where('id', $jadwal_id);
                $this->db->update('tbl_jadwal_undian', $data_jadwal);
                // Membuat Jadwal Undian Arisan Baru
                $new_jadwal = array(
                    'regist_arisan' => $regist_arisan,
                    'tgl_undian'    => date('Y-m-d', strtotime('+1 month', strtotime($jadwal_arisan['tgl_undian']))),
                    'undian_ke'     => $undian_ke + 1,
                    'status_undian' => 'BELUM'
                );
                $this->db->insert('tbl_jadwal_undian', $new_jadwal);
                // Menambahkan Omset
                $this->insert_model->tambahPendapatanArisanMotor01($regist_arisan, $regist_undian, $data_arisan, $jadwal_arisan, $lelang_tertinggi);
                // Menambah data tunggakan
                if ($ttl_tunggakan > 0) :
                    foreach ($data_tunggakan as $Anggota_nunggak) :
                        $data_tunggakan = array(
                            'laporan_id'    => $kd_laporan_arisan,
                            'jadwal_id'     => $jadwal_id,
                            'regist_arisan' => $regist_arisan,
                            'regist_undian' => $Anggota_nunggak->no_regist,
                            'bayar'         => $data_arisan['tagihan_iuran']
                        );
                        $this->db->insert('tbl_tagihan_arisan_nunggak', $data_tunggakan);
                    endforeach;
                endif;
                // Menghapus data tunggakan
                $this->db->where('regist_arisan', $regist_arisan);
                $this->db->where('status_tunggakan', 'LUNAS');
                $this->db->delete('tbl_tagihan_arisan_nunggak');
                $this->_documentLapArisanMotor($kd_laporan_arisan, $regist_undian, $lelang_tertinggi);
            endif;
            $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Undian dan Lelang Arisan Motor Selesai!</div>');
            redirect('arisan/laporan/laporan_motor/kelompok/' . $this->encrypt->encode($regist_arisan));
        }
    }
    public function hapus_anggota_lelang($id)
    {
        $lelang_id              = $this->encrypt->decode($id);
        $cek_arisan             = $this->db->get_where('p_arisan_lelang_undian', ['id' => $lelang_id])->row_array();
        $data_arisan            = $this->db->get_where('p_arisan_jadwal', ['id' => $cek_arisan['jadwal_id']])->row_array();
        $this->db->where('id', $lelang_id);
        $this->db->delete('p_arisan_lelang_undian');
        $this->session->set_flashdata('pesan_berhasil', '<div class="alert alert-success" id="pesan_berhasil" role="alert">Berhasil Menghapus Data Anggota Lelang!</div>');
        redirect('arisan/aktifitas/lelang/proses/' . $this->encrypt->encode($data_arisan['regist_arisan']));
    }
    // Private Validasi
    private function _vInputan()
    {
        $data = array(
            'jadwal_id'                       => htmlspecialchars($this->input->post('jadwal_id')),
            'regist_arisan'                   => htmlspecialchars($this->input->post('regist_arisan')),
            'saldo_masuk_sekarang'            => htmlspecialchars($this->input->post('saldo_masuk_sekarang')),
            'nomor_urut'                      => htmlspecialchars($this->input->post('nomor_urut')),
            'uang_pemenang'                   => htmlspecialchars($this->input->post('uang_pemenang')),
            'potongan_awal'                   => htmlspecialchars($this->input->post('potongan_admin_awal')),
            'potongan_admin_selanjutnya'      => htmlspecialchars($this->input->post('potongan_admin_selanjutnya'))
        );
        return $data;
    }
    private function _mLaporan($jadwal_arisan_sekarang)
    {
        $total_huruf               = strlen($jadwal_arisan_sekarang['undian_ke']);
        $pecah_idArisanNoUrut      = substr($jadwal_arisan_sekarang['regist_arisan'], 4, 7);
        $pecah_idArisanKategori    = substr($jadwal_arisan_sekarang['regist_arisan'], 2, 2);
        $pecah_idArisanTahunArisan = substr($jadwal_arisan_sekarang['regist_arisan'], 0, 2);
        $bln_undian = date('ym');
        if ($total_huruf == 1) :
            $kd_laporan_arisan = 'LAP-' . $pecah_idArisanKategori . '/' . $pecah_idArisanNoUrut . '/' . $pecah_idArisanTahunArisan . '/' . $bln_undian . '/00' . $jadwal_arisan_sekarang['undian_ke'];
            $kd_laporan_arisan2 = 'LAP_' . $pecah_idArisanKategori . $pecah_idArisanNoUrut . $pecah_idArisanTahunArisan . $bln_undian . '00' . $jadwal_arisan_sekarang['undian_ke'];
        elseif ($total_huruf == 2) :
            $kd_laporan_arisan = 'LAP-' . $pecah_idArisanKategori . '/' . $pecah_idArisanNoUrut . '/' . $pecah_idArisanTahunArisan . '/' . $bln_undian . '/0' . $jadwal_arisan_sekarang['undian_ke'];
            $kd_laporan_arisan2 = 'LAP_' . $pecah_idArisanKategori . $pecah_idArisanNoUrut . $pecah_idArisanTahunArisan . $bln_undian . '0' . $jadwal_arisan_sekarang['undian_ke'];
        else :
            $kd_laporan_arisan = 'LAP-' . $pecah_idArisanKategori . '/' . $pecah_idArisanNoUrut . '/' . $pecah_idArisanTahunArisan . '/' . $bln_undian . '/' . $jadwal_arisan_sekarang['undian_ke'];
            $kd_laporan_arisan2 = 'LAP_' . $pecah_idArisanKategori . $pecah_idArisanNoUrut . $pecah_idArisanTahunArisan . $bln_undian . $jadwal_arisan_sekarang['undian_ke'];
        endif;
        $data = array(
            'kd_laporan_arisan'  => $kd_laporan_arisan,
            'kd_laporan_arisan2' => $kd_laporan_arisan2
        );
        return $data;
    }
    // Membuat dokument laporan Arisan Heboh
    private function _documentLapArisanHeboh($laporan)
    {
        $data_laporan   = $this->db->get_where('lap_arisan', ['id' => $laporan['kd_laporan_arisan']])->row_array();
        $data_petugas   = $this->db->get_where('sistem_login', ['id' => $this->session->userdata('isloggedin')])->row_array();
        $data_arisan    = $this->db->get_where('p_arisan', ['id' => $data_laporan['regist_arisan']])->row_array();
        $data_jadwal    = $this->db->get_where('p_arisan_jadwal', ['id' => $data_laporan['jadwal_id']])->row_array();
        $laporan_detail = $this->db->get_where('lap_arisan_menang', ['laporan_id' => $laporan['kd_laporan_arisan']])->row_array();
        $no_regist      = $laporan_detail['regist_undian'];
        $data_anggota   = $this->select_model->getDataPemenangArisanHeboh($no_regist);
        $arisan_id      = $data_laporan['regist_arisan'];
        $anggota_aktif  = count($this->select_model->getDataAnggotaAktifSekarang($arisan_id));
        $anggota_mundur = count($this->select_model->getDataAnggotaMundurSekarang($arisan_id));
        $anggota_menang = count($this->select_model->getDataAnggotaMenangSekarang($arisan_id));
        $data = array(
            // Data konten
            'laporan'             => $data_laporan,
            'arisan'              => $data_arisan,
            'jadwal'              => $data_jadwal,
            'kd_laporan'          => $laporan['kd_laporan_arisan'],
            'anggota'             => $data_anggota,
            'petugas'             => $data_petugas,
            'aktif'               => $anggota_aktif,
            'mundur'              => $anggota_mundur,
            'menang'              => $anggota_menang
        );
        $file_pdf = date('ym') . '_' . $arisan_id;
        $paper = 'A4';
        $orientation = "portrait";
        $html = $this->load->view('document/laporan/arisan/heboh/laporan_bulanan_arisan_heboh', $data, true);
        $lokasi_file = 'assets/laporan/arisan/heboh/';
        $data_edit_laporan = array(
            'document' => $file_pdf . '.pdf'
        );
        $this->db->where('id', $laporan['kd_laporan_arisan']);
        $this->db->update('lap_arisan', $data_edit_laporan);
        $this->pdfgenerator->generate($html, $file_pdf, $paper, $lokasi_file, $orientation);
    }
    // Membuat dokument laporan Arisan Motor 1 Pemenang
    private function _documentLapArisanMotor($kd_laporan_arisan, $regist_undian, $lelang_tertinggi)
    {

        $data_laporan                = $this->db->get_where('lap_arisan', ['id' => $kd_laporan_arisan])->row_array();
        $data_rinci_laporan_pemenang = $this->select_model->getDataRinciPemenangArisanMotorLaporan($kd_laporan_arisan);
        $regist_arisan               = $data_laporan['regist_arisan'];
        $data_lelang                 = $this->select_model->getDataTotalLelang($regist_arisan);
        $ttl_lelang                  = count($data_lelang);
        $data_arisan                 = $this->db->get_where('p_arisan', ['id' => $data_laporan['regist_arisan']])->row_array();
        $data_jadwal                 = $this->db->get_where('p_arisan_jadwal', ['id' => $data_laporan['jadwal_id']])->row_array();
        $data_petugas                = $this->db->get_where('sistem_login', ['id' => $data_laporan['login_id']])->row_array();
        $data = array(
            'judul'            => 'Laporan Arisan Motor ' . $data_arisan['ket_arisan'] . ' Kelompok ' . $data_arisan['nm_kelompok'] . ' - Undian Ke- ' . $data_jadwal['undian_ke'],
            'data_arisan'      => $data_arisan,
            'data_laporan'     => $data_laporan,
            'data_jadwal'      => $data_jadwal,
            'ttl_lelang'       => $ttl_lelang,
            'data_pemenang'    => $data_rinci_laporan_pemenang,
            'lelang_tertinggi' => $lelang_tertinggi,
            'data_petugas'     => $data_petugas
        );
        $file_pdf = date('ym') . '_' . $regist_arisan;
        $paper = 'A4';
        $orientation = "portrait";
        $html = $this->load->view('document/laporan/arisan/motor/laporan_bulanan_arisan_motor', $data, true);
        $lokasi_file = 'assets/laporan/arisan/motor/';
        $data_edit_laporan = array(
            'document' => $file_pdf . '.pdf'
        );
        $this->db->where('id', $kd_laporan_arisan);
        $this->db->update('lap_arisan', $data_edit_laporan);
        $this->pdfgenerator->generate($html, $file_pdf, $paper, $lokasi_file, $orientation);
    }
    // Notifikasi Undian Arisan Di Mulai
    private function _notifUndianDimulai($regist_arisan, $jadwal_id)
    {
        $data_peserta  = $this->select_model->getDataAnggotaArisanHebohAktif($regist_arisan);
        $opt           = $this->db->get_where('sistem_option')->row_array();
        $jadwal_undian = $this->db->get_where('p_arisan_jadwal', ['id' => $jadwal_id])->row_array();
        $data_arisan    = $this->db->get_where('p_arisan', ['id' => $regist_arisan])->row_array();  //Data Identitas Arisan
        foreach ($data_peserta as $Peserta) :
            $cek_nomor = substr($Peserta->no_hp, 0, 1);
            if ($cek_nomor == 0) :
                $no_hp = '62' . substr($Peserta->no_hp, 1, 20);
            else :
                $no_hp = $Peserta->no_hp;
            endif;
            $pesan = 'Hei, *_' . $Peserta->nm_anggota . '_*,

INFORMASI!!!
            
Arisan Heboh ' . $data_arisan['nm_kelompok'] . ' Bina Artha akan melakukan pengundian ke-' . $jadwal_undian['undian_ke'] . ' pada :
Hari : ' . $this->mycustom->hariIndo(date('l', strtotime($jadwal_undian['tgl_undian']))) . ', ' . date('d', strtotime($jadwal_undian['tgl_undian'])) . ' ' . $this->mycustom->bulanIndo(date('m', strtotime($jadwal_undian['tgl_undian']))) . ' ' . date('Y', strtotime($jadwal_undian['tgl_undian'])) . '
Jam : 15.00 WIB - Selesai
Lokasi : KSP Bina Artha Prima

Terimakasih,

*Info :* ' . $opt['cs_arisan'] . '';
            $body = array(
                "api_key" => $opt['api_arisan'],
                "receiver" => $no_hp,
                "data" => array("message" => $pesan)
            );

            $curl = curl_init();
            curl_setopt_array($curl, [
                CURLOPT_URL => $cek_option['web_api_pesan'],
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS => json_encode($body),
                CURLOPT_HTTPHEADER => [
                    "Accept: */*",
                    "Content-Type: application/json",
                ],
            ]);

            $response = curl_exec($curl);
            $err = curl_error($curl);

            curl_close($curl);
        endforeach;
    }
    private function _notifUndianDimulaiLelang($regist_arisan, $jadwal_id)
    {
        $data_peserta  = $this->select_model->getDataAnggotaArisanHebohAktif($regist_arisan);
        $opt           = $this->db->get_where('sistem_option')->row_array();
        $jadwal_undian = $this->db->get_where('p_arisan_jadwal', ['id' => $jadwal_id])->row_array();
        $data_arisan    = $this->db->get_where('p_arisan', ['id' => $regist_arisan])->row_array();  //Data Identitas Arisan
        foreach ($data_peserta as $Peserta) :
            $cek_nomor = substr($Peserta->no_hp, 0, 1);
            if ($cek_nomor == 0) :
                $no_hp = '62' . substr($Peserta->no_hp, 1, 20);
            else :
                $no_hp = $Peserta->no_hp;
            endif;
            $pesan = 'Hei, *_' . $Peserta->nm_anggota . '_*,

INFORMASI!!!
            
Arisan Motor ' . $data_arisan['ket_arisan'] . ' Ke-' . $data_arisan['nm_kelompok'] . ' Bina Artha akan melakukan pengundian ke-' . $jadwal_undian['undian_ke'] . ' dan lelang ke-' . $jadwal_undian['lelang_ke'] . ' pada :
Hari : ' . $this->mycustom->hariIndo(date('l', strtotime($jadwal_undian['tgl_undian']))) . ', ' . date('d', strtotime($jadwal_undian['tgl_undian'])) . ' ' . $this->mycustom->bulanIndo(date('m', strtotime($jadwal_undian['tgl_undian']))) . ' ' . date('Y', strtotime($jadwal_undian['tgl_undian'])) . '
Jam : 15.00 WIB - Selesai
Lokasi : KSP Bina Artha Prima

Terimakasih,

*Info :* ' . $opt['cs_arisan'] . '';
            $body = array(
                "api_key" => $opt['api_arisan'],
                "receiver" => $no_hp,
                "data" => array("message" => $pesan)
            );

            $curl = curl_init();
            curl_setopt_array($curl, [
                CURLOPT_URL => $opt['web_api_pesan'],
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS => json_encode($body),
                CURLOPT_HTTPHEADER => [
                    "Accept: */*",
                    "Content-Type: application/json",
                ],
            ]);

            $response = curl_exec($curl);
            $err = curl_error($curl);

            curl_close($curl);
        endforeach;
    }
}

/* End of file ControllerUndianAktifitas.php and path
\application\controllers\arisan\aktifitas\ControllerUndianAktifitas.php */