feat: updates on expenses

This commit is contained in:
JP
2024-08-21 05:37:35 +08:00
parent 3af7207ec3
commit daa6f692e1
9 changed files with 277 additions and 21 deletions

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Actions\Balances;
use App\Actions\BaseAction;
use App\Commands\Balances\CreateBalanceCommand;
use Closure;
use Spatie\LaravelData\Data;
class CreateBalanceAction extends BaseAction
{
public function __construct(
private CreateBalanceCommand $createBalanceCommand
) {}
public function __invoke(Data $payload, Closure $next)
{
$this->createBalanceCommand->execute($payload->balanceDTO->except('amount')->toArray());
return $next($payload);
}
}

View File

@@ -4,6 +4,7 @@ namespace App\Actions\Ledgers;
use App\Actions\BaseAction;
use App\Commands\Ledgers\CreateLedgerCommand;
use App\DataObjects\CreateBalanceDTO;
use App\DataObjects\CreateLedgerDTO;
use Closure;
use Spatie\LaravelData\Data;
@@ -16,7 +17,15 @@ class CreateLedgerAction extends BaseAction
public function __invoke(CreateLedgerDTO|Data $payload, Closure $next)
{
$this->createLedgerCommand->execute($payload->data);
$ledger = $this->createLedgerCommand->execute($payload->data);
$payload->balanceDTO = new CreateBalanceDTO(
amount: $payload->amount,
is_starting: false,
ledger_id: $ledger->id,
account_id: $ledger->account_id,
branch_id: $ledger->branch_id,
);
return $next($payload);
}

View File

@@ -2,6 +2,7 @@
namespace App\Actions\Transactions;
use App\Actions\Balances\CreateBalanceAction;
use App\Actions\BaseAction;
use App\Actions\Ledgers\CreateLedgerAction;
use App\DataObjects\CreateLedgerDTO;
@@ -21,6 +22,8 @@ class CreateTransactionAction extends BaseAction
$this->withHoldingAccountLedger($payload);
$this->cashAccountLedger($payload);
return $next($payload);
}
@@ -56,6 +59,7 @@ class CreateTransactionAction extends BaseAction
{
return Pipeline::send(passable: $ledgerPayload)->through([
CreateLedgerAction::class,
CreateBalanceAction::class,
])->thenReturn();
}
@@ -82,10 +86,27 @@ class CreateTransactionAction extends BaseAction
$ledgerPayload = new CreateLedgerDTO(
branch_id: $payload->transactionable->branch_id,
amount: $payload->transaction->payable_withholding_tax,
amount: $payload->transaction->payable_withholding_tax ?? 0.00,
transaction: $payload->transaction,
account: $withholdingAccount,
);
$this->ledgerPipe($ledgerPayload);
}
public function cashAccountLedger($payload): void
{
$cashAccount = Account::query()->where('account', 'Cash')->whereHas('balances', function ($balance) use ($payload) {
return $balance->where('branch_id', $payload->transactionable->branch_id);
})->first();
$amount = $payload->transaction->gross_amount - $payload->transaction->creditable_withholding_tax;
$ledgerPayload = new CreateLedgerDTO(
branch_id: $payload->transactionable->branch_id,
amount: $amount ?? 0.00,
transaction: $payload->transaction,
account: $cashAccount,
);
$this->ledgerPipe($ledgerPayload);
}
}