'boolean', 'otp_verified_at' => 'datetime', 'subscription_start_date' => 'datetime', 'subscription_end_date' => 'datetime', 'last_login_at' => 'datetime', 'license_expiry' => 'datetime', 'license_data' => 'array', ]; public function hasActiveSubscription(): bool { return $this->subscription_status === 'active' && ($this->subscription_end_date === null || $this->subscription_end_date->isFuture()); } /** * Convert the model instance to an array. * * @return array */ public function toArray() { $array = parent::toArray(); // Remove any flat properties that should be nested unset($array['license_data']); $licenseDataObj = [ 'license_number' => $this->license_data['license_no'] ?? $this->license_data['license_number'] ?? null, 'organization_name' => $this->organization_name, 'expiry_date' => $this->license_expiry ? $this->license_expiry->toDateString() : ($this->license_data['expiry_date'] ?? null), 'document_type' => $this->license_data['document_type'] ?? null, 'country' => $this->license_data['country'] ?? null, 'authority' => $this->license_data['authority'] ?? null, 'license_no' => $this->license_data['license_no'] ?? null, 'company_name' => $this->license_data['company_name'] ?? null, 'business_name' => $this->license_data['business_name'] ?? null, 'license_category' => $this->license_data['license_category'] ?? null, 'legal_type' => $this->license_data['legal_type'] ?? null, 'issue_date' => $this->license_data['issue_date'] ?? null, 'main_license_no' => $this->license_data['main_license_no'] ?? null, 'register_no' => $this->license_data['register_no'] ?? null, 'dcci_no' => $this->license_data['dcci_no'] ?? null, 'members' => $this->license_data['members'] ?? [], ]; $emiratesIdData = null; if ($this->emirates_id) { $emiratesIdData = [ 'emirates_id_number' => $this->emirates_id, 'name' => $this->emirates_id_name, 'nationality' => $this->nationality, 'date_of_birth' => $this->emirates_id_dob, 'expiry_date' => $this->emirates_id_expiry, 'issue_date' => $this->emirates_id_issue_date, 'employer' => $this->emirates_id_employer, 'issue_place' => $this->emirates_id_issue_place, 'occupation' => $this->emirates_id_occupation, 'card_number' => $this->emirates_id_card_number, 'gender' => $this->emirates_id_gender, ]; } return array_merge($array, [ 'license' => $licenseDataObj, 'emirates_id' => $emiratesIdData, ]); } }