88 lines
2.5 KiB
PHP
88 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Admin\HR;
|
|
|
|
use App\Enums\LeaveRequestStatus;
|
|
use App\Models\LeaveRequest;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class LeaveRequestService
|
|
{
|
|
public function getAll(): Collection
|
|
{
|
|
return LeaveRequest::select('id', 'employee_id', 'start_date', 'end_date', 'total_days', 'status', 'created_at')
|
|
->with(['employee.user.userProfile'])
|
|
->latest()
|
|
->get();
|
|
}
|
|
|
|
public function create(array $data): LeaveRequest
|
|
{
|
|
return DB::transaction(function () use ($data) {
|
|
$employee = auth()->user()->employee;
|
|
|
|
if (! $employee) {
|
|
throw new \Exception('Anda tidak terdaftar sebagai karyawan.');
|
|
}
|
|
|
|
$startDate = new Carbon($data['start_date']);
|
|
$endDate = new Carbon($data['end_date']);
|
|
$totalDays = $startDate->diffInDays($endDate) + 1;
|
|
|
|
return LeaveRequest::create([
|
|
'employee_id' => $employee->id,
|
|
'start_date' => $data['start_date'],
|
|
'end_date' => $data['end_date'],
|
|
'total_days' => $totalDays,
|
|
'status' => LeaveRequestStatus::PENDING,
|
|
]);
|
|
});
|
|
}
|
|
|
|
public function update(LeaveRequest $leaveRequest, array $data): LeaveRequest
|
|
{
|
|
return DB::transaction(function () use ($leaveRequest, $data) {
|
|
$startDate = new Carbon($data['start_date']);
|
|
$endDate = new Carbon($data['end_date']);
|
|
$totalDays = $startDate->diffInDays($endDate) + 1;
|
|
|
|
$leaveRequest->update([
|
|
'start_date' => $data['start_date'],
|
|
'end_date' => $data['end_date'],
|
|
'total_days' => $totalDays,
|
|
]);
|
|
|
|
return $leaveRequest;
|
|
});
|
|
}
|
|
|
|
public function delete(LeaveRequest $leaveRequest): bool
|
|
{
|
|
return $leaveRequest->delete();
|
|
}
|
|
|
|
public function approve(LeaveRequest $leaveRequest): LeaveRequest
|
|
{
|
|
$leaveRequest->update([
|
|
'status' => LeaveRequestStatus::APPROVED,
|
|
'verified_by_id' => auth()->id(),
|
|
'verified_at' => now(),
|
|
]);
|
|
|
|
return $leaveRequest;
|
|
}
|
|
|
|
public function reject(LeaveRequest $leaveRequest): LeaveRequest
|
|
{
|
|
$leaveRequest->update([
|
|
'status' => LeaveRequestStatus::REJECTED,
|
|
'verified_by_id' => auth()->id(),
|
|
'verified_at' => now(),
|
|
]);
|
|
|
|
return $leaveRequest;
|
|
}
|
|
}
|