ldc-bogt/app/Http/Controllers/EleveurController.php
Jérémy Munsch 529c99a055
- Add bootstrap paginator
- add Civilité enum to Eleveur
- add type enum to eleveur
- add search bar on eleveurs
- Rewrite eleveur CRUD
- Add flashMessages module
2022-03-09 16:01:33 +01:00

218 lines
6.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Enums\EleveurType;
use App\Models\Eleveur;
use App\Http\Requests\StoreEleveurRequest;
use App\Http\Requests\UpdateEleveurRequest;
use App\Lib\ToolboxHelper;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
class EleveurController extends Controller
{
/**
* Display a listing of the resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
/** @var \Illuminate\Database\Eloquent\Builder $eleveurs */
$eleveurs = Eleveur::query();
if ($request->search) {
$this->searchQuery(
$eleveurs,
$request->search,
'code_ede',
'nom',
'prenom',
'ville',
'code_inuav'
);
}
if ($request->type) {
try {
$eleveurs = $eleveurs->whereType(EleveurType::make(intval($request->type)));
//phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
} catch (\BadMethodCallException $e) {
dd($e);
// Continue.
}
}
$searchFields = trans('Code EDE, Nom, Prénom, Ville, Code INUAV');
$eleveurs->orderBy('id', 'DESC');
return view('eleveurs.index', [
'eleveurs' => $eleveurs->paginate(),
'searchFields' => $searchFields
]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('eleveurs.create');
}
/**
* Store a newly created resource in storage.
*
* @param StoreEleveurRequest $request
* @return \Illuminate\Http\Response
*/
public function store(StoreEleveurRequest $request)
{
$eleveur = new Eleveur($request->validated());
if ($request->photo1) {
$eleveur->path_photo1 = ToolboxHelper::storeImage(
$eleveur->getTable(),
$request->photo1
);
}
if ($request->photo2) {
$eleveur->path_photo2 = ToolboxHelper::storeImage(
$eleveur->getTable(),
$request->photo2
);
}
if ($eleveur->saveOrFail()) {
return redirect()
->route('bo.eleveur.edit', ['eleveur' => $eleveur])
->with('success', trans('La fiche éleveur à été créé.'));
}
return back();
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Eleveur $eleveur
* @return \Illuminate\Http\Response
*/
public function edit(Eleveur $eleveur)
{
return view('eleveurs.edit', ['eleveur' => $eleveur]);
}
/**
* Update the specified resource in storage.
*
* @param UpdateEleveurRequest $request
* @param \App\Eleveur $eleveur
* @return \Illuminate\Http\Response
*/
public function update(UpdateEleveurRequest $request, Eleveur $eleveur)
{
$eleveur->fill($request->validated());
if ($request->photo1) {
if (!File::delete($eleveur->path_photo1)) {
Session::flash('error', trans('Erreur lors de la supression de l\'ancienne photo.'));
}
$eleveur->path_photo1 = ToolboxHelper::storeImage(
$eleveur->getTable(),
$request->photo1
);
}
if ($request->photo2) {
if (!File::delete($eleveur->path_photo2)) {
Session::flash('error', trans('Erreur lors de la supression de l\'ancienne photo.'));
}
$eleveur->path_photo2 = ToolboxHelper::storeImage(
$eleveur->getTable(),
$request->photo2
);
}
if ($eleveur->saveOrFail()) {
return redirect()
->route('bo.eleveur.edit', ['eleveur' => $eleveur])
->with('success', trans('La fiche éleveur à été modifiée.'));
}
return back();
}
/**
* Export eleveurs to CSV
*
* @return \Symfony\Component\HttpFoundation\StreamedResponse
*/
public function export()
{
$headers = array(
"Content-Encoding" => "UTF-8",
"Content-type" => "Content-type: text/csv; charset=UTF-8",
"Content-Disposition" => "attachment; filename=file.csv",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
);
$eleveurs = Eleveur::all();
$columns = array(
'Code Cafel', 'Type', 'Code EDE', 'Nom', 'Prénom',
'Naissance', 'CP', 'Ville', 'Date Début Elevage',
'Code INUAV', 'Infos Exploitation', 'A propos de l\'éleveur',
'Toujours été éleveur', 'Ce que l\'éleveur aimes', 'Loué ?',
'Photo 1', 'Photo 2'
);
$callback = function () use ($eleveurs, $columns) {
$file = fopen('php://output', 'w');
fputs($file, "\xEF\xBB\xBF");
// * use BOM for Office
fputcsv($file, $columns, ";");
foreach ($eleveurs as $eleveur) {
if ($eleveur->path_photo1 != "") {
$photo1 = "OUI";
} else {
$photo1 = "NON";
}
if ($eleveur->path_photo2 != "") {
$photo2 = "OUI";
} else {
$photo2 = "NON";
}
fputcsv($file, array(
$eleveur->code_cafel,
$eleveur->type->label,
$eleveur->code_ede,
$eleveur->nom,
$eleveur->prenom,
$eleveur->naissance,
$eleveur->cp,
$eleveur->ville,
$eleveur->elv_date_debut,
$eleveur->code_inuav,
$eleveur->exploitation,
$eleveur->aboutyou,
$eleveur->vocation,
$eleveur->likeinjob,
$eleveur->loue_means,
$photo1,
$photo2
), ";");
}//end foreach
fclose($file);
};
return Response::stream($callback, 200, $headers);
}
}