Advertisement
jamboljack

Rekap Kehadiran

Oct 5th, 2021
965
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 20.03 KB | None | 0 0
  1. public function prosesrekalkulasi()
  2.     {
  3.         $bulan = $this->input->post('lstBulan', 'true');
  4.         $tahun = $this->input->post('lstTahun', 'true');
  5.         $opd   = $this->input->post('lstOPD', 'true');
  6.  
  7.         if ($opd != '') {
  8.             $opd_id = $this->input->post('lstOPD', 'true');
  9.         } else {
  10.             if ($this->session->userdata('level') == 'Admin') {
  11.                 $opd_id = $this->input->post('lstOPD', 'true');
  12.             } else {
  13.                 $opd_id = $this->session->userdata('opd_id');
  14.             }
  15.         }
  16.  
  17.         // Log Report Proses
  18.         $checkLog = $this->db->get_where('sihadir_log_report', array('log_report_bulan' => $bulan, 'log_report_tahun' => $tahun, 'opd_id' => $opd_id, 'log_report_keterangan' => 'R'))->row();
  19.         if (count($checkLog) == 0) {
  20.             $dataLog = array(
  21.                 'opd_id'                => $opd_id,
  22.                 'log_report_bulan'      => $bulan,
  23.                 'log_report_tahun'      => $tahun,
  24.                 'log_report_keterangan' => 'R',
  25.                 'log_report_proses'     => 1,
  26.                 'log_report_update'     => date('Y-m-d H:i:s'),
  27.             );
  28.  
  29.             $this->db->insert('sihadir_log_report', $dataLog);
  30.         } else {
  31.             $log_report_id = $checkLog->log_report_id;
  32.             $dataLog       = array(
  33.                 'log_report_proses' => ($checkLog->log_report_proses + 1),
  34.                 'log_report_update' => date('Y-m-d H:i:s'),
  35.             );
  36.  
  37.             $this->db->where('log_report_id', $log_report_id);
  38.             $this->db->update('sihadir_log_report', $dataLog);
  39.         }
  40.  
  41.         if ($this->session->userdata('level') == 'SubOPD') {
  42.             if ($opd != '') {
  43.                 $listPegawai = $this->db->order_by('pegawai_nama', 'asc')->get_where('v_pegawai', array('opd_id' => $opd_id, 'status_hukum_status' => 'A'))->result();
  44.             } else {
  45.                 $user_username = $this->session->userdata('username');
  46.                 $listOPD       = $this->db->order_by('opd_id', 'asc')->get_where('v_users_opd', array('user_username' => $user_username))->result();
  47.                 $where_in      = array();
  48.                 foreach ($listOPD as $r) {
  49.                     $where_in[] = $r->opd_id;
  50.                 }
  51.  
  52.                 $this->db->from('v_pegawai');
  53.                 $this->db->where_in('opd_id', $where_in);
  54.                 $this->db->where('status_hukum_status', 'A');
  55.                 $this->db->order_by('pegawai_nama', 'asc');
  56.                 $listPegawai = $this->db->get()->result();
  57.             }
  58.         } elseif ($this->session->userdata('level') == 'OPD') {
  59.             if ($opd != '') {
  60.                 $listPegawai = $this->db->order_by('pegawai_nama', 'asc')->get_where('v_pegawai', array('opd_id' => $opd_id, 'status_hukum_status' => 'A'))->result();
  61.             } else {
  62.                 $listPegawai = $this->db->order_by('pegawai_nama', 'asc')->get_where('v_pegawai', array('opd_id_head' => $opd_id, 'status_hukum_status' => 'A'))->result();
  63.             }
  64.         } else {
  65.             $listPegawai = $this->db->order_by('pegawai_nama', 'asc')->get_where('v_pegawai', array('opd_id_head' => $opd_id, 'status_hukum_status' => 'A'))->result();
  66.         }
  67.  
  68.         foreach ($listPegawai as $r) {
  69.             $pegawai_id   = $r->pegawai_id;
  70.             $pegawai_nama = $r->pegawai_nama;
  71.             $opd_id       = $r->opd_id;
  72.             // Insert Default Parameter
  73.             $listParameterRekap = $this->db->order_by('parameter_rekap_id', 'asc')->get('sihadir_parameter_rekap')->result();
  74.             foreach ($listParameterRekap as $parameter) {
  75.                 $parameter_rekap_id = $parameter->parameter_rekap_id;
  76.                 $checkDataRekap     = $this->db->get_where('sihadir_lap_rekap', array('pegawai_id' => $pegawai_id, 'lap_rekap_bulan' => $bulan, 'lap_rekap_tahun' => $tahun, 'komponen_id' => $parameter_rekap_id, 'lap_rekap_tipe' => 'P'))->row();
  77.                 if (count($checkDataRekap) == 0) {
  78.                     $data = array(
  79.                         'pegawai_id'         => $pegawai_id,
  80.                         'opd_id'             => $opd_id,
  81.                         'lap_rekap_bulan'    => $bulan,
  82.                         'lap_rekap_tahun'    => $tahun,
  83.                         'komponen_id'        => $parameter_rekap_id,
  84.                         'lap_rekap_jumlah'   => 0,
  85.                         'lap_rekap_potongan' => 0,
  86.                         'lap_rekap_tipe'     => 'P',
  87.                         'lap_rekap_update'   => date('Y-m-d H:i:s'),
  88.                     );
  89.  
  90.                     $this->db->insert('sihadir_lap_rekap', $data);
  91.                 } else {
  92.                     $lap_rekap_id = $checkDataRekap->lap_rekap_id;
  93.                     $dataUpdate   = array(
  94.                         'lap_rekap_jumlah'   => 0,
  95.                         'lap_rekap_potongan' => 0,
  96.                     );
  97.  
  98.                     $this->db->where('lap_rekap_id', $lap_rekap_id);
  99.                     $this->db->update('sihadir_lap_rekap', $dataUpdate);
  100.                 }
  101.             }
  102.  
  103.             // Insert Jenis Cuti
  104.             $listJenisCuti = $this->db->order_by('jenis_cuti_id', 'asc')->get_where('v_jenis_cuti', array('jenis_cuti_rekap' => 'Y'))->result();
  105.             foreach ($listJenisCuti as $cuti) {
  106.                 $jenis_cuti_id = $cuti->jenis_cuti_id;
  107.                 $checkDataCuti = $this->db->get_where('sihadir_lap_rekap', array('pegawai_id' => $pegawai_id, 'lap_rekap_bulan' => $bulan, 'lap_rekap_tahun' => $tahun, 'komponen_id' => $jenis_cuti_id, 'lap_rekap_tipe' => 'C'))->row();
  108.                 if (count($checkDataCuti) == 0) {
  109.                     $data = array(
  110.                         'pegawai_id'         => $pegawai_id,
  111.                         'opd_id'             => $opd_id,
  112.                         'lap_rekap_bulan'    => $bulan,
  113.                         'lap_rekap_tahun'    => $tahun,
  114.                         'komponen_id'        => $jenis_cuti_id,
  115.                         'lap_rekap_jumlah'   => 0,
  116.                         'lap_rekap_potongan' => 0,
  117.                         'lap_rekap_tipe'     => 'C',
  118.                         'lap_rekap_update'   => date('Y-m-d H:i:s'),
  119.                     );
  120.  
  121.                     $this->db->insert('sihadir_lap_rekap', $data);
  122.                 } else {
  123.                     $lap_rekap_id = $checkDataCuti->lap_rekap_id;
  124.                     $dataUpdate   = array(
  125.                         'lap_rekap_jumlah'   => 0,
  126.                         'lap_rekap_potongan' => 0,
  127.                     );
  128.  
  129.                     $this->db->where('lap_rekap_id', $lap_rekap_id);
  130.                     $this->db->update('sihadir_lap_rekap', $dataUpdate);
  131.                 }
  132.             }
  133.  
  134.             // Insert Default Potongan Rekap
  135.             $checkDataRekapPotongan = $this->db->get_where('sihadir_potongan_rekap', array('pegawai_id' => $pegawai_id, 'potongan_rekap_bulan' => $bulan, 'potongan_rekap_tahun' => $tahun))->row();
  136.             if (count($checkDataRekapPotongan) == 0) {
  137.                 $data = array(
  138.                     'pegawai_id'                  => $pegawai_id,
  139.                     'opd_id'                      => $opd_id,
  140.                     'potongan_rekap_bulan'        => $bulan,
  141.                     'potongan_rekap_tahun'        => $tahun,
  142.                     'potongan_rekap_hrkerja'      => 0,
  143.                     'potongan_rekap_masuk'        => 0,
  144.                     'potongan_rekap_tdkmasuk'     => 0,
  145.                     'potongan_rekap_lainnya'      => 0,
  146.                     'potongan_rekap_persen'       => 0,
  147.                     'potongan_rekap_persen_total' => 0,
  148.                     'potongan_rekap_update'       => date('Y-m-d H:i:s'),
  149.                 );
  150.  
  151.                 $this->db->insert('sihadir_potongan_rekap', $data);
  152.             } else {
  153.                 $potongan_rekap_id = $checkDataRekapPotongan->potongan_rekap_id;
  154.                 $dataUpdate        = array(
  155.                     'potongan_rekap_hrkerja'      => 0,
  156.                     'potongan_rekap_masuk'        => 0,
  157.                     'potongan_rekap_tdkmasuk'     => 0,
  158.                     'potongan_rekap_persen'       => 0,
  159.                     'potongan_rekap_persen_total' => 0,
  160.                 );
  161.  
  162.                 $this->db->where('potongan_rekap_id', $potongan_rekap_id);
  163.                 $this->db->update('sihadir_potongan_rekap', $dataUpdate);
  164.             }
  165.  
  166.             // Cari data Absen telat per Bulan Tahun
  167.             $totalpersentelat = 0;
  168.             $listAbsenTelat   = $this->db->order_by('absensi_tanggal', 'asc')->get_where('v_absensi', array('MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'absensi_telat !=' => '', 'absensi_in !=' => '', 'absensi_out !=' => '', 'absensi_posting' => 'Y', 'pegawai_id' => $pegawai_id))->result();
  169.             if (count($listAbsenTelat) > 0) {
  170.                 foreach ($listAbsenTelat as $a) {
  171.                     $jam_telat = $a->absensi_telat;
  172.                     // Parameter Rekap Telat
  173.                     $listParameterTelat = $this->db->order_by('parameter_rekap_id', 'asc')->get_where('sihadir_parameter_rekap', array('parameter_rekap_tipe' => 'T'))->result();
  174.                     foreach ($listParameterTelat as $paratelat) {
  175.                         $parameter_rekap_id       = $paratelat->parameter_rekap_id;
  176.                         $parameter_rekap_min      = $paratelat->parameter_rekap_min;
  177.                         $parameter_rekap_max      = $paratelat->parameter_rekap_max;
  178.                         $parameter_rekap_potongan = $paratelat->parameter_rekap_potongan;
  179.                         $dataParameterTelat       = $this->db->get_where('sihadir_lap_rekap', array('pegawai_id' => $pegawai_id, 'lap_rekap_bulan' => $bulan, 'lap_rekap_tahun' => $tahun, 'komponen_id' => $parameter_rekap_id, 'lap_rekap_tipe' => 'P'))->row();
  180.                         // Update Jumlah jika Masuk Kategori
  181.                         if ($jam_telat >= $parameter_rekap_min && $jam_telat <= $parameter_rekap_max) {
  182.                             $lap_rekap_id = $dataParameterTelat->lap_rekap_id;
  183.                             $jumlah       = $dataParameterTelat->lap_rekap_jumlah;
  184.                             $potongan     = $dataParameterTelat->lap_rekap_potongan;
  185.                             $data         = array(
  186.                                 'lap_rekap_jumlah'   => ($jumlah + 1),
  187.                                 'lap_rekap_potongan' => ($potongan + $parameter_rekap_potongan),
  188.                                 'lap_rekap_update'   => date('Y-m-d H:i:s'),
  189.                             );
  190.  
  191.                             $this->db->where('lap_rekap_id', $lap_rekap_id);
  192.                             $this->db->update('sihadir_lap_rekap', $data);
  193.                         }
  194.                     }
  195.                 }
  196.             }
  197.  
  198.             // List Absen Pulang Cepat
  199.             $totalpersencepat = 0;
  200.             $listAbsenCepat   = $this->db->order_by('absensi_tanggal', 'asc')->get_where('v_absensi', array('MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'absensi_plg_cepat !=' => '', 'absensi_in !=' => '', 'absensi_out !=' => '', 'absensi_posting' => 'Y', 'pegawai_id' => $pegawai_id))->result();
  201.             if (count($listAbsenCepat) > 0) {
  202.                 foreach ($listAbsenCepat as $a) {
  203.                     $jam_cepat = $a->absensi_plg_cepat;
  204.                     // Parameter Rekap Pulang Cepat
  205.                     $listParameterCepat = $this->db->order_by('parameter_rekap_id', 'asc')->get_where('sihadir_parameter_rekap', array('parameter_rekap_tipe' => 'P'))->result();
  206.                     foreach ($listParameterCepat as $paracepat) {
  207.                         $parameter_rekap_id       = $paracepat->parameter_rekap_id;
  208.                         $parameter_rekap_min      = $paracepat->parameter_rekap_min;
  209.                         $parameter_rekap_max      = $paracepat->parameter_rekap_max;
  210.                         $parameter_rekap_potongan = $paracepat->parameter_rekap_potongan;
  211.                         $dataParameterCepat       = $this->db->get_where('sihadir_lap_rekap', array('pegawai_id' => $pegawai_id, 'lap_rekap_bulan' => $bulan, 'lap_rekap_tahun' => $tahun, 'komponen_id' => $parameter_rekap_id, 'lap_rekap_tipe' => 'P'))->row();
  212.                         // Update Jumlah jika Masuk Kategori
  213.                         if ($jam_cepat >= $parameter_rekap_min && $jam_cepat <= $parameter_rekap_max) {
  214.                             $lap_rekap_id = $dataParameterCepat->lap_rekap_id;
  215.                             $jumlah       = $dataParameterCepat->lap_rekap_jumlah;
  216.                             $potongan     = $dataParameterCepat->lap_rekap_potongan;
  217.                             $data         = array(
  218.                                 'lap_rekap_jumlah'   => ($jumlah + 1),
  219.                                 'lap_rekap_potongan' => ($potongan + $parameter_rekap_potongan),
  220.                                 'lap_rekap_update'   => date('Y-m-d H:i:s'),
  221.                             );
  222.  
  223.                             $this->db->where('lap_rekap_id', $lap_rekap_id);
  224.                             $this->db->update('sihadir_lap_rekap', $data);
  225.                         }
  226.                     }
  227.                 }
  228.             }
  229.  
  230.             // Rekap Absen Cuti/Absen
  231.             $totalpotongancuti = 0;
  232.             $listCuti          = $this->db->order_by('absensi_tanggal', 'asc')->get_where('v_absensi', array('MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'absensi_posting' => 'Y', 'jenis_cuti_rekap' => 'Y', 'jenis_cuti_default' => 'T', 'jenis_cuti_wfh' => 'T', 'pegawai_id' => $pegawai_id))->result();
  233.             foreach ($listCuti as $c) {
  234.                 $jenis_cuti_id       = $c->jenis_cuti_id;
  235.                 $jenis_cuti_potongan = $c->jenis_cuti_potongan;
  236.                 $dataParameterCuti   = $this->db->get_where('sihadir_lap_rekap', array('pegawai_id' => $pegawai_id, 'lap_rekap_bulan' => $bulan, 'lap_rekap_tahun' => $tahun, 'komponen_id' => $jenis_cuti_id, 'lap_rekap_tipe' => 'C'))->row();
  237.                 if (count($dataParameterCuti) > 0) {
  238.                     $lap_rekap_id = $dataParameterCuti->lap_rekap_id;
  239.                     $jumlah       = $dataParameterCuti->lap_rekap_jumlah;
  240.                     $potongan     = $dataParameterCuti->lap_rekap_potongan;
  241.                     $data         = array(
  242.                         'lap_rekap_jumlah'   => ($jumlah + 1),
  243.                         'lap_rekap_potongan' => ($potongan + $jenis_cuti_potongan),
  244.                         'lap_rekap_update'   => date('Y-m-d H:i:s'),
  245.                     );
  246.  
  247.                     $this->db->where('lap_rekap_id', $lap_rekap_id);
  248.                     $this->db->update('sihadir_lap_rekap', $data);
  249.                 }
  250.             }
  251.  
  252.             // Total Persen Telat/PC
  253.             $dataTotalPersenTelatCepat = $this->db->select_sum('lap_rekap_potongan', 'totalpersentelatcepat')->get_where('sihadir_lap_rekap', array('pegawai_id' => $pegawai_id, 'lap_rekap_bulan' => $bulan, 'lap_rekap_tahun' => $tahun, 'lap_rekap_tipe' => 'P'))->row();
  254.             if (count($dataTotalPersenTelatCepat) > 0) {
  255.                 $totalpotongantelatcepat = $dataTotalPersenTelatCepat->totalpersentelatcepat;
  256.             } else {
  257.                 $totalpotongantelatcepat = 0;
  258.             }
  259.  
  260.             // Total Potongan Cuti
  261.             $dataTotalPotonganCuti = $this->db->select_sum('lap_rekap_potongan', 'totalpotongancuti')->get_where('sihadir_lap_rekap', array('pegawai_id' => $pegawai_id, 'lap_rekap_bulan' => $bulan, 'lap_rekap_tahun' => $tahun, 'lap_rekap_tipe' => 'C'))->row();
  262.             if (count($dataTotalPotonganCuti) > 0) {
  263.                 $totalpotongancuti = $dataTotalPotonganCuti->totalpotongancuti;
  264.             } else {
  265.                 $totalpotongancuti = 0;
  266.             }
  267.  
  268.             // Total Cuti
  269.             $listCutiNonAlpha = $this->db->order_by('absensi_tanggal', 'asc')->get_where('v_absensi', array('MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'absensi_posting' => 'Y', 'jenis_cuti_rekap' => 'Y', 'jenis_cuti_default' => 'T', 'pegawai_id' => $pegawai_id))->result();
  270.             $jumlahcuti       = count($listCutiNonAlpha);
  271.             // Hitung Hari Kerja
  272.             $dataJadwal          = $this->db->get_where('v_jadwal_kerja', array('pegawai_id' => $pegawai_id, 'MONTH(jadwal_kerja_tanggal)' => $bulan, 'YEAR(jadwal_kerja_tanggal)' => $tahun, 'jam_kerja_status_libur' => 0))->result();
  273.             $harikerja           = count($dataJadwal);
  274.             $dataLibur           = $this->db->get_where('v_hari_libur', array('MONTH(hari_libur_tanggal)' => $bulan, 'YEAR(hari_libur_tanggal)' => $tahun))->result();
  275.             $harilibur           = count($dataLibur);
  276.             $hrkerja             = ($harikerja - $harilibur);
  277.             $totalpersenpotongan = ($totalpotongantelatcepat + $totalpotongancuti);
  278.             // SUM Potongan
  279.             $dataPotongan  = $this->db->get_where('sihadir_potongan_rekap', array('pegawai_id' => $pegawai_id, 'potongan_rekap_bulan' => $bulan, 'potongan_rekap_tahun' => $tahun))->row();
  280.             $dataMasuk     = $this->db->get_where('sihadir_absensi', array('pegawai_id' => $pegawai_id, 'MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'absensi_in !=' => '', 'absensi_out !=' => '', 'absensi_posting' => 'Y', 'absensi_libur' => 0))->result();
  281.             $dataInKosong  = $this->db->get_where('sihadir_absensi', array('pegawai_id' => $pegawai_id, 'MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'absensi_in' => '', 'absensi_out !=' => '', 'absensi_posting' => 'Y', 'absensi_libur' => 0))->result();
  282.             $dataOutKosong = $this->db->get_where('sihadir_absensi', array('pegawai_id' => $pegawai_id, 'MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'absensi_in !=' => '', 'absensi_out' => '', 'absensi_posting' => 'Y', 'absensi_libur' => 0))->result();
  283.             $dataLainya    = $this->db->get_where('v_absensi', array('pegawai_id' => $pegawai_id, 'MONTH(absensi_tanggal)' => $bulan, 'YEAR(absensi_tanggal)' => $tahun, 'jenis_cuti_rekap' => 'T', 'absensi_posting' => 'Y', 'absensi_libur' => 0))->result();
  284.             $Masuk         = count($dataMasuk);
  285.             $InKosong      = count($dataInKosong);
  286.             $OutKosong     = count($dataOutKosong);
  287.             $Lainnya       = count($dataLainya);
  288.             $TotalAbsen    = ($Masuk + $Lainnya + $jumlahcuti);
  289.             $tidakmasuk    = ($hrkerja - $TotalAbsen);
  290.  
  291.             // Potongan Alpha
  292.             $dataPotonganAlpha    = $this->db->get_where('v_jenis_cuti', array('jenis_cuti_default' => 'Y'))->row();
  293.             $potonganalpha        = ($dataPotonganAlpha->jenis_cuti_potongan * $tidakmasuk);
  294.             $totalrekappotongan   = ($totalpersenpotongan + ($potonganalpha > 100 ? 100 : $potonganalpha));
  295.             $totalpersenkehadiran = (100 - $totalrekappotongan);
  296.  
  297.             // echo $pegawai_nama . ' Hari : ' . $harikerja . '-' . $harilibur . ' : ' . $hrkerja . ' Cuti Non Alpha : ' . $jumlahcuti . ' Telat : ' . $totalpersentelat . ' Cepat : ' . $totalpersencepat . ' Pot. Cuti : ' . $totalpotongancuti . ' Masuk : ' . $Masuk . ' Tdk Masuk : ' . $tidakmasuk . ' Pot. Alpha : ' . $potonganalpha . ' Rekap Potongan : ' . $totalrekappotongan . ' Kehadiran : ' . $totalpersenkehadiran . ' In Kosong : ' . $InKosong . ' Out Kosong : ' . $OutKosong . '<br>';
  298.  
  299.             if (count($dataPotongan) > 0) {
  300.                 $potongan_rekap_id = $dataPotongan->potongan_rekap_id;
  301.                 $dataUpdate        = array(
  302.                     'potongan_rekap_hrkerja'      => $hrkerja,
  303.                     'potongan_rekap_masuk'        => $Masuk,
  304.                     'potongan_rekap_tdkmasuk'     => $tidakmasuk,
  305.                     'potongan_rekap_lainnya'      => $Lainnya,
  306.                     'potongan_rekap_persen'       => $totalrekappotongan,
  307.                     'potongan_rekap_persen_total' => $totalpersenkehadiran,
  308.                 );
  309.  
  310.                 $this->db->where('potongan_rekap_id', $potongan_rekap_id);
  311.                 $this->db->update('sihadir_potongan_rekap', $dataUpdate);
  312.             }
  313.         }
  314.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement