Anons79 Mini Shell

Directory : /home/aplikasiposinfo/.trash/resources/views/laporan/absensi/
Upload File :
Current File : /home/aplikasiposinfo/.trash/resources/views/laporan/absensi/index.blade.php

@extends('layouts.app')

@push('scripts')
    <script src="https://cdn.jsdelivr.net/gh/linways/[email protected]/dist/tableToExcel.js"></script>
    @php
        $periode_awal = request()->periode_awal ?? date('Y-m-20', strtotime('-1 month'));
        $periode_akhir = request()->periode_akhir ?? date('Y-m-20');
    @endphp
    <script>
        function fnExcelReport() {
            let table = document.getElementById("tabel");
            TableToExcel.convert(table, { // html code may contain multiple tables so here we are refering to 1st table tag
                name: `laporan_absensi_karyawan_{{ $periode_awal }}_{{ $periode_akhir }}.xlsx`, // fileName you could use any name
                sheet: {
                    name: 'Sheet 1' // sheetName
                }
            });
        }
    </script>

    <script src="https://cdn.jsdelivr.net/npm/[email protected]/public/assets/scripts/choices.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>


    <script>
        // const karyawan = document.getElementById('pilih_karyawan_id');
        // const karyawanChoices = new Choices(karyawan);
        const perusahaan = document.getElementById('perusahaan_id');
        const perusahaanChoices = new Choices(perusahaan);
        const lokasiKerja = document.getElementById('lokasi_kerja_id');
        const lokasiKerjaChoices = new Choices(lokasiKerja);

        $(document).ready(function() {
            var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
            $.noConflict();
            $("#pilih_karyawan_id").select2({
                theme: 'bootstrap-5',
                ajax: {
                    url: "/ajax/pilih-karyawan",
                    type: 'POST',
                    dataType: 'json',
                    delay: 250,
                    data: function(params) {
                        return {
                            _token: CSRF_TOKEN,
                            q: params.term, // search term
                            page: params.current_page,
                            perusahaan_id: $('#perusahaan_id').val(),
                            departemen_id: $('#departemen_id').val(),
                            lokasi_kerja_id: $('#lokasi_kerja_id').val(),
                        };
                    },
                    processResults: function(data, params) {
                        params.current_page = params.current_page || 1;

                        return {
                            results: data.data,
                            pagination: {
                                more: (params.current_page * 30) < data.total
                            }
                        };
                    },
                    autoWidth: true,
                    cache: true
                },
                // placeholder: 'Search for a karyawan',
                // minimumInputLength: 1,
                templateResult: formatProduct,
                templateSelection: formatProductSelection
            })

            function formatProduct(product) {
                if (product.loading) {
                    return product.text;
                }

                var $container = $(
                    "<div class='select2-result-product clearfix'>" +
                    "<div class='select2-result-product__title'></div>" +
                    "<div class='select2-result-product__description'></div>" +
                    "</div>" +
                    "</div>" +
                    "</div>"
                );

                $container.find(".select2-result-product__title").text(product.nama);
                $container.find(".select2-result-product__description").text(product.email);

                return $container;
            }

            function formatProductSelection(product) {
                return product.nama || product.text;
            }
        });
    </script>
@endpush

@push('styles')
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/select2.min.js"></script>
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" />
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/public/assets/styles/choices.min.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
    <link rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/[email protected]/dist/select2-bootstrap-5-theme.min.css" />
    <!-- Or for RTL support -->
    <link rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/[email protected]/dist/select2-bootstrap-5-theme.rtl.min.css" />
@endpush

