Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

EditTransactionAction.php 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Filament\Tables\Actions;
  3. use App\Concerns\HasTransactionAction;
  4. use App\Enums\Accounting\TransactionType;
  5. use App\Models\Accounting\Transaction;
  6. use Filament\Actions\StaticAction;
  7. use Filament\Forms\Form;
  8. use Filament\Support\Enums\MaxWidth;
  9. use Filament\Tables\Actions\EditAction;
  10. class EditTransactionAction extends EditAction
  11. {
  12. use HasTransactionAction;
  13. protected function setUp(): void
  14. {
  15. parent::setUp();
  16. $this->type(static function (Transaction $record) {
  17. return $record->type;
  18. });
  19. $this->label(function () {
  20. return match ($this->getTransactionType()) {
  21. TransactionType::Journal => 'Edit journal entry',
  22. default => 'Edit transaction',
  23. };
  24. });
  25. $this->slideOver();
  26. $this->modalWidth(function (): MaxWidth {
  27. return match ($this->getTransactionType()) {
  28. TransactionType::Journal => MaxWidth::Screen,
  29. default => MaxWidth::ThreeExtraLarge,
  30. };
  31. });
  32. $this->extraModalWindowAttributes(function (): array {
  33. if ($this->getTransactionType() === TransactionType::Journal) {
  34. return ['class' => 'journal-transaction-modal'];
  35. }
  36. return [];
  37. });
  38. $this->form(function (Form $form) {
  39. return match ($this->getTransactionType()) {
  40. TransactionType::Transfer => $this->transferForm($form),
  41. TransactionType::Journal => $this->journalTransactionForm($form),
  42. default => $this->transactionForm($form),
  43. };
  44. });
  45. $this->afterFormFilled(function (Transaction $record) {
  46. if ($this->getTransactionType() === TransactionType::Journal) {
  47. $debitAmounts = $record->journalEntries->sumDebits()->getAmount();
  48. $creditAmounts = $record->journalEntries->sumCredits()->getAmount();
  49. $this->setDebitAmount($debitAmounts);
  50. $this->setCreditAmount($creditAmounts);
  51. }
  52. });
  53. $this->modalSubmitAction(function (StaticAction $action) {
  54. if ($this->getTransactionType() === TransactionType::Journal) {
  55. $action->disabled(! $this->isJournalEntryBalanced());
  56. }
  57. return $action;
  58. });
  59. $this->after(function (Transaction $transaction) {
  60. if ($this->getTransactionType() === TransactionType::Journal) {
  61. $transaction->updateAmountIfBalanced();
  62. }
  63. });
  64. }
  65. }