Files
compras/app/Services/BudgetReinforcementWorkflow.php
T

31 lines
1.1 KiB
PHP

<?php
namespace App\Services;
use App\Models\Budget;
use App\Models\BudgetReinforcement;
use App\Models\User;
use Brick\Math\BigDecimal;
use Illuminate\Support\Str;
class BudgetReinforcementWorkflow
{
/** @param array<string,mixed> $data */
public function propose(User $user, Budget $budget, array $data): BudgetReinforcement
{
abort_unless($user->tenant_id === $budget->tenant_id, 403);
$adapter = app(CommonBudget::class);
$amount = BigDecimal::of((string) $data['amount'])->multipliedBy(100)->toScale(0)->toInt();
$id = $adapter->execute(fn () => $adapter->for($user)->proposeReinforcement($budget->id, $amount, Str::upper(Str::squish($data['reference'])), trim($data['reason'])));
return BudgetReinforcement::query()->findOrFail($id);
}
public function review(User $user, BudgetReinforcement $reinforcement, string $decision, string $reason): void
{
abort_unless($user->tenant_id === $reinforcement->tenant_id, 403);
$adapter = app(CommonBudget::class);
$adapter->execute(fn () => $adapter->for($user)->reviewReinforcement($reinforcement->id, $decision, $reason));
}
}