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

AdjustmentObserver.php 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace App\Observers;
  3. use App\Enums\Accounting\AdjustmentStatus;
  4. use App\Models\Accounting\Account;
  5. use App\Models\Accounting\Adjustment;
  6. class AdjustmentObserver
  7. {
  8. public function creating(Adjustment $adjustment): void
  9. {
  10. if (! $adjustment->account_id && ! $adjustment->isNonRecoverablePurchaseTax()) {
  11. $account = null;
  12. if ($adjustment->isSalesTax()) {
  13. $account = Account::factory()->forSalesTax($adjustment->name, $adjustment->description)->create();
  14. } elseif ($adjustment->isRecoverablePurchaseTax()) {
  15. $account = Account::factory()->forPurchaseTax($adjustment->name, $adjustment->description)->create();
  16. } elseif ($adjustment->isSalesDiscount()) {
  17. $account = Account::factory()->forSalesDiscount($adjustment->name, $adjustment->description)->create();
  18. } elseif ($adjustment->isPurchaseDiscount()) {
  19. $account = Account::factory()->forPurchaseDiscount($adjustment->name, $adjustment->description)->create();
  20. }
  21. if ($account) {
  22. $adjustment->account()->associate($account);
  23. }
  24. }
  25. if ($adjustment->status !== AdjustmentStatus::Archived) {
  26. $adjustment->status = $adjustment->calculateStatus();
  27. }
  28. }
  29. public function updating(Adjustment $adjustment): void
  30. {
  31. if ($adjustment->account) {
  32. $adjustment->account->update([
  33. 'name' => $adjustment->name,
  34. 'description' => $adjustment->description,
  35. ]);
  36. }
  37. if ($adjustment->status !== AdjustmentStatus::Archived) {
  38. $adjustment->status = $adjustment->calculateStatus();
  39. }
  40. }
  41. }