refactor: enhance attendance penalty application by utilizing query scopes for employee status and payroll period checks
This commit is contained in:
parent
0fabc7b280
commit
a89922fea6
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
use App\Enums\EmployeeStatus;
|
|
||||||
use App\Enums\PayrollAdjustmentType;
|
use App\Enums\PayrollAdjustmentType;
|
||||||
use App\Enums\PayrollPeriodStatus;
|
use App\Enums\PayrollPeriodStatus;
|
||||||
use App\Models\Attendance;
|
use App\Models\Attendance;
|
||||||
@ -40,7 +39,9 @@ public function handle(): int
|
|||||||
$scheduledCheckIn = Carbon::createFromFormat('Y-m-d H:i', $date->format('Y-m-d').' '.$scheduledTime);
|
$scheduledCheckIn = Carbon::createFromFormat('Y-m-d H:i', $date->format('Y-m-d').' '.$scheduledTime);
|
||||||
|
|
||||||
$employees = Employee::query()
|
$employees = Employee::query()
|
||||||
->where('status', EmployeeStatus::ACTIVE)
|
->whereHas('user', function ($query) {
|
||||||
|
$query->active();
|
||||||
|
})
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$lateCount = 0;
|
$lateCount = 0;
|
||||||
@ -80,7 +81,7 @@ public function handle(): int
|
|||||||
|
|
||||||
$alreadyExists = $payroll->adjustments()
|
$alreadyExists = $payroll->adjustments()
|
||||||
->where('attendance_id', null)
|
->where('attendance_id', null)
|
||||||
->where('type', PayrollAdjustmentType::DEDUCTION)
|
->deduction()
|
||||||
->where('description', 'like', "%Bolos {$date->format('d/m/Y')}%")
|
->where('description', 'like', "%Bolos {$date->format('d/m/Y')}%")
|
||||||
->exists();
|
->exists();
|
||||||
|
|
||||||
@ -162,7 +163,7 @@ public function handle(): int
|
|||||||
private function findOpenPayroll(int $employeeId): ?Payroll
|
private function findOpenPayroll(int $employeeId): ?Payroll
|
||||||
{
|
{
|
||||||
$period = PayrollPeriod::query()
|
$period = PayrollPeriod::query()
|
||||||
->where('status', PayrollPeriodStatus::OPEN)
|
->open()
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
if ($period === null) {
|
if ($period === null) {
|
||||||
|
|||||||
@ -6,10 +6,12 @@
|
|||||||
use App\Models\Concerns\InteractsWithActivityLog;
|
use App\Models\Concerns\InteractsWithActivityLog;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Appends;
|
use Illuminate\Database\Eloquent\Attributes\Appends;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Guarded;
|
use Illuminate\Database\Eloquent\Attributes\Guarded;
|
||||||
|
use Illuminate\Database\Eloquent\Attributes\Scope;
|
||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Query\Builder;
|
||||||
|
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
#[Appends(['amount_formatted', 'type_label', 'created_at_formatted', 'created_by_name'])]
|
#[Appends(['amount_formatted', 'type_label', 'created_at_formatted', 'created_by_name'])]
|
||||||
@ -70,4 +72,16 @@ public function typeLabel(): Attribute
|
|||||||
get: fn () => $this->type?->label(),
|
get: fn () => $this->type?->label(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Scope]
|
||||||
|
public function deduction(Builder $query): void
|
||||||
|
{
|
||||||
|
$query->where('type', PayrollAdjustmentType::DEDUCTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[Scope]
|
||||||
|
public function bonus(Builder $query): void
|
||||||
|
{
|
||||||
|
$query->where('type', PayrollAdjustmentType::BONUS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,12 +7,14 @@
|
|||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Appends;
|
use Illuminate\Database\Eloquent\Attributes\Appends;
|
||||||
use Illuminate\Database\Eloquent\Attributes\Guarded;
|
use Illuminate\Database\Eloquent\Attributes\Guarded;
|
||||||
|
use Illuminate\Database\Eloquent\Attributes\Scope;
|
||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use Illuminate\Database\Query\Builder;
|
||||||
|
|
||||||
#[Guarded(['id'])]
|
#[Guarded(['id'])]
|
||||||
#[Appends(['period_label', 'status_label', 'closed_at_formatted'])]
|
#[Appends(['period_label', 'status_label', 'closed_at_formatted'])]
|
||||||
@ -63,4 +65,10 @@ public function isOpen(): bool
|
|||||||
{
|
{
|
||||||
return $this->status === PayrollPeriodStatus::OPEN;
|
return $this->status === PayrollPeriodStatus::OPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Scope]
|
||||||
|
public function open(Builder $query): void
|
||||||
|
{
|
||||||
|
$query->where('status', PayrollPeriodStatus::OPEN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user