Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function kalkulasiCuti2(Request $req) {
- $nik = $req['nik'];
- $nik_first_string = substr($nik, 0, 1);
- $dari = $req['dari'];
- $year = $req['sampai'];
- if($dari) {
- $thn_bln_input = explode('-', $dari)[0].explode('-', $dari)[1];
- $thn_bln_input = (int)$thn_bln_input;
- $year = explode('-', $dari)[0];
- $month = explode('-', $dari)[1];
- $date_1 = Carbon::create($year, $month)->startOfMonth()->format('Y-m-d'); //returns 2020-03-01
- $date_2 = Carbon::create($year, $month)->lastOfMonth()->format('Y-m-d'); //returns 2020-03-31
- }
- $jenis = $req['jenis'];
- $thini = date('Y');
- $opsi = JenisCutiModel::where('id_absen', $jenis)->first(); // saldo cuti general berdasarkan jenis cuti
- $info = KaryawanModel::select(
- 'Nik',
- 'Nama',
- 'Jenkel',
- 'Agama',
- 'Golongandarah',
- 'Tgllahir',
- 'kotalahir',
- 'Alamat',
- 'Kodepos',
- 'kotaalamat',
- 'Provinsi',
- 'Kodedepartement',
- 'Kodebagian',
- 'kodeposisi',
- 'kodegroup',
- 'Mulaikerja',
- 'kodestatus',
- 'mulaipkwt',
- 'selesaipkwt',
- 'namaibu',
- 'email',
- 'tglthr',
- 'kodecabang')->where('Nik', $nik)->first();
- // Angka 8/9 di huruf pertama NIK adalah kode untuk Management
- // Angka 1 di huruf pertama NIK adalah kode untuk Karyawan Tetap
- if($nik_first_string == 8 || $nik_first_string == 9 || $nik_first_string == 1) {
- $mulaipkwt = date('Y-01-01');
- $selesaipkwt = date('Y-12-31');
- } else {
- if($info->Mulaikerja > $info->mulaipkwt) {
- $mulaipkwt = $info->Mulaikerja;
- } else {
- $mulaipkwt = $info->mulaipkwt;
- }
- $selesaipkwt = $info->selesaipkwt;
- }
- $adj_cuti = CutiAdjustmentModel::where(['nik' => $nik, 'id_absen' => $jenis, 'mulai' => $mulaipkwt, 'selesai' => $selesaipkwt])->first();
- if($adj_cuti) {
- $adjustment_saldo = substr($adj_cuti->adjusment, 0, 1);
- $minus = false;
- if($adjustment_saldo == '-') {
- $minus = true;
- $adjustment_saldo = str_replace('-', '', $adj_cuti->adjusment);
- } else {
- $adjustment_saldo = $adj_cuti->adjusment;
- }
- }
- // total pengajuan cuti yang disetujui
- if($jenis == 'CH') {
- $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";
- } else {
- $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";
- }
- $total = (int)DB::select($total_sql)[0]->jml;
- // dd($total);
- // dd(DB::select($total_sql));
- $tahunan_kary_tetap = ['CT', 'I', 'SD', 'CP']; // auto 12, jan-des
- $tahunan_manager = ['CTM', 'IM', 'SD']; // auto 12, jan-des. Khusus CTM 14
- $ultah_kontrak = ['I', 'SD']; // mengikuti durasi pkwt
- // sesuai default saldo di dataabsen
- $sesuai_dataabsen = ['A', 'CM', 'DL', 'SDO', 'ACC', 'CHJ'];
- // cuti tanpa dikurangi total pengajuan, unlimited is real!
- $unlimited_pengajuan = ['CAK','CKH','CB','CKM','CIM','CGK','CIK','CK'];
- // Jenis Cuti ID Aturan Saldo dataabsen
- // Cuti Haid CH 1 Bulan Max 2 2
- // Mangkir A 12
- // Cuti Menikahkan Anak CAK Tidak ada batasan 2
- // Cuti Mengkhitankan CKH Tidak ada batasan 2
- // Cuti Membabtiskan CB Tidak ada batasan 2
- // Cuti Keluarga Meninggal CKM Tidak ada batasan 2
- // Cuti Istri Melahirkan CIM Tidak ada batasan 2
- // Cuti Melahirkan CM Sesuai default saldo di dataabsen 90
- // Dinas Luar DL 365
- // Cuti Sakit (Opname) SDO 365
- // Cuti Tahunan CT 12
- // Cuti Tahunan Manager CTM 12
- // Cuti Panjang CP 60
- // Cuti Sakit (Kecelakaan Kerja) ACC 365
- // Izin Pribadi I 12
- // Izin Pribadi Manager IM 12
- // Cuti Keguguran CGK Tidak ada batasan 45
- // Cuti Istri Keguguran CIK Sesuai default saldo di dataabsen 2
- // Cuti Kawin CK Tidak ada batasan 3
- // Cuti Sakit SD 12
- $jatah = 0;
- $mpkwt = new Carbon($mulaipkwt);
- $spkwt = new Carbon($selesaipkwt);
- $spkwt->addDays(1);
- $ipkwt = $mpkwt->diff($spkwt); // selisih bulan+day
- if($ipkwt->y == 1) {
- $range = 12;
- } else {
- $range = $ipkwt->m;
- }
- if (in_array($jenis, $sesuai_dataabsen) || in_array($jenis, $unlimited_pengajuan)) { // Cuti Melahirkan Sesuai default saldo di dataabsen
- $batasmaksimal = isset($opsi->batasmaksimal) ? $opsi->batasmaksimal : 0; // batas maksimal cuti global dari table dataabsen
- }
- // dd($thn_bln_input.'-'.$thn_bln);
- // dd($total);
- if($jenis == 'CH' || $jenis == 'CIK') {
- if($total == 2) { // jika mengajukan cuti haid sebanyak 2 di bulan yang sama, batas maksimal 0, gak iso cuti
- $batasmaksimal = 0;
- } elseif($total == 1) {
- $batasmaksimal = 1;
- } else {
- $batasmaksimal = isset($opsi->batasmaksimal) ? $opsi->batasmaksimal : 0;
- }
- }
- // dd($batasmaksimal);
- // Angka 8/9 di huruf pertama NIK adalah kode untuk Management
- if($nik_first_string == 8 || $nik_first_string == 9) {
- if (in_array($jenis, ['IM', 'SD'])) {
- $batasmaksimal = 12;
- } else if($jenis == 'CTM') {
- $batasmaksimal = 14;
- }
- } else if ($nik_first_string == 1){ // Angka 1 di huruf pertama NIK adalah kode untuk Karyawan Tetap
- if (in_array($jenis, $tahunan_kary_tetap)) {
- $batasmaksimal = 12;
- }
- } else { // karyawan staff
- if (in_array($jenis, $ultah_kontrak)) {
- $batasmaksimal = $range; // berdasarkan kontrak pkwt, misal kontrak 6 bulan, jatah cuti 6
- }
- }
- if($adj_cuti) {
- if($minus == true) {
- $jatah = (int)$batasmaksimal-(int)$adjustment_saldo;
- } else {
- $jatah = (int)$batasmaksimal+(int)$adjustment_saldo;
- }
- } else {
- $jatah = $batasmaksimal;
- }
- $sisa = $jatah - $total;
- // dd('sisa='.$sisa.', jatah='.$jatah.', total='.$total);
- // dd($sisa);
- // dd($jatah);
- // dd($total);
- $mulai = new Carbon($dari);
- $akhir = new Carbon($year);
- $interval = $mulai->diff($akhir);
- $woweekends = 0;
- for ($i = 0; $i <= $interval->d; $i++) {
- $modif = $mulai->modify('+1 day');
- $weekday = $mulai->format('w');
- // if($weekday != 0){ // 0 for Sunday and 6 for Saturday
- $woweekends++;
- // }
- }
- // dd($jatah.'-'.$total);
- // $totalakhir = $sisa - $woweekends;
- if(in_array($jenis, $unlimited_pengajuan)) {
- $totalakhir = $jatah; // tanpa dikurangi total pengajuan, unlimited is real!
- } else if($jenis == 'CH' || $jenis == 'CIK') {
- if($total == 2) { // jika mengajukan cuti haid sebanyak 2 di bulan yang sama, batas maksimal 0, gak iso cuti
- $totalakhir = 0;
- } elseif($total == 1) {
- $totalakhir = 1;
- } else {
- $totalakhir = $jatah;
- }
- } else {
- $totalakhir = $sisa;
- }
- $pesan = "";
- if ($totalakhir <= 0) {
- $pesan = __('locale.Maaf Anda Melebihi batas pengambilan ijin');
- }
- // dd($totalakhir);
- return ["kalkulasi" => $totalakhir, "hariajuan" => $woweekends, "pesan" => $pesan];
- // dd($total) ;
- }
- // blade
- function kalkulasi(param)
- {
- $('button.ajukancuti').show()
- var dari = $('input[name="darimodal"]').val()
- var sampai = $('input[name="sampaimodal"]').val()
- var d1 = new Date(document.getElementById("tgl_from").value);
- var d2 = new Date(document.getElementById("tgl_to").value);
- var timeDiff = Math.abs(d2.getTime() - d1.getTime());
- var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24) + 1);
- $.ajax({
- data: {
- '_token': "{{ csrf_token() }}",
- 'dari':dari,
- 'sampai':sampai,
- 'jenis':param,
- 'nik': "{{ session('nik') }}"
- },
- url:"{{ url("/kalkulasi_cuti")}}",
- type:"POST",
- async:false,
- success:function(data){
- // console.log(diffDays);
- $('input[name="sisacuti"]').val(data["kalkulasi"])
- $('input[name="totalajuan"]').val(diffDays);
- if(diffDays > data["kalkulasi"]) {
- $('button.ajukancuti').hide();
- $('#tgl_from').val('');
- $('#tgl_to').val('');
- $('#cuti_opsi').val('');
- Swal.fire({title:"{{__('locale.Tanggal yang anda pilih melebihi sisa cuti')}}",type:"error",confirmButtonClass:"btn btn-success",buttonsStyling:!1})
- } else {
- $('button.ajukancuti').show();
- }
- // if(diffDays < data["kalkulasi"]) {
- // $('#btnSubmit').removeAttr("disabled","disabled");
- // }
- if(data["kalkulasi"] < 1){
- $('p.infoct').html(data["pesan"]).removeClass('hidden');
- $('button.ajukancuti').hide();
- }else{
- $('p.infoct').html("").addClass('hidden');
- $('button.ajukancuti').show()
- }
- },
- error: function(err){
- alert("ERROR:"+err.statusText);
- $('#tgl_from').val('');
- $('#tgl_to').val('');
- $('#cuti_opsi').val('');
- $('button.ajukancuti').hide();
- }
- });
- }
Add Comment
Please, Sign In to add comment