<?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]