123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- <?php
-
- namespace App\Observers;
-
- use App\Enums\Accounting\AccountCategory;
- use App\Enums\Accounting\AccountType;
- use App\Models\Accounting\Account;
- use App\Utilities\Accounting\AccountCode;
- use App\Utilities\Currency\CurrencyAccessor;
-
- class AccountObserver
- {
- public function creating(Account $account): void
- {
- $this->setCategoryAndType($account);
- $this->ensureDefaultCurrency($account);
- }
-
- public function updating(Account $account): void
- {
- if ($account->isDirty('subtype_id')) {
- $this->setCategoryAndType($account);
- }
-
- $this->ensureDefaultCurrency($account);
- }
-
- private function setCategoryAndType(Account $account): void
- {
- if ($subtype = $account->subtype) {
- $account->category = $subtype->category;
- $account->type = $subtype->type;
- } else {
- $account->category = AccountCategory::Asset;
- $account->type = AccountType::CurrentAsset;
- }
- }
-
- private function ensureDefaultCurrency(Account $account): void
- {
- if (! $account->currency_code) {
- $account->currency_code = CurrencyAccessor::getDefaultCurrency();
- }
- }
-
- private function setAccountCode(Account $account): void
- {
- $generatedAccountCode = AccountCode::generate($account->subtype);
-
- $account->code = $generatedAccountCode;
- }
-
- /**
- * Handle the Account "created" event.
- */
- public function created(Account $account): void
- {
- if (! $account->code) {
- $this->setAccountCode($account);
- $account->saveQuietly();
- }
- }
- }
|