<?php
namespace App\Controller;
use App\Entity\Atelier;
use App\Entity\CategorieFamille;
use App\Entity\CategorieMetier;
use App\Entity\Droit;
use App\Entity\GroupesUtilisateur;
use App\Entity\MoisSemaine;
use App\Entity\NombreOperationPreserie;
use App\Entity\Operation;
use App\Entity\ParametrageEchantillon;
use App\Entity\SouscategorieMetier;
use App\Entity\TableauMesureLibelle;
use App\Entity\TypeMail;
use App\Form\AtelierType;
use App\Form\DroitType;
use App\Form\OperationType;
use App\Form\ProfilType;
use App\Form\TableauMesureLibelleType;
use App\Form\TypeMailType;
use App\Form\UserType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\DatatablesService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use App\Entity\User;
/**
* @method User getUser()
*/
class MainController extends AbstractController
{
protected $params = [];
public function __construct(private EntityManagerInterface $em, private DatatablesService $datatables_service, private UserPasswordHasherInterface $encoder,
private KernelInterface $kernel)
{
$this->params['leftbar_open'] = 'parametrages';
$this->params['leftbar_open_2'] = null;
$this->params['title'] = null;
}
public function redirect_home(Request $request){
return $this->redirectToRoute('index');
}
#[Route(path: '/', name: 'index')]
public function index(Request $request)
{
return $this->render('index.html.twig', $this->params);
}
#[Route(path: '/profil', name: 'profil')]
public function profil(Request $request)
{
$this->params['title'] = 'Mon profil';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$object = $this->em->getRepository(User::class)->find($this->getUser()->getId());
$form = $this->createForm(ProfilType::class, $object);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$object = $form->getData();
if ($object->getPlainPassword() != "" && $object->getPlainPassword() != null) {
$encodedPassword = $this->encoder->hashPassword($object, $object->getPlainPassword());//, $object->getSalt()
$object->setPassword($encodedPassword);
}
$this->em->persist($object);
$this->em->flush();
return new JsonResponse(['success' => true]);
}
$this->params['form'] = $form->createView();
return $this->render('Parametrages/profil.html.twig', $this->params);
}
#[Route(path: '/parametrages/menus', name: 'menus')]
public function menus(Request $request)
{
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$table = $this->datatables_service->getTableDroits()->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
$this->params['datatable'] = $table;
return $this->render('Parametrages/menus.html.twig', $this->params);
}
#[Route(path: '/parametrages/droits', name: 'droits')]
public function droits(Request $request)
{
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$table_users = $this->datatables_service->getDatatableDroits()->handleRequest($request);
if ($table_users->isCallback()) {
return $table_users->getResponse();
}
$this->params['datatable'] = $table_users;
return $this->render('Parametrages/droits.html.twig', $this->params);
}
#[Route(path: '/parametrages/droit/{slug}', name: 'droit', defaults: ['slug' => 0])]
public function droit(Request $request, $slug)
{
//Créer form
$droit = $this->em->getRepository(Droit::class)->find($slug);
$form = $this->createForm(DroitType::class, $droit);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$object = $form->getData();
$this->em->persist($object);
$this->em->flush();
return $this->redirectToRoute('droits');
}
$this->params['form'] = $form->createView();
return $this->render('Parametrages/droit.html.twig', $this->params);
}
#[Route(path: '/gestion/utilisateurs', name: 'utilisateurs')]
public function utilisateurs(Request $request)
{
if($this->getUser()->getAtelier() != null){
return $this->redirectToRoute('utilisateurs_atelier');
}
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$table_users = $this->datatables_service->getDatatableUsers($request->request, $this->getUser())->handleRequest($request);
if ($table_users->isCallback()) {
return $table_users->getResponse();
}
$this->params['datatable'] = $table_users;
return $this->render('Parametrages/utilisateurs.html.twig', $this->params);
}
#[Route(path: '/gestion/utilisateur/{slug}', name: 'utilisateur', defaults: ['slug' => 0])]
public function utilisateur(Request $request, $slug)
{
$this->params['title'] = 'Utilisateur';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$object = new User();
if ($slug != 0) {
$object = $this->em->getRepository(User::class)->find($slug);
}
$form = $this->createForm(UserType::class, $object);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$object = $form->getData();
if ($object->getPlainPassword() != "" && $object->getPlainPassword() != null) {
//$encoder = $this->encoder->getEncoder($object);
$encodedPassword = $this->encoder->hashPassword($object, $object->getPlainPassword());//, $object->getSalt()
$object->setPassword($encodedPassword);
}
$this->em->persist($object);
$this->em->flush();
return $this->redirectToRoute('utilisateurs');
}
$this->params['droit'] = null;
/*if($this->getUser()->getFournisseur() != null){
$this->params['droit'] = 'fournisseur';
}*/
$this->params['form'] = $form->createView();
return $this->render('Parametrages/utilisateur.html.twig', $this->params);
}
#[Route(path: '/parametrages/typemails', name: 'type_mails')]
public function typemails(Request $request)
{
$this->params['leftbar_open_2'] = 'parametrages_messagerie';
$table = $this->datatables_service->getDatatableTypeMails()->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
$this->params['datatable'] = $table;
return $this->render('Parametrages/typemails.html.twig', $this->params);
}
#[Route(path: '/parametrages/typemail/{slug}', name: 'type_mail', defaults: ['slug' => 0])]
public function typemail(Request $request, $slug)
{
$this->params['title'] = 'Type mail';
$this->params['leftbar_open_2'] = 'parametrages_messagerie';
$object = new TypeMail();
if ($slug != 0) {
$object = $this->em->getRepository(TypeMail::class)->find($slug);
}
$form = $this->createForm(TypeMailType::class, $object);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$object = $form->getData();
$this->em->persist($object);
$this->em->flush();
return $this->redirectToRoute('type_mails');
}
$this->params['form'] = $form->createView();
return $this->render('Parametrages/typemail.html.twig', $this->params);
}
#[Route(path: '/parametrages/groupes_utilisateurs', name: 'groupes_utilisateurs')]
public function groupes_utilisateurs(Request $request)
{
$params = $request->request;
$this->params['leftbar_open_2'] = 'parametrages_messagerie';
$table = $this->datatables_service->getDatatableGroupesUtilisateurs($params)->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
$this->params['datatable'] = $table;
$this->params['groupes'] = $this->em->getRepository(GroupesUtilisateur::class)->getAll();
$this->params['utilisateurs'] = $this->em->getRepository(User::class)->getAll();
return $this->render('Parametrages/groupesutilisateurs.html.twig', $this->params);
}
#[Route(path: '/parametrages/groupes_type_mails', name: 'groupes_type_mails')]
public function groupes_type_mails(Request $request)
{
$params = $request->request;
$this->params['leftbar_open_2'] = 'parametrages_messagerie';
$table = $this->datatables_service->getDatatableLightTypeMails()->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
$table_groupes = $this->datatables_service->getDatatableGroupes($params)->handleRequest($request);
if ($table_groupes->isCallback()) {
return $table_groupes->getResponse();
}
$table_copie_groupes = $this->datatables_service->getDatatableGroupesCopie($params)->handleRequest($request);
if ($table_copie_groupes->isCallback()) {
return $table_copie_groupes->getResponse();
}
$this->params['datatable'] = $table;
$this->params['datatable_groupe'] = $table_groupes;
$this->params['datatable_copie_groupes'] = $table_copie_groupes;
$this->params['groupes'] = $this->em->getRepository(GroupesUtilisateur::class)->getAll();
return $this->render('Parametrages/groupestypemails.html.twig', $this->params);
}
#[Route(path: '/parametrages/mailing', name: 'mailing')]
public function mailing(Request $request)
{
$this->params['leftbar_open_2'] = 'parametrages_messagerie';
$table = $this->datatables_service->getDatatableMailing($request->request)->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
$this->params['datatable'] = $table;
return $this->render('Parametrages/mailing.html.twig', $this->params);
}
#[Route(path: '/parametrages/operations', name: 'operations')]
public function operations(Request $request)
{
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$table = $this->datatables_service->getDatatableOperations($request->request)->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
$this->params['datatable'] = $table;
return $this->render('Parametrages/operations.html.twig', $this->params);
}
#[Route(path: '/parametrages/operation/{slug}', name: 'operation', defaults: ['slug' => 0])]
public function operation(Request $request, $slug)
{
$this->params['title'] = 'Opération';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$object = new Operation();
if ($slug != 0) {
$object = $this->em->getRepository(Operation::class)->find($slug);
}
$form = $this->createForm(OperationType::class, $object);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$object = $form->getData();
$this->em->persist($object);
$this->em->flush();
return $this->redirectToRoute('operations');
}
$this->params['form'] = $form->createView();
return $this->render('Parametrages/operation.html.twig', $this->params);
}
#[Route(path: '/parametrages/mesures', name: 'mesures')]
public function mesures(Request $request){
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$table = $this->datatables_service->getDatatableMesures($request->request)->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
$this->params['datatable'] = $table;
return $this->render('Parametrages/mesures.html.twig', $this->params);
}
#[Route(path: '/parametrages/mesure/{slug}', name: 'mesure', defaults: ['slug' => 0])]
public function mesure(Request $request, $slug)
{
$this->params['title'] = 'Mesure';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$object = new TableauMesureLibelle();
if ($slug != 0) {
$object = $this->em->getRepository(TableauMesureLibelle::class)->find($slug);
}
$form = $this->createForm(TableauMesureLibelleType::class, $object);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$object = $form->getData();
$this->em->persist($object);
$this->em->flush();
return $this->redirectToRoute('mesures');
}
$this->params['form'] = $form->createView();
return $this->render('Parametrages/mesure.html.twig', $this->params);
}
#[Route(path: '/parametrages/categoriesmetiers', name: 'categoriesmetiers')]
public function categoriesmetiers(Request $request)
{
$this->params['title'] = 'Catégories/Sous catégorie métier';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
//Categorie
$table_categorie_metier = $this->datatables_service->getDatatableCategorieMetiers($request->request)->handleRequest($request);
if ($table_categorie_metier->isCallback()) {
return $table_categorie_metier->getResponse();
}
$this->params['datatable_categorie_metier'] = $table_categorie_metier;
//Sous categorie
$table_souscategorie_metier = $this->datatables_service->getDatatableSousCategorieMetiers($request->request)->handleRequest($request);
if ($table_souscategorie_metier->isCallback()) {
return $table_souscategorie_metier->getResponse();
}
$this->params['datatable_souscategorie_metier'] = $table_souscategorie_metier;
//lien categories / sous categorie
$table_lien_metier = $this->datatables_service->getDatatableSousCategorieFromCategorie($request->request)->handleRequest($request);
if ($table_lien_metier->isCallback()) {
return $table_lien_metier->getResponse();
}
$this->params['datatable_lien_metier'] = $table_lien_metier;
return $this->render('Parametrages/categoriesmetiers.html.twig', $this->params);
}
#[Route(path: '/parametrages/familles', name: 'familles')]
public function familles(Request $request){
$this->params['categories'] = $this->em->getRepository(CategorieMetier::class)->findAll();
//Familles
$table_familles = $this->datatables_service->getDatatableFamilles($request->request)->handleRequest($request);
if ($table_familles->isCallback()) {
return $table_familles->getResponse();
}
$this->params['datatable_familles'] = $table_familles;
return $this->render('Parametrages/familles.html.twig', $this->params);
}
#[Route(path: '/ajax/famille/save_nombre_operation', name: 'save_nombre_operation')]
public function save_nombre_operation(Request $request){
$categorie = $this->em->getRepository(CategorieMetier::class)->find($request->request->get('categorie'));
$souscategorie = $this->em->getRepository(SouscategorieMetier::class)->find($request->request->get('souscategorie'));
$nombre_operation = $request->request->get('nombre_operation');
$obj_nombre_operation = $this->em->getRepository(NombreOperationPreserie::class)->findOneBy(['categorie' => $categorie, 'souscategorie' => $souscategorie]);
if($obj_nombre_operation != null){
$obj_nombre_operation->setNombreOperation($nombre_operation);
$this->em->persist($obj_nombre_operation);
$this->em->flush();
}else{
$obj_nombre_operation = new NombreOperationPreserie;
$obj_nombre_operation
->setCategorie($categorie)
->setSouscategorie($souscategorie)
->setNombreOperation($nombre_operation);
$this->em->persist($obj_nombre_operation);
$this->em->flush();
}
return new JsonResponse(['success' => true]);
}
#[Route(path: '/ajax/famille/get_nombre_operation', name: 'get_nombre_operation')]
public function get_nombre_operation(Request $request){
$categorie = $this->em->getRepository(CategorieMetier::class)->find($request->request->get('categorie'));
$souscategorie = $this->em->getRepository(SouscategorieMetier::class)->find($request->request->get('souscategorie'));
$obj_nombre_operation = $this->em->getRepository(NombreOperationPreserie::class)->findOneBy(['categorie' => $categorie, 'souscategorie' => $souscategorie]);
$nombre = 0;
if($obj_nombre_operation != null){
$nombre = $obj_nombre_operation->getNombreOperation();
}
return new JsonResponse(['success' => true, 'nombre_operation' => $nombre]);
}
#[Route(path: '/parametrages/parametrage-echantillon', name: 'parametrageechantillon')]
public function parametrageechantillon(Request $request){
$this->params['title'] = 'Paramétrage échantillon';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$this->params['parametrages'] = $this->em->getRepository(ParametrageEchantillon::class)->findAll();
return $this->render('Parametrages/parametrageechantillon.html.twig', $this->params);
}
#[Route(path: '/parametrages/categoriearticle', name: 'categoriearticle')]
public function categoriearticle(Request $request)
{
$this->params['title'] = 'Familles/Catégorie article';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
//Familles
$table_familles = $this->datatables_service->getDatatableFamilles($request->request, true)->handleRequest($request);
if ($table_familles->isCallback()) {
return $table_familles->getResponse();
}
$this->params['datatable_familles'] = $table_familles;
//Categorie article
$table_categoriearticle = $this->datatables_service->getDatatableCategorieArticle($request->request)->handleRequest($request);
if ($table_categoriearticle->isCallback()) {
return $table_categoriearticle->getResponse();
}
$this->params['datatable_categoriearticle'] = $table_categoriearticle;
//lien categories / sous categorie
$table_lien_metier = $this->datatables_service->getDatatableCategoriearticleFromFamille($request->request)->handleRequest($request);
if ($table_lien_metier->isCallback()) {
return $table_lien_metier->getResponse();
}
$this->params['datatable_lien'] = $table_lien_metier;
return $this->render('Parametrages/categoriesarticles.html.twig', $this->params);
}
#[Route(path: '/parametrages/gestiondefaut', name: 'gestiondefaut')]
public function gestiondefaut(Request $request){
$this->params['title'] = 'Gestion des défauts';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
//Défauts
$table_defauts = $this->datatables_service->getDatatableDefaut($request->request)->handleRequest($request);
if ($table_defauts->isCallback()) {
return $table_defauts->getResponse();
}
$this->params['datatable_defauts'] = $table_defauts;
//Catégories defauts
$table_categoriedefauts = $this->datatables_service->getDatatableCategorieDefaut($request->request)->handleRequest($request);
if ($table_categoriedefauts->isCallback()) {
return $table_categoriedefauts->getResponse();
}
$this->params['datatable_categoriedefauts'] = $table_categoriedefauts;
//lien categoriesdefaut / defauts
$table_lien = $this->datatables_service->getDatatableDefautsFromCategorie($request->request)->handleRequest($request);
if ($table_lien->isCallback()) {
return $table_lien->getResponse();
}
$this->params['datatable_lien'] = $table_lien;
return $this->render('Parametrages/gestiondefaut.html.twig', $this->params);
}
#[Route(path: '/parametrages/gestionfamilledefaut', name: 'gestionfamilledefaut')]
public function gestionfamilledefaut(Request $request){
$this->params['title'] = 'Gestion des défauts par famille';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
//Catégories defauts
$table_categoriedefauts = $this->datatables_service->getDatatableCategorieDefaut($request->request, true)->handleRequest($request);
if ($table_categoriedefauts->isCallback()) {
return $table_categoriedefauts->getResponse();
}
$this->params['datatable_categoriedefauts'] = $table_categoriedefauts;
//Familles
$table_familles = $this->datatables_service->getDatatableFamilles($request->request, true)->handleRequest($request);
if ($table_familles->isCallback()) {
return $table_familles->getResponse();
}
$this->params['datatable_familles'] = $table_familles;
//lien categoriesdefaut / familles
$table_lien = $this->datatables_service->getDatatableCategoriedefautFromFamille($request->request)->handleRequest($request);
if ($table_lien->isCallback()) {
return $table_lien->getResponse();
}
$this->params['datatable_lien'] = $table_lien;
return $this->render('Parametrages/gestionfamilledefaut.html.twig', $this->params);
}
#[Route(path: '/parametrages/matricefamilledefaut', name: 'matricefamilledefaut')]
public function matricefamilledefaut(Request $request){
$this->params['title'] = 'Matrice des défauts';
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$this->params['familles'] = $this->em->getRepository(CategorieFamille::class)->findAll();
return $this->render('Parametrages/matricedefaut.html.twig', $this->params);
}
#[Route(path: '/parametrages/ateliers', name: 'ateliers')]
public function ateliers(Request $request)
{
$this->params['leftbar_open_2'] = 'parametrages_gestion';
$table_users = $this->datatables_service->getDatatableAteliers()->handleRequest($request);
if ($table_users->isCallback()) {
return $table_users->getResponse();
}
$this->params['datatable'] = $table_users;
return $this->render('Parametrages/ateliers.html.twig', $this->params);
}
#[Route(path: '/parametrages/atelier/{slug}', name: 'atelier', defaults: ['slug' => 0])]
public function atelier(Request $request, $slug)
{
//Créer form
$droit = $this->em->getRepository(Atelier::class)->find($slug);
$form = $this->createForm(AtelierType::class, $droit);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$object = $form->getData();
$this->em->persist($object);
$this->em->flush();
return $this->redirectToRoute('ateliers');
}
$this->params['form'] = $form->createView();
return $this->render('Parametrages/atelier.html.twig', $this->params);
}
#[Route(path: '/parametrages/moissemaines', name: 'moissemaines')]
public function moissemaines(Request $request)
{
$this->params['moissemaines'] = $this->em->getRepository(MoisSemaine::class)->findAll();
return $this->render('Parametrages/moissemaines.html.twig', $this->params);
}
#[Route(path: '/ajax/parametrages/moissemaines', name: 'ajax_moissemaines')]
public function ajax_moissemaines(Request $request)
{
if($request->request->get('id') !== ''){
$mois = $this->em->getRepository(MoisSemaine::class)->find($request->request->get('id'));
$mois->setSemaines($request->request->get('semaines'));
$this->em->persist($mois);
}else{
$numero_php = 1;
switch($request->request->get('mois')){
case 'janvier':
$numero_php = 1;
break;
case 'fevrier':
$numero_php = 2;
break;
case 'mars':
$numero_php = 3;
break;
case 'avril':
$numero_php = 4;
break;
case 'mai':
$numero_php = 5;
break;
case 'juin':
$numero_php = 6;
break;
case 'juillet':
$numero_php = 7;
break;
case 'aout':
$numero_php = 8;
break;
case 'septembre':
$numero_php = 9;
break;
case 'octobre':
$numero_php = 10;
break;
case 'novembre':
$numero_php = 11;
break;
case 'decembre':
$numero_php = 12;
break;
}
$mois = new MoisSemaine;
$mois->setSemaines($request->request->get('semaines'))
->setMois($request->request->get('mois'))
->setAnnee($request->request->get('annee'))
->setNumeroPhp($numero_php)
;
$this->em->persist($mois);
}
$this->em->flush();
return new JsonResponse(['success' => true, 'id' => $mois->getId()]);
}
#[Route(path: '/ajax/parametrages/loadmoissemaines', name: 'ajax_loadmoissemaines')]
public function ajax_loadmoissemaines(Request $request)
{
$mois = $this->em->getRepository(MoisSemaine::class)->getByAnnee($request->request->get('annee'));
return new JsonResponse(['success' => true, 'mois' => $mois]);
}
}