authorize('generate', Code::class); /** @var Settings */ $settings = resolve(Settings::class); $nbCodeBase = Code::query()->max('id'); $nbCodeUsed = Code::query()->whereHas( 'participations', operator: '>', count: $settings->nb_unique_code_use )->count(); $nbCodeExported = Code::query()->where('code_exported', true)->count(); $nbCodeRemainingToExport = Code::query()->where('code_exported', false)->count(); /** @var view-string $view */ $view = 'back::pages.codes.index'; return view($view, [ 'settings' => $settings, 'nbCodeBase' => $nbCodeBase, 'nbCodeUsed' => $nbCodeUsed, 'nbCodeExported' => $nbCodeExported, 'nbCodeRemainingToExport' => $nbCodeRemainingToExport, ]); } /** * Run generate codes action */ public function generate(GenerateCodesRequest $request): RedirectResponse { $this->authorize('generate', Code::class); Queue::push( new ProcessUniqueCode( intval($request->quantity), config('codes.codeLength') ) ); return back()->with( 'success', trans( // phpcs:ignore Generic.Files.LineLength.TooLong 'La tache de génération à été ajoutée, un mail de notification sera envoyé à l\'adresse :email lorsque le traitement sera terminé.', [ 'email' => config('mail.admin'), ] ) ); } /** * Run export codes */ public function export(ExportCodesRequest $request): RedirectResponse { $this->authorize('export', Code::class); Queue::push( new ProcessExportCodesUniques( intval($request->nb_code_fic), intval($request->nb_code_tot), intval($request->nb_code_ligne) ) ); return back()->with( 'success', // phpcs:ignore Generic.Files.LineLength.TooLong __('L\'export des codes à commencé, un mail de notification sera envoyé à l\'adresse :emaillorsque le traitement sera terminé.', [ 'email' => config('mail.admin'), ]) ); } /** * Search for a specific code. */ public function search(CodeSearchRequest $request): View { $this->authorize('search', Code::class); $code = null; try { $code = Code::query()->where('id', Code::serialToInt($request->code))->first(); } catch (Throwable $e) { if ($e::class === SerialCasterException::class) { $code = false; } } finally { if ($code === false) { \session()->flash('warning', trans('Code non valide.')); } if ($code === null) { \session()->flash('warning', trans('Code introuvable.')); } } $used_counter = null; if ($code) { $used_counter = Participation::query() ->whereHas('code', fn (Builder $q) => $q->where('id', $code->id)) ->count(); } /** @var view-string $view */ $view = 'back::pages.codes.search'; return view($view, ['code' => $code, 'used_counter' => $used_counter]); } }