ldc-jeusselin/app/Http/Controllers/Bo/EmployeesController.php
Olivier Legat df16185a19 Injection des données bo dans le front
gestion des ordres sur le bo
2021-02-22 10:41:42 +01:00

208 lines
6.1 KiB
PHP

<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Models\Employees;
use App\Models\BusinessSector;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class EmployeesController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$employees = Employees::orderBy('order', 'ASC')->get();
$sectors = BusinessSector::orderBy('order', 'ASC')->get();
return view('bo.employees.index',compact('employees','sectors'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
$s = BusinessSector::orderBy('order', 'ASC')->get();
return view('bo.employees.create', compact('s'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$lastname = $request->lastname;
$firstname = $request->firstname;
$video = $request->video;
$photo = $request->photo;
$request->validate([
'lastname' => 'required|string|max:255',
'firstname' => 'required|string|max:255',
'job_title' => 'max:255',
'video' => 'max:255',
'photo' => 'required|image|mimes:jpeg,png,jpg|max:2048|dimensions:width=100,height=100',
]);
$imageName = Str::slug($firstname."-".$lastname) . '-jeusselin.' . $photo->extension();
$photo->move(public_path('uploads/images/profiles/' . date('Y') . '/' . date('m')), $imageName);
$e = new Employees();
$e->civility = $request->civility;
$e->lastname = $lastname;
$e->firstname = $firstname;
$e->job_title = $request->job_title;
$e->video = $video;
$e->photo = 'uploads/images/profiles/' . date('Y') . '/' . date('m') . '/' . $imageName;
$e->order = $this->getLastOrder();
$e->save();
//prise en charge de la liaison avec les secteurs
$associatedSectors = $request->associated_sectors;
$e->businessSectors()->sync($associatedSectors);
return redirect()->route('bo.employees.index');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$e = Employees::findOrFail($id);
$s = BusinessSector::orderBy('order', 'ASC')->get();
$seIds = [];
foreach ($e->businessSectors as $sector_employee) {
$seIds[] = $sector_employee->id;
}
return view('bo.employees.edit', compact('e','s'))->with('seIds', $seIds);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$lastname = $request->lastname;
$firstname = $request->firstname;
$video = $request->video;
$photo = $request->file('photo');
$request->validate([
'lastname' => 'required|string|max:255',
'firstname' => 'required|string|max:255',
'job_title' => 'max:255',
'video' => 'max:255',
]);
if($photo !== NULL) {
$request->validate([
'photo' => 'image|mimes:jpeg,png,jpg|max:2048|dimensions:width=100,height=100',
]);
}
$e = Employees::findOrFail($id);
if($photo !== NULL) {
if(file_exists(public_path() . '/' . $e->photo))
unlink(public_path() . '/' . $e->photo);
$imageName = Str::slug($firstname."-".$lastname) . '-jeusselin.' . $photo->extension();
$photo->move(public_path('uploads/images/profiles/' . date('Y') . '/' . date('m')), $imageName);
}
$e->civility = $request->civility;
$e->lastname = $lastname;
$e->firstname = $firstname;
$e->job_title = $request->job_title;
$e->video = $video;
if($photo !== NULL) {
$e->photo = 'uploads/images/profiles/' . date('Y') . '/' . date('m') . '/' . $imageName;
}
$e->save();
//prise en charge de la liaison avec les secteurs
$associatedSectors = $request->associated_sectors;
$e->businessSectors()->sync($associatedSectors);
return redirect()->route('bo.employees.index');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$e = Employees::findOrFail($id);
if(file_exists(public_path() . '/' . $e->photo))
unlink(public_path() . '/' . $e->photo);
//prise en charge de la liaison avec les secteurs
$e->delete();
return redirect()->route('bo.employees.index');
}
public function changeOrder($id, $action)
{
$current = Employees::findOrFail($id);
if ($action === 'up'){
$tmp = Employees::where('order', '<', $current->order)->orderBy('order', 'DESC')->first();
$newOrder = $tmp->order;
$tmp->order = $current->order;
$current->order = $newOrder;
}else{
$tmp = Employees::where('order', '>', $current->order)->orderBy('order', 'ASC')->first();
$newOrder = $tmp->order;
$tmp->order = $current->order;
$current->order = $newOrder;
}
$tmp->save();
$current->save();
return redirect()->route('bo.employees.index');
}
private function getLastOrder()
{
$order = Employees::select('order')->orderBy('order', 'DESC')->first();
if ($order === NULL)
return 1;
return $order->order + 1;
}
}