PayrollStatus::class, 'base_salary' => 'integer', 'bonus_amount' => 'integer', 'deduction_amount' => 'integer', 'total_amount' => 'integer', 'paid_at' => 'datetime', ]; } #[Scope] protected function cancelled(Builder $query): void { $query->where('status', PayrollStatus::CANCELLED); } #[Scope] protected function paid(Builder $query): void { $query->where('status', PayrollStatus::PAID); } #[Scope] protected function unpaid(Builder $query): void { $query->where('status', PayrollStatus::UNPAID); } public function cashTransaction(): BelongsTo { return $this->belongsTo(CashTransaction::class); } public function employee(): BelongsTo { return $this->belongsTo(Employee::class); } public function paidBy(): BelongsTo { return $this->belongsTo(User::class, 'paid_by_id'); } public function payrollAdjustments(): HasMany { return $this->hasMany(PayrollAdjustment::class); } public function payrollPeriod(): BelongsTo { return $this->belongsTo(PayrollPeriod::class); } }