Preserve shared budget adapter and limited technical acceptance
This commit is contained in:
@@ -3,9 +3,6 @@
|
||||
namespace App\Services;
|
||||
|
||||
use App\Enums\PurchasingRole;
|
||||
use App\Models\Budget;
|
||||
use App\Models\BudgetConsumption;
|
||||
use App\Models\BudgetEntry;
|
||||
use App\Models\GoodsReceiptItem;
|
||||
use App\Models\Invoice;
|
||||
use App\Models\InvoiceItem;
|
||||
@@ -130,23 +127,10 @@ class InvoiceWorkflow
|
||||
$this->invalid('Conferência alterada por outra factura; a validação está bloqueada.');
|
||||
}
|
||||
}
|
||||
$commit = BudgetEntry::query()->where('requisition_id', $request->id)->where('kind', 'commit')->first();
|
||||
if (! $commit) {
|
||||
$this->invalid('A ordem não possui compromisso orçamental. Factura permanece pendente; não é criado saldo retroactivo.');
|
||||
}
|
||||
$budget = Budget::query()->lockForUpdate()->findOrFail($commit->budget_id);
|
||||
if (! $budget->approved_by || (int) $budget->year !== now()->year) {
|
||||
$this->invalid('Orçamento não aprovado ou fora do exercício.');
|
||||
}
|
||||
$amount = (int) ($budget->includes_tax ? $invoice->total_minor : $invoice->subtotal_minor);
|
||||
$remaining = (int) BudgetEntry::query()->where('requisition_id', $request->id)->sum('committed_minor');
|
||||
if ($amount > $remaining) {
|
||||
$this->invalid('Compromisso insuficiente para a factura.');
|
||||
}
|
||||
BudgetEntry::query()->create(['tenant_id' => $user->tenant_id, 'budget_id' => $budget->id, 'requisition_id' => $request->id, 'created_by' => $user->id, 'kind' => 'invoice-'.$invoice->id, 'reserved_minor' => 0, 'committed_minor' => -$amount, 'created_at' => now()]);
|
||||
BudgetConsumption::query()->create(['tenant_id' => $user->tenant_id, 'budget_id' => $budget->id, 'invoice_id' => $invoice->id, 'created_by' => $user->id, 'amount_minor' => $amount, 'created_at' => now()]);
|
||||
$adapter = app(CommonBudget::class);
|
||||
$effect = $adapter->execute(fn () => $adapter->for($user)->consume($request->id, $invoice->id, (int) $invoice->total_minor, (int) $invoice->subtotal_minor));
|
||||
$invoice->update(['status' => 'validated', 'validated_by' => $user->id, 'validated_at' => now()]);
|
||||
app(RequisitionWorkflow::class)->audit($user, 'invoice.validated', $request, null, ['invoice_id' => $invoice->id, 'budget_id' => $budget->id, 'consumed_minor' => $amount]);
|
||||
app(RequisitionWorkflow::class)->audit($user, 'invoice.validated', $request, null, ['invoice_id' => $invoice->id] + $effect);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user