feat: updates
This commit is contained in:
23
app/Actions/Ledgers/CreateLedgerAction.php
Normal file
23
app/Actions/Ledgers/CreateLedgerAction.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Ledgers;
|
||||
|
||||
use App\Actions\BaseAction;
|
||||
use App\Commands\Ledgers\CreateLedgerCommand;
|
||||
use App\DataObjects\CreateLedgerDTO;
|
||||
use Closure;
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class CreateLedgerAction extends BaseAction
|
||||
{
|
||||
public function __construct(
|
||||
private readonly CreateLedgerCommand $createLedgerCommand,
|
||||
) {}
|
||||
|
||||
public function __invoke(CreateLedgerDTO|Data $payload, Closure $next)
|
||||
{
|
||||
$this->createLedgerCommand->execute($payload->data);
|
||||
|
||||
return $next($payload);
|
||||
}
|
||||
}
|
||||
91
app/Actions/Transactions/CreateTransactionAction.php
Normal file
91
app/Actions/Transactions/CreateTransactionAction.php
Normal file
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Transactions;
|
||||
|
||||
use App\Actions\BaseAction;
|
||||
use App\Actions\Ledgers\CreateLedgerAction;
|
||||
use App\DataObjects\CreateLedgerDTO;
|
||||
use App\DataObjects\CreateTransactionDTO;
|
||||
use App\Models\Account;
|
||||
use Closure;
|
||||
use Illuminate\Support\Facades\Pipeline;
|
||||
use Spatie\LaravelData\Data;
|
||||
|
||||
class CreateTransactionAction extends BaseAction
|
||||
{
|
||||
public function __invoke(CreateTransactionDTO|Data $payload, Closure $next)
|
||||
{
|
||||
$payload->transaction = $payload->transactionable->transactions()->create($payload->data);
|
||||
|
||||
$this->transactionAccountLedger($payload);
|
||||
|
||||
$this->withHoldingAccountLedger($payload);
|
||||
|
||||
return $next($payload);
|
||||
}
|
||||
|
||||
public function transactionAccountLedger($payload): void
|
||||
{
|
||||
$branch = $payload->transaction->branch;
|
||||
|
||||
if ($branch->isClientVatable) {
|
||||
//create transaction account ledger
|
||||
$ledgerPayload = new CreateLedgerDTO(
|
||||
branch_id: $payload->transactionable->branch_id,
|
||||
amount: $payload->transaction->net_amount ?? 0.00,
|
||||
transaction: $payload->transaction,
|
||||
account: $payload->transaction->account,
|
||||
);
|
||||
$this->ledgerPipe($ledgerPayload);
|
||||
|
||||
$this->inputTaxAccountLedger($payload);
|
||||
} else {
|
||||
//create transaction account ledger
|
||||
$ledgerPayload = new CreateLedgerDTO(
|
||||
branch_id: $payload->transactionable->branch_id,
|
||||
amount: $payload->transaction->gross_amount ?? 0.00,
|
||||
transaction: $payload->transaction,
|
||||
account: $payload->transaction->account,
|
||||
);
|
||||
$this->ledgerPipe($ledgerPayload);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function ledgerPipe(CreateLedgerDTO $ledgerPayload): mixed
|
||||
{
|
||||
return Pipeline::send(passable: $ledgerPayload)->through([
|
||||
CreateLedgerAction::class,
|
||||
])->thenReturn();
|
||||
}
|
||||
|
||||
public function inputTaxAccountLedger($payload): void
|
||||
{
|
||||
$inputTax = Account::query()->where('account', 'Input Tax')->whereHas('balances', function ($balance) use ($payload) {
|
||||
return $balance->where('branch_id', $payload->transactionable->branch_id);
|
||||
})->first();
|
||||
|
||||
$ledgerPayload = new CreateLedgerDTO(
|
||||
branch_id: $payload->transactionable->branch_id,
|
||||
amount: $payload->transactionable->input_tax ?? 0.00,
|
||||
transaction: $payload->transaction,
|
||||
account: $inputTax,
|
||||
);
|
||||
$this->ledgerPipe($ledgerPayload);
|
||||
}
|
||||
|
||||
public function withHoldingAccountLedger($payload): void
|
||||
{
|
||||
$withholdingAccount = Account::query()->where('account', 'Payable Withholding Tax')->whereHas('balances', function ($balance) use ($payload) {
|
||||
return $balance->where('branch_id', $payload->transactionable->branch_id);
|
||||
})->first();
|
||||
|
||||
$ledgerPayload = new CreateLedgerDTO(
|
||||
branch_id: $payload->transactionable->branch_id,
|
||||
amount: $payload->transaction->payable_withholding_tax,
|
||||
transaction: $payload->transaction,
|
||||
account: $withholdingAccount,
|
||||
);
|
||||
$this->ledgerPipe($ledgerPayload);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user