user('web'); abort_unless($actor instanceof User && $actor->hasFunctions(['admin', 'supply_read', 'supply_prepare', 'supply_review']), 403); $prepare = app(SupplyPlanning::class)->allows($actor, 'supply_prepare'); $ready = $service->ready(); $planning = app(SupplyPlanning::class); Inertia::encryptHistory(); return Inertia::render('stock/replenishment', [ 'ready' => $ready, 'canPrepare' => $prepare, 'canReview' => $planning->allows($actor, 'supply_review'), 'rules' => $ready ? $planning->latest('auto_rule')->latest('id')->limit(100)->get() : [], 'needs' => $ready ? $planning->latest('auto_need')->latest('id')->limit(100)->get() : [], 'history' => $ready ? SupplyRecord::query()->whereIn('kind', ['auto_rule', 'auto_need'])->latest('id')->limit(100)->get() : [], 'policies' => Schema::hasTable('supply_records') && $prepare ? $planning->latest('policy')->where('state', 'approved')->where('data->purpose', 'internal')->get() : [], 'requesters' => $prepare ? User::query()->where('tenant_id', $actor->tenant_id)->get(['id', 'name', 'department_id', 'purchasing_role', 'tenant_id'])->filter(fn ($u) => $service->eligibleRequester($u))->map(fn ($u) => $u->only(['id', 'name', 'department_id']))->values() : [], 'centers' => $prepare ? CostCenter::query()->orderBy('code')->get(['id', 'department_id', 'code', 'name']) : [], ])->toResponse($request)->withHeaders(['Cache-Control' => 'private, no-store, max-age=0']); } public function save(Request $request, AutomaticPurchases $service) { $service->save($request->user('web'), $request->all()); return redirect('/stock/reposicao'); } public function evaluate(Request $request, int $id, AutomaticPurchases $service) { $actor = $request->user('web'); abort_unless($actor instanceof User && ($actor->hasFunctions(['supply_prepare', 'supply_review'])) && ! app(OrganizationAccess::class)->maintenanceOnly($actor), 403); $need = SupplyRecord::query()->where('kind', 'auto_need')->findOrFail($id); $service->evaluate($actor, $need->stock_item_id, $need->warehouse_id); return redirect('/stock/reposicao'); } }