Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Models;
- use Carbon\Carbon;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Http\Client\ConnectionException;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Log;
- use Sushi\Sushi;
- class PresensiWrapper extends Model
- {
- use Sushi;
- protected static $bulan;
- protected static $tahun;
- protected array $schema = [
- 'tanggal' => 'datetime',
- 'clock_in' => 'datetime',
- 'clock_out' => 'datetime',
- 'durasi_kerja' => 'string',
- 'keterangan_libur' => 'string',
- ];
- public static function setBulan($bulan): \Illuminate\Database\Eloquent\Builder
- {
- Log::info("set new bulan: " . $bulan);
- self::$bulan = $bulan;
- return self::query();
- }
- public static function setTahun($tahun): \Illuminate\Database\Eloquent\Builder
- {
- Log::info("set new tahun: " . $tahun);
- self::$tahun = $tahun;
- return self::query();
- }
- /**
- * Get formatted rows of products.
- *
- * @return array<int, array<string, mixed>>
- * @throws ConnectionException
- */
- public function getRows(): array
- {
- $userId = Auth::id();
- $tanggalAwal = Carbon::createFromDate(self::$tahun, self::$bulan)->startOfMonth();
- $tanggalAkhir = Carbon::createFromDate(self::$tahun, self::$bulan)->endOfMonth();
- $currentDate = $tanggalAwal->copy();
- $dates = [];
- Log::info("filter: " . $tanggalAwal->format('l, d F Y') . " - " . $tanggalAkhir->format('l, d F Y'));
- Log::info('======================================');
- while ($currentDate->lte($tanggalAkhir)) {
- $tanggalStr = $currentDate->toDateString();
- // hari libur
- $hariLibur = HariLibur::whereDate('tanggal', $tanggalStr)
- ->first();
- $presensi = Presensi::whereHas('pegawai', function ($query) use ($userId) {
- $query->where('user_id', $userId);
- })
- ->whereDate('tanggal', $currentDate->toDateString())
- ->first();
- $clockIn = $presensi?->clock_in;
- $clockOut = $presensi?->clock_out;
- // Hitung durasi jika clock_in dan clock_out tersedia
- $durasi = null;
- if ($clockIn && $clockOut) {
- $in = Carbon::parse($clockIn);
- $out = Carbon::parse($clockOut);
- $diff = $in->diff($out);
- $durasi = $diff->format('%h jam %i menit'); // format jam:menit
- }
- $dates[] = [
- 'tanggal' => $currentDate->toDateString(),
- 'clock_in' => $clockIn,
- 'clock_out' => $clockOut,
- 'durasi_kerja' => $durasi,
- 'keterangan_libur' => $hariLibur->keterangan ?? null,
- ];
- $currentDate->addDay();
- }
- return $dates;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement