src/Controller/Backend/EntrepriseController.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backend;
  3. use App\Controller\BaseController;
  4. use App\Entity\Activity;
  5. use App\Entity\Contact;
  6. use App\Entity\Cotisation;
  7. use App\Entity\EntityStatus;
  8. use App\Entity\Entreprise;
  9. use App\Entity\EntrepriseActivity;
  10. use App\Entity\Etablissement;
  11. use App\Entity\FirmLinkReason;
  12. use App\Entity\FirmType;
  13. use App\Entity\LinkedFirm;
  14. use App\Entity\User;
  15. use App\Form\Backend\EntrepriseType;
  16. use App\Form\Backend\FirmFusionType;
  17. use App\Repository\ContactRepository;
  18. use App\Repository\CotisationRepository;
  19. use App\Repository\EnterpriseRepository;
  20. use App\Repository\EntityLogRepository;
  21. use App\Repository\LinkedFirmRepository;
  22. use App\Service\IsMemberService;
  23. use DateTime;
  24. use Doctrine\ORM\EntityManagerInterface;
  25. use Knp\Component\Pager\PaginatorInterface;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. use Symfony\Component\HttpFoundation\RedirectResponse;
  28. use Symfony\Component\HttpFoundation\Request;
  29. use Symfony\Component\HttpFoundation\Response;
  30. use Symfony\Component\Routing\Annotation\Route;
  31. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  32. #[Route('/admin')]
  33. class EntrepriseController extends BaseController
  34. {
  35.     #[Route(path'/entreprises/{id}/show'name'show_entreprise')]
  36.     #[IsGranted('ROLE_USER'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  37.     public function show(
  38.         Entreprise $entreprise,
  39.         LinkedFirmRepository $linkedFirmRepository,
  40.         IsMemberService $isMemberService
  41.     ): Response
  42.     {
  43.         $isMemberService->checkIsMember($entreprise);
  44.         $formFusion $this->createForm(FirmFusionType::class, null, [
  45.             'action' => $this->generateUrl('fusion_entreprise', ['id' => $entreprise->getId()])
  46.         ]);
  47.         $linkedFirmWithFromMe $linkedFirmRepository->findBy([
  48.             'fromFirm' => $entreprise
  49.         ]);
  50.         $linkedFirmWithToMe $linkedFirmRepository->findBy([
  51.             'toFirm' => $entreprise
  52.         ]);
  53.         $lastCotisation $entreprise->getCotisations()->last();
  54.         return $this->renderForm('backend/entreprise/show.html.twig', [
  55.             'controller_name' => 'EntrepriseController',
  56.             'menu' => 'entreprise',
  57.             'entreprise' => $entreprise,
  58.             'formFusion' => $formFusion,
  59.             'linkedFirmWithFromMe' => $linkedFirmWithFromMe,
  60.             'linkedFirmWithToMe' => $linkedFirmWithToMe,
  61.             'lastCotisation' => $lastCotisation
  62.         ]);
  63.     }
  64.     #[Route('/entreprises/{id}/history'name'show_history_entreprise'methods: ['GET'])]
  65.     public function showHistory(
  66.         Entreprise $entreprise,
  67.         EntityLogRepository $repository,
  68.         PaginatorInterface $paginator,
  69.         Request $request
  70.     ): Response
  71.     {
  72.         $query $repository->queryFindBy(Entreprise::class, $entreprise->getId());
  73.         $logs $paginator->paginate(
  74.             $query,
  75.             $request->query->getInt('page'1),
  76.             self::ITEM_PER_PAGE
  77.         );
  78.         return $this->render('backend/entreprise/show_history.html.twig', [
  79.             'controller_name' => 'EntrepriseController',
  80.             'menu' => 'entreprise',
  81.             'entreprise' => $entreprise,
  82.             'logs' => $logs
  83.         ]);
  84.     }
  85.     #[Route(path'/entreprises/{id}/edit'name'edit_entreprise')]
  86.     #[IsGranted('ROLE_UPDATE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  87.     public function edit(
  88.         Request $request,
  89.         Entreprise $entreprise,
  90.         EntityManagerInterface $em,
  91.         IsMemberService $isMemberService
  92.     ): RedirectResponse|Response
  93.     {
  94.         $isMemberService->checkIsMember($entreprise);
  95.         $form $this->createForm(EntrepriseType::class, $entreprise);
  96.         $form->handleRequest($request);
  97.         if ($form->isSubmitted() && $form->isValid()) {
  98.             $em->persist($entreprise);
  99.             $em->flush();
  100.             $this->addFlash(
  101.                 'success',
  102.                 'Enregistrement effectué avec succès'
  103.             );
  104.             return $this->redirectToRoute('show_entreprise', ['id' => $entreprise->getId()]);
  105.         }
  106.         return $this->renderForm('backend/entreprise/edit.html.twig', [
  107.             'controller_name' => 'EntrepriseController',
  108.             'menu' => 'entreprise',
  109.             'entreprise' => $entreprise,
  110.             'form' => $form
  111.         ]);
  112.     }
  113.     #[Route(path'/entreprises/add'name'create_enterprise')]
  114.     #[IsGranted('ROLE_ADD_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  115.     public function add(Request $requestEntityManagerInterface $em): Response
  116.     {
  117.         $entreprise = new Entreprise();
  118.         $entreprise->setFirmType($em->getRepository(FirmType::class)->find(1));
  119.         $activities $em->getRepository(Activity::class)->findBy([
  120.             'isEnabled' => true
  121.         ]);
  122.         foreach ($activities as $activity) {
  123.             $firmActivity = new EntrepriseActivity();
  124.             $firmActivity
  125.                 ->setEntreprise($entreprise)
  126.                 ->setActivity($activity)
  127.             ;
  128.             $entreprise->addEntrepriseActivity($firmActivity);
  129.         }
  130.         $form $this->createForm(EntrepriseType::class, $entreprise);
  131.         $form->handleRequest($request);
  132.         if ($form->isSubmitted() && $form->isValid()) {
  133.             $em->persist($entreprise);
  134.             $em->flush();
  135.             $this->addFlash(
  136.                 'success',
  137.                 'Enregistrement effectué avec succès'
  138.             );
  139.             return $this->redirectToRoute('show_entreprise', ['id' => $entreprise->getId()]);
  140.         }
  141.         return $this->renderForm(
  142.             'backend/entreprise/edit.html.twig', [
  143.             'controller_name' => 'EntrepriseController',
  144.             'menu' => 'entreprise',
  145.             'form' => $form,
  146.             'entreprise' => $entreprise,
  147.             'status' => "Création d'une nouvelle entreprise",
  148.         ]);
  149.     }
  150.     #[Route(path'/entreprises/{id}/archive'name'archive_enterprise'methods: ['DELETE''POST'])]
  151.     #[IsGranted('ROLE_DELETE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  152.     public function archive(Entreprise $entrepriseRequest $requestEntityManagerInterface $em): JsonResponse
  153.     {
  154.         $data json_decode($request->getContent(), true);
  155.         if ($this->isCsrfTokenValid('entreprise_'.$entreprise->getId(), $data['_token'])) {
  156.             $entreprise->setStatus(EntityStatus::STATUS_ARCHIVED);
  157.             /** @var Contact $contact */
  158.             foreach ($entreprise->getContacts() as $contact) {
  159.                 $contact->setStatus(EntityStatus::STATUS_ARCHIVED);
  160.             }
  161.             /** @var Cotisation $cotisation */
  162.             foreach($entreprise->getCotisations() as $cotisation) {
  163.                 $cotisation->setStatus(EntityStatus::STATUS_ARCHIVED);
  164.             }
  165.             $em->persist($entreprise);
  166.             $em->flush();
  167.             return new JsonResponse([
  168.                 'status' => 'ok',
  169.                 'message' => 'Archivage effectuée avec succès'
  170.             ]);
  171.         }
  172.         return new JsonResponse([
  173.             'status' => 'nok',
  174.             'message' => 'Erreur lors de l\'archivage. Merci de contacter un administrateur.'
  175.         ]);
  176.     }
  177.     #[Route('/entreprises/{id}/show-cotisations'name'show_entreprise_cotisation'methods: ['GET'])]
  178.     public function cotisations(Entreprise $entreprise): Response
  179.     {
  180.         return $this->render('backend/entreprise/show_cotisation.html.twig', [
  181.             'controller_name' => 'EntrepriseController',
  182.             'menu' => 'entreprise',
  183.             'entreprise' => $entreprise
  184.         ]);
  185.     }
  186.     #[Route('/entreprises/{id}/duplicate'name'duplicate_entreprise'methods: ['GET'])]
  187.     #[IsGranted('ROLE_ADMIN'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  188.     public function duplicate(Entreprise $entrepriseRequest $requestEntityManagerInterface $em): RedirectResponse
  189.     {
  190.         $newFirm = new Entreprise();
  191.         $newFirm
  192.             ->setSouhaiteAdherer($entreprise->getSouhaiteAdherer())
  193.             ->setCommentaires($entreprise->getCommentaires())
  194.             ->setFirmType($entreprise->getFirmType())
  195.             ->setTel1($entreprise->getTel1())
  196.             ->setTel2($entreprise->getTel2())
  197.             ->setEmail($entreprise->getEmail())
  198.             ->setStatus(EntityStatus::STATUS_IN_CREATION)
  199.             ->setRaisonSocial($entreprise->getRaisonSocial())
  200.             ->setAdresse($entreprise->getAdresse())
  201.             ->setAdresse2($entreprise->getAdresse2())
  202.             ->setCodePostal($entreprise->getCodeApe())
  203.             ->setVille($entreprise->getVille())
  204.             ->setAutreActivite($entreprise->getAutreActivite())
  205.             ->setAutreSpecialite($entreprise->getAutreSpecialite())
  206.             ->setChiffreDernierTotal($entreprise->getChiffreDernierTotal())
  207.             ->setCodeAdherent($entreprise->getCodeAdherent())
  208.             ->setCodeApe($entreprise->getCodeApe())
  209.             ->setCodeSiren($entreprise->getCodeSiren())
  210.             ->setCommission($entreprise->getCommission())
  211.             ->setDepartement($entreprise->getDepartement())
  212.             ->setFigurerAnnuaireAdherents($entreprise->getFigurerAnnuaireAdherents())
  213.             ->setGroupeEntreprise($entreprise->getGroupeEntreprise())
  214.             ->setHomeRegion($entreprise->getHomeRegion())
  215.             ->setIsQualiNegoce($entreprise->isIsQualiNegoce())
  216.             ->setQualiNegoceCertificationDate($entreprise->getQualiNegoceCertificationDate())
  217.             ->setQualiNegoceContactName($entreprise->getQualiNegoceContactName())
  218.             ->setVolumeAnimaux($entreprise->getVolumeAnimaux())
  219.             ->setTransportPourAutrui($entreprise->getTransportPourAutrui())
  220.             ->setTransporteur($entreprise->getTransporteur())
  221.             ->setTotalCountSpecies($entreprise->getTotalCountSpecies())
  222.             ->setSyndicat($entreprise->getSyndicat())
  223.             ->setStatutPaiement($entreprise->getStatutPaiement())
  224.             ->setStatutPaiment($entreprise->getStatutPaiment())
  225.             ->setRaisonNonAdhesionAutre($entreprise->getRaisonNonAdhesionAutre())
  226.             ->setNumTvaIntracom($entreprise->getNumTvaIntracom())
  227.             ->setRaisonNonAdhesion($entreprise->getRaisonNonAdhesion())
  228.             ->setNumEdeNegoce($entreprise->getNumEdeNegoce())
  229.             ->setNumEdeElevage($entreprise->getNumEdeElevage())
  230.             ->setNumEdeCentre($entreprise->getNumEdeCentre())
  231.             ->setNombreEmployes($entreprise->getNombreEmployes())
  232.         ;
  233.         /** @var EntrepriseActivity $entrepriseActivity */
  234.         foreach ($entreprise->getEntrepriseActivities() as $entrepriseActivity) {
  235.             $newActivity = new EntrepriseActivity();
  236.             $newActivity
  237.                 ->setActivity($entrepriseActivity->getActivity())
  238.                 ->setEntreprise($newFirm)
  239.                 ->setChecked($entrepriseActivity->isChecked())
  240.                 ->setNumber($entrepriseActivity->getNumber())
  241.             ;
  242.             $newFirm->addEntrepriseActivity($newActivity);
  243.         }
  244.         /** @var Etablissement $etablissement */
  245.         foreach ($entreprise->getEtablissements() as $etablissement) {
  246.             $newEtablissement = new Etablissement();
  247.             $newEtablissement
  248.                 ->setEntreprise($newFirm)
  249.                 ->setVille($etablissement->getVille())
  250.                 ->setSyndicat($etablissement->getSyndicat())
  251.                 ->setDepartement($etablissement->getDepartement())
  252.                 ->setCodePostal($etablissement->getCodePostal())
  253.                 ->setAdresse($etablissement->getAdresse())
  254.                 ->setNom($etablissement->getNom())
  255.                 ->setCodeEde($etablissement->getCodeEde())
  256.                 ->setCodeSiret($etablissement->getCodeSiret())
  257.                 ->setCommentaire($etablissement->getCommentaire())
  258.                 ->setDateCessation($etablissement->getDateCessation())
  259.                 ->setEmailBureau($etablissement->getEmailBureau())
  260.                 ->setSiegeSocial($etablissement->getSiegeSocial())
  261.                 ->setTelBureau1($etablissement->getTelBureau1())
  262.                 ->setTelBureau2($etablissement->getTelBureau2())
  263.             ;
  264.             $newFirm->addEtablissement($newEtablissement);
  265.         }
  266.         /** @var Contact $contact */
  267.         foreach ($entreprise->getContacts() as $contact) {
  268.             $newContact = new Contact();
  269.             $newContact
  270.                 ->setCommentaire($contact->getCommentaire())
  271.                 ->setNom($contact->getNom())
  272.                 ->setPrenom($contact->getPrenom())
  273.                 ->setAdresse($contact->getAdresse())
  274.                 ->setAdresse2($contact->getAdresse2())
  275.                 ->setCodePostal($contact->getCodePostal())
  276.                 ->setVille($contact->getVille())
  277.                 ->setUser(null)
  278.                 ->setIsResponsible($contact->getIsResponsible())
  279.                 ->setEmailContact($contact->getEmailContact())
  280.                 ->setTelPortable($contact->getTelPortable())
  281.                 ->setTelPortable2($contact->getTelPortable2())
  282.                 ->setTelBureau($contact->getTelBureau())
  283.                 ->setFirm($newFirm)
  284.                 ->setCivilite($contact->getCivilite())
  285.                 ->setDateNaissance($contact->getDateNaissance())
  286.                 ->setIsPrivileged($contact->getIsPrivileged())
  287.                 ->setSyndicatContacts($contact->getSyndicatContacts())
  288.                 ->setTypeContact($contact->getTypeContact())
  289.             ;
  290.             $newFirm->addContact($newContact);
  291.         }
  292.         $link = new LinkedFirm();
  293.         $link
  294.             ->setType($em->getRepository(FirmLinkReason::class)->find(2))
  295.             ->setDate(new DateTime())
  296.             ->setFromFirm($entreprise)
  297.             ->setToFirm($newFirm)
  298.         ;
  299.         $em->persist($newFirm);
  300.         $em->persist($link);
  301.         $em->flush();
  302.         $this->addFlash(
  303.             'success',
  304.             'Duplication effectuée avec succès'
  305.         );
  306.         return $this->redirectToRoute('show_entreprise', ['id' => $newFirm->getId()]);
  307.     }
  308.     #[Route('/entreprises/{id}/fusion'name'fusion_entreprise'methods: ['POST'])]
  309.     #[IsGranted('ROLE_ADMIN'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  310.     public function fusion(Entreprise $entrepriseRequest $requestEntityManagerInterface $em): RedirectResponse
  311.     {
  312.         $form $this->createForm(FirmFusionType::class);
  313.         $form->handleRequest($request);
  314.         if ($form->isSubmitted() && $form->isValid()) {
  315.             $linkedFirm = new LinkedFirm();
  316.             $linkedFirm
  317.                 ->setFromFirm($entreprise)
  318.                 ->setToFirm($form->get('toFirm')->getData())
  319.                 ->setDate($form->get('date')->getData())
  320.                 ->setType($form->get('type')->getData())
  321.                 ->setComment($form->get('comment')->getData())
  322.             ;
  323.             $entreprise->setStatus(Entreprise::STATUS_MERGED);
  324.             $em->persist($entreprise);
  325.             $em->persist($linkedFirm);
  326.             $em->flush();
  327.             $this->addFlash(
  328.                 'success',
  329.                 'Fusion effectuée avec succès'
  330.             );
  331.             return $this->redirectToRoute('show_entreprise', ['id' => $linkedFirm->getToFirm()->getId()]);
  332.         }
  333.         $this->addFlash(
  334.             'error',
  335.             'Aucune donnée envoyée'
  336.         );
  337.         return $this->redirectToRoute('show_entreprise', ['id' => $entreprise->getId()]);
  338.     }
  339. }