Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

AccountObserver.php 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace App\Observers;
  3. use App\Enums\Accounting\AccountCategory;
  4. use App\Enums\Accounting\AccountType;
  5. use App\Models\Accounting\Account;
  6. use App\Models\Accounting\AccountSubtype;
  7. use App\Models\Banking\BankAccount;
  8. use App\Utilities\Accounting\AccountCode;
  9. class AccountObserver
  10. {
  11. public function creating(Account $account): void
  12. {
  13. $this->setCategoryAndType($account, true);
  14. }
  15. public function updating(Account $account): void
  16. {
  17. if ($account->isDirty('subtype_id')) {
  18. $this->setCategoryAndType($account, false);
  19. }
  20. }
  21. private function setCategoryAndType(Account $account, bool $isCreating): void
  22. {
  23. $subtype = $account->subtype_id ? AccountSubtype::find($account->subtype_id) : null;
  24. if ($subtype) {
  25. $account->category = $subtype->category;
  26. $account->type = $subtype->type;
  27. } elseif ($isCreating) {
  28. $account->category = AccountCategory::Asset;
  29. $account->type = AccountType::CurrentAsset;
  30. }
  31. }
  32. private function setFieldsForBankAccount(Account $account): void
  33. {
  34. $generatedAccountCode = AccountCode::generate($account->company_id, $account->subtype_id);
  35. $account->code = $generatedAccountCode;
  36. $account->save();
  37. }
  38. /**
  39. * Handle the Account "created" event.
  40. */
  41. public function created(Account $account): void
  42. {
  43. if (($account->accountable_type === BankAccount::class) && $account->code === null) {
  44. $this->setFieldsForBankAccount($account);
  45. }
  46. }
  47. /**
  48. * Handle the Account "updated" event.
  49. */
  50. public function updated(Account $account): void
  51. {
  52. //
  53. }
  54. /**
  55. * Handle the Account "deleted" event.
  56. */
  57. public function deleted(Account $account): void
  58. {
  59. //
  60. }
  61. /**
  62. * Handle the Account "restored" event.
  63. */
  64. public function restored(Account $account): void
  65. {
  66. //
  67. }
  68. /**
  69. * Handle the Account "force deleted" event.
  70. */
  71. public function forceDeleted(Account $account): void
  72. {
  73. //
  74. }
  75. }