user(); return $query->where('site_id', $user->selected_site_id); } public function storeModel(Model &$model) { /** @var \App\Models\User */ $user = auth()->user(); $model->site_id = $user->selected_site_id; } public function updateModel(Model &$model) { /** @var \App\Models\User */ $user = auth()->user(); $model->site_id = $user->selected_site_id; } // BO // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass public function show(Model $model) { return view('crudOverLoad.sondages.show', compact('model')); } // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass public function edit(Model $model) { return view('crudOverLoad.sondages.edit', compact('model')); } public function updateSondage(UpdateSondage $request, Sondage $model) { $data = $request->validated(); $model->fill($data); $model->saveOrFail(); $model->reponseSondages()->delete(); foreach ($data['reponses'] as $reponse) { $reponse = new ReponseSondage([ 'value' => $reponse ]); $reponse->sondage()->associate($model); $reponse->saveorFail(); } return \redirect()->route(sprintf('bo.%s.edit', $model->getTable()), $model) ->with('success', trans(':model a bien été enregistré.', ['model' => $model->getModelName()])); } public function export(Sondage $model) { $this->authorize('export', $model); $anwsers = $model->reponseSondages->load('employees'); $header = '"employee_matricule";' . implode(';', $anwsers->map(function ($answer) { return "\"$answer->value\""; })->all()); $w = Writer::createFromString($header . PHP_EOL); $w->setDelimiter(';'); $w->setEnclosure('"'); $w->setOutputBOM(Writer::BOM_UTF8); $tmpl = [ 0 => '0', ]; foreach ($anwsers as $k => $answer) { $tmpl[$k + 1] = '0'; } $res = []; foreach ($anwsers as $k => $answer) { $answer->employees->map(function ($employee) use ($answer, $k, &$res) { if (!array_key_exists($employee->id, $res)) { $res[$employee->id] = [ 'employee' => $employee, 'answers' => [] ]; } $res[$employee->id]['answers'][$k + 2] = 1; }); } foreach ($res as $customerIntel) { $identifier = sprintf( '%s %s %s', $customerIntel['employee']->matricule, $customerIntel['employee']->firstname, $customerIntel['employee']->lastname ); $w->insertOne(array_replace( $tmpl, [ $identifier, ], $customerIntel['answers'] )); } return response((string)$w, 200, [ 'Content-Encoding' => 'none', 'Content-Type' => 'text/csv; charset=UTF-8', 'Content-Disposition' => sprintf( 'attachment; filename="Résultats Sondage %s - %s.csv', Str::slug($model->question), Str::slug(date('d_m_Y-H_i_s')) ), 'Content-Description' => 'File Transfer', ]); } // FO public function sondages() { $sondages = $this->getEmployee()->unAnsweredSondages() ->filter(function (Sondage $sondage) { return $sondage->status; }); return view('front.sondages.index', compact('sondages')); } //phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass public function sondagesShow(Sondage $sondage) { if (!$sondage->status) { abort(404); } $employee = $this->getEmployee(); if ($employee->hasAnweredToSondage($sondage)) { return view('front.sondages.saved', ['answered' => true]); } return view('front.sondages.show', compact('sondage')); } //phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassAfterLastUsed public function sondagesSubmit(SondageResponsesRequest $request, Sondage $sondage) { if (!$sondage->status) { abort(400); } $employee = $this->getEmployee(); if ($employee->hasAnweredToSondage($sondage)) { return view('front.sondages.saved', ['answered' => true, 'sondage' => $sondage]); } $employee->reponseSondages()->syncWithoutDetaching($request->reponses); return view('front.sondages.saved', compact('sondage')); } }