223 lines
6.9 KiB
PHP
223 lines
6.9 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(
|
|
storage_path(sprintf('app/public/modelfiles/profiles/%s/%s', 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 = sprintf('storage/modelfiles/profiles/%s/%s/%s', 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')
|
|
->with('success', trans(
|
|
':model a été crée',
|
|
['model' => 'Employe']
|
|
));
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param integer $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 integer $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(storage_path(Str::replaceFirst('storage', 'app/public', $e->photo)))) {
|
|
unlink(storage_path(Str::replaceFirst('storage', 'app/public', $e->photo)));
|
|
}
|
|
$imageName = Str::slug($firstname . "-" . $lastname) . '-jeusselin.' . $photo->extension();
|
|
$photo->move(
|
|
storage_path(sprintf('app/public/modelfiles/profiles/%s/%s', 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 = sprintf('storage/modelfiles/profiles/%s/%s/%s', date('Y'), date('m'), $imageName);
|
|
}
|
|
$e->saveOrFail();
|
|
|
|
// prise en charge de la liaison avec les secteurs
|
|
$associatedSectors = $request->associated_sectors;
|
|
$e->businessSectors()->sync($associatedSectors);
|
|
|
|
return redirect()
|
|
->route('bo.employees.index')
|
|
->with('success', trans(
|
|
':model a été mis à jour',
|
|
['model' => 'Employee']
|
|
));
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param integer $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
$e = Employees::findOrFail($id);
|
|
|
|
if (file_exists(storage_path(Str::replaceFirst('storage', 'app/public', $e->photo)))) {
|
|
unlink(storage_path(Str::replaceFirst('storage', 'app/public', $e->photo)));
|
|
}
|
|
|
|
$e->businessSectors()->detach();
|
|
|
|
// prise en charge de la liaison avec les secteurs
|
|
if ($e->deleteOrFail()) {
|
|
return redirect()
|
|
->route('bo.employees.index')
|
|
->with('warning', trans(
|
|
':model a bien été supprimé',
|
|
['model' => 'Employe']
|
|
));
|
|
}
|
|
return back();
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|