'boolean', 'is_available' => 'boolean', 'is_downloaded' => 'boolean', 'downloaded_at' => 'datetime', 'authorized_at' => 'datetime', ]; /** * Get the formatted period display * * @return string */ public function getPeriodDisplayAttribute() { if ($this->is_period_range) { return $this->formatPeriod($this->period_from) . ' - ' . $this->formatPeriod($this->period_to); } return $this->formatPeriod($this->period_from); } /** * Format period from YYYYMM to Month Year * * @param string $period * * @return string */ protected function formatPeriod($period) { if (strlen($period) !== 6) { return $period; } $year = substr($period, 0, 4); $month = substr($period, 4, 2); return date('F Y', mktime(0, 0, 0, (int) $month, 1, (int) $year)); } /** * Get the user who requested the statement */ public function user() { return $this->belongsTo(User::class, 'user_id'); } /** * Get the user who created the record */ public function creator() { return $this->belongsTo(User::class, 'created_by'); } /** * Get the user who updated the record */ public function updater() { return $this->belongsTo(User::class, 'updated_by'); } /** * Get the user who authorized the record */ public function authorizer() { return $this->belongsTo(User::class, 'authorized_by'); } /** * Scope a query to only include pending authorization records */ public function scopePending($query) { return $query->where('authorization_status', 'pending'); } /** * Scope a query to only include approved records */ public function scopeApproved($query) { return $query->where('authorization_status', 'approved'); } /** * Scope a query to only include rejected records */ public function scopeRejected($query) { return $query->where('authorization_status', 'rejected'); } /** * Scope a query to only include downloaded records */ public function scopeDownloaded($query) { return $query->where('is_downloaded', true); } /** * Scope a query to only include available records */ public function scopeAvailable($query) { return $query->where('is_available', true); } /** * Check if the statement is for a single period */ public function isSinglePeriod() { return !$this->is_period_range; } /** * Check if the statement is authorized */ public function isAuthorized() { return $this->authorization_status === 'approved'; } /** * Check if the statement is rejected */ public function isRejected() { return $this->authorization_status === 'rejected'; } /** * Check if the statement is pending authorization */ public function isPending() { return $this->authorization_status === 'pending'; } public function branch(){ return $this->belongsTo(Branch::class, 'branch_code','code'); } }