您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

CompanyProfile.php 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace App\Models\Setting;
  3. use App\Enums\EntityType;
  4. use App\Traits\Blamable;
  5. use App\Traits\CompanyOwned;
  6. use Database\Factories\Setting\CompanyProfileFactory;
  7. use Illuminate\Database\Eloquent\Factories\Factory;
  8. use Illuminate\Database\Eloquent\Factories\HasFactory;
  9. use Illuminate\Database\Eloquent\Model;
  10. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  11. use Wallo\FilamentCompanies\FilamentCompanies;
  12. class CompanyProfile extends Model
  13. {
  14. use Blamable, CompanyOwned, HasFactory;
  15. protected $table = 'company_profiles';
  16. protected $fillable = [
  17. 'company_id',
  18. 'logo',
  19. 'address',
  20. 'city',
  21. 'zip_code',
  22. 'state',
  23. 'country',
  24. 'timezone',
  25. 'phone_number',
  26. 'email',
  27. 'tax_id',
  28. 'entity_type',
  29. 'fiscal_year_start',
  30. 'fiscal_year_end',
  31. 'created_by',
  32. 'updated_by',
  33. ];
  34. protected $casts = [
  35. 'entity_type' => EntityType::class,
  36. 'fiscal_year_start' => 'date',
  37. 'fiscal_year_end' => 'date',
  38. ];
  39. public function company(): BelongsTo
  40. {
  41. return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
  42. }
  43. public function createdBy(): BelongsTo
  44. {
  45. return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
  46. }
  47. public function updatedBy(): BelongsTo
  48. {
  49. return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
  50. }
  51. public function getCountryName(): string
  52. {
  53. return country($this->country)->getName();
  54. }
  55. public static function getAvailableCountryCodes(): array
  56. {
  57. $allCountries = countries();
  58. $codes = [];
  59. foreach ($allCountries as $code => $country) {
  60. $codes[] = $code;
  61. }
  62. return $codes;
  63. }
  64. public static function getAvailableCountryOptions(): array
  65. {
  66. $allCountries = countries();
  67. $countryData = [];
  68. foreach ($allCountries as $code => $countryDetails) {
  69. $name = $countryDetails['name'];
  70. $emoji = $countryDetails['emoji'];
  71. $countryData[$code] = $name . ' ' . $emoji;
  72. }
  73. return $countryData;
  74. }
  75. public static function getAvailableCountryNames(): array
  76. {
  77. $allCountries = countries();
  78. $names = [];
  79. foreach ($allCountries as $country) {
  80. $names[] = $country['name'];
  81. }
  82. return $names;
  83. }
  84. public static function getAvailableCountryEmojis(): array
  85. {
  86. $allCountries = countries();
  87. $emojis = [];
  88. foreach ($allCountries as $country) {
  89. $emojis[] = $country['emoji'];
  90. }
  91. return $emojis;
  92. }
  93. public static function getStateOptions(string $countryCode): array
  94. {
  95. $states = country($countryCode)->getDivisions();
  96. return collect($states)->mapWithKeys(static function ($state, $code): array {
  97. return [$code => $state['name']];
  98. })->toArray();
  99. }
  100. public static function getTimezoneOptions(string $countryCode): array
  101. {
  102. $timezones = country($countryCode)->getTimezones();
  103. if ($timezones) {
  104. return collect($timezones)->mapWithKeys(static function ($timezone): array {
  105. return [$timezone => $timezone];
  106. })->toArray();
  107. }
  108. return [];
  109. }
  110. protected static function newFactory(): Factory
  111. {
  112. return CompanyProfileFactory::new();
  113. }
  114. }