aantamimmaarif

validasi client

Sep 27th, 2022
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.22 KB | None | 0 0
  1. public function kalkulasiCuti2(Request $req) {
  2.         $nik = $req['nik'];
  3.         $nik_first_string = substr($nik, 0, 1);
  4.  
  5.         $dari = $req['dari'];
  6.         $year = $req['sampai'];
  7.  
  8.         if($dari) {
  9.             $thn_bln_input = explode('-', $dari)[0].explode('-', $dari)[1];
  10.             $thn_bln_input = (int)$thn_bln_input;
  11.  
  12.             $year = explode('-', $dari)[0];
  13.             $month = explode('-', $dari)[1];
  14.             $date_1 = Carbon::create($year, $month)->startOfMonth()->format('Y-m-d'); //returns 2020-03-01
  15.             $date_2 = Carbon::create($year, $month)->lastOfMonth()->format('Y-m-d'); //returns 2020-03-31
  16.         }
  17.  
  18.         $jenis = $req['jenis'];
  19.  
  20.         $thini = date('Y');
  21.  
  22.         $opsi = JenisCutiModel::where('id_absen', $jenis)->first(); // saldo cuti general berdasarkan jenis cuti
  23.         $info = KaryawanModel::select(
  24.             'Nik',
  25.             'Nama',
  26.             'Jenkel',
  27.             'Agama',
  28.             'Golongandarah',
  29.             'Tgllahir',
  30.             'kotalahir',
  31.             'Alamat',
  32.             'Kodepos',
  33.             'kotaalamat',
  34.             'Provinsi',
  35.             'Kodedepartement',
  36.             'Kodebagian',
  37.             'kodeposisi',
  38.             'kodegroup',
  39.             'Mulaikerja',
  40.             'kodestatus',
  41.             'mulaipkwt',
  42.             'selesaipkwt',
  43.             'namaibu',
  44.             'email',
  45.             'tglthr',
  46.             'kodecabang')->where('Nik', $nik)->first();
  47.  
  48.         // Angka 8/9 di huruf pertama NIK adalah kode untuk Management
  49.         // Angka 1 di huruf pertama NIK adalah kode untuk Karyawan Tetap
  50.         if($nik_first_string == 8 || $nik_first_string == 9 || $nik_first_string == 1) {
  51.             $mulaipkwt = date('Y-01-01');
  52.             $selesaipkwt = date('Y-12-31');
  53.         } else {
  54.             if($info->Mulaikerja > $info->mulaipkwt) {
  55.                 $mulaipkwt = $info->Mulaikerja;
  56.             } else {
  57.                 $mulaipkwt = $info->mulaipkwt;
  58.             }
  59.             $selesaipkwt = $info->selesaipkwt;
  60.         }
  61.  
  62.         $adj_cuti = CutiAdjustmentModel::where(['nik' => $nik, 'id_absen' => $jenis, 'mulai' => $mulaipkwt, 'selesai' => $selesaipkwt])->first();
  63.         if($adj_cuti) {
  64.             $adjustment_saldo = substr($adj_cuti->adjusment, 0, 1);
  65.             $minus = false;
  66.             if($adjustment_saldo == '-') {
  67.                 $minus = true;
  68.                 $adjustment_saldo = str_replace('-', '', $adj_cuti->adjusment);
  69.             } else {
  70.                 $adjustment_saldo = $adj_cuti->adjusment;
  71.             }
  72.         }
  73.  
  74.         // total pengajuan cuti yang disetujui
  75.         if($jenis == 'CH') {
  76.             $total_sql = "select sum(selisih) as jml from ( select * from (select tanggal_mulai,id_absen,datediff(tanggal_akhir, tanggal_mulai) + 1 as selisih,acc,acc_hr from pengajuan_cuti_tab b where b.id_absen = '".$jenis."' and b.nik_karyawan = '".$nik."' and b.deleted_at IS NULL and b.tanggal_mulai BETWEEN '".$date_1."' and '".$date_2."' UNION ALL (select tanggal,id_absen,'1','-','-' from absensi a where a.id_absen = '".$jenis."' and a.nik = '".$nik."' and a.tanggal BETWEEN '".$date_1."' and '".$date_2."'   and a.tanggal not in (select tanggal from absensi join pengajuan_cuti_tab on pengajuan_cuti_tab.nik_karyawan = absensi.nik where  absensi.id_absen = '".$jenis."' and absensi.nik = '".$nik."'  and absensi.tanggal BETWEEN tanggal_mulai and tanggal_akhir and  a.tanggal BETWEEN '".$date_1."' and '".$date_2."'))) as hasil GROUP BY tanggal_mulai) as hasil2  WHERE acc <> 'DITOLAK' or acc IS NULL AND acc_hr <> '0' or acc_hr IS NULL";
  77.         } else {
  78.             $total_sql = "select sum(selisih) as jml from ( select * from (select tanggal_mulai,id_absen,datediff(tanggal_akhir, tanggal_mulai) + 1 as selisih,acc,acc_hr from pengajuan_cuti_tab b where b.id_absen = '".$jenis."' and b.nik_karyawan = '".$nik."' and b.deleted_at IS NULL and b.tanggal_mulai BETWEEN '".$mulaipkwt."' and '".$selesaipkwt."' UNION ALL (select tanggal,id_absen,'1','-','-' from absensi a where a.id_absen = '".$jenis."' and a.nik = '".$nik."' and a.tanggal BETWEEN '".$mulaipkwt."' and '".$selesaipkwt."'   and a.tanggal not in (select tanggal from absensi join pengajuan_cuti_tab on pengajuan_cuti_tab.nik_karyawan = absensi.nik where  absensi.id_absen = '".$jenis."' and absensi.nik = '".$nik."'  and absensi.tanggal BETWEEN tanggal_mulai and tanggal_akhir and  a.tanggal BETWEEN '".$mulaipkwt."' and '".$selesaipkwt."'))) as hasil GROUP BY tanggal_mulai) as hasil2  WHERE acc <> 'DITOLAK' or acc IS NULL AND acc_hr <> '0' or acc_hr IS NULL";
  79.         }
  80.  
  81.         $total = (int)DB::select($total_sql)[0]->jml;
  82.         // dd($total);
  83.         // dd(DB::select($total_sql));
  84.  
  85.         $tahunan_kary_tetap = ['CT', 'I', 'SD', 'CP']; // auto 12, jan-des
  86.         $tahunan_manager = ['CTM', 'IM', 'SD']; // auto 12, jan-des. Khusus CTM 14
  87.         $ultah_kontrak = ['I', 'SD']; // mengikuti durasi pkwt
  88.  
  89.         // sesuai default saldo di dataabsen
  90.         $sesuai_dataabsen = ['A', 'CM', 'DL', 'SDO', 'ACC', 'CHJ'];
  91.         // cuti tanpa dikurangi total pengajuan, unlimited is real!
  92.         $unlimited_pengajuan = ['CAK','CKH','CB','CKM','CIM','CGK','CIK','CK'];
  93.  
  94.         // Jenis Cuti                       ID  Aturan                              Saldo dataabsen
  95.         // Cuti Haid                        CH  1 Bulan Max 2                       2
  96.         // Mangkir                          A                                       12
  97.         // Cuti Menikahkan Anak             CAK Tidak ada batasan                   2
  98.         // Cuti Mengkhitankan               CKH Tidak ada batasan                   2
  99.         // Cuti Membabtiskan                CB  Tidak ada batasan                   2
  100.         // Cuti Keluarga Meninggal          CKM Tidak ada batasan                   2
  101.         // Cuti Istri Melahirkan            CIM Tidak ada batasan                   2
  102.         // Cuti Melahirkan                  CM  Sesuai default saldo di dataabsen   90
  103.         // Dinas Luar                       DL                                      365
  104.         // Cuti Sakit (Opname)              SDO                                     365
  105.         // Cuti Tahunan                     CT                                      12
  106.         // Cuti Tahunan Manager             CTM                                     12
  107.         // Cuti Panjang                     CP                                      60
  108.         // Cuti Sakit (Kecelakaan Kerja)    ACC                                     365
  109.         // Izin Pribadi                     I                                       12
  110.         // Izin Pribadi Manager             IM                                      12
  111.         // Cuti Keguguran                   CGK Tidak ada batasan                   45
  112.         // Cuti Istri Keguguran             CIK Sesuai default saldo di dataabsen   2
  113.         // Cuti Kawin                       CK  Tidak ada batasan                   3
  114.         // Cuti Sakit                       SD                                      12
  115.  
  116.  
  117.         $jatah = 0;
  118.  
  119.         $mpkwt = new Carbon($mulaipkwt);
  120.         $spkwt = new Carbon($selesaipkwt);
  121.         $spkwt->addDays(1);
  122.         $ipkwt = $mpkwt->diff($spkwt); // selisih bulan+day
  123.  
  124.         if($ipkwt->y == 1) {
  125.             $range = 12;
  126.         } else {
  127.             $range = $ipkwt->m;
  128.         }
  129.  
  130.         if (in_array($jenis, $sesuai_dataabsen) || in_array($jenis, $unlimited_pengajuan)) { // Cuti Melahirkan Sesuai default saldo di dataabsen
  131.             $batasmaksimal = isset($opsi->batasmaksimal) ? $opsi->batasmaksimal : 0; // batas maksimal cuti global dari table dataabsen
  132.         }
  133.  
  134.         // dd($thn_bln_input.'-'.$thn_bln);
  135.         // dd($total);
  136.         if($jenis == 'CH' || $jenis == 'CIK') {
  137.             if($total == 2) { // jika mengajukan cuti haid sebanyak 2 di bulan yang sama, batas maksimal 0, gak iso cuti
  138.                 $batasmaksimal = 0;
  139.             } elseif($total == 1) {
  140.                 $batasmaksimal = 1;
  141.             }  else {
  142.                 $batasmaksimal = isset($opsi->batasmaksimal) ? $opsi->batasmaksimal : 0;
  143.             }
  144.         }
  145.         // dd($batasmaksimal);
  146.  
  147.         // Angka 8/9 di huruf pertama NIK adalah kode untuk Management
  148.         if($nik_first_string == 8 || $nik_first_string == 9) {
  149.             if (in_array($jenis, ['IM', 'SD'])) {
  150.                 $batasmaksimal = 12;
  151.             } else if($jenis == 'CTM') {
  152.                 $batasmaksimal = 14;
  153.             }
  154.         } else if ($nik_first_string == 1){ // Angka 1 di huruf pertama NIK adalah kode untuk Karyawan Tetap
  155.             if (in_array($jenis, $tahunan_kary_tetap)) {
  156.                 $batasmaksimal = 12;
  157.             }
  158.         } else { // karyawan staff
  159.             if (in_array($jenis, $ultah_kontrak)) {
  160.                 $batasmaksimal = $range; // berdasarkan kontrak pkwt, misal kontrak 6 bulan, jatah cuti 6
  161.             }
  162.         }
  163.  
  164.         if($adj_cuti) {
  165.             if($minus == true) {
  166.                 $jatah = (int)$batasmaksimal-(int)$adjustment_saldo;
  167.             } else {
  168.                 $jatah = (int)$batasmaksimal+(int)$adjustment_saldo;
  169.             }
  170.         } else {
  171.             $jatah = $batasmaksimal;
  172.         }
  173.  
  174.         $sisa = $jatah - $total;
  175.         // dd('sisa='.$sisa.', jatah='.$jatah.', total='.$total);
  176.         // dd($sisa);
  177.         // dd($jatah);
  178.         // dd($total);
  179.         $mulai = new Carbon($dari);
  180.         $akhir = new Carbon($year);
  181.         $interval = $mulai->diff($akhir);
  182.         $woweekends = 0;
  183.         for ($i = 0; $i <= $interval->d; $i++) {
  184.             $modif = $mulai->modify('+1 day');
  185.             $weekday = $mulai->format('w');
  186.  
  187.             // if($weekday != 0){ // 0 for Sunday and 6 for Saturday
  188.             $woweekends++;
  189.             // }
  190.  
  191.         }
  192.  
  193.         // dd($jatah.'-'.$total);
  194.         // $totalakhir = $sisa - $woweekends;
  195.         if(in_array($jenis, $unlimited_pengajuan)) {
  196.             $totalakhir = $jatah; // tanpa dikurangi total pengajuan, unlimited is real!
  197.         } else if($jenis == 'CH' || $jenis == 'CIK') {
  198.             if($total == 2) { // jika mengajukan cuti haid sebanyak 2 di bulan yang sama, batas maksimal 0, gak iso cuti
  199.                 $totalakhir = 0;
  200.             } elseif($total == 1) {
  201.                 $totalakhir = 1;
  202.             } else {
  203.                 $totalakhir = $jatah;
  204.             }
  205.         } else {
  206.             $totalakhir = $sisa;
  207.         }
  208.  
  209.         $pesan = "";
  210.         if ($totalakhir <= 0) {
  211.             $pesan = __('locale.Maaf Anda Melebihi batas pengambilan ijin');
  212.         }
  213.         // dd($totalakhir);
  214.         return ["kalkulasi" => $totalakhir, "hariajuan" => $woweekends, "pesan" => $pesan];
  215.  
  216.         //    dd($total) ;
  217.     }
  218.  
  219.  
  220.  
  221.  
  222.  
  223. // blade
  224.  
  225.  function kalkulasi(param)
  226.   {
  227.     $('button.ajukancuti').show()
  228.  
  229.     var dari    = $('input[name="darimodal"]').val()
  230.     var sampai  = $('input[name="sampaimodal"]').val()
  231.  
  232.     var d1 = new Date(document.getElementById("tgl_from").value);
  233.     var d2 = new Date(document.getElementById("tgl_to").value);
  234.     var timeDiff = Math.abs(d2.getTime() - d1.getTime());
  235.     var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24) + 1);
  236.  
  237.     $.ajax({
  238.         data: {
  239.             '_token': "{{ csrf_token() }}",
  240.             'dari':dari,
  241.             'sampai':sampai,
  242.             'jenis':param,
  243.             'nik': "{{ session('nik') }}"
  244.         },
  245.         url:"{{ url("/kalkulasi_cuti")}}",
  246.         type:"POST",
  247.         async:false,
  248.         success:function(data){
  249.             // console.log(diffDays);
  250.             $('input[name="sisacuti"]').val(data["kalkulasi"])
  251.             $('input[name="totalajuan"]').val(diffDays);
  252.  
  253.             if(diffDays > data["kalkulasi"]) {
  254.                 $('button.ajukancuti').hide();
  255.                 $('#tgl_from').val('');
  256.                 $('#tgl_to').val('');
  257.                 $('#cuti_opsi').val('');
  258.                 Swal.fire({title:"{{__('locale.Tanggal yang anda pilih melebihi sisa cuti')}}",type:"error",confirmButtonClass:"btn btn-success",buttonsStyling:!1})
  259.             } else {
  260.                 $('button.ajukancuti').show();
  261.             }
  262.             //   if(diffDays < data["kalkulasi"]) {
  263.             //     $('#btnSubmit').removeAttr("disabled","disabled");
  264.             //   }
  265.             if(data["kalkulasi"] < 1){
  266.                 $('p.infoct').html(data["pesan"]).removeClass('hidden');
  267.                 $('button.ajukancuti').hide();
  268.             }else{
  269.                 $('p.infoct').html("").addClass('hidden');
  270.                 $('button.ajukancuti').show()
  271.             }
  272.         },
  273.         error: function(err){
  274.             alert("ERROR:"+err.statusText);
  275.             $('#tgl_from').val('');
  276.             $('#tgl_to').val('');
  277.             $('#cuti_opsi').val('');
  278.             $('button.ajukancuti').hide();
  279.         }
  280.     });
  281.  
  282.   }
Add Comment
Please, Sign In to add comment