ldc-jeusselin/app/Http/Controllers/Bo/EmployeesController.php

224 lines
6.9 KiB
PHP
Raw Normal View History

2021-02-17 17:40:35 +01:00
<?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;
2021-02-17 17:40:35 +01:00
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'));
2021-02-17 17:40:35 +01:00
}
/**
* 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'));
2021-02-17 17:40:35 +01:00
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
2021-02-17 17:40:35 +01:00
* @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']
));
2021-02-17 17:40:35 +01:00
}
/**
* Show the form for editing the specified resource.
*
* @param integer $id
2021-02-17 17:40:35 +01:00
* @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);
2021-02-17 17:40:35 +01:00
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param integer $id
2021-02-17 17:40:35 +01:00
* @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']
));
2021-02-17 17:40:35 +01:00
}
/**
* Remove the specified resource from storage.
*
* @param integer $id
2021-02-17 17:40:35 +01:00
* @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();
2021-02-17 17:40:35 +01:00
}
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;
}
2021-02-17 17:40:35 +01:00
}