Anons79 Mini Shell

Directory : /home/aplikasiposinfo/public_html/demo-absensi.aplikasipos.info/app/Exports/
Upload File :
Current File : /home/aplikasiposinfo/public_html/demo-absensi.aplikasipos.info/app/Exports/KaryawansExport.php

<?php

namespace App\Exports;

use App\Models\Karyawan;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Style\Protection;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;

class KaryawansExport implements FromCollection, WithHeadings, WithMapping, ShouldAutoSize,WithStyles
{   
    public $total_rows = 1;
    /**
     * @return \Illuminate\Support\Collection
     */
    public function collection()
    {
        $datas = Karyawan::
            with('perusahaan', 'jadwal_kerja', 'departemen','perusahaans')
            ->leftJoin(DB::raw('(SELECT 
                    absensis.karyawan_id,
                    sum( TIMESTAMPDIFF(MINUTE,CONCAT(ci.tanggal_absen," ",ci.waktu_absen), CONCAT(co.tanggal_absen," ",co.waktu_absen)) / 60) as total_jam_kerja
                    FROM `absensis`
                JOIN riwayat_absensis as ci ON (ci.absensi_id = absensis.id AND ci.jenis_absen = "check-in" AND (ci.status = "accept" OR ci.status = "due"))
                JOIN riwayat_absensis as co ON (co.absensi_id = absensis.id AND co.jenis_absen = "check-out" AND (co.status = "accept" OR co.status = "due"))
                
                GROUP BY absensis.karyawan_id) as absensis'), function ($j) {
                $j->on('absensis.karyawan_id', '=', 'karyawans.id');
            })
            ->filtersInput([
                'id_karyawan',
                'nama',
                'nik',
                'jabatan',
                'jenis_kelamin',
                'tanggal_mulai_kerja',
                [
                    'departemen' => [
                        'nama_departemen'
                    ],
                    'perusahaan' => [
                        'nama_perusahaan'
                    ],
                    'perusahaans' => [
                        'nama_perusahaan'
                    ],
                    'jadwal_kerja' => [
                        'nama_jadwal'
                    ]


                ]
            ], 'search');
        if (request()->has('perusahaan_id') && request()->perusahaan_id != "0") {
            $datas = $datas->whereHas('perusahaans',function($w){
                $w->where('perusahaan_id',request()->perusahaan_id);
            });
        }
        if (request()->has('departemen_id') && request()->departemen_id != "0") {
            $datas = $datas->where('karyawans.departemen_id', request()->departemen_id);
        }
        $this->total_rows = $datas->count() + 1;
        return $datas->orderBy('created_at', 'DESC')->get();
    }

    public function headings(): array
    {
        return [
            'NIK',
            'Nama',
            'Jenis Kelamin',
            'Email',
            'Departemen',
            'Jabatan',
            'Perusahaan',
            'Jadawl Kerja',
            'Tanggal Mulai Kerja',
            'Total Jam Kerja'
        ];
    }


    public function map($karyawan): array
    {
        return [
            $karyawan->nik,
            $karyawan->nama,
            $karyawan->jenis_kelamin,
            $karyawan->email,
            @$karyawan->departemen->nama_departemen,
            $karyawan->jabatan,
            // @$karyawan->perusahaan->nama_perusahaan,
            ($karyawan->perusahaans->count() > 0)?implode(", ",$karyawan->perusahaans->pluck('nama_perusahaan')->toArray()):null,
            implode(", ", $karyawan->jadwal_kerja->pluck('nama_jadwal')->toArray()),
            $karyawan->tanggal_mulai_kerja,
            number_format($karyawan->total_jam_kerja ?? 0,2),
        ];
    }

    public function styles(Worksheet $sheet)
    {
        // Make sure you enable worksheet protection if you need any of the worksheet or cell protection features!
        $sheet->getParent()->getActiveSheet()->getProtection()->setSheet(true);
        
        // // lock all cells then unlock the cell
        // $sheet->getParent()->getActiveSheet()
        //     ->getStyle('A1:J'.$this->total_rows)
        //     ->getProtection()
        //     ->setLocked(Protection::PROTECTION_UNPROTECTED);

        // styling first row
        $sheet->getStyle(1)->getFont()->setBold(true);
        
    }
}

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