This commit is contained in:
2026-11-03 11:51:44 +02:00
parent badaada043
commit e753f7a0a4
309 changed files with 14537 additions and 529 deletions
+21 -3
View File
@@ -3,7 +3,6 @@
namespace App\Http\Controllers;
use App\Http\Requests\StoreRequisitionRequest;
use App\Models\AuditLog;
use App\Models\CostCenter;
use App\Models\Equipment;
use App\Models\EquipmentSparePart;
@@ -19,12 +18,14 @@ use App\Services\ConflictGuard;
use App\Services\EquipmentWorkflow;
use App\Services\InternalSupplyTrace;
use App\Services\OrganizationAccess;
use App\Services\RequisitionAuditTrail;
use App\Services\RequisitionCatalogue;
use App\Services\RequisitionWorkflow;
use App\Services\SupplySuggestions;
use App\Services\WorkContext;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Validation\Rule;
use Inertia\Inertia;
@@ -88,7 +89,22 @@ class RequisitionController extends Controller
public function show(Request $request, Requisition $requisition): Response
{
Requisition::query()->visibleTo($this->actor($request))->findOrFail($requisition->id);
return DB::transaction(function () use ($request, $requisition) {
if (DB::getDriverName() === 'pgsql' && DB::transactionLevel() === 1) {
DB::statement('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY');
}
return $this->detail($request, $requisition);
});
}
private function detail(Request $request, Requisition $requisition): Response
{
$requisition = Requisition::query()->visibleTo($this->actor($request))->findOrFail($requisition->id);
Inertia::encryptHistory();
$request->validate(['audit_page' => 'nullable|integer|min:1|max:1000000']);
$trail = app(RequisitionAuditTrail::class);
$audit = $trail->query($requisition)->orderBy('id')->paginate(25, ['*'], 'audit_page')->withQueryString();
$requisition->load(['items', 'steps', 'requester:id,name', 'department:id,name', 'costCenter']);
return Inertia::render('requisitions/show', [
@@ -101,7 +117,9 @@ class RequisitionController extends Controller
'canEdit' => app(OrganizationAccess::class)->canRequest($this->actor($request)) && $requisition->requester_id === $this->actor($request)->id && $requisition->status === 'draft',
'canDecide' => $requisition->canDecide($this->actor($request)),
'conflictBlocked' => app(ConflictGuard::class)->participationBlocked($this->actor($request), $requisition),
'audit' => AuditLog::query()->where('requisition_id', $requisition->id)->orderBy('id')->get(['id', 'action', 'user_id', 'created_at', 'after'])->map(fn ($a) => ['id' => $a->id, 'action' => $a->action, 'user_id' => $a->user_id, 'created_at' => $a->created_at, 'execution' => $a->after['execution']['mode'] ?? null]),
'audit' => $audit->getCollection()->map(fn ($a) => $trail->row($a)),
'auditPagination' => ['total' => $audit->total(), 'current_page' => $audit->currentPage(), 'last_page' => $audit->lastPage(),
'prev_page_url' => $audit->previousPageUrl(), 'next_page_url' => $audit->nextPageUrl()],
'technical' => [
'canReview' => app(EquipmentWorkflow::class)->canReview($this->actor($request), $requisition),
'basis_hash' => app(EquipmentWorkflow::class)->basis($requisition),