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.

Company.php 2.8KB

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