Advertisement
Guest User

presensi

a guest
Mar 19th, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 39.03 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use Illuminate\Http\Request;
  6. use App\Models\Absen\Persensi;
  7. use App\Models\Absen\Person;
  8. use App\Models\Absen\AbsJadwal;
  9. use App\Models\Absen\AbsReport;
  10. use App\Models\Absen\Bagian;
  11. use App\Models\Absen\AbsMacine;
  12. use App\Models\Absen\AbsIjin;
  13. use App\Models\Absen\AbsStatus;
  14.  
  15.  
  16. use Illuminate\Support\Facades\Input;
  17. use App\Http\Controllers\Controller;
  18. use App\Http\Requests;
  19. use HTML;
  20. use DB;
  21.  
  22. class PersensiController extends Controller
  23. {
  24.     /**
  25.      * Display a listing of the resource.
  26.      *
  27.      * @return \Illuminate\Http\Response
  28.      */
  29.     public function index()
  30.     {
  31.         $pegawai = Person::orderBy("first_name", "asc")->get();
  32.         //dd($pegawai);
  33.         $pers    = array();
  34.         $filters = date("Y-m");
  35.         $jadwal  = null;
  36.         if(Input::isMethod('post')){
  37.             $data = Input::all();
  38.  
  39.             if(isset($data['cetak'])){
  40.                 return $this->cetakLaporan($data);
  41.             }
  42.             unset($data['bulan'], $data['tahun'], $data['att_id'], $data['_token']);
  43.             $pers =Person::where("pin", $data['pin'])->first();
  44.  
  45.             if($pers->bagian->func_id_auto!=6){//satpam
  46.                 $data['jadwal_id'] = $pers->bagian->jadwalInDay(date("w", strtotime($data['tanggal'])))->id;
  47.             }
  48.             if($data['masuk']=="" AND $data['keluar']==""){ /*Libur*/
  49.                 unset($data['keluar'], $data['detail_keluar']);
  50.                 unset($data['masuk'], $data['detail_masuk']);
  51.                 unset($data['jadwal_id']);
  52.             }else if($data['keluar']==""){ /*Lupa Absen*/
  53.                 // dd($jadwal);
  54.                 unset($data['keluar'], $data['detail_keluar']);
  55.             }else if($data['masuk']==""){ /*Lupa Absen*/
  56.                 unset($data['masuk'], $data['detail_masuk']);
  57.             }else if($data['masuk']!="" AND $data['keluar']!=""){
  58.                 // ketika ada orang yang login maka
  59.                 if($pers->bagian->func_id_auto==6){ /*Satpam*/
  60.                     $jadwal  = AbsJadwal::where("id", $data['jadwal_id'])->first();
  61.                     if($data['masuk'] > substr($jadwal->masuk, 0,5) AND $data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Terlambat dan pulang cepat*/
  62.                         $kenyataan    = \Carbon\Carbon::parse($data['masuk']);
  63.                         $harapan      = \Carbon\Carbon::parse($jadwal->masuk);
  64.                         $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
  65.                         $kenyataan    = \Carbon\Carbon::parse($data['keluar']);
  66.                         $harapan      = \Carbon\Carbon::parse($jadwal->keluar);
  67.                         $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
  68.                     }else if($data['masuk'] > substr($jadwal->masuk, 0,5)){ /*Terlambat tok*/
  69.                         $kenyataan    = \Carbon\Carbon::parse($data['masuk']);
  70.                         $harapan      = \Carbon\Carbon::parse($jadwal->masuk);
  71.                         $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
  72.                     }else if($data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Pulang cepat tok*/
  73.                         $kenyataan    = \Carbon\Carbon::parse($data['keluar']);
  74.                         $harapan      = \Carbon\Carbon::parse($jadwal->keluar);
  75.                         $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
  76.                     }
  77.                 }else{
  78.                     $jadwal            = AbsJadwal::where("func_id", $pers->bagian->func_id_auto)
  79.                             ->where("hari_ke", date('w', strtotime($data['tanggal'])))->first();
  80.                     dd($jadwal);
  81.                     $data['jadwal_id'] = $jadwal->id;
  82.                     if($data['masuk'] > substr($jadwal->masuk, 0,5) AND $data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Terlambat dan pulang cepat*/
  83.                         $kenyataan    = \Carbon\Carbon::parse($data['masuk']);
  84.                         $harapan      = \Carbon\Carbon::parse($jadwal->masuk);
  85.                         $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
  86.                         $kenyataan    = \Carbon\Carbon::parse($data['keluar']);
  87.                         $harapan      = \Carbon\Carbon::parse($jadwal->keluar);
  88.                         $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
  89.                     }else if($data['masuk'] > substr($jadwal->masuk, 0,5)){ /*Terlambat tok*/
  90.                         $kenyataan    = \Carbon\Carbon::parse($data['masuk']);
  91.                         $harapan      = \Carbon\Carbon::parse($jadwal->masuk);
  92.                         $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
  93.                     }else if($data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Pulang cepat tok*/
  94.                         $kenyataan    = \Carbon\Carbon::parse($data['keluar']);
  95.                         $harapan      = \Carbon\Carbon::parse($jadwal->keluar);
  96.                         $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
  97.                     }
  98.                 }
  99.                 $data['jadwal'] = $jadwal->toArray();
  100.                 $data['status_id'] = 1;
  101.             }
  102.             $data = $this->potongan($data);
  103.             if(isset($data['masuk'])){
  104.                 $data['masuk'] = $data['detail_masuk'];
  105.                 unset($data['detail_masuk']);
  106.             }
  107.             if(isset($data['keluar'])){
  108.                 $data['keluar'] = $data['detail_keluar'];
  109.                 unset($data['detail_keluar']);
  110.             }
  111.             AbsReport::create($data);
  112.             return redirect()->back()->with('message', 'Data Disimpan');
  113.         }else{
  114.             if(Input::get('pin') && Input::get('bulan') && Input::get('tahun')){
  115.                 $filters     = Input::get('tahun').'-'.str_pad(Input::get('bulan'), 2, "0", STR_PAD_LEFT);
  116.                 $pers        = Person::where('pin', Input::get('pin'))
  117.                                 ->orderBy("func_id_auto", "desc")
  118.                                 ->first(); //emp pegawai
  119.                 $merge       = array();
  120.                 $cekPersensi = $pers->persensiWithDate($filters);
  121.                 //dd($cekPersensi);
  122.  
  123.                 foreach($cekPersensi as $i=>$per){
  124.                     $scan_time = $per->jam;
  125.                     $harike    = date('w', strtotime($per->tanggal));
  126.                     $mode      = "-";
  127.                     if($pers->bagian->func_id_auto==6){//satpam
  128.                         $jdw = $pers->bagian->jadwal()
  129.                                     ->where("hari_ke", $harike)->get();
  130.                         $countSc = $pers->dataScan()
  131.                                     ->whereRaw("scan_date LIKE '%".$per->tanggal."%' ")
  132.                                     ->orderBy("scan_date", "asc")->get();
  133.  
  134.                         if($countSc->count()==2){
  135.                             $first_scan  = \Carbon\Carbon::parse($countSc[0]->scan_date)->format('H:i');
  136.                             $second_scan = \Carbon\Carbon::parse($countSc[1]->scan_date)->format('H:i');
  137.                             foreach($jdw as $jj=> $jd){
  138.                                 $jam_masuk[0]  = \Carbon\Carbon::parse($jd->masuk)->addHour(-2)->format('H:i');
  139.                                 $jam_masuk[1]  = \Carbon\Carbon::parse($jd->masuk)->addHour(2)->format('H:i');
  140.                                 $jam_keluar[0] = \Carbon\Carbon::parse($jd->keluar)->addHour(-2)->format('H:i');
  141.                                 $jam_keluar[1] = \Carbon\Carbon::parse($jd->keluar)->addHour(2)->format('H:i');
  142.                                 if(($first_scan > $jam_masuk[0] AND $first_scan < $jam_masuk[1])
  143.                                     AND ($second_scan > $jam_keluar[0] AND ($second_scan < $jam_keluar[1] OR $jj=1))){
  144.                                     $merge[$per->tanggal]['masuk']      = substr($first_scan, 0,5);
  145.                                     $merge[$per->tanggal]['keluar']     = substr($second_scan, 0,5);
  146.                                     $merge[$per->tanggal]['detail']['masuk'] = $countSc[0]->scan_date;
  147.                                     $merge[$per->tanggal]['detail']['keluar']= $countSc[1]->scan_date;
  148.                                     $jdf = array(
  149.                                                 "masuk"           => substr($jd->masuk, 0,5),
  150.                                                 "keluar"          => substr($jd->keluar, 0,5),
  151.                                                 "toleransi_masuk" => substr($jd->toleransi_masuk, 0,5),
  152.                                                 "id"              => $jd->id
  153.                                             );
  154.                                     $merge[$per->tanggal]["jadwal"]     = $jdf;
  155.                                     break;
  156.                                 }
  157.                             }
  158.                         }else{
  159.                             $mode = "masuk";
  160.                         }
  161.                     }else{
  162.                         // menentukan jam masuk & jam keluar
  163.                         $jam_masuk[0]   = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->masuk)->addHour(-2)->format('H:i');
  164.                         $jam_masuk[1]   = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->masuk)->addHour(2)->format('H:i');
  165.                         $jam_keluar[0]  = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->keluar)->addHour(-2)->format('H:i');
  166.                         $jam_keluar[1]  = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->keluar)->addHour(7)->format('H:i');
  167.                         if($scan_time > $jam_masuk[0] AND $scan_time < $jam_masuk[1]){
  168.                             $mode      = "masuk";
  169.                         }else if($scan_time > $jam_keluar[0] AND $scan_time < $jam_keluar[1]){
  170.                             $mode      = "keluar";
  171.                         }
  172.                     }
  173.                     if(!isset($merge[$per->tanggal][$mode]) and $mode != "-"){
  174.                         $merge[$per->tanggal][$mode]             = substr($scan_time, 0,5);
  175.                         $merge[$per->tanggal]['detail'][$mode]   = $per->scan_date; //tanggal -> detail [masuk,keluar]
  176.                         $jdf = array(
  177.                             //pegawai - > bagian -> jadwal hari ke 0
  178.                             "masuk"           => \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->masuk)->format('H:i'),
  179.                             "keluar"          => \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->keluar)->format('H:i'),
  180.                             "toleransi_masuk" => substr($pers->bagian->jadwalInDay($harike)->toleransi_masuk, 0,5),
  181.                             "id"              => $pers->bagian->jadwalInDay($harike)->id
  182.                         );
  183.                         $merge[$per->tanggal]["jadwal"] = $jdf; //array dimasukkan ke index jadwal
  184.                     }
  185.                 }
  186.                 $ijin = AbsIjin::whereRaw("pin = ".$pers->pin." AND tanggal LIKE '%".$filters."%' ")->get();
  187.                 foreach($ijin as $rw){
  188.                     $rw->status;
  189.                     $merge[$rw->tanggal] = $rw->toArray();
  190.                 }
  191.  
  192.                 ksort($merge); /*Order BY Index ASC*/
  193.  
  194.                 $merge = collect($merge)->map(function($dur, $i) use ($pers){ //$pers untuk mengambil nilai pinnya
  195.                     $cekAbs = AbsReport::where("pin", $pers->pin)->where("tanggal", $i)->first();
  196.                    
  197.                     if($cekAbs){
  198.                         // dd($cekAbs->jadwal);
  199.                         $jdf = array(
  200.                             "masuk"  => "",
  201.                             "keluar" => "",
  202.                             "id"     => ""
  203.                         );
  204.                        
  205.                    
  206.                         if($cekAbs->jadwal_id!=0 and $cekAbs->jadwal_id!=6){//hari tidak samadengan minggu
  207.                             $jdf = array(
  208.                                 "masuk"  => \Carbon\Carbon::parse($cekAbs->jadwal->masuk)->format('H:i'),
  209.                                 "keluar" => \Carbon\Carbon::parse($cekAbs->jadwal->keluar)->format('H:i'),
  210.                                 "id"     => $cekAbs->jadwal->id
  211.                             );
  212.                            
  213.                         }
  214.                        
  215.  
  216.                         $dur['jadwal']       = $jdf;
  217.                         $dur['day']          = dayIdn($i);
  218.                         $dur['potongan']     = $cekAbs->potongan ? $cekAbs->potongan : '';
  219.                         $btnDel = '&nbsp;<button title="Hapus data" class="btn btn-xs btn-danger" onclick="hapusData('.$cekAbs->id.')"><i class="fa fa-close"></i></button>';
  220.                         $dur['masuk']        = $cekAbs->masuk ? substr($cekAbs->masuk, 11,5) : '';
  221.                         $dur['keluar']       = $cekAbs->keluar ? substr($cekAbs->keluar, 11,5) : '';
  222.                         $dur['keluar']      .= $btnDel;
  223.  
  224.                         if($cekAbs->pulang_cepat){
  225.                             $dur['pulang_cepat'] = substr($cekAbs->pulang_cepat, 0,5);
  226.                         }
  227.                         if($cekAbs->terlambat){
  228.                             $dur['terlambat'] = substr($cekAbs->terlambat, 0,5);
  229.                         }
  230.                         if($dur['masuk'] AND $dur['keluar']){ /*Jika tidak libur*/
  231.                             if($dur['jadwal']['masuk']=="23:00"){
  232.                                 $attInLog = \Carbon\Carbon::parse($cekAbs->masuk);
  233.                                 $attOutLog = \Carbon\Carbon::parse($cekAbs->keluar);
  234.                                 $dur['duration']     = $attInLog->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
  235.                             }else{
  236.                                 $dur['duration']     = \Carbon\Carbon::parse($cekAbs->masuk)->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
  237.                             }
  238.                         }else{
  239.                             $dur['duration'] = "";
  240.                         }
  241.                     }else{
  242.                         $dur['day'] = dayIdn($i);//hari
  243.                         if(isset($dur["masuk"]) and isset($dur["keluar"])){
  244.                             $durationRequire = \Carbon\Carbon::parse($dur['jadwal']['masuk'])->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
  245.                             if($dur['masuk'] > $dur['jadwal']['masuk'] AND $dur['keluar'] < $dur['jadwal']['keluar']){ /*Terlambat dan pulang cepat*/
  246.                                 $kenyataan           = \Carbon\Carbon::parse($dur['masuk']);
  247.                                 $harapan             = \Carbon\Carbon::parse($dur['jadwal']['masuk']);
  248.                                 $dur['terlambat']    = $kenyataan->diff($harapan)->format("%H:%I");
  249.                                 $kenyataan           = \Carbon\Carbon::parse($dur['keluar']);
  250.                                 $harapan             = \Carbon\Carbon::parse($dur['jadwal']['keluar']);
  251.                                 $dur['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
  252.                             }else if($dur['masuk'] > $dur['jadwal']['masuk']){ /*Terlambat tok*/
  253.                                 $kenyataan           = \Carbon\Carbon::parse($dur['masuk']);
  254.                                 $harapan             = \Carbon\Carbon::parse($dur['jadwal']['masuk']);
  255.                                 $dur['terlambat']    = $kenyataan->diff($harapan)->format("%H:%I");
  256.                             }else if($dur['keluar'] < $dur['jadwal']['keluar']){ /*Pulang cepat tok*/
  257.                                 $kenyataan           = \Carbon\Carbon::parse($dur['keluar']);
  258.                                 $harapan             = \Carbon\Carbon::parse($dur['jadwal']['keluar']);
  259.                                 $dur['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
  260.                             }
  261.                             $dur['duration'] = \Carbon\Carbon::parse($dur["masuk"])->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
  262.                             $dur             = $this->potongan($dur);
  263.                             $this->createAbsReport($dur, $pers->pin, $dur['jadwal']['id'], $i);// insert data di Abs_report tabel
  264.                         }
  265.                         if(!isset($dur['status_id']) AND !isset($dur['keluar'])){
  266.                             $dur['keluar'] = '<button class="btn btn-xs btn-default" onclick="findDataScan('.$pers->pin.','.str_replace("-", ",",$i).')"><i class="fa fa-search"></i></button>';
  267.                         }else if(!isset($dur['status_id']) AND !isset($dur['masuk'])){
  268.                             $dur['masuk'] = '<button class="btn btn-xs btn-default" onclick="findDataScan('.$pers->pin.','.str_replace("-", ",",$i).')"><i class="fa fa-search"></i></button>';
  269.                         }
  270.                     }
  271.                    
  272.                     return $dur;
  273.                 });
  274.  
  275.                 $jamKerja = @$merge->map(function($rw, $i){
  276.                     return $this->timeToSeconds(@$rw['duration'].":00");
  277.                 })->sum();
  278.                 $telat    = @$merge->map(function($rw, $i){
  279.                     return $this->timeToSeconds(@$rw['terlambat'].":00");
  280.                 })->sum();
  281.                 $potongan = @$merge->map(function($rw, $i){
  282.                     return $rw['potongan'];
  283.                 })->sum()."%";
  284.  
  285.                 $pers->totalJamKerja = $this->secondToTime($jamKerja);
  286.                 $pers->totaltelat    = $this->secondToTime($telat);
  287.                 $pers->totalPotongan = $potongan;
  288.                 $pers->persensi      = $merge->toArray();
  289.             }else if(Input::get('remove')){
  290.                 $remove = AbsReport::findOrFail(Input::get('remove'));
  291.                 $remove->delete();
  292.                 return redirect()->back()->with('message', 'Data telah dihapus');
  293.             }
  294.             $dataLast = Persensi::orderBy("scan_date", "desc")->first()->scan_date;
  295.  
  296.             $dataLast = substr(explode(" ", $dataLast)[1], 0,5)." ".dayIdn(explode(" ", $dataLast)[0]).", ".dateIdn(date_format(date_create($dataLast), 'Y m d'))." ";
  297.             // dd($dataLast);
  298.             //--- if
  299.            
  300.              //if Lembur
  301.             // if($jadwal->hari_ke == 0 or $jadwal->hari_ke == 1){//ketika hari sabtu dan minggu
  302.             //     // hitung durasi nya  
  303.             //     $data['statuslembur'] = 'lembur';
  304.             //     if($data['masuk'] > substr($jadwal->masuk, 0,5) AND $data['keluar'] < substr($jadwal->keluar, 0,5)){
  305.             //         // $masuklembur = \Carbon\Carbon::parse($data['masuk']);
  306.             //         $masuklembur = \Carbon\Carbon::parse($jadwal->masuk);
  307.             //         // $keluarlembur = \Carbon\Carbon::parse($data['keluar']);
  308.             //         $keluarlembur = \Carbon\Carbon::parse($jadwal->keluar);
  309.             //         $data['durasilembur'] = $keluarlembur->diff($masuklembur)->format("%H:%I");
  310.                    
  311.             //     }
  312.             // }
  313.             //end if
  314.  
  315.            
  316.  
  317.             return view("pages/Absen/Persensi", compact("pers","pegawai","filters", "dataLast"));
  318.  
  319.         }
  320.     }
  321.  
  322.     public function cetakLaporan($post){//cetak laporan
  323.         $pers  = Person::whereIn("pin", $post['pins'])->get();
  324.         $date  = Input::get('tahun').'-'.str_pad(Input::get('bulan'), 2, "0", STR_PAD_LEFT);
  325.         $start = \Carbon\Carbon::parse($date)->startOfMonth()->format("Y-m-d");
  326.         $end   = \Carbon\Carbon::parse($date)->endOfMonth()->format("Y-m-d");
  327.         foreach($pers as $i=>$emp){
  328.             $report = AbsReport::whereRaw("tanggal BETWEEN '$start' AND '$end' AND pin = $emp->pin AND status_id != 6")->orderBy("tanggal", "asc")->groupBy("tanggal")->get();
  329.             $report->map(function($row, $i){
  330.                 if($row->masuk AND $row->keluar AND $row->status_id==1){
  331.                    $row->jam_kerja = \Carbon\Carbon::parse($row->masuk)->diff(\Carbon\Carbon::parse($row->jadwal->keluar))->format("%H:%I");
  332.                 }else{
  333.                     $row->jam_kerja = 0;
  334.                 }
  335.             });
  336.  
  337.             $jamKerja     = $report->map(function($rw, $i){
  338.                 return $this->timeToSeconds($rw->jam_kerja.":00");
  339.             })->sum();
  340.             $telat        = $report->map(function($rw, $i){
  341.                 return $this->timeToSeconds($rw->terlambat);
  342.             })->sum();
  343.             $pulang_cepat = $report->map(function($rw, $i){
  344.                 return $this->timeToSeconds($rw->pulang_cepat);
  345.             })->sum();
  346.             $potongan = $report->map(function($rw, $i){
  347.                     return @$rw->potongan;
  348.             })->sum()."%";
  349.  
  350.             $emp->total_jam_kerja    = $this->secondToTime($jamKerja);
  351.             $emp->total_terlambat    = $this->secondToTime($telat);
  352.             $emp->total_pulang_cepat = $this->secondToTime($pulang_cepat);
  353.             $emp->totalPotongan      = $potongan;
  354.             $emp->report = $report;
  355.         }
  356.         $pdf = \App::make('dompdf.wrapper');
  357.         $pdf->loadView('pages/Absen/cetak_laporan', compact('pers'))->setPaper("F4")->setOrientation("potrait");
  358.         return $pdf->stream("Laporan Bulanan");
  359.     }//end cetak laporan
  360.  
  361.     //tampildatascan
  362.     public function dataScan(){
  363.         if(Input::get('draw')){
  364.             $post = (Object) Input::all();
  365.             $start=0;
  366.             $length=10;
  367.             $like='';
  368.             $order=null;
  369.             $total=0;
  370.            
  371.             $select_Table = "";
  372.             $where_Search="";
  373.             $filter="";
  374.  
  375.             if(!empty($post->start)){
  376.                 $start=$post->start;
  377.             }
  378.             if(!empty($post->length)){
  379.                 $length=$post->length;
  380.             }
  381.             // kondisi
  382.             $where_Search = ' WHERE (at.scan_date LIKE "%'.$post->search['value'].'%" OR emp.first_name LIKE "%'.$post->search['value'].'%" OR func.func_name LIKE "%'.$post->search['value'].'%" OR mode.io_name LIKE "%'.$post->search['value'].'%" OR verify.verify_name LIKE "%'.$post->search['value'].'%")';
  383.             if(Input::get('pin') AND Input::get('pin')!="-"){
  384.                 $filter = ' AND (at.pin = '.Input::get('pin').')';
  385.             }
  386.             $column       = $post->order[0]["column"];
  387.             $asc_desc     = $post->order[0]["dir"];
  388.  
  389.             $columns=array('', 'at.scan_date', '', 'emp.first_name', 'func.func_name', 'at.scan_date', 'mode.io_mode', 'verify.verify_mode');
  390.             // yang diselect
  391.             $select = "SUBSTRING(at.scan_date, 1, 10) as tanggal, CONCAT(emp.first_name, ' ' ,emp.last_name) AS nama, func.func_name AS bagian, SUBSTRING(at.scan_date, 12, 8) as jam, mode.io_name AS mode, verify.verify_name AS scan_type";
  392.             // melengkapkan
  393.             $sqlString = "SELECT $select FROM att_log AS at
  394.                        JOIN emp ON emp.pin = at.pin
  395.                        JOIN mode ON mode.io_mode = at.io_mode
  396.                        JOIN func on func.func_id_auto = emp.func_id_auto
  397.                        JOIN verify ON verify.verify_mode = at.verify_mode ".$where_Search.$filter;
  398.                         // dd($sqlString);
  399.             $att_log = DB::connection("absen")
  400.                     ->select($sqlString." ORDER BY ".$columns[$column]." ".$asc_desc." LIMIT $length OFFSET $start");
  401.             $total   = DB::connection("absen")
  402.                     ->select(str_replace($select, "COUNT(*) as total", $sqlString));
  403.             $att_log = collect($att_log)->map(function($row, $i) use ($start){
  404.                 $row->no = $start+$i+1;
  405.                 $row->hari = dayIdn($row->tanggal);
  406.                 return $row;
  407.             })->toArray();
  408.            
  409.             $return=array("draw"=> 0, "recordsTotal"=> $total[0]->total, "recordsFiltered"=> $total[0]->total);
  410.             $return['data'] = $att_log;
  411.  
  412.             return json_encode($return);
  413.         }else if(Input::get('find')){
  414.             $pers   = Person::where("pin", Input::get('pin'))->first();
  415.             $tgl    = \Carbon\Carbon::parse(Input::get('tanggal'))->format("Y-m-d");
  416.             $tgl2   = \Carbon\Carbon::parse(Input::get('tanggal'))->addDays(1)->format("Y-m-d");
  417.             $tgl3   = \Carbon\Carbon::parse(Input::get('tanggal'))->addDays(-1)->format("Y-m-d");
  418.             $return = Persensi::whereRaw("(pin = ".$pers->pin.") AND (scan_date like '%".$tgl."%' OR scan_date like '%".$tgl2."%' OR scan_date like '%".$tgl3."%')")
  419.                     ->orderBy("scan_date", "asc")->get()->map(function($rows, $i) use ($pers){
  420.                         $row            = array();
  421.                         $row['tanggal'] = explode(" ", $rows->scan_date)[0];
  422.                         $row['detail']  = $rows->scan_date;
  423.                         $row['waktu']   = substr(explode(" ", $rows->scan_date)[1], 0,5);
  424.                         $row['hari']    = dayIdn(explode(" ", $rows->scan_date)[0]);
  425.                         $row['jadwal']  = $pers->bagian->jadwal->where("hari_ke", date('w', strtotime($row['tanggal'])))
  426.                                             ->where("func_id", $pers->bagian->func_id_auto)->orderBy('masuk', 'asc')->get()
  427.                                             ->map(function($rw, $t){
  428.                                                 $rtn['id'] = $rw->id;
  429.                                                 $rtn['masuk'] = substr($rw->masuk, 0,5);
  430.                                                 $rtn['keluar'] = substr($rw->keluar, 0,5);
  431.                                                 return $rtn;
  432.                                             });
  433.                         return $row;
  434.                     })->toArray();
  435.  
  436.             return json_encode($return);
  437.         }
  438.         $person = Person::orderBy('first_name', 'asc')->get()
  439.                     ->map(function($row){
  440.                         $html = '<option value="'.$row->pin.'">'.$row->first_name." ".$row->last_name.'</option>';
  441.                         return $html;
  442.                     })->toArray();
  443.         $person = implode($person, "");
  444.  
  445.         return view("pages/Absen/Data_scan", compact("person"));
  446.     }
  447.     // end tampil data scan
  448.  
  449.     public function dataCuti(){
  450.         if(Input::get('hapus')){
  451.             $ijin = AbsIjin::findOrFail(Input::get('hapus'));
  452.             if($ijin->report){
  453.                 $ijin->report->delete();
  454.             }
  455.             $ijin->delete();
  456.             return redirect()->back()->with('message', 'Data Telah Dihapus');
  457.         }
  458.         $tahun = (Input::get('tahun')) ? Input::get('tahun') : date('Y');
  459.         $bulan = (Input::get('bulan')) ? Input::get('bulan') : date('m');
  460.         $date  = $tahun."-".$bulan;
  461.         if($bulan==00){
  462.             $date = $tahun;
  463.         }
  464.  
  465.         $data = AbsIjin::where("tanggal", "LIKE", "%$date%")->get();
  466.         $pegawai = Person::orderBy("first_name", "asc")->get();
  467.         $status = AbsStatus::where('id', '!=', 1)->get();
  468.  
  469.         return view("pages/Absen/Data_cuti_ijin", compact('data','pegawai','status','tahun','bulan'));
  470.     }
  471.  
  472.     public function tambahDataIjin(){
  473.         $pst = Input::all();
  474.         $lamaHari = $pst['lama_hari'];
  475.         $adds = array();
  476.         for($i=0;$i<$lamaHari;$i++){
  477.             $add['tanggal'] = \Carbon\Carbon::parse($pst['tanggal'])->addDays($i)->format('Y-m-d');
  478.             $cek = AbsReport::where('tanggal', $add['tanggal'])->where('pin', $pst['pin'])->get();
  479.             $add['pin'] = $pst['pin'];
  480.             $add['status_id'] = $pst['status_id'];
  481.             AbsReport::create($add);
  482.             $add['keterangan'] = $pst['keterangan'];
  483.             AbsIjin::create($add);
  484.         }
  485.         return redirect()->back()->with('message', 'Data Disimpan');
  486.     }
  487.  
  488.     public function createAbsReport($data, $pin, $jadwal_id, $tanggal)
  489.     {
  490.         unset($data['j_in'], $data['j_out'], $data['day'], $data['duration']);
  491.         if($data['masuk']=="" AND $data['keluar']==""){
  492.             unset($data['pulang_cepat'], $data['keluar']);
  493.             unset($data['terlambat'], $data['masuk']);
  494.         }else if($data['keluar']==""){
  495.             unset($data['pulang_cepat'], $data['keluar']);
  496.         }else if($data['masuk']==""){
  497.             unset($data['terlambat'], $data['masuk']);
  498.         }
  499.         $data['tanggal']   = $tanggal;
  500.         $data['pin']       = $pin;
  501.         $data['jadwal_id'] = $jadwal_id;
  502.         $data['status_id'] = 1;
  503.         $data['masuk']     = $data['detail']['masuk'];
  504.         $data['keluar']    = $data['detail']['keluar'];
  505.         $new = AbsReport::create($data);
  506.     }
  507.  
  508.     public function potongan($data){
  509.         $masterPotongan = array(
  510.             ["00:01-00:30", 0.5],//
  511.             ["00:31-01:00", 1],
  512.             ["01:01-01:30", 1.25],
  513.             ["01:31-24:00:", 1.5]
  514.         );
  515.         $potongan = 0;
  516.         if(isset($data['terlambat'])){
  517.             $pulang         = \Carbon\Carbon::parse($data['keluar'])->diff(\Carbon\Carbon::parse($data['jadwal']['keluar']))->format("%H:%i"); //mencaari selisih pada tanggal[jam]
  518.             $scPulang       = $this->timeToSeconds($pulang > $data['jadwal']['toleransi_masuk'] ? $data['jadwal']['toleransi_masuk'].":00" : $pulang.":00");
  519.             $scTerlambat    = $this->timeToSeconds($data['terlambat'].":00");
  520.             $afterTerlambat = $scTerlambat-$scPulang <= 0 ? 0 : $scTerlambat-$scPulang;
  521.             $afterTerlambat = $this->secondToTime($afterTerlambat);
  522.             foreach($masterPotongan as $ptg){
  523.                 $rentang = explode("-", $ptg[0]);
  524.                 if($afterTerlambat >= $rentang[0] AND $afterTerlambat<=$rentang[1]){
  525.                     $potongan = $potongan+$ptg[1];
  526.                 }
  527.             }
  528.         }
  529.         if(isset($data['pulang_cepat'])){
  530.             foreach($masterPotongan as $ptg){
  531.                 $rentang = explode("-", $ptg[0]);
  532.                 if($data['pulang_cepat'] >= $rentang[0] AND $data['pulang_cepat']<=$rentang[1]){
  533.                     $potongan = $potongan+$ptg[1];
  534.                 }
  535.             }
  536.         }
  537.         if(!isset($data['masuk']) OR !isset($data['keluar'])){
  538.             $potongan = $masterPotongan[3][1];
  539.         }
  540.         if($potongan>0){
  541.             $data['potongan'] = $potongan;
  542.         }
  543.         return $data;
  544.     }
  545.  
  546.     /**
  547.      * Remove the specified resource from storage.
  548.      *
  549.      * @param  int  $id
  550.      * @return \Illuminate\Http\Response
  551.      */
  552.     public function timeToSeconds($time)
  553.     {
  554.         $arr = explode(":", $time);
  555.         if(count($arr)>2){
  556.             $return = ((int)$arr[0]*3600) + ((int)$arr[1]*60) + (int)$arr[2];
  557.             return $return;
  558.         }else{
  559.             return 0;
  560.         }
  561.     }
  562.  
  563.     public function secondToTime($seconds)
  564.     {
  565.         $hours = floor($seconds / 3600);
  566.         $mins = floor($seconds / 60 % 60);
  567.         $secs = floor($seconds % 60);
  568.         return $timeFormat = sprintf('%02d:%02d', $hours, $mins);
  569.     }
  570.  
  571.     public function getFromMacine(){
  572.         $mcn     = AbsMacine::all();
  573.         $ip      = $mcn[0]->var_val;
  574.         $session = $mcn[1]->var_val;
  575.         $ip = "127.0.0.1";
  576.         $dataString = "uid=2&uid=86&sdate=2019-02-14&edate=2019-02-31";
  577.  
  578.         exec("ping -c 1 $ip", $result, $status);
  579.         if(count($result)>1){
  580.             // $url = "http://192.168.10.136/csl/check";
  581.             // $data = "username=administrator&userpwd=.lo9ijn";
  582.             // $url = "http://$ip/csl/query?action=run";
  583.             return $this->checkCookie($ip);
  584.  
  585.  
  586.             // $cookieString = "SessionID=1550153911";
  587.             $process = curl_init();
  588.             $options = array(
  589.                 CURLOPT_URL => $url,
  590.                 CURLOPT_HEADER => TRUE,
  591.                 CURLOPT_POSTFIELDS => TRUE,
  592.                 CURLOPT_RETURNTRANSFER => TRUE,
  593.                 CURLOPT_FOLLOWLOCATION => TRUE,
  594.                 CURLOPT_POST => FALSE,
  595.                 CURLOPT_BINARYTRANSFER => TRUE,
  596.                 // CURLOPT_COOKIE => $cookieString,
  597.                 // CURLOPT_HTTPHEADER, array(
  598.                 //     'Content-Type: application/http',
  599.                 //     'Content-Length: ' . strlen($data)
  600.                 // ),
  601.             );
  602.             curl_setopt_array($process, $options);
  603.             $return = curl_exec($process);
  604.             curl_close($process);
  605.             $sessionNow = explode("=", explode(";",explode("\r\n", $return)[3])[0])[1];
  606.             dd($sessionNow);
  607.  
  608.             $dom = new \DOMDocument();
  609.             $dom->loadHtml($return[0]);
  610.             $table = $dom->getElementsByTagName('table');
  611.             $table = $table->item(0)->getElementsByTagName('tr');
  612.             $arr = array();
  613.             foreach($table as $i=>$tr){
  614.                 if($i>0){
  615.                     $dt['tanggal'] = $tr->getElementsByTagName('td')[0]->nodeValue;
  616.                     $dt['pin'] = $tr->getElementsByTagName('td')[1]->nodeValue;
  617.                     $dt['nama'] = $tr->getElementsByTagName('td')[2]->nodeValue;
  618.                     $dt['time'] = $tr->getElementsByTagName('td')[3]->nodeValue;
  619.                     $dt['io_mode'] = $tr->getElementsByTagName('td')[4]->nodeValue;
  620.                     $dt['io_type'] = $tr->getElementsByTagName('td')[5]->nodeValue;
  621.                     $arr[]=$dt;
  622.                 }
  623.             }
  624.             dd($arr);
  625.  
  626.             $dataHtml = str_replace(["\n"], "<br>", $return[0]);
  627.             $dataHtml = strip_tags($dataHtml, "<table><tr><td>");
  628.             echo $dataHtml;
  629.  
  630.         }else{
  631.             return "IP <b>$ip</b> tidak bisa di akses";
  632.         }
  633.     }
  634.  
  635.     public function checkCookie($url){
  636.         $process = curl_init();
  637.         $options = array(
  638.             CURLOPT_URL => "http://".$url,
  639.             CURLOPT_HEADER => TRUE,
  640.             CURLOPT_POSTFIELDS => TRUE,
  641.             CURLOPT_RETURNTRANSFER => TRUE,
  642.             CURLOPT_FOLLOWLOCATION => TRUE,
  643.             CURLOPT_POST => FALSE,
  644.             CURLOPT_BINARYTRANSFER => TRUE,
  645.         );
  646.         curl_setopt_array($process, $options);
  647.         $return = curl_exec($process);
  648.         curl_close($process);
  649.         $cookieNow = @explode("=", explode(";",explode("\r\n", $return)[3])[0])[1];
  650.         dd($cookieNow);
  651.     }
  652.  
  653.     // lihat data pegawai
  654.     public function dataPegawai(){  
  655.             if(input::get('draw')){
  656.                 $datakaryawan = (Object)input::all();
  657.                 $start =0;
  658.                 $length=10;
  659.                 $like='';
  660.                 $order=null;
  661.                 $total=0;
  662.  
  663.                 $select_Table = "";
  664.                 $where_Search="";
  665.                 $filter="";
  666.                 if(!empty($datakaryawan->start)){
  667.                     $start = $datakaryawan->start;
  668.                 }
  669.                 if(!empty($datakaryawan->length)){
  670.                     $length=$datakaryawan->length;
  671.                 }
  672.                $cari = $datakaryawan->search['value'];// pencarian data table
  673.  
  674.                // $cari = '103';
  675.              
  676.                // dd($detailpegawai);
  677.  
  678.                 $where_Search = 'WHERE e.nik LIKE "%'.$cari.'%" OR e.first_name LIKE "%'.$cari.'%" OR e.gender LIKE "%'.$cari.'%" OR e.birth_date LIKE "%'.$cari.'%" OR e.address LIKE "%'.$cari.'%" OR e.phone LIKE "%'.$cari.'%" OR e.married LIKE "'.$cari.'" OR e.education LIKE "%'.$cari.'%"';
  679.  
  680.                 // set kolomnya
  681.                 $column = $datakaryawan->order[0]["column"];//coloumn itu dari datatable
  682.                 $asc_desc = $datakaryawan->order[0]["dir"];//dir untuk ascending
  683.                 // set kolom
  684.                 $columns = array ('','e.nik','e.first_name','e.gender','e.birth_date','e.address','e.phone','e.married','e.education');//dibuat order bys
  685.                 $select = 'e.pin,e.nik,CONCAT (e.first_name," ",e.last_name) AS nama,e.first_name as namadepan,e.last_name as namabelakang ,e.gender,f.func_name AS devisi,f.func_id_auto AS id_divisi,e.address,e.phone,e.married,e.education';
  686.                
  687.                 $sqlString = "SELECT $select FROM emp e LEFT JOIN func f ON e.func_id_auto = f.func_id_auto ". $where_Search;
  688.  
  689.                 $sqltod = DB::connection("absen")
  690.                 ->select($sqlString." ORDER BY ".$columns[$column]." ".$asc_desc." LIMIT $length OFFSET $start");
  691.                 $total = DB::connection("absen")
  692.                 ->select(str_replace($select,"COUNT(*) as total",$sqlString));
  693.                 //---------
  694.                 //dd($sqltod);
  695.                 $selectdevisi = "select * from func";
  696.                 $devisi = DB::connection("absen")->select($selectdevisi);
  697.                 $att_log = collect($sqltod)->map(function($row, $i) use ($start){//looping
  698.                  $row->no = $start+$i+1;
  699.                  if($row->gender == '0'){
  700.                     $row->gender = "L";
  701.                  }else{
  702.                     $row->gender = "P";
  703.                  }
  704.                  //status nikah
  705.                  if($row->married == '0'){
  706.                     $row->married = "Belum Nikah";
  707.                  }else{
  708.                      $row->married = "Nikah";
  709.                  }
  710.                  // $row->aksi = '<a href=""'>'+$row->nik+'</a>';
  711.                   $row->aksi = '<button id="info_pegawai" class="btn btn-success btn-xs">Edit</button>';
  712.                   $row->id_divisi = $row->id_divisi;
  713.                  return $row;
  714.                 })->toArray();  
  715.                $editpegawai ="";
  716.  
  717.                 $return = array(
  718.                     "draw" => 0,    
  719.                     "recordsTotal" => $total[0]->total,
  720.                     "recordsFiltered" => $total[0]->total,
  721.                     "detaildevisi" => $devisi,
  722.                     "data" => $att_log,//sudah jadi array karena sudah di eksekusi
  723.  
  724.                 );
  725.  
  726.                 return json_encode($return);
  727.  
  728.  
  729.                    
  730.  
  731.             }else{
  732.                 return view("pages/Absen/Tampil_pegawai");
  733.             }      
  734.  
  735.     }
  736.     // end lihat data pegawai
  737.    
  738.  
  739.     // update pegawai
  740.     public function updatePegawai(Request $request){
  741.         // dd(request()->all());
  742.         $pin = $request->pin;
  743.         $nik = $request->nik;
  744.         $gender = $request->jeniskelamin;
  745.         $nama = $request->namadepan;
  746.         $belakang = $request->namabelakang;
  747.         $devisi_id = $request->allTeam;
  748.         $alamat = $request->alamat;
  749.         $pendidikan = $request->pendidikan;
  750.         if($gender ==""){
  751.              return redirect()->back()->with('alert', 'Isi Jenis Kelamin terlebih dahulu!');
  752.         }
  753.  
  754.         $status = DB::connection("absen")->table('emp')
  755.                 ->where('pin',$pin)
  756.                 ->update([
  757.                     'nik' => $nik,
  758.                     'first_name' => $nama,
  759.                     'gender' => $gender,
  760.                     'last_name' => $belakang,
  761.                     'func_id_auto' => $devisi_id,
  762.                     'address' =>$alamat,
  763.                     'education' => $pendidikan
  764.                 ]);
  765.  
  766.         if ($status){//status ok redirect ke pegawai
  767.              return redirect()->back()->with('success', 'Data Terupdate');
  768.         }
  769.  
  770.  
  771.  
  772.     }//end info pegawai
  773.  
  774.     public function editpegwai(){
  775.  
  776.     }//end edit pegwai
  777.  
  778. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement