Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Http\Request;
- use App\Models\Absen\Persensi;
- use App\Models\Absen\Person;
- use App\Models\Absen\AbsJadwal;
- use App\Models\Absen\AbsReport;
- use App\Models\Absen\Bagian;
- use App\Models\Absen\AbsMacine;
- use App\Models\Absen\AbsIjin;
- use App\Models\Absen\AbsStatus;
- use Illuminate\Support\Facades\Input;
- use App\Http\Controllers\Controller;
- use App\Http\Requests;
- use HTML;
- use DB;
- class PersensiController extends Controller
- {
- /**
- * Display a listing of the resource.
- *
- * @return \Illuminate\Http\Response
- */
- public function index()
- {
- $pegawai = Person::orderBy("first_name", "asc")->get();
- //dd($pegawai);
- $pers = array();
- $filters = date("Y-m");
- $jadwal = null;
- if(Input::isMethod('post')){
- $data = Input::all();
- if(isset($data['cetak'])){
- return $this->cetakLaporan($data);
- }
- unset($data['bulan'], $data['tahun'], $data['att_id'], $data['_token']);
- $pers =Person::where("pin", $data['pin'])->first();
- if($pers->bagian->func_id_auto!=6){//satpam
- $data['jadwal_id'] = $pers->bagian->jadwalInDay(date("w", strtotime($data['tanggal'])))->id;
- }
- if($data['masuk']=="" AND $data['keluar']==""){ /*Libur*/
- unset($data['keluar'], $data['detail_keluar']);
- unset($data['masuk'], $data['detail_masuk']);
- unset($data['jadwal_id']);
- }else if($data['keluar']==""){ /*Lupa Absen*/
- // dd($jadwal);
- unset($data['keluar'], $data['detail_keluar']);
- }else if($data['masuk']==""){ /*Lupa Absen*/
- unset($data['masuk'], $data['detail_masuk']);
- }else if($data['masuk']!="" AND $data['keluar']!=""){
- // ketika ada orang yang login maka
- if($pers->bagian->func_id_auto==6){ /*Satpam*/
- $jadwal = AbsJadwal::where("id", $data['jadwal_id'])->first();
- if($data['masuk'] > substr($jadwal->masuk, 0,5) AND $data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Terlambat dan pulang cepat*/
- $kenyataan = \Carbon\Carbon::parse($data['masuk']);
- $harapan = \Carbon\Carbon::parse($jadwal->masuk);
- $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
- $kenyataan = \Carbon\Carbon::parse($data['keluar']);
- $harapan = \Carbon\Carbon::parse($jadwal->keluar);
- $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }else if($data['masuk'] > substr($jadwal->masuk, 0,5)){ /*Terlambat tok*/
- $kenyataan = \Carbon\Carbon::parse($data['masuk']);
- $harapan = \Carbon\Carbon::parse($jadwal->masuk);
- $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }else if($data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Pulang cepat tok*/
- $kenyataan = \Carbon\Carbon::parse($data['keluar']);
- $harapan = \Carbon\Carbon::parse($jadwal->keluar);
- $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }
- }else{
- $jadwal = AbsJadwal::where("func_id", $pers->bagian->func_id_auto)
- ->where("hari_ke", date('w', strtotime($data['tanggal'])))->first();
- dd($jadwal);
- $data['jadwal_id'] = $jadwal->id;
- if($data['masuk'] > substr($jadwal->masuk, 0,5) AND $data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Terlambat dan pulang cepat*/
- $kenyataan = \Carbon\Carbon::parse($data['masuk']);
- $harapan = \Carbon\Carbon::parse($jadwal->masuk);
- $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
- $kenyataan = \Carbon\Carbon::parse($data['keluar']);
- $harapan = \Carbon\Carbon::parse($jadwal->keluar);
- $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }else if($data['masuk'] > substr($jadwal->masuk, 0,5)){ /*Terlambat tok*/
- $kenyataan = \Carbon\Carbon::parse($data['masuk']);
- $harapan = \Carbon\Carbon::parse($jadwal->masuk);
- $data['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }else if($data['keluar'] < substr($jadwal->keluar, 0,5)){ /*Pulang cepat tok*/
- $kenyataan = \Carbon\Carbon::parse($data['keluar']);
- $harapan = \Carbon\Carbon::parse($jadwal->keluar);
- $data['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }
- }
- $data['jadwal'] = $jadwal->toArray();
- $data['status_id'] = 1;
- }
- $data = $this->potongan($data);
- if(isset($data['masuk'])){
- $data['masuk'] = $data['detail_masuk'];
- unset($data['detail_masuk']);
- }
- if(isset($data['keluar'])){
- $data['keluar'] = $data['detail_keluar'];
- unset($data['detail_keluar']);
- }
- AbsReport::create($data);
- return redirect()->back()->with('message', 'Data Disimpan');
- }else{
- if(Input::get('pin') && Input::get('bulan') && Input::get('tahun')){
- $filters = Input::get('tahun').'-'.str_pad(Input::get('bulan'), 2, "0", STR_PAD_LEFT);
- $pers = Person::where('pin', Input::get('pin'))
- ->orderBy("func_id_auto", "desc")
- ->first(); //emp pegawai
- $merge = array();
- $cekPersensi = $pers->persensiWithDate($filters);
- //dd($cekPersensi);
- foreach($cekPersensi as $i=>$per){
- $scan_time = $per->jam;
- $harike = date('w', strtotime($per->tanggal));
- $mode = "-";
- if($pers->bagian->func_id_auto==6){//satpam
- $jdw = $pers->bagian->jadwal()
- ->where("hari_ke", $harike)->get();
- $countSc = $pers->dataScan()
- ->whereRaw("scan_date LIKE '%".$per->tanggal."%' ")
- ->orderBy("scan_date", "asc")->get();
- if($countSc->count()==2){
- $first_scan = \Carbon\Carbon::parse($countSc[0]->scan_date)->format('H:i');
- $second_scan = \Carbon\Carbon::parse($countSc[1]->scan_date)->format('H:i');
- foreach($jdw as $jj=> $jd){
- $jam_masuk[0] = \Carbon\Carbon::parse($jd->masuk)->addHour(-2)->format('H:i');
- $jam_masuk[1] = \Carbon\Carbon::parse($jd->masuk)->addHour(2)->format('H:i');
- $jam_keluar[0] = \Carbon\Carbon::parse($jd->keluar)->addHour(-2)->format('H:i');
- $jam_keluar[1] = \Carbon\Carbon::parse($jd->keluar)->addHour(2)->format('H:i');
- if(($first_scan > $jam_masuk[0] AND $first_scan < $jam_masuk[1])
- AND ($second_scan > $jam_keluar[0] AND ($second_scan < $jam_keluar[1] OR $jj=1))){
- $merge[$per->tanggal]['masuk'] = substr($first_scan, 0,5);
- $merge[$per->tanggal]['keluar'] = substr($second_scan, 0,5);
- $merge[$per->tanggal]['detail']['masuk'] = $countSc[0]->scan_date;
- $merge[$per->tanggal]['detail']['keluar']= $countSc[1]->scan_date;
- $jdf = array(
- "masuk" => substr($jd->masuk, 0,5),
- "keluar" => substr($jd->keluar, 0,5),
- "toleransi_masuk" => substr($jd->toleransi_masuk, 0,5),
- "id" => $jd->id
- );
- $merge[$per->tanggal]["jadwal"] = $jdf;
- break;
- }
- }
- }else{
- $mode = "masuk";
- }
- }else{
- // menentukan jam masuk & jam keluar
- $jam_masuk[0] = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->masuk)->addHour(-2)->format('H:i');
- $jam_masuk[1] = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->masuk)->addHour(2)->format('H:i');
- $jam_keluar[0] = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->keluar)->addHour(-2)->format('H:i');
- $jam_keluar[1] = \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->keluar)->addHour(7)->format('H:i');
- if($scan_time > $jam_masuk[0] AND $scan_time < $jam_masuk[1]){
- $mode = "masuk";
- }else if($scan_time > $jam_keluar[0] AND $scan_time < $jam_keluar[1]){
- $mode = "keluar";
- }
- }
- if(!isset($merge[$per->tanggal][$mode]) and $mode != "-"){
- $merge[$per->tanggal][$mode] = substr($scan_time, 0,5);
- $merge[$per->tanggal]['detail'][$mode] = $per->scan_date; //tanggal -> detail [masuk,keluar]
- $jdf = array(
- //pegawai - > bagian -> jadwal hari ke 0
- "masuk" => \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->masuk)->format('H:i'),
- "keluar" => \Carbon\Carbon::parse($pers->bagian->jadwalInDay($harike)->keluar)->format('H:i'),
- "toleransi_masuk" => substr($pers->bagian->jadwalInDay($harike)->toleransi_masuk, 0,5),
- "id" => $pers->bagian->jadwalInDay($harike)->id
- );
- $merge[$per->tanggal]["jadwal"] = $jdf; //array dimasukkan ke index jadwal
- }
- }
- $ijin = AbsIjin::whereRaw("pin = ".$pers->pin." AND tanggal LIKE '%".$filters."%' ")->get();
- foreach($ijin as $rw){
- $rw->status;
- $merge[$rw->tanggal] = $rw->toArray();
- }
- ksort($merge); /*Order BY Index ASC*/
- $merge = collect($merge)->map(function($dur, $i) use ($pers){ //$pers untuk mengambil nilai pinnya
- $cekAbs = AbsReport::where("pin", $pers->pin)->where("tanggal", $i)->first();
- if($cekAbs){
- // dd($cekAbs->jadwal);
- $jdf = array(
- "masuk" => "",
- "keluar" => "",
- "id" => ""
- );
- if($cekAbs->jadwal_id!=0 and $cekAbs->jadwal_id!=6){//hari tidak samadengan minggu
- $jdf = array(
- "masuk" => \Carbon\Carbon::parse($cekAbs->jadwal->masuk)->format('H:i'),
- "keluar" => \Carbon\Carbon::parse($cekAbs->jadwal->keluar)->format('H:i'),
- "id" => $cekAbs->jadwal->id
- );
- }
- $dur['jadwal'] = $jdf;
- $dur['day'] = dayIdn($i);
- $dur['potongan'] = $cekAbs->potongan ? $cekAbs->potongan : '';
- $btnDel = ' <button title="Hapus data" class="btn btn-xs btn-danger" onclick="hapusData('.$cekAbs->id.')"><i class="fa fa-close"></i></button>';
- $dur['masuk'] = $cekAbs->masuk ? substr($cekAbs->masuk, 11,5) : '';
- $dur['keluar'] = $cekAbs->keluar ? substr($cekAbs->keluar, 11,5) : '';
- $dur['keluar'] .= $btnDel;
- if($cekAbs->pulang_cepat){
- $dur['pulang_cepat'] = substr($cekAbs->pulang_cepat, 0,5);
- }
- if($cekAbs->terlambat){
- $dur['terlambat'] = substr($cekAbs->terlambat, 0,5);
- }
- if($dur['masuk'] AND $dur['keluar']){ /*Jika tidak libur*/
- if($dur['jadwal']['masuk']=="23:00"){
- $attInLog = \Carbon\Carbon::parse($cekAbs->masuk);
- $attOutLog = \Carbon\Carbon::parse($cekAbs->keluar);
- $dur['duration'] = $attInLog->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
- }else{
- $dur['duration'] = \Carbon\Carbon::parse($cekAbs->masuk)->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
- }
- }else{
- $dur['duration'] = "";
- }
- }else{
- $dur['day'] = dayIdn($i);//hari
- if(isset($dur["masuk"]) and isset($dur["keluar"])){
- $durationRequire = \Carbon\Carbon::parse($dur['jadwal']['masuk'])->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
- if($dur['masuk'] > $dur['jadwal']['masuk'] AND $dur['keluar'] < $dur['jadwal']['keluar']){ /*Terlambat dan pulang cepat*/
- $kenyataan = \Carbon\Carbon::parse($dur['masuk']);
- $harapan = \Carbon\Carbon::parse($dur['jadwal']['masuk']);
- $dur['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
- $kenyataan = \Carbon\Carbon::parse($dur['keluar']);
- $harapan = \Carbon\Carbon::parse($dur['jadwal']['keluar']);
- $dur['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }else if($dur['masuk'] > $dur['jadwal']['masuk']){ /*Terlambat tok*/
- $kenyataan = \Carbon\Carbon::parse($dur['masuk']);
- $harapan = \Carbon\Carbon::parse($dur['jadwal']['masuk']);
- $dur['terlambat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }else if($dur['keluar'] < $dur['jadwal']['keluar']){ /*Pulang cepat tok*/
- $kenyataan = \Carbon\Carbon::parse($dur['keluar']);
- $harapan = \Carbon\Carbon::parse($dur['jadwal']['keluar']);
- $dur['pulang_cepat'] = $kenyataan->diff($harapan)->format("%H:%I");
- }
- $dur['duration'] = \Carbon\Carbon::parse($dur["masuk"])->diff(\Carbon\Carbon::parse($dur['jadwal']['keluar']))->format("%H:%I");
- $dur = $this->potongan($dur);
- $this->createAbsReport($dur, $pers->pin, $dur['jadwal']['id'], $i);// insert data di Abs_report tabel
- }
- if(!isset($dur['status_id']) AND !isset($dur['keluar'])){
- $dur['keluar'] = '<button class="btn btn-xs btn-default" onclick="findDataScan('.$pers->pin.','.str_replace("-", ",",$i).')"><i class="fa fa-search"></i></button>';
- }else if(!isset($dur['status_id']) AND !isset($dur['masuk'])){
- $dur['masuk'] = '<button class="btn btn-xs btn-default" onclick="findDataScan('.$pers->pin.','.str_replace("-", ",",$i).')"><i class="fa fa-search"></i></button>';
- }
- }
- return $dur;
- });
- $jamKerja = @$merge->map(function($rw, $i){
- return $this->timeToSeconds(@$rw['duration'].":00");
- })->sum();
- $telat = @$merge->map(function($rw, $i){
- return $this->timeToSeconds(@$rw['terlambat'].":00");
- })->sum();
- $potongan = @$merge->map(function($rw, $i){
- return $rw['potongan'];
- })->sum()."%";
- $pers->totalJamKerja = $this->secondToTime($jamKerja);
- $pers->totaltelat = $this->secondToTime($telat);
- $pers->totalPotongan = $potongan;
- $pers->persensi = $merge->toArray();
- }else if(Input::get('remove')){
- $remove = AbsReport::findOrFail(Input::get('remove'));
- $remove->delete();
- return redirect()->back()->with('message', 'Data telah dihapus');
- }
- $dataLast = Persensi::orderBy("scan_date", "desc")->first()->scan_date;
- $dataLast = substr(explode(" ", $dataLast)[1], 0,5)." ".dayIdn(explode(" ", $dataLast)[0]).", ".dateIdn(date_format(date_create($dataLast), 'Y m d'))." ";
- // dd($dataLast);
- //--- if
- //if Lembur
- // if($jadwal->hari_ke == 0 or $jadwal->hari_ke == 1){//ketika hari sabtu dan minggu
- // // hitung durasi nya
- // $data['statuslembur'] = 'lembur';
- // if($data['masuk'] > substr($jadwal->masuk, 0,5) AND $data['keluar'] < substr($jadwal->keluar, 0,5)){
- // // $masuklembur = \Carbon\Carbon::parse($data['masuk']);
- // $masuklembur = \Carbon\Carbon::parse($jadwal->masuk);
- // // $keluarlembur = \Carbon\Carbon::parse($data['keluar']);
- // $keluarlembur = \Carbon\Carbon::parse($jadwal->keluar);
- // $data['durasilembur'] = $keluarlembur->diff($masuklembur)->format("%H:%I");
- // }
- // }
- //end if
- return view("pages/Absen/Persensi", compact("pers","pegawai","filters", "dataLast"));
- }
- }
- public function cetakLaporan($post){//cetak laporan
- $pers = Person::whereIn("pin", $post['pins'])->get();
- $date = Input::get('tahun').'-'.str_pad(Input::get('bulan'), 2, "0", STR_PAD_LEFT);
- $start = \Carbon\Carbon::parse($date)->startOfMonth()->format("Y-m-d");
- $end = \Carbon\Carbon::parse($date)->endOfMonth()->format("Y-m-d");
- foreach($pers as $i=>$emp){
- $report = AbsReport::whereRaw("tanggal BETWEEN '$start' AND '$end' AND pin = $emp->pin AND status_id != 6")->orderBy("tanggal", "asc")->groupBy("tanggal")->get();
- $report->map(function($row, $i){
- if($row->masuk AND $row->keluar AND $row->status_id==1){
- $row->jam_kerja = \Carbon\Carbon::parse($row->masuk)->diff(\Carbon\Carbon::parse($row->jadwal->keluar))->format("%H:%I");
- }else{
- $row->jam_kerja = 0;
- }
- });
- $jamKerja = $report->map(function($rw, $i){
- return $this->timeToSeconds($rw->jam_kerja.":00");
- })->sum();
- $telat = $report->map(function($rw, $i){
- return $this->timeToSeconds($rw->terlambat);
- })->sum();
- $pulang_cepat = $report->map(function($rw, $i){
- return $this->timeToSeconds($rw->pulang_cepat);
- })->sum();
- $potongan = $report->map(function($rw, $i){
- return @$rw->potongan;
- })->sum()."%";
- $emp->total_jam_kerja = $this->secondToTime($jamKerja);
- $emp->total_terlambat = $this->secondToTime($telat);
- $emp->total_pulang_cepat = $this->secondToTime($pulang_cepat);
- $emp->totalPotongan = $potongan;
- $emp->report = $report;
- }
- $pdf = \App::make('dompdf.wrapper');
- $pdf->loadView('pages/Absen/cetak_laporan', compact('pers'))->setPaper("F4")->setOrientation("potrait");
- return $pdf->stream("Laporan Bulanan");
- }//end cetak laporan
- //tampildatascan
- public function dataScan(){
- if(Input::get('draw')){
- $post = (Object) Input::all();
- $start=0;
- $length=10;
- $like='';
- $order=null;
- $total=0;
- $select_Table = "";
- $where_Search="";
- $filter="";
- if(!empty($post->start)){
- $start=$post->start;
- }
- if(!empty($post->length)){
- $length=$post->length;
- }
- // kondisi
- $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'].'%")';
- if(Input::get('pin') AND Input::get('pin')!="-"){
- $filter = ' AND (at.pin = '.Input::get('pin').')';
- }
- $column = $post->order[0]["column"];
- $asc_desc = $post->order[0]["dir"];
- $columns=array('', 'at.scan_date', '', 'emp.first_name', 'func.func_name', 'at.scan_date', 'mode.io_mode', 'verify.verify_mode');
- // yang diselect
- $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";
- // melengkapkan
- $sqlString = "SELECT $select FROM att_log AS at
- JOIN emp ON emp.pin = at.pin
- JOIN mode ON mode.io_mode = at.io_mode
- JOIN func on func.func_id_auto = emp.func_id_auto
- JOIN verify ON verify.verify_mode = at.verify_mode ".$where_Search.$filter;
- // dd($sqlString);
- $att_log = DB::connection("absen")
- ->select($sqlString." ORDER BY ".$columns[$column]." ".$asc_desc." LIMIT $length OFFSET $start");
- $total = DB::connection("absen")
- ->select(str_replace($select, "COUNT(*) as total", $sqlString));
- $att_log = collect($att_log)->map(function($row, $i) use ($start){
- $row->no = $start+$i+1;
- $row->hari = dayIdn($row->tanggal);
- return $row;
- })->toArray();
- $return=array("draw"=> 0, "recordsTotal"=> $total[0]->total, "recordsFiltered"=> $total[0]->total);
- $return['data'] = $att_log;
- return json_encode($return);
- }else if(Input::get('find')){
- $pers = Person::where("pin", Input::get('pin'))->first();
- $tgl = \Carbon\Carbon::parse(Input::get('tanggal'))->format("Y-m-d");
- $tgl2 = \Carbon\Carbon::parse(Input::get('tanggal'))->addDays(1)->format("Y-m-d");
- $tgl3 = \Carbon\Carbon::parse(Input::get('tanggal'))->addDays(-1)->format("Y-m-d");
- $return = Persensi::whereRaw("(pin = ".$pers->pin.") AND (scan_date like '%".$tgl."%' OR scan_date like '%".$tgl2."%' OR scan_date like '%".$tgl3."%')")
- ->orderBy("scan_date", "asc")->get()->map(function($rows, $i) use ($pers){
- $row = array();
- $row['tanggal'] = explode(" ", $rows->scan_date)[0];
- $row['detail'] = $rows->scan_date;
- $row['waktu'] = substr(explode(" ", $rows->scan_date)[1], 0,5);
- $row['hari'] = dayIdn(explode(" ", $rows->scan_date)[0]);
- $row['jadwal'] = $pers->bagian->jadwal->where("hari_ke", date('w', strtotime($row['tanggal'])))
- ->where("func_id", $pers->bagian->func_id_auto)->orderBy('masuk', 'asc')->get()
- ->map(function($rw, $t){
- $rtn['id'] = $rw->id;
- $rtn['masuk'] = substr($rw->masuk, 0,5);
- $rtn['keluar'] = substr($rw->keluar, 0,5);
- return $rtn;
- });
- return $row;
- })->toArray();
- return json_encode($return);
- }
- $person = Person::orderBy('first_name', 'asc')->get()
- ->map(function($row){
- $html = '<option value="'.$row->pin.'">'.$row->first_name." ".$row->last_name.'</option>';
- return $html;
- })->toArray();
- $person = implode($person, "");
- return view("pages/Absen/Data_scan", compact("person"));
- }
- // end tampil data scan
- public function dataCuti(){
- if(Input::get('hapus')){
- $ijin = AbsIjin::findOrFail(Input::get('hapus'));
- if($ijin->report){
- $ijin->report->delete();
- }
- $ijin->delete();
- return redirect()->back()->with('message', 'Data Telah Dihapus');
- }
- $tahun = (Input::get('tahun')) ? Input::get('tahun') : date('Y');
- $bulan = (Input::get('bulan')) ? Input::get('bulan') : date('m');
- $date = $tahun."-".$bulan;
- if($bulan==00){
- $date = $tahun;
- }
- $data = AbsIjin::where("tanggal", "LIKE", "%$date%")->get();
- $pegawai = Person::orderBy("first_name", "asc")->get();
- $status = AbsStatus::where('id', '!=', 1)->get();
- return view("pages/Absen/Data_cuti_ijin", compact('data','pegawai','status','tahun','bulan'));
- }
- public function tambahDataIjin(){
- $pst = Input::all();
- $lamaHari = $pst['lama_hari'];
- $adds = array();
- for($i=0;$i<$lamaHari;$i++){
- $add['tanggal'] = \Carbon\Carbon::parse($pst['tanggal'])->addDays($i)->format('Y-m-d');
- $cek = AbsReport::where('tanggal', $add['tanggal'])->where('pin', $pst['pin'])->get();
- $add['pin'] = $pst['pin'];
- $add['status_id'] = $pst['status_id'];
- AbsReport::create($add);
- $add['keterangan'] = $pst['keterangan'];
- AbsIjin::create($add);
- }
- return redirect()->back()->with('message', 'Data Disimpan');
- }
- public function createAbsReport($data, $pin, $jadwal_id, $tanggal)
- {
- unset($data['j_in'], $data['j_out'], $data['day'], $data['duration']);
- if($data['masuk']=="" AND $data['keluar']==""){
- unset($data['pulang_cepat'], $data['keluar']);
- unset($data['terlambat'], $data['masuk']);
- }else if($data['keluar']==""){
- unset($data['pulang_cepat'], $data['keluar']);
- }else if($data['masuk']==""){
- unset($data['terlambat'], $data['masuk']);
- }
- $data['tanggal'] = $tanggal;
- $data['pin'] = $pin;
- $data['jadwal_id'] = $jadwal_id;
- $data['status_id'] = 1;
- $data['masuk'] = $data['detail']['masuk'];
- $data['keluar'] = $data['detail']['keluar'];
- $new = AbsReport::create($data);
- }
- public function potongan($data){
- $masterPotongan = array(
- ["00:01-00:30", 0.5],//
- ["00:31-01:00", 1],
- ["01:01-01:30", 1.25],
- ["01:31-24:00:", 1.5]
- );
- $potongan = 0;
- if(isset($data['terlambat'])){
- $pulang = \Carbon\Carbon::parse($data['keluar'])->diff(\Carbon\Carbon::parse($data['jadwal']['keluar']))->format("%H:%i"); //mencaari selisih pada tanggal[jam]
- $scPulang = $this->timeToSeconds($pulang > $data['jadwal']['toleransi_masuk'] ? $data['jadwal']['toleransi_masuk'].":00" : $pulang.":00");
- $scTerlambat = $this->timeToSeconds($data['terlambat'].":00");
- $afterTerlambat = $scTerlambat-$scPulang <= 0 ? 0 : $scTerlambat-$scPulang;
- $afterTerlambat = $this->secondToTime($afterTerlambat);
- foreach($masterPotongan as $ptg){
- $rentang = explode("-", $ptg[0]);
- if($afterTerlambat >= $rentang[0] AND $afterTerlambat<=$rentang[1]){
- $potongan = $potongan+$ptg[1];
- }
- }
- }
- if(isset($data['pulang_cepat'])){
- foreach($masterPotongan as $ptg){
- $rentang = explode("-", $ptg[0]);
- if($data['pulang_cepat'] >= $rentang[0] AND $data['pulang_cepat']<=$rentang[1]){
- $potongan = $potongan+$ptg[1];
- }
- }
- }
- if(!isset($data['masuk']) OR !isset($data['keluar'])){
- $potongan = $masterPotongan[3][1];
- }
- if($potongan>0){
- $data['potongan'] = $potongan;
- }
- return $data;
- }
- /**
- * Remove the specified resource from storage.
- *
- * @param int $id
- * @return \Illuminate\Http\Response
- */
- public function timeToSeconds($time)
- {
- $arr = explode(":", $time);
- if(count($arr)>2){
- $return = ((int)$arr[0]*3600) + ((int)$arr[1]*60) + (int)$arr[2];
- return $return;
- }else{
- return 0;
- }
- }
- public function secondToTime($seconds)
- {
- $hours = floor($seconds / 3600);
- $mins = floor($seconds / 60 % 60);
- $secs = floor($seconds % 60);
- return $timeFormat = sprintf('%02d:%02d', $hours, $mins);
- }
- public function getFromMacine(){
- $mcn = AbsMacine::all();
- $ip = $mcn[0]->var_val;
- $session = $mcn[1]->var_val;
- $ip = "127.0.0.1";
- $dataString = "uid=2&uid=86&sdate=2019-02-14&edate=2019-02-31";
- exec("ping -c 1 $ip", $result, $status);
- if(count($result)>1){
- // $url = "http://192.168.10.136/csl/check";
- // $data = "username=administrator&userpwd=.lo9ijn";
- // $url = "http://$ip/csl/query?action=run";
- return $this->checkCookie($ip);
- // $cookieString = "SessionID=1550153911";
- $process = curl_init();
- $options = array(
- CURLOPT_URL => $url,
- CURLOPT_HEADER => TRUE,
- CURLOPT_POSTFIELDS => TRUE,
- CURLOPT_RETURNTRANSFER => TRUE,
- CURLOPT_FOLLOWLOCATION => TRUE,
- CURLOPT_POST => FALSE,
- CURLOPT_BINARYTRANSFER => TRUE,
- // CURLOPT_COOKIE => $cookieString,
- // CURLOPT_HTTPHEADER, array(
- // 'Content-Type: application/http',
- // 'Content-Length: ' . strlen($data)
- // ),
- );
- curl_setopt_array($process, $options);
- $return = curl_exec($process);
- curl_close($process);
- $sessionNow = explode("=", explode(";",explode("\r\n", $return)[3])[0])[1];
- dd($sessionNow);
- $dom = new \DOMDocument();
- $dom->loadHtml($return[0]);
- $table = $dom->getElementsByTagName('table');
- $table = $table->item(0)->getElementsByTagName('tr');
- $arr = array();
- foreach($table as $i=>$tr){
- if($i>0){
- $dt['tanggal'] = $tr->getElementsByTagName('td')[0]->nodeValue;
- $dt['pin'] = $tr->getElementsByTagName('td')[1]->nodeValue;
- $dt['nama'] = $tr->getElementsByTagName('td')[2]->nodeValue;
- $dt['time'] = $tr->getElementsByTagName('td')[3]->nodeValue;
- $dt['io_mode'] = $tr->getElementsByTagName('td')[4]->nodeValue;
- $dt['io_type'] = $tr->getElementsByTagName('td')[5]->nodeValue;
- $arr[]=$dt;
- }
- }
- dd($arr);
- $dataHtml = str_replace(["\n"], "<br>", $return[0]);
- $dataHtml = strip_tags($dataHtml, "<table><tr><td>");
- echo $dataHtml;
- }else{
- return "IP <b>$ip</b> tidak bisa di akses";
- }
- }
- public function checkCookie($url){
- $process = curl_init();
- $options = array(
- CURLOPT_URL => "http://".$url,
- CURLOPT_HEADER => TRUE,
- CURLOPT_POSTFIELDS => TRUE,
- CURLOPT_RETURNTRANSFER => TRUE,
- CURLOPT_FOLLOWLOCATION => TRUE,
- CURLOPT_POST => FALSE,
- CURLOPT_BINARYTRANSFER => TRUE,
- );
- curl_setopt_array($process, $options);
- $return = curl_exec($process);
- curl_close($process);
- $cookieNow = @explode("=", explode(";",explode("\r\n", $return)[3])[0])[1];
- dd($cookieNow);
- }
- // lihat data pegawai
- public function dataPegawai(){
- if(input::get('draw')){
- $datakaryawan = (Object)input::all();
- $start =0;
- $length=10;
- $like='';
- $order=null;
- $total=0;
- $select_Table = "";
- $where_Search="";
- $filter="";
- if(!empty($datakaryawan->start)){
- $start = $datakaryawan->start;
- }
- if(!empty($datakaryawan->length)){
- $length=$datakaryawan->length;
- }
- $cari = $datakaryawan->search['value'];// pencarian data table
- // $cari = '103';
- // dd($detailpegawai);
- $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.'%"';
- // set kolomnya
- $column = $datakaryawan->order[0]["column"];//coloumn itu dari datatable
- $asc_desc = $datakaryawan->order[0]["dir"];//dir untuk ascending
- // set kolom
- $columns = array ('','e.nik','e.first_name','e.gender','e.birth_date','e.address','e.phone','e.married','e.education');//dibuat order bys
- $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';
- $sqlString = "SELECT $select FROM emp e LEFT JOIN func f ON e.func_id_auto = f.func_id_auto ". $where_Search;
- $sqltod = DB::connection("absen")
- ->select($sqlString." ORDER BY ".$columns[$column]." ".$asc_desc." LIMIT $length OFFSET $start");
- $total = DB::connection("absen")
- ->select(str_replace($select,"COUNT(*) as total",$sqlString));
- //---------
- //dd($sqltod);
- $selectdevisi = "select * from func";
- $devisi = DB::connection("absen")->select($selectdevisi);
- $att_log = collect($sqltod)->map(function($row, $i) use ($start){//looping
- $row->no = $start+$i+1;
- if($row->gender == '0'){
- $row->gender = "L";
- }else{
- $row->gender = "P";
- }
- //status nikah
- if($row->married == '0'){
- $row->married = "Belum Nikah";
- }else{
- $row->married = "Nikah";
- }
- // $row->aksi = '<a href=""'>'+$row->nik+'</a>';
- $row->aksi = '<button id="info_pegawai" class="btn btn-success btn-xs">Edit</button>';
- $row->id_divisi = $row->id_divisi;
- return $row;
- })->toArray();
- $editpegawai ="";
- $return = array(
- "draw" => 0,
- "recordsTotal" => $total[0]->total,
- "recordsFiltered" => $total[0]->total,
- "detaildevisi" => $devisi,
- "data" => $att_log,//sudah jadi array karena sudah di eksekusi
- );
- return json_encode($return);
- }else{
- return view("pages/Absen/Tampil_pegawai");
- }
- }
- // end lihat data pegawai
- // update pegawai
- public function updatePegawai(Request $request){
- // dd(request()->all());
- $pin = $request->pin;
- $nik = $request->nik;
- $gender = $request->jeniskelamin;
- $nama = $request->namadepan;
- $belakang = $request->namabelakang;
- $devisi_id = $request->allTeam;
- $alamat = $request->alamat;
- $pendidikan = $request->pendidikan;
- if($gender ==""){
- return redirect()->back()->with('alert', 'Isi Jenis Kelamin terlebih dahulu!');
- }
- $status = DB::connection("absen")->table('emp')
- ->where('pin',$pin)
- ->update([
- 'nik' => $nik,
- 'first_name' => $nama,
- 'gender' => $gender,
- 'last_name' => $belakang,
- 'func_id_auto' => $devisi_id,
- 'address' =>$alamat,
- 'education' => $pendidikan
- ]);
- if ($status){//status ok redirect ke pegawai
- return redirect()->back()->with('success', 'Data Terupdate');
- }
- }//end info pegawai
- public function editpegwai(){
- }//end edit pegwai
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement