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.

CreateTransactionAction.php 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Filament\Actions;
  3. use App\Concerns\HasTransactionAction;
  4. use App\Enums\Accounting\TransactionType;
  5. use App\Models\Accounting\Transaction;
  6. use Filament\Actions\CreateAction;
  7. use Filament\Actions\StaticAction;
  8. use Filament\Forms\Form;
  9. use Filament\Support\Enums\MaxWidth;
  10. class CreateTransactionAction extends CreateAction
  11. {
  12. use HasTransactionAction;
  13. protected function setUp(): void
  14. {
  15. parent::setUp();
  16. $this->label(null);
  17. $this->groupedIcon(null);
  18. $this->slideOver();
  19. $this->modalWidth(function (): MaxWidth {
  20. return match ($this->transactionType) {
  21. TransactionType::Journal => MaxWidth::Screen,
  22. default => MaxWidth::ThreeExtraLarge,
  23. };
  24. });
  25. $this->extraModalWindowAttributes(function (): array {
  26. if ($this->transactionType === TransactionType::Journal) {
  27. return ['class' => 'journal-transaction-modal'];
  28. }
  29. return [];
  30. });
  31. $this->modalHeading(function (): string {
  32. return match ($this->transactionType) {
  33. TransactionType::Journal => 'Journal Entry',
  34. TransactionType::Deposit => 'Add Income',
  35. TransactionType::Withdrawal => 'Add Expense',
  36. TransactionType::Transfer => 'Add Transfer',
  37. default => 'Add Transaction',
  38. };
  39. });
  40. $this->fillForm(fn (): array => $this->getFormDefaultsForType($this->transactionType));
  41. $this->form(function (Form $form) {
  42. return match ($this->transactionType) {
  43. TransactionType::Transfer => $this->transferForm($form),
  44. TransactionType::Journal => $this->journalTransactionForm($form),
  45. default => $this->transactionForm($form),
  46. };
  47. });
  48. $this->afterFormFilled(function () {
  49. if ($this->transactionType === TransactionType::Journal) {
  50. $this->resetJournalEntryAmounts();
  51. }
  52. });
  53. $this->modalSubmitAction(function (StaticAction $action) {
  54. if ($this->transactionType === TransactionType::Journal) {
  55. $action->disabled(! $this->isJournalEntryBalanced());
  56. }
  57. return $action;
  58. });
  59. $this->after(function (Transaction $transaction) {
  60. if ($this->transactionType === TransactionType::Journal) {
  61. $transaction->updateAmountIfBalanced();
  62. }
  63. });
  64. $this->mutateFormDataUsing(function (array $data) {
  65. if ($this->transactionType === TransactionType::Journal) {
  66. $data['type'] = TransactionType::Journal;
  67. }
  68. return $data;
  69. });
  70. $this->outlined(fn () => ! $this->getGroup());
  71. }
  72. }