165 lines
5.2 KiB
PHP
165 lines
5.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\SondageResponsesRequest;
|
|
use App\Http\Requests\UpdateCrudModel;
|
|
use App\Http\Requests\UpdateSondage;
|
|
use App\Models\ReponseSondage;
|
|
use App\Models\Sondage;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Str;
|
|
use League\Csv\Writer;
|
|
|
|
class SondagesController extends CrudController
|
|
{
|
|
|
|
/** @var Sondage */
|
|
protected static $modelClass = Sondage::class;
|
|
|
|
// Eloquent callbacks
|
|
public function indexQuery(Builder $query): Builder
|
|
{
|
|
/** @var \App\Models\User */
|
|
$user = auth()->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 à bien été enregisté.', ['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) {
|
|
$w->insertOne(array_replace(
|
|
$tmpl,
|
|
[
|
|
$customerIntel['employee']->id,
|
|
],
|
|
$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]);
|
|
}
|
|
$employee->reponseSondages()->syncWithoutDetaching($request->reponses);
|
|
return view('front.sondages.saved');
|
|
}
|
|
}
|