@section('content')
    <h4 class="fw-bold py-3 mb-4"><span class="text-muted fw-light">Laporan /</span> Absensi</h4>

    <div class="card">
        <h5 class="card-header">Laporan Absensi</h5>
        <div class="card-body">
            <div class="row mb-4">
                <div class="col-md-12">
                    <form class="form row" action="">
                        @csrf
                        <input type="hidden" name="time" value="{{ date('YmdHis') }}">
                        <div class="col">
                            <div class="form-group">
                                <label for="periode_awal">Periode Awal</label>
                                <input type="date" class="form-control" placeholder="Periode Awal..."
                                    aria-label="Periode Awal" name="periode_awal" id="periode_awal"
                                    value="{{ request()->periode_awal ?? date('Y-m-20', strtotime('-1 month')) }}">
                            </div>
                        </div>
                        <div class="col">
                            <div class="form-group">
                                <label for="periode_akhir">Periode Akhir</label>
                                <input type="date" class="form-control" placeholder="Periode Akhir..."
                                    aria-label="Periode Akhir" name="periode_akhir" id="periode_akhir"
                                    value="{{ request()->periode_akhir ?? date('Y-m-20') }}">
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="perusahaan_id">Perusahaan <span class="text-danger">*</span></label>
                                <select name="perusahaan_id" class="form-control" id="perusahaan_id">
                                    <option value="">Semua Perusahaan</option>
                                    @foreach ($perusahaans as $perusahaan)
                                        <option value="{{ $perusahaan->id }}"
                                            {{ old('perusahaan_id', request()->perusahaan_id) == $perusahaan->id ? 'selected' : '' }}>
                                            {{ $perusahaan->nama_perusahaan }}</option>
                                    @endforeach
                                </select>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="departemen_id">Departemen <span class="text-danger">*</span></label>
                                <select name="departemen_id" class="form-control" id="departemen_id">
                                    <option value="">Semua Departemen</option>
                                    @foreach ($departemens as $departemen)
                                        <option value="{{ $departemen->id }}"
                                            {{ old('departemen_id', request()->departemen_id) == $departemen->id ? 'selected' : '' }}>
                                            {{ @$departemen->nama_departemen }}</option>
                                    @endforeach
                                </select>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="pilih_karyawan_id">Karyawan</label>
                                <select class="form-control" id="pilih_karyawan_id" name="karyawan_id">
                                    <option value="0">Semua Karyawan</option>
                                    {{-- @foreach ($pilihKaryawans as $item)
                                        <option value="{{ $item->id }}"
                                            @if (request()->karyawan_id == $item->id) selected @endif>
                                            {{ $item->nama }}</option>
                                    @endforeach --}}
                                </select>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="lokasi_kerja_id">Lokasi Kerja</label>
                                <select class="form-control" id="lokasi_kerja_id" name="lokasi_kerja_id">
                                    <option value="0">Semua Lokasi</option>
                                    @foreach ($lokasiKerjas as $item)
                                        <option value="{{ $item->id }}"
                                            @if (request()->lokasi_kerja_id == $item->id) selected @endif>
                                            {{ $item->nama_lokasi }}</option>
                                    @endforeach
                                </select>
                            </div>
                        </div>
                        <div class="col-md-4">
                            <div class="form-group">
                                <label for="">Seacrh</label>
                                <input type="text" class="form-control" placeholder="Search..." aria-label="Search"
                                    name="search" value="{{ request()->search }}">
                            </div>
                        </div>
                        <div class="col-md-3">
                            <button class="btn btn-secondary mt-4" type="submit" name="filter"
                                value="filter">Filter</button>
                            <button class="btn btn-success mt-4" type="submit" name="export" value="export"> <i
                                    class="bx bxs-file-export"></i> Export</button>
                            <button class="btn btn-info mt-4" type="submit" name="export" value="pdf"> <i
                                    class="bx bxs-file-export"></i> PDF</button>
                        </div>
                    </form>
                </div>

            </div>
            <div class="table-responsive text-nowrap">
                {{-- <button type="button" onclick="fnExcelReport()" class="btn btn-sm btn-success"><i
                        class="bx bxs-file-export"></i></button> --}}
                <table class="table" id="tabel">
                    <thead>
                        <tr>
                            <th rowspan="2" data-b-a-s="thin">
                                No
                            </th>
                            <th rowspan="2" data-b-a-s="thin">
                                NIK
                            </th>
                            <th rowspan="2" data-b-a-s="thin" class="karyawan">
                                NAMA
                            </th>
                            <th rowspan="2" data-b-a-s="thin">
                                JABATAN
                            </th>
                            <th rowspan="2" data-b-a-s="thin">
                                DEPARTEMEN
                            </th>
                            <th rowspan="2" data-b-a-s="thin">
                                Co.
                            </th>
                            @foreach ($periods as $period)
                                <th>
                                    {{ $period->format('Y-m-d') }}
                                </th>
                            @endforeach
                            <th colspan="13" style="background-color:#c6e0b4;" data-b-a-s="thin"
                                data-fill-color="FFc6e0b4">
                                <center>Absensi</center>
                            </th>
                            <th style="background-color:#c6e0b4;" data-b-a-s="thin" data-fill-color="FFc6e0b4"
                                rowspan="2">
                                Attendance Ratio
                                <br>
                                (Mtd)
                            </th>
                            <th rowspan="2">
                                Total Jam Kerja
                            </th>
                            <th rowspan="2">
                                Total Jam Lembur
                            </th>

                        </tr>
                        <tr>
                            @php
                                $colors = [
                                    'H' => 'background-color:#0070c0;color:white;',
                                    'I' => 'background-color:#b4c6e7;',
                                    'S' => 'background-color:#c6efce;',
                                    'C' => 'background-color:#b4c6e7;',
                                    'FB' => 'background-color:#b4c6e7;',
                                    'L' => 'background-color:#b4c6e7;',
                                    'Off' => 'background-color:#ffeb9c;color:#c66c0e;',
                                    'A' => 'background-color:#ffc7ce;color:#a60735;',
                                    'NA' => 'background-color:#ffc7ce;color:#a60735;',
                                    'S1' => 'background-color:#ffc7ce;color:#a60735;',
                                    'I1' => 'background-color:#ffc7ce;color:#a60735;',
                                    'I2' => 'background-color:#ffc7ce;color:#a60735;',
                                    'Jumlah' => 'background-color:#c6e0b4;',
                                ];
                                $colorsCode = [
                                    'H' => 'FF0070c0',
                                    'I' => 'FFb4c6e7',
                                    'S' => 'FFc6efce',
                                    'C' => 'FFb4c6e7',
                                    'FB' => 'FFb4c6e7',
                                    'L' => 'FFb4c6e7',
                                    'Off' => 'FFffeb9c',
                                    'A' => 'FFffc7ce',
                                    'NA' => 'FFffc7ce',
                                    'S1' => 'FFffc7ce',
                                    'I1' => 'FFffc7ce',
                                    'I2' => 'FFffc7ce',
                                    'Jumlah' => 'FFc6e0b4',
                                ];
                                $jumlahAbsen = [];
                            @endphp

                            @foreach ($periods as $period)
                                <th data-b-a-s="thin">
                                    {{ $period->format('D') }}
                                </th>
                            @endforeach
                            @foreach ($colors as $key => $style)
                                @php
                                    $jumlahAbsen[$key] = 0;
                                @endphp
                                <th style="{{ $style }}" data-fill-color="{{ $colorsCode[$key] }}"
                                    data-b-a-s="thin">
                                    {{ $key }}
                                </th>
                            @endforeach


                        </tr>
                    </thead>
                    <tbody>
                        @foreach ($karyawans as $no => $karyawan)
                            @php
                                $haris = Helper::checkJadwal($karyawan, $periode_awal, $periode_akhir);

                            @endphp
                            @foreach ($colors as $key => $style)
                                @php
                                    $jumlahAbsen[$key] = 0;
                                @endphp
                            @endforeach
                            <tr>
                                <td data-b-a-s="thin">
                                    {{ $karyawans->firstItem() + $no }}
                                </td>
                                <td data-b-a-s="thin">
                                    {{ $karyawan->nik }}
                                </td>
                                <td data-b-a-s="thin" class="karyawan">
                                    {{ $karyawan->nama }}
                                </td>
                                <td data-b-a-s="thin">
                                    {{ @$karyawan->jabatan }}
                                </td>
                                <td data-b-a-s="thin">
                                    {{ @$karyawan->departemen->nama_departemen }}
                                </td>
                                {{-- <td data-b-a-s="thin">{{ $karyawan->perusahaan->nama_perusahaan }}</td> --}}
                                <td data-b-a-s="thin">
                                    {{($karyawan->perusahaans->count() > 0)?implode(", ",$karyawan->perusahaans->pluck('nama_perusahaan')->toArray()):""}}
                                </td>
                                @php
                                    $totalJamKerja = 0;
                                    $totalJamLembur = 0;
                                @endphp
                                @foreach ($periods as $key => $period)
                                    @php
                                        // $absensi = \App\Models\Absensi::where('karyawan_id', $karyawan->id)
                                        //     ->whereDate('tanggal_absen', $period->format('Y-m-d'))
                                        //     ->orderBy('tanggal_absen', 'desc')
                                        //     ->orderBy('created_at', 'desc')
                                        //     ->first();
                                        $absensi = $karyawan->absensi
                                            ->where('tanggal_absen', $period->format('Y-m-d'))
                                            ->first();

                                        $jamLembur = 0;
                                        $jamKerja = 0;
                                        if ($absensi) {
                                            $riwayats = $absensi->riwayat_absensi;
                                            $jadwals = array_reduce(
                                                $riwayats->toArray(),
                                                function ($carry, $item) {
                                                    $carry[$item['jadwal_kerja_id']] = $item['jadwal_kerja_id'];
                                                    return $carry;
                                                },
                                                [],
                                            );
                                            // $jadwals = $absensi->riwayat_absensi()->select('jadwal_kerja_id')->groupBy('jadwal_kerja_id')->pluck('jadwal_kerja_id');
                                            foreach ($jadwals as $j) {
                                                $ci = $riwayats
                                                    ->whereIn('status', ['accept', 'due'])
                                                    ->where('jadwal_kerja_id', $j)
                                                    ->where('jenis_absen', 'check-in')
                                                    ->first();
                                                $co = $riwayats
                                                    ->whereIn('status', ['accept', 'due'])
                                                    ->where('jadwal_kerja_id', $j)
                                                    ->where('jenis_absen', 'check-out')
                                                    ->first();
                                                if ($ci && $co) {
                                                    $time1 = strtotime($ci->tanggal_absen . ' ' . $ci->waktu_absen);
                                                    $time2 = strtotime($co->tanggal_absen . ' ' . $co->waktu_absen);
                                                    $time3 = strtotime(
                                                        $co->tanggal_absen . ' ' . @$haris[$j][$key]->jam_pulang,
                                                    );

                                                    $difference = round(abs($time2 - $time1) / 3600, 2);
                                                    $jamKerja += $difference;

                                                    if ($time2 > $time3 && $co->lembur) {
                                                        $difference2 = round(abs($time3 - $time2) / 3600, 2);
                                                        $jamLembur += $difference2;
                                                    }
                                                }
                                            }
                                        }

                                        // if(strtotime($haris[$karyawan->id][$key]->jam_masuk) > strtotime($haris[$karyawan->id][$key]->jam_pulang)){

                                        // }

                                        // $totalJamKerja += $absensi->total_jam_kerja ?? 0;
                                        $totalJamKerja += $jamKerja;
                                        $totalJamLembur += $jamLembur;
                                        $date = $period->format('Y-m-d');
                                        $status = 'NA';
                                        if ($absensi && $absensi->status_absen != null) {
                                            $status = strtoupper($absensi->status_absen);
                                        } else {
                                            $jadwalKerjas = $karyawan->jadwal_kerja;

                                            foreach ($jadwalKerjas as $jadwalKerja) {
                                                if (isset($haris[$jadwalKerja->id][$key])) {
                                                    if ($haris[$jadwalKerja->id][$key]->status_kerja == 'day-off') {
                                                        $status = 'Off';
                                                    } elseif ($haris[$jadwalKerja->id][$key]->status_kerja == 'cuti') {
                                                        $status = 'C';
                                                    } elseif ($haris[$jadwalKerja->id][$key]->status_kerja == 'fb') {
                                                        $status = 'FB';
                                                    } elseif ($haris[$jadwalKerja->id][$key]->status_kerja == 'i1') {
                                                        $status = 'I1';
                                                    } elseif ($haris[$jadwalKerja->id][$key]->status_kerja == 'i2') {
                                                        $status = 'I2';
                                                    } elseif ($haris[$jadwalKerja->id][$key]->status_kerja == 'i') {
                                                        $status = 'I';
                                                    } else {
                                                        $status = 'A';
                                                    }
                                                }
                                                // if ($jadwalKerja->jumlah_hari > 7) {
                                                //     $day_of_week = (int) date('d', strtotime($date));
                                                // } else {
                                                //     $day_of_week = (int) date('N', strtotime($date));
                                                // }
                                                // $detailJadwal = $jadwalKerja->jadwal_kerja_detail->where('hari', 'Day ' . $day_of_week)->first();

                                                // if ($detailJadwal) {
                                                //     if ($detailJadwal->status_kerja == 'day-off') {
                                                //         $status = 'Off';
                                                //     } else {
                                                //         $status = 'A';
                                                //         break;
                                                //     }

                                                // }
                                            }
                                        }
                                        if ($status == 'OFF') {
                                            $status = 'Off';
                                        }
                                        $jumlahAbsen[$status] += 1;
                                    @endphp
                                    <td style="{{ $colors[$status] }}; padding:0;"
                                        data-fill-color="{{ $colorsCode[$status] }}" data-b-a-s="thin">
                                        <div style="text-align: center;">
                                            <small>
                                                {{ $status }}
                                            </small>
                                            <br>
                                            @if (isset($absensi) && strtoupper($absensi->status_absen) != "A")
                                                <small style="font-size: 10px;">
                                                    {{-- <span>J : {{$jamKerja}} / L : {{$jamLembur}}</span>
                                                    <br> --}}
                                                    @foreach ($absensi->riwayat_absensi as $riwayat_absensi)
                                                        <span>
                                                            {{ $riwayat_absensi->jenis_absen }} :
                                                            {{ date('H:i', strtotime($riwayat_absensi->waktu_absen)) }}
                                                        </span>
                                                        <br>
                                                        @if ($riwayat_absensi->status_waktu == 'on-time')
                                                            <span class="badge bg-success">On Time</span>
                                                        @endif
                                                        @if ($riwayat_absensi->status_waktu == 'too-early')
                                                            <span class="badge bg-warning">Too Early</span>
                                                        @endif
                                                        @if ($riwayat_absensi->status_waktu == 'late')
                                                            <span class="badge bg-danger text-white">Late</span>
                                                        @endif
                                                        @if ($riwayat_absensi->lembur)
                                                            <br>
                                                            <span class="badge bg-info text-white">Lembur</span>
                                                        @endif
                                                        <br>
                                                    @endforeach
                                                </small>
                                            @endif
                                        </div>
                                    </td>
                                @endforeach
                                @foreach ($jumlahAbsen as $key => $jumlah)
                                    @php
                                        if ($key != 'Jumlah' && isset($jumlahAbsen['Jumlah'])) {
                                            $jumlahAbsen['Jumlah'] += $jumlah;
                                        }
                                    @endphp
                                @endforeach
                                @foreach ($jumlahAbsen as $key => $jumlah)
                                    <td data-b-a-s="thin">
                                        {{ $jumlah }}
                                    </td>
                                @endforeach
                                <td data-b-a-s="thin">
                                    @php
                                        $ttl =
                                            $jumlahAbsen['H'] +
                                            $jumlahAbsen['C'] +
                                            $jumlahAbsen['L'] +
                                            $jumlahAbsen['NA'];
                                        if ($ttl <= 0) {
                                            $mtd = 0;
                                        } else {
                                            $mtd = ($ttl / ($jumlahAbsen['Jumlah'] - $jumlahAbsen['Off'])) * 100;
                                        }
                                        // $mtd =
                                        //     (($jumlahAbsen['H'] +
                                        //         $jumlahAbsen['C'] +
                                        //         $jumlahAbsen['L'] +
                                        //         $jumlahAbsen['NA']) /
                                        //         ($jumlahAbsen['Jumlah'] - $jumlahAbsen['Off'])) *
                                        //     100;
                                    @endphp
                                    {{ round($mtd) }} %
                                </td>
                                <td data-b-a-s="thin">
                                    {{ $totalJamKerja }}
                                </td>
                                <td data-b-a-s="thin">
                                    {{ $totalJamLembur }}
                                </td>
                            </tr>
                        @endforeach

                    </tbody>
                    <tfoot>
                        <tr>
                            <td colspan="{{ 9 + iterator_count($periods) + count($jumlahAbsen) }}">
                                {{ $karyawans->appends(request()->query())->links() }}
                            </td>
                        </tr>
                    </tfoot>
                </table>
            </div>
        </div>
    </div>
@endsection

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]