authorize('generate', Code::class); /** @var \App\Models\Settings */ $settings = app(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(); return view('back::pages.codes.index', compact( 'settings', 'nbCodeBase', 'nbCodeUsed', 'nbCodeExported', 'nbCodeRemainingToExport' )); } /** * Run generate codes action * * @param \App\Http\Requests\Bo\Codes\GenerateCodesRequest $request * @return \Illuminate\Http\RedirectResponse */ public function generate(GenerateCodesRequest $request): \Illuminate\Http\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 * * @param \App\Http\Requests\Bo\Codes\ExportCodesRequest $request * @return \Illuminate\Http\RedirectResponse */ public function export(ExportCodesRequest $request): \Illuminate\Http\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. * * @param \App\Http\Requests\Bo\Codes\CodeSearchRequest $request * @return \Illuminate\Contracts\View\View */ public function search(CodeSearchRequest $request): \Illuminate\Contracts\View\View { $this->authorize('search', Code::class); $code = null; try { $code = Code::query()->where('id', Code::serialToInt($request->code))->first(); } catch (\Throwable $e) { if (\get_class($e) === 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(); } return view('back::pages.codes.search', compact('code', 'used_counter')); } }