ldc-jeusselin/app/Http/Controllers/Bo/EmployeesController.php
Jérémy Munsch de4dcfb283
Closes #2 and #4
- Add status checker + admin secure packages + upgrade enum + add sentry + upgrade to sitemap generator + bump to CRMV2
- Set customer role enum and user role enum
- Update customer migration to set roles
- phpcbf
- faker local to fr
- update lang
- composer update
- bump laravel ui
- Redo all user crud
- npm bump
- Create admin command
- rearrange views
- redo all auth system
- redo customer pro bo
2023-08-21 15:43:33 +02:00

215 lines
6.6 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')
->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(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->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(public_path() . '/' . $e->photo)) {
unlink(public_path() . '/' . $e->photo);
}
// 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;
}
}