You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Models;
  3. use App\Enums\DocumentType;
  4. use App\Models\Banking\Account;
  5. use App\Models\Common\Contact;
  6. use App\Models\Core\Department;
  7. use App\Models\Setting\{Appearance, Category, CompanyDefault, CompanyProfile, Currency, Discount, DocumentDefault, Tax};
  8. use Filament\Models\Contracts\HasAvatar;
  9. use Illuminate\Database\Eloquent\Factories\HasFactory;
  10. use Illuminate\Database\Eloquent\Relations\{HasMany, HasOne};
  11. use Wallo\FilamentCompanies\Company as FilamentCompaniesCompany;
  12. use Wallo\FilamentCompanies\Events\{CompanyCreated, CompanyDeleted, CompanyUpdated};
  13. class Company extends FilamentCompaniesCompany implements HasAvatar
  14. {
  15. use HasFactory;
  16. /**
  17. * The attributes that should be cast.
  18. *
  19. * @var array<string, string>
  20. */
  21. protected $casts = [
  22. 'personal_company' => 'boolean',
  23. ];
  24. /**
  25. * The attributes that are mass assignable.
  26. *
  27. * @var array<int, string>
  28. */
  29. protected $fillable = [
  30. 'name',
  31. 'personal_company',
  32. ];
  33. /**
  34. * The event map for the model.
  35. *
  36. * @var array<string, class-string>
  37. */
  38. protected $dispatchesEvents = [
  39. 'created' => CompanyCreated::class,
  40. 'updated' => CompanyUpdated::class,
  41. 'deleted' => CompanyDeleted::class,
  42. ];
  43. public function getFilamentAvatarUrl(): string
  44. {
  45. return $this->owner->profile_photo_url;
  46. }
  47. public function accounts(): HasMany
  48. {
  49. return $this->hasMany(Account::class, 'company_id');
  50. }
  51. public function appearance(): HasOne
  52. {
  53. return $this->hasOne(Appearance::class, 'company_id');
  54. }
  55. public function categories(): HasMany
  56. {
  57. return $this->hasMany(Category::class, 'company_id');
  58. }
  59. public function contacts(): HasMany
  60. {
  61. return $this->hasMany(Contact::class, 'company_id');
  62. }
  63. public function currencies(): HasMany
  64. {
  65. return $this->hasMany(Currency::class, 'company_id');
  66. }
  67. public function default(): HasOne
  68. {
  69. return $this->hasOne(CompanyDefault::class, 'company_id');
  70. }
  71. public function defaultBill(): HasOne
  72. {
  73. return $this->hasOne(DocumentDefault::class, 'company_id')
  74. ->where('type', DocumentType::Bill);
  75. }
  76. public function defaultInvoice(): HasOne
  77. {
  78. return $this->hasOne(DocumentDefault::class, 'company_id')
  79. ->where('type', DocumentType::Invoice);
  80. }
  81. public function departments(): HasMany
  82. {
  83. return $this->hasMany(Department::class, 'company_id');
  84. }
  85. public function discounts(): HasMany
  86. {
  87. return $this->hasMany(Discount::class, 'company_id');
  88. }
  89. public function profile(): HasOne
  90. {
  91. return $this->hasOne(CompanyProfile::class, 'company_id');
  92. }
  93. public function taxes(): HasMany
  94. {
  95. return $this->hasMany(Tax::class, 'company_id');
  96. }
  97. }