src/Controller/SubContractorController.php line 91

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\AssociatedMailUserService;
  4. use App\Entity\Service;
  5. use App\Entity\SignedContract;
  6. use App\Entity\SubContractorCompany;
  7. use App\Entity\SystemEmail;
  8. use App\Entity\UserData;
  9. use App\Enum\TypeSignedContract;
  10. use App\Event\ClientUpdatedEvent;
  11. use App\Entity\User;
  12. use App\Enum\ProductType;
  13. use App\Entity\NoteUser;
  14. use App\Enum\Role;
  15. use App\Event\AdminNotifiedSubContractorCompletedEvent;
  16. use App\Event\SubContractor\SubContractorCompletedProfileEvent;
  17. use App\Event\SubContractor\SubContractorServiceAddedEvent;
  18. use App\Event\SubContractor\SubContractorMarginProblemEvent;
  19. use App\Event\SubContractorUpdatedEvent;
  20. use App\Event\SubContractor\SubContractorActivatedEvent;
  21. use App\Event\SubContractorVigilanceCertificateAbsentEvent;
  22. use App\Service\ConfidentialityService;
  23. use App\Service\PdfService;
  24. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  25. use App\Form\SubContractorCompanyType;
  26. use App\Form\SubContractorType;
  27. use App\Form\NewSubContractorType;
  28. use App\Service\MyFlowMarginService;
  29. use App\Form\ServiceType;
  30. use App\Repository\CampaignRepository;
  31. use App\Repository\HistoriqueRepository;
  32. use App\Repository\JobRepository;
  33. use App\Repository\MessageRepository;
  34. use App\Repository\MissionParticipantRepository;
  35. use App\Repository\ProductRepository;
  36. use App\Repository\ServiceRepository;
  37. use App\Repository\SubContractorCompanyRepository;
  38. use App\Repository\CompanyRepository;
  39. use App\Repository\SystemEmailRepository;
  40. use App\Repository\UserRepository;
  41. use App\Repository\MissionRepository;
  42. use App\Repository\PortfolioRepository;
  43. use App\Service\ServiceService;
  44. use App\Service\ShortcodeService;
  45. use App\Service\UserService;
  46. use Doctrine\ORM\EntityManagerInterface;
  47. use Symfony\Bridge\Twig\Mime\NotificationEmail;
  48. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  49. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  50. use Symfony\Component\HttpFoundation\File\UploadedFile;
  51. use Symfony\Component\HttpFoundation\JsonResponse;
  52. use Symfony\Component\HttpFoundation\RedirectResponse;
  53. use Symfony\Component\HttpFoundation\Request;
  54. use Symfony\Component\HttpFoundation\Response;
  55. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  56. use Symfony\Component\Mailer\MailerInterface;
  57. use Symfony\Component\Mime\Address;
  58. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  59. use Symfony\Component\Routing\Annotation\Route;
  60. use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
  61. use Symfony\Component\Serializer\SerializerInterface;
  62. use App\Service\NumberFormatService;
  63. use App\Service\PortfolioSevice;
  64. use Twig\Environment;
  65. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  66. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  67. use Symfony\Component\HttpFoundation\StreamedResponse;
  68. use App\Entity\Company;
  69. use App\Service\DynamicHostService;
  70. use App\Form\NoteUserType;
  71. use  App\Enum\Note;
  72. class SubContractorController extends AbstractController
  73. {
  74.      public function __construct(
  75.         private NumberFormatService $numberFormatService,
  76.         private EventDispatcherInterface $dispatcher,
  77.         private Environment $twig,
  78.         private ConfidentialityService $confidentialityService,
  79.     )
  80.     {
  81.         
  82.     }
  83.     /**
  84.      * @param UserRepository $userRepository
  85.      * @return Response
  86.      */
  87.     #[Route('/admin/fournisseurs'name'sub_contractor_index'methods: ['GET'])]
  88.     public function index(UserRepository $userRepository): Response
  89.     {
  90.         $roleBot Role::ROLE_BOT->value;
  91.         $roleSub Role::ROLE_SUBCONTRACTOR->value;
  92.         $company $this->isGranted('ROLE_ADMIN_AGENCY') ? $this->getUser()->getCompany() : null;
  93.        
  94.         return $this->render('sub_contractor/index.html.twig', [
  95.             'subContractors' => $userRepository->findByRoleBotAndSubcontractorOrManager($roleBot,$roleSub,$company),
  96.             'company'   => $company,
  97.             'min_price' => "",
  98.             'max_price' => "",
  99.         ]);
  100.     }
  101.     /**
  102.      * @param User|null $user
  103.      * @param Service|null $service
  104.      * @param Request $request
  105.      * @param UserService $userService
  106.      * @param UserPasswordHasherInterface $hasher
  107.      * @param ServiceRepository $serviceRepository
  108.      * @param EntityManagerInterface $entityManager
  109.      * @return Response
  110.      */
  111.     #[Route('/admin/fournisseurs/ajouter'name'sub_contractor_new'methods: ['GET','POST'])]
  112.     #[Route('/admin/fournisseurs/{id}'name'sub_contractor_edit'methods: ['GET','POST'])]
  113.     #[Route('/mon-profil'name'my_profil'methods: ['GET','POST'])]
  114.     public function handleSubContractor(User $user null,ConfidentialityService $confidentialityServicePortfolioRepository $portfolioRepository,  PortfolioSevice $portflioSeviceService $service nullRequest $requestUserService $userServiceUserPasswordHasherInterface $hasherServiceRepository $serviceRepositoryEntityManagerInterface $entityManagerEventDispatcherInterface $dispatcherServiceService $serviceServiceSystemEmailRepository $systemEmailRepositoryShortcodeService $shortcodeServiceMailerInterface $mailerProductRepository $productRepository,MyFlowMarginService $myFlowMarginServiceParameterBagInterface $parameter,CompanyRepository $companyRepository,DynamicHostService $dynamicHostService,UserRepository $userRepository,AssociatedMailUserService $associatedMailUserService): Response
  115.     {
  116.         $currentUser $this->getUser();
  117.         $isNew false;
  118.         if($request->request->get('remove-my-account')!=null){
  119.             return $this->redirectToRoute('my_profil',[
  120.                 'confirm_account_deleted'=> true,
  121.             ]);
  122.         }
  123.         $oldPrice null;
  124.         if ($user === null && $this->isGranted('ROLE_ADMIN')){
  125.             $user = new User();
  126.             if ($this->isGranted('ROLE_ADMIN_AGENCY')) {
  127.                 $user->setCompany($this->getUser()->getCompany());
  128.             }
  129.             
  130.             $servicesSubContractor null;
  131.             $isNew true;
  132.         }elseif ($this->isGranted('ROLE_ADMIN')){
  133.             $servicesSubContractor $serviceRepository->findBy(['user' => $user->getId(),'template'=>true]);
  134.         }else{
  135.             $user $this->getUser();
  136.             $oldPrice $user->getDailyRate();
  137.             $servicesSubContractor =  $serviceRepository->findBy(['user' => $user->getId(),'template'=>true]);
  138.         }
  139.         $currentRoute $request->attributes->get('_route');
  140.         $isadminAgency false;
  141.         $isManager false;
  142.         if (in_array("ROLE_ADMIN_AGENCY"$this->getUser()->getRoles())) {
  143.               
  144.                  $isadminAgency true;
  145.             }
  146.         if (in_array("ROLE_MANAGER"$this->getUser()->getRoles())) {
  147.                  $isManager true;
  148.             }
  149.         if ($user === null){
  150.             $typeAction =  'new';
  151.             $user = new User();
  152.             if (in_array("ROLE_ADMIN_AGENCY"$this->getUser()->getRoles())) {
  153.                  $user->setCompany($this->getUser()->getCompany());
  154.                  $isadminAgency true;
  155.             }
  156.             
  157.            
  158.         }
  159.         $manager null;
  160.         $managerOrigin null;
  161.         $partner null;
  162.         $partnerOrigin null;
  163.         $salary null;
  164.         $salaryOrigin null;
  165.         
  166.         if ($request->attributes->get('_route') == 'sub_contractor_edit') {
  167.             //Detect if user in children
  168.             foreach ($user->getChildren() as $userChild) {
  169.                 if (in_array('ROLE_MANAGER'$userChild->getRoles()) ) {
  170.                     $manager true;
  171.                 }
  172.             }
  173.         }
  174.         $originalUser = clone($user);
  175.         $otherCompanyOrigin $originalUser->getOtherCompany();
  176.         foreach ($otherCompanyOrigin as $key => $c) {
  177.             $user->addOtherCompany($c);
  178.         }
  179.         //dd($otherCompanyOrigin);
  180.         $company $dynamicHostService->getCompany();
  181.         $oldDailyRate $user->getDailyRate();
  182.         $form $this->createForm(SubContractorType::class, $user, [
  183.             'admin' => $this->isGranted('ROLE_ADMIN'),
  184.             'subcontractor' => $this->isGranted('ROLE_SUBCONTRACTOR'),
  185.             'isadminAgency'=>$isadminAgency,'isManager'=>$isManager,
  186.             'manager'=>$manager,
  187.             'partner'=>$partner,
  188.             'salary'=>$salary,
  189.             'currentRoute'=>$request->attributes->get('_route'),
  190.             'mail_alias_default' => implode(','$user->getMailAlias() ?? []),
  191.         ]);
  192.         
  193.         $entityManager $this->getDoctrine()->getManager();
  194.         $form->handleRequest($request);
  195.         $allUserFile = [];
  196.         
  197.         if ($form->isSubmitted() && $form->isValid()) {
  198.             $data  $form->getData();
  199.             //when subcontractor manually modify the dailyRate , automatically change the resaleRate with the ratio kept
  200.             if ($data->getDailyRate() != $oldDailyRate && $this->isGranted('ROLE_SUBCONTRACTOR')) {
  201.                 $resaleRateWithRatios $userService->resaleRateWithRatio($oldDailyRate,$data->getResaleRate(),$data->getDailyRate());
  202.                 $data->setResaleRate($resaleRateWithRatios);
  203.             }
  204.             //
  205.             $dataInMapped $request->request->all();
  206.             $notePrivate $dataInMapped['note_user_private']['content'] ?? null;
  207.          
  208.             if (!is_null($notePrivate) and !empty($notePrivate) ) {
  209.                 $newNote = new NoteUser();
  210.                 $newNote->setContent($notePrivate);
  211.                 $newNote->setCreatedAt(new \DateTime());
  212.                 $newNote->setUserToCommented($this->getUser());
  213.                 $newNote->setType(Note::NOTE_PRIVATE->value);
  214.                 $entityManager->persist($newNote);
  215.                 $entityManager->flush();
  216.                 $data->addNoteUser($newNote);
  217.             }
  218.             $emailsString $form->get('mailAliasOtherForm')->getData();  // Champ non mappé
  219.             if (!is_null($emailsString) and !empty($emailsString)) {
  220.                 $emailsArray array_map('trim'explode(','$emailsString));
  221.                 if (is_array($emailsArray) and !empty($emailsString)) {
  222.                     $data->setMailAlias($emailsArray);
  223.                 }
  224.             }
  225.             //verirify if user already exist
  226.             $userExistInSameDomaine  $userRepository->getUniqUserByCompanyByEmailForSubClientManager($user->getEmail(),$company);
  227.             if (!is_null($userExistInSameDomaine) and $request->get('_route') === 'sub_contractor_new') {
  228.                 $this->addFlash('error'"L'utilisateur que vous tentez de créer existe déjà.");
  229.                 return $this->redirectToRoute('sub_contractor_new', [], Response::HTTP_SEE_OTHER);
  230.             }
  231.             $userExist $entityManager->getRepository(User::class)->findOneBy(['email'=>$user->getEmail()]);
  232.             //si pas de selection donc il faut mettre partener par defaut
  233.             if (!$data->getPartner() and !$data->getSalary() and !$data->getManager()) {
  234.                 $form->getData()->setPartner(1);
  235.             }
  236.             $newPrice $form->getData()->getDailyRate();
  237.             $isBot = isset($request->request->all()['sub_contractor']['bot']) ? truefalse;
  238.             //determine a ROLE
  239.             $isManager false;
  240.             if ($data->getManager()) {
  241.                 $roles = [Role::ROLE_MANAGER->value];
  242.                 $isManager true;
  243.             }else{
  244.                 $roles = ($isBot) ? [Role::ROLE_BOT->value] : [Role::ROLE_SUBCONTRACTOR->value];
  245.             }
  246.             //end detection ROLE
  247.             $path "file_user_directory";
  248.             $file $form['userData']['VigilanceCertificateFile']->getData();
  249.             if (!is_null($file)) {
  250.                 $destination =  $parameter->get($path);
  251.                 if (!is_dir($destination)) {
  252.                     mkdir($destination0755true);
  253.                 }
  254.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  255.                 $newFilename $originalFilename '-' uniqid() . '.' $file->guessExtension();
  256.                 $file->move(
  257.                     $destination,
  258.                     $newFilename
  259.                 );
  260.                 //save file vigilence in data (name of file / date insertion)
  261.                 $allUserFile  =  $user->getUserData()->getVigilanceCertificate();
  262.                 $allUserFile [] = [
  263.                     'name' => $newFilename,
  264.                     'shortName' => mb_substr($newFilename040)."...",
  265.                     'dateInsert' => new \Datetime()
  266.                 ];
  267.                 if($user->getUserData()->getStateCompany() === 'fr'){
  268.                     $this->updateUserDataDateCertificate($user->getUserData());
  269.                     $user->getUserData()->setVigilanceCertificate($allUserFile);
  270.                 }
  271.             }
  272.             //inject other company
  273.             $companyForManager $form->getData()->getOtherCompany();
  274.             if ($form->getData()->getAllCompany() == true) {
  275.                $companyForManager $entityManager->getRepository(Company::class)->getAllCompanyMyFlowOrAgency($dynamicHostService);
  276.             }
  277.             foreach ($companyForManager as $company) {
  278.                $user->addOtherCompany($company);
  279.                $entityManager->persist($user);
  280.             }
  281.             
  282.             if ($request->get('_route') === 'sub_contractor_new') {
  283.                
  284.                   //si pas de notification par chat tout les jours alors mettre par défaut.
  285.                 $freqNotificationEverytime $form->getData()->getFreqNotificationEverytime();
  286.                 if(!in_array("0"$freqNotificationEverytime)){
  287.                     $freqNotificationEverytime[] = 0;
  288.                     $form->getData()->setFreqNotificationEverytime($freqNotificationEverytime);
  289.                 }
  290.             }
  291.             //si parent existe il faut creez l'enfant donc avec le company
  292.             if ($request->get('_route') === 'sub_contractor_new' and !is_null($userExist)) {
  293.                 $company $currentUser?->getCompany();
  294.                 $user->setCompany($company)->setRoles($roles);
  295.                 $userExist->addChild($user);
  296.                 $notification true;
  297.                 $entityManager->flush();
  298.                 if ($isManager) {
  299.                     $this->addFlash('success''Le gestionnaire a bien été ajouté');
  300.                 }else{
  301.                     $this->addFlash('success''L\'intervenant opérationnel a bien été ajouté');
  302.                 }
  303.             }//sinon faire 
  304.             else if ($request->get('_route') === 'sub_contractor_new' and is_null($userExist)) {
  305.                 if (!empty($form->getData()->getPlainPassword())){
  306.                     $hashedPassword $hasher->hashPassword($user$form->getData()->getPlainPassword());
  307.                 }else{
  308.                     $password $userService->generatePassword();
  309.                     $hashedPassword $hasher->hashPassword($user$password);
  310.                 }
  311.                 
  312.                 $user->setBillingMethod(2);
  313.                 $user->setPassword($hashedPassword)
  314.                         ->setRoles($roles)
  315.                         ->setEnabled(false);
  316.                 $entityManager->persist($user);
  317.                 if ($isManager) {
  318.                     $this->addFlash('success''Le gestionnaire a bien été ajouté');
  319.                 }else{
  320.                     $this->addFlash('success''L\'intervenant opérationnel a bien été ajouté');
  321.                 }
  322.                 $notification true;
  323.                 $entityManager->flush();
  324.             } else {
  325.                 if (!empty($form->getData()->getPlainPassword())){
  326.                     $hashedPassword $hasher->hashPassword($user$form->getData()->getPlainPassword());
  327.                     $user->setPassword($hashedPassword);
  328.                 }
  329.                 $user->setRoles($roles);
  330.                 if ($isManager) {
  331.                     $this->addFlash('success''Le gestionnaire a bien été modifié');
  332.                 }else{
  333.                     $this->addFlash('success'"L'utilisateur a bien été modifié");
  334.                 }
  335.                 $notification false;
  336.                 if (!empty($oldPrice) && $oldPrice != $newPrice  && $this->isGranted('ROLE_SUBCONTRACTOR')) {
  337.                     $user->setResaleRate($myFlowMarginService->recalculateResaleRate($oldPrice,$user$originalUser));
  338.                 }
  339.                 $entityManager->flush();
  340.             }
  341.             $user->setPicture(null);
  342.             // dispatch the subonctractor.updated event
  343.             if ($request->get('_route') === 'sub_contractor_new' and $isManager) {
  344.                 // dispatch the manager event
  345.                 $event = new ClientUpdatedEvent($user$notification);
  346.                 $dispatcher->dispatch($eventClientUpdatedEvent::NAME);
  347.             }else{
  348.                 // dispatch the subonctractor.updated event
  349.                 $event = new SubContractorUpdatedEvent($user$notificationfalsefalse);
  350.                 $dispatcher->dispatch($eventSubContractorUpdatedEvent::NAME);
  351.             }
  352.             $confidentialityService->renegereSignedContract($user);
  353.             
  354.             if ($this->isGranted('ROLE_ADMIN')){
  355.                 return $this->redirectToRoute('sub_contractor_edit', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
  356.             }else{
  357.                 //$event = new AdminNotifiedSubContractorCompletedEvent($user);
  358.                 //$dispatcher->dispatch($event, AdminNotifiedSubContractorCompletedEvent::NAME);
  359.                 return $this->redirectToRoute('mission_index', []);
  360.             }
  361.         }
  362.        
  363.         $form2 $this->createForm(ServiceType::class, new Service, ['admin' => $this->isGranted('ROLE_ADMIN'), 'subContractor' => $user] );
  364.         $form2->handleRequest($request);
  365.         if ($form2->isSubmitted() && $form2->isValid()){
  366.             $serviceId $request->request->get('service')['serviceId'];
  367.             $findService $serviceRepository->findOneBy(['id' => $serviceId]);
  368.             $servicesPerUser $serviceRepository->findAllServiceByUser($user);
  369.             $findProduct $productRepository->findOneBy(['id' => $form2->getData()->getProduct()->getId()]);
  370.            
  371.             if (empty($findService)) {
  372.                 $service = new Service();
  373.                 $service->setTemplate(1);
  374.                 $service->setPrice($form2->getData()->getPrice())
  375.                         ->setProduct($form2->getData()->getProduct())
  376.                         ->setResale($findProduct->getPrice())
  377.                         ->setUser($user);
  378.                 foreach ($servicesPerUser as $serviceUser){
  379.                     if ($serviceUser->getProduct() === $form2->getData()->getProduct()) {
  380.                         $this->addFlash('error''Le service existe déjà pour cet utilisateur');
  381.                         if ($this->isGranted('ROLE_ADMIN')){
  382.                             return $this->redirectToRoute('sub_contractor_edit', [
  383.                                     'id' => $user->getId(),
  384.                                     'serviceAdd' => true,
  385.                                 ], Response::HTTP_SEE_OTHER);
  386.                         }else{
  387.                             return $this->redirectToRoute('my_profil', ['serviceAdd' => true], Response::HTTP_SEE_OTHER);
  388.                         }
  389.                     }
  390.                 }
  391.                 if ($user->getBillingMethod() == 2){
  392.                     $event = new SubContractorServiceAddedEvent($user);
  393.                     $dispatcher->dispatch($eventSubContractorServiceAddedEvent::NAME);
  394.                 }
  395.                 $this->addFlash('success''Le produit a bien été associé');
  396.             } else {
  397.                 $service $findService;
  398.                 foreach ($servicesPerUser as $serviceUser) {
  399.                     if ($serviceUser->getProduct() !== $service->getProduct() && $serviceUser->getProduct() === $form2->getData()->getProduct()) {
  400.                         $this->addFlash('error''Le service existe déjà pour cet utilisateur');
  401.                         if ($this->isGranted('ROLE_ADMIN')){
  402.                              return $this->redirectToRoute('sub_contractor_edit', [
  403.                                     'id' => $user->getId(),
  404.                                     'serviceAdd' => true,
  405.                                 ], Response::HTTP_SEE_OTHER);
  406.                         }else{
  407.                              return $this->redirectToRoute('my_profil', ['serviceAdd' => true], Response::HTTP_SEE_OTHER);
  408.                         }
  409.                     }
  410.                 }
  411.                 $service->setPrice($form2->getData()->getPrice())
  412.                     ->setProduct($form2->getData()->getProduct())
  413.                     ->setResale($findProduct->getPrice())
  414.                     ->setUser($user);
  415.                 $this->addFlash('success''Le service a bien été modifié');
  416.             }
  417.             $entityManager->persist($service);
  418.             $entityManager->flush();
  419.             $this->checkMarge($myFlowMarginService,$entityManager,$user,$service,null);
  420.             if ($this->isGranted('ROLE_ADMIN')){
  421.                 return $this->redirectToRoute('sub_contractor_edit', [
  422.                     'id' => $user->getId(),
  423.                     'serviceAdd' => true,
  424.                 ], Response::HTTP_SEE_OTHER);
  425.             } else {
  426.                 return $this->redirectToRoute('my_profil', ['serviceAdd' => true], Response::HTTP_SEE_OTHER);
  427.             }
  428.         }
  429.         $handleCompanyJobsForm $this->createForm(SubContractorCompanyType::class);
  430.         $portfolios $portfolioRepository->findBy(['user'=>$user]);
  431.         
  432.         
  433.         return $this->renderForm('sub_contractor/handle.html.twig', [
  434.             'form' => $form,
  435.             'form2' => $form2,
  436.             'user' => $user,
  437.             'servicesSubContractor' => $servicesSubContractor,
  438.             'service' => $this->getUser(),
  439.             'handleCompanyJobsForm' => $handleCompanyJobsForm,
  440.             'isNew' => $isNew,
  441.             'portfolioCategory' => $portflioSevice->getPorfolioCategory(),
  442.             'portfolios'=> $portfolios,
  443.             'profil_link'=> "{$parameter->get('front_website_url')}/detail-expert/?id={$user->getId()}&full-name={$user->getFullName()}"
  444.         ]);
  445.     }
  446.     public function checkMarge(MyFlowMarginService $myFlowMarginService,EntityManagerInterface $entityManager,$user,$service null,$type "TJM"){
  447.         $subContractorCompanys $user->getSubContractorCompanies();
  448.         $chekMailisToSend false;
  449.         foreach ($subContractorCompanys as $subContractorCompany){
  450.             $company $subContractorCompany->getCompany();
  451.             $userCompany $subContractorCompany->getUser();
  452.            
  453.             if ($type == "TJM") {
  454.                 $currentMarge $this->numberFormatService->format($myFlowMarginService->getMargeTJM($user));
  455.                  $content "L'intervenant opérationnel {$user->getLastname()} {$user->getFirstname()} a modifié son Tarif journalier en {$user->getDailyRate()} € ,pour cela il a été détaché de l'entreprise {$company->getName()}.
  456.                     Nouveau TJM de l'intervenant opérationnel : {$user->getDailyRate()} €
  457.                     Marge pas respectez : $currentMarge %
  458.                     ";
  459.             }else{
  460.                 $currentMarge $this->numberFormatService->format($myFlowMarginService->getMarge($service$company));
  461.                  $content "L'intervenant opérationnel {$user->getLastname()} {$user->getFirstname()} a modifié son prix pour le produit {$service->getProduct()->getName()} ,pour cela il a été détaché de l'entreprise {$company->getName()}.
  462.                         Nouveau prix pour le  produit: {$service->getProduct()->getPrice()} €
  463.                         Marge pas respectez : $currentMarge %
  464.                     ";
  465.             }
  466.             
  467.             if ($currentMarge 30 && $userCompany->getId() == $this->getUser()->getId()){
  468.                 $entityManager->remove($subContractorCompany);
  469.                 $entityManager->flush();
  470.                 $chekMailisToSend true;
  471.             }
  472.         }
  473.         //send mail
  474.         if ($chekMailisToSend) {
  475.            $event = new subContractorMarginProblemEvent($user,$content);
  476.            $this->dispatcher->dispatch($eventsubContractorMarginProblemEvent::NAME);
  477.         }
  478.     }
  479.     /**
  480.      * @param Service $service
  481.      * @param Request $request
  482.      * @param EntityManagerInterface $entityManager
  483.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  484.      */
  485.     #[Route('/service/{id}/supprimer'name'service_remove'methods: ['GET','POST'])]
  486.     public function deleteService(Service $serviceRequest $requestEntityManagerInterface $entityManager)
  487.     {
  488.         if ($this->isCsrfTokenValid('delete'.$service->getId(), $request->request->get('_token'))) {
  489.             $entityManager->remove($service);
  490.             $entityManager->flush();
  491.             $this->addFlash(
  492.                 'success',
  493.                 'Le service a bien été supprimé'
  494.             );
  495.         }
  496.         if ($this->isGranted('ROLE_ADMIN')) {
  497.             return $this->redirectToRoute('sub_contractor_edit', [
  498.                 'id' => $service->getUser()->getId(),
  499.                 'serviceAdd' => true,
  500.             ], Response::HTTP_SEE_OTHER);
  501.         } else {
  502.             return $this->redirectToRoute('my_profil', ['serviceAdd' => true], Response::HTTP_SEE_OTHER);
  503.         }
  504.     }
  505.     /**
  506.      * @param Service $service
  507.      * @param SerializerInterface $serializer
  508.      * @return JsonResponse
  509.      */
  510.     #[Route('/service/{id}'name'service_action_get')]
  511.     public function getService(Service $serviceSerializerInterface $serializer): JsonResponse
  512.     {
  513.         return new JsonResponse([
  514.             'service' => json_decode($serializer->serialize($service'json', [
  515.                 AbstractNormalizer::ATTRIBUTES => [
  516.                     'id',
  517.                     'price',
  518.                     'product' => [
  519.                         'id','name'
  520.                     ],
  521.                     'resale',
  522.                 ]
  523.             ])),
  524.         ]);
  525.     }
  526.     #[Route('/api/subcontractors/{id}'name'api_edit_subcontractor'methods: ['POST'])]
  527.     public function apiEditClient($idRequest $request,PdfService $pdfServiceUserPasswordHasherInterface $passwordHasherEntityManagerInterface $entityManagerEventDispatcherInterface $dispatcherJobRepository $jobRepositoryProductRepository $productRepository,UserRepository $userRepository,UserService $userService): JsonResponse
  528.     {
  529.         if ($id == "null") {
  530.             $user = new User;
  531.             $user->setUserData(null);
  532.             $userCheck $userRepository->findByEmail($request->request->get('email'));
  533.             if (!empty($userCheck)) {
  534.                 //verification si deja existant
  535.                 return new JsonResponse(['result' => 'alreadyexist']);
  536.             }
  537.             $user->setEmail($request->request->get('email'));
  538.             $user->setRoles(['ROLE_SUBCONTRACTOR']);
  539.             $user->setPartner(true);
  540.             $oldDailyRate 0;
  541.         }else{
  542.             $user $userRepository->find($id);
  543.             $oldDailyRate $user->getDailyRate();
  544.         }
  545.         $user->setFirstname($request->request->get('firstname'));
  546.         $user->setLastname($request->request->get('lastname'));
  547.         //$user->setEmail($request->request->get('email'));
  548.         $user->setCellPhone($request->request->get('cellPhone'));
  549.         $user->setEnabled(true);
  550.         $user->setGender($request->request->get('gender'));
  551.         $hashedPassword $passwordHasher->hashPassword($user$request->request->get('password'));
  552.         $user->setPassword($hashedPassword);
  553.         $dailyRate = empty($request->request->get('dailyRate')) ? $request->request->get('dailyRate');
  554.         $user->setDailyRate($dailyRate);
  555.         if (($user->getResaleRate() == null or $user->getResaleRate() == 0) or $oldDailyRate == 0) {
  556.             $resaleRate $dailyRate + ($dailyRate 0.3);
  557.         }else{
  558.             $resaleRate $userService->resaleRateWithRatio($oldDailyRate,$user->getResaleRate(),$user->getDailyRate());
  559.         }
  560.         $user->setResaleRate($resaleRate);
  561.         $jobsUser =  $user->getJobs();
  562.         foreach ($jobsUser as  $value) {
  563.             $user->removeJob($value);
  564.         }
  565.         if (!empty($request->request->get('jobs'))) {
  566.             foreach ($request->request->get('jobs') as $job) {
  567.                 $job $jobRepository->find($job);
  568.                 if (null !== $job) {
  569.                     $user->addJob($job);
  570.                 }
  571.             }
  572.         }
  573.         $prices $request->request->get('prices');
  574.         if($prices!= null){
  575.             foreach ($prices as $productId => $price) {
  576.                 $product $productRepository->findOneBy(['frontId' => $productId]);
  577.     
  578.                 if (null !== $product) {
  579.                     $s = (new Service())
  580.                         ->setUser($user)
  581.                         ->setProduct($product)
  582.                         ->setPrice($price)
  583.                         ->setTemplate(1)
  584.                         ;
  585.                     if ($product->getType() === ProductType::AU_FORFAIT) {
  586.                         $s->setResale($product->getPrice());
  587.                     }
  588.     
  589.                     $entityManager->persist($s);
  590.                 }
  591.             }
  592.         }
  593.         $status $request->request->get('status');
  594.         $tva $request->request->get('tva');
  595.         $siren = !empty($request->request->get('numero_de_siren')) ?$request->request->get('numero_de_siren') : null;
  596.         $city = !empty($request->request->get('city')) ? $request->request->get('city') : null;
  597.         $adresse = !empty($request->request->get('adresse')) ?$request->request->get('adresse') : null;
  598.         $country = !empty($request->request->get('pays')) ?$request->request->get('pays') : null;
  599.         $rib = !empty($request->request->get('rib')) ?$request->request->get('rib') : null;
  600.         $iban = !empty($request->request->get('IBAN')) ?$request->request->get('IBAN') : null;
  601.         $bic_swift = !empty($request->request->get('bic_swift')) ?$request->request->get('bic_swift') : null;
  602.         $tva_entreprise = !empty($request->request->get('tva_entreprise')) ?$request->request->get('tva_entreprise') : null;
  603.         $companyName = !empty($request->request->get('companyName')) ?$request->request->get('companyName') : "";
  604.         $paysEntreprise = !empty($request->request->get('pays_entreprise')) ? $request->request->get('pays_entreprise') : null;
  605.         $language = !empty($request->request->get('langues_parlees')) ? explode(",",rtrim($request->request->get('langues_parlees'),','))  : [];
  606.         $allLanguages = [];
  607.         if (!is_null($language) and !empty($language)) {
  608.             foreach ($language as $key => $value) {
  609.                 if (!empty($value)) {
  610.                     $allLanguages [] = $value;
  611.                 }
  612.             }
  613.         }
  614.         //add new ifnformations
  615.          
  616.         
  617.             if( $user->getUserData() == null){
  618.                 $userData = new UserData();
  619.                 $user->setUserData($userData);
  620.             }
  621.       
  622.         $user->getUserData()->setStatus($status);
  623.         $user->getUserData()->setTva($tva);
  624.         $user->getUserData()->setCity($city);
  625.         $user->getUserData()->setSiren($siren);
  626.         $user->getUserData()->setAddress($adresse);
  627.         $user->getUserData()->setCountry($country);
  628.         $user->getUserData()->setSpokenLanguages($allLanguages);
  629.         $user->getUserData()->setRIB($rib);
  630.         $user->getUserData()->setIBAN($iban);
  631.         $user->getUserData()->setBicSwift($bic_swift);
  632.         $user->getUserData()->setIntracommunityTva($tva_entreprise);
  633.         $user->getUserData()->setCompanyName($companyName);
  634.         $user->getUserData()->setStateCompany($paysEntreprise);
  635.         //end 
  636.         mail("sdfsdfsfdsdfsdffff@yopmail.com""subject""0");
  637.         $entityManager->flush();
  638.         mail("sdfsdfsfdsdfsdffff@yopmail.com""subject""1");
  639.        
  640.        
  641.         $event = new SubContractorCompletedProfileEvent($usertruetrue);
  642.         $dispatcher->dispatch($eventSubContractorCompletedProfileEvent::NAME);
  643.         mail("sdfsdfsfdsdfsdffff@yopmail.com""subject""1");
  644.         $event = new SubContractorUpdatedEvent($userfalsetruefalse);
  645.         $dispatcher->dispatch($eventSubContractorUpdatedEvent::NAME);
  646.         $this->confidentialityService->addSignedContractSubcontractor($usertruetruetrue);
  647.         return new JsonResponse(['result' => 'success']);
  648.     }
  649.     #[Route('/api/subcontractors/{email}/profile-picture'name'api_edit_subcontractor_profile_picture'methods: ['POST'])]
  650.     public function apiEditClientProfilePicture($emailRequest $requestEntityManagerInterface $entityManager,ParameterBagInterface $parameter,EventDispatcherInterface $dispatcher,CampaignRepository $campaignRepository,UserRepository $userRepository): JsonResponse
  651.     {
  652.         $userByEmail $userRepository->findByEmail($email);
  653.         $user $userByEmail[0];
  654.         if (!empty($request->files->get('picture'))) {
  655.             $user->setPicture($request->files->get('picture'));
  656.         }
  657.             
  658.         if (!empty($request->files->get('vigilence'))) {
  659.             $file $request->files->get('vigilence');
  660.             //insertion picture vigilence
  661.             $path "file_user_directory";
  662.             $allUserFile = [];
  663.             if (!is_null($file)) {
  664.               
  665.                 try{
  666.                      $destination =  $parameter->get($path);
  667.                 if (!is_dir($destination)) {
  668.                     mkdir($destination0755true);
  669.                 }
  670.                 $originalFilename pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
  671.                 $newFilename $originalFilename '-' uniqid() . '.' $file->guessExtension();
  672.                 $file->move(
  673.                     $destination,
  674.                     $newFilename
  675.                 );
  676.                 //save file vigilence in data (name of file / date insertion)
  677.                 $allUserFile    =  $user->getUserData()->getVigilanceCertificate();
  678.                 $allUserFile [] = [
  679.                     'name' => $newFilename,
  680.                     'shortName' => mb_substr($newFilename040)."...",
  681.                     'dateInsert' => new \Datetime()
  682.                 ];
  683.                 $this->updateUserDataDateCertificate($user->getUserData());
  684.                 $user->getUserData()->setVigilanceCertificate($allUserFile);
  685.                 }catch(\Exception $e){
  686.                     mail("anthony@softibox.com""erreur upload certificat de vigilence"$e->getMessage());
  687.                 }
  688.                 catch(\Error $e){
  689.                     mail("anthony@softibox.com""erreur upload certificat de vigilence"$e->getMessage());
  690.                 }
  691.             }
  692.         }else{
  693.             
  694.             if (!empty($request->request->get('pays'))) {
  695.                 $pays $request->request->get('pays');
  696.                 if ($pays == 'fr') {
  697.                     $sendSubcontractorNotification true;
  698.                     $event = new SubContractorVigilanceCertificateAbsentEvent($user,$sendSubcontractorNotification);
  699.                     $dispatcher->dispatch($event,SubContractorVigilanceCertificateAbsentEvent::NAME);
  700.                 }
  701.             }
  702.             
  703.         }
  704.         $entityManager->flush();
  705.         return new JsonResponse(['result' => 'success']);
  706.     }
  707.     #[Route('/api/subcontractors/{id}/delete-profile-picture'name'api_delete_subcontractor_profile_picture'methods: ['POST'])]
  708.     public function apiDeleteSubcontractorProfilePicture(User $userRequest $requestEntityManagerInterface $entityManager): JsonResponse
  709.     {
  710.         try {
  711.             $user->setPictureName('');
  712.             $entityManager->flush();
  713.             return new JsonResponse(['result' => 'success']);
  714.         } catch (\Exception $e) {
  715.             return new JsonResponse(['result' => 'failure''message' => $e->getMessage()]);
  716.         }
  717.     }
  718.     #[Route('/admin/fournisseurs/{subContractorId}/liens/{linkId}/supprimer'name'sub_contractor_delete_link'methods: ['GET'])]
  719.     public function deleteLinkToCompany(string $subContractorIdstring $linkIdUserRepository $userRepositorySubContractorCompanyRepository $subContractorCompanyRepositoryEntityManagerInterface $entityManagerRequest $requestEventDispatcherInterface $dispatcher): Response
  720.     {
  721.         $user $userRepository->find($subContractorId);
  722.         $link $subContractorCompanyRepository->find($linkId);
  723.         if (null === $user || null === $link) {
  724.             throw new NotFoundHttpException();
  725.         }
  726.         $entityManager->remove($link);
  727.         $entityManager->flush();
  728.         $event = new SubContractorUpdatedEvent($user);
  729.         $dispatcher->dispatch($eventSubContractorUpdatedEvent::NAME);
  730.         $this->addFlash(
  731.             type'success',
  732.             message'L\'association entre l\'intervenant opérationnel et l\'entreprise a bien été supprimée',
  733.         );
  734.         return $this->redirect($request->headers->get('referer'), Response::HTTP_SEE_OTHER);
  735.     }
  736.     #[Route('/admin/fournisseurs/{id}/delete'name'sub_contractor_delete'methods: ['GET'])]
  737.     public function subContractorDelete (Request $request,UserService $userServiceEntityManagerInterface $entityManager,EventDispatcherInterface $dispatcherServiceRepository $serviceRepositoryMissionParticipantRepository $missionParticipantRepositoryHistoriqueRepository $historiqueRepositoryMessageRepository $messageRepositorySubContractorCompanyRepository $subContractorCompanyRepository,  User $user){
  738.   
  739.        
  740.         $user=$userService->delete($user);
  741.         $event = new SubContractorUpdatedEvent($user);
  742.         $dispatcher->dispatch($eventSubContractorUpdatedEvent::NAME);
  743.         $this->addFlash(
  744.             type'success',
  745.             message'L\'intervenant opérationnel à bien été supprimé',
  746.         );
  747.         return $this->redirect($request->headers->get('referer'));
  748.     }
  749.     #[Route('/admin/fournisseurs/{subContractor}/jobs/{jobs}'name'subcontractor_edit_jobs'methods: ['POST'])]
  750.     public function editCompanyJobs(User $subContractorSubContractorCompany $jobsRequest $requestEntityManagerInterface $entityManager): RedirectResponse
  751.     {
  752.         $form $this->createForm(SubContractorCompanyType::class, $jobs);
  753.         $form->handleRequest($request);
  754.         if ($form->isSubmitted() && $form->isValid()) {
  755.             $entityManager->flush();
  756.             $this->addFlash(
  757.                 type'success',
  758.                 message'L\'association au client a bien été mis à jour',
  759.             );
  760.         } elseif ($form->isSubmitted()) {
  761.             $this->addFlash(
  762.                 type'error',
  763.                 message'Une erreur a eu lieu, merci de réessayer',
  764.             );
  765.         }
  766.         return $this->redirect($request->headers->get('referer'));
  767.     }
  768.     #[Route('/fournisseur/remove/{id}'name'sub_contractor_remove'methods: ['POST','GET'])]
  769.     public function removeSubContractor(Request $request,EventDispatcherInterface $dispatcher,User $userUserService $userService,  EntityManagerInterface $entityManagerServiceRepository $serviceRepositoryMissionParticipantRepository $missionParticipantRepositoryHistoriqueRepository $historiqueRepositoryMessageRepository $messageRepositorySubContractorCompanyRepository $subContractorCompanyRepository)
  770.     {
  771.        
  772.         $user $userService->delete($user);
  773.         $event = new SubContractorUpdatedEvent($user);
  774.         $dispatcher->dispatch($eventSubContractorUpdatedEvent::NAME);
  775.         $this->addFlash(
  776.             type'success',
  777.             message'Votre compte à bien été supprimé',
  778.         );
  779.         return $this->redirect($request->headers->get('referer'));
  780.     }
  781.     #[Route('/admin/fournisseurs/{id}/renvoie-email-inscription'name'sub_contractor_resend_registration_email'methods: ['GET','POST'])]
  782.     public function resendRegistrationEmail(Request $requestUser $userEventDispatcherInterface $dispatcher)
  783.     {
  784.         if (in_array("ROLE_MANAGER"$user->getRoles())) {
  785.             $event = new ClientUpdatedEvent($usertrue);
  786.             $dispatcher->dispatch($eventClientUpdatedEvent::NAME);
  787.         }else{
  788.             $event = new SubContractorUpdatedEvent($usertrue);
  789.             $dispatcher->dispatch($eventSubContractorUpdatedEvent::NAME);
  790.         }
  791.         $this->addFlash(
  792.             type'success',
  793.             message'L\'email d\'inscription a bien été envoyé',
  794.         );
  795.         return $this->redirect($request->headers->get('referer'));
  796.     }
  797.     #[Route('/admin/mission/{id}/in-progress'name'list_mission_in_progress'methods: ['GET'])]
  798.     public function getMissionInProgressForSubcontractor(User $userMissionRepository $missionRepositoryRequest $request  ){
  799.         
  800.          return $this->render('services/mission_not_in_progress.html.twig',[
  801.                 'missions_in_progress'=>$missionRepository->getMissionInProgressForSubcontractor($user)
  802.          ]);
  803.     }
  804.     #[Route('/admin/fourniseurs/export/{type}'name'sub_contractor_export'methods: ['GET'])]
  805.     public function subcontractorExport(string $typeUserRepository $userRepositoryRequest $request){
  806.         
  807.         $users$userRepository->findUserBytype($type);
  808.        
  809.         $spreadsheet = new  Spreadsheet();
  810.         // Get active sheet - it is also possible to retrieve a specific sheet
  811.         $sheet $spreadsheet->getActiveSheet();
  812.         
  813.         $title $type == "subcontractor" "liste des intervenant operationnel" "liste des clients";
  814.         // Set cell name and merge cells
  815.         $sheet->setCellValue('A1'$title)->mergeCells('A1:D1');
  816.         $sheet->setCellValue('A2''total')->mergeCells('A1:D1');
  817.         $sheet->setCellValue('B2'sizeof($users));
  818.     
  819.         // Set column names
  820.         $columnNames = ['NOM''PRENOM''TELEPHONE','EMAIL''STATUT','ENTREPRISE','GENRE','DATE D\'INSCRIPTION','NEWSLETTER'];
  821.         $columnLetter 'A';
  822.         foreach ($columnNames as $columnName) {
  823.             // Allow to access AA column if needed and more
  824.             
  825.             $sheet->setCellValue($columnLetter.'3'$columnName);
  826.             ++$columnLetter;
  827.         }
  828.     
  829.         // Add data for each column
  830.         
  831.         $columnValues $this->formatUserToExportCsv($users) ;
  832.     
  833.         $i 4// Beginning row for active sheet
  834.         foreach ($columnValues as $columnValue) {
  835.             $columnLetter 'A';
  836.             foreach ($columnValue as $value) {
  837.            
  838.                 $sheet->setCellValue($columnLetter.$i$value);
  839.                 ++$columnLetter;
  840.             }
  841.             $i++;
  842.         }
  843.     
  844.         $contentType 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  845.         $writer = new Xlsx($spreadsheet) ;
  846.                 $date date('ymdhis');
  847.                 $filename "export_$type$date.xlsx";
  848.                 $response = new StreamedResponse();
  849.                 $response->headers->set('Content-Type'$contentType);
  850.                 $response->headers->set('Content-Disposition''attachment;filename="'.$filename.'"');
  851.                 $response->setPrivate();
  852.                 $response->headers->addCacheControlDirective('no-cache'true);
  853.                 $response->headers->addCacheControlDirective('must-revalidate'true);
  854.                 $response->setCallback(function() use ($writer) {
  855.                     $writer->save('php://output');
  856.                 });
  857.                 return $response;
  858.             // return $this->redirect($request->headers->get('referer'));
  859.    }
  860.     #[Route('/my-client-interlocutors/{userId}'name'my_client_interlocutors'methods: ['GET'])]
  861.     public function showInterlocutors(string $userIdUserRepository $userRepositoryCampaignRepository $campaignRepository): Response
  862.     {
  863.         $nbYearMax 3;
  864.         $user $userRepository->find($userId);
  865.         $campaigns $campaignRepository->findAllInterlocutors($user$nbYearMax);
  866.  
  867.         $allClientParticipantsMail = [];
  868.         $allClientParticipants = [];
  869.         foreach ($campaigns as $campaign) {
  870.             foreach ($campaign->getMissions() as $mission) {
  871.                 foreach ($mission->getParticipants() as $participant) {
  872.                     if ($participant->getRole() !== Role::ROLE_SUBCONTRACTOR) {
  873.                         if (!in_array($participant->getUser()->getEmail(), $allClientParticipantsMail)) {
  874.                             $allClientParticipantsMail[] = $participant->getUser()->getEmail();
  875.                             $allClientParticipants[] = $participant;
  876.                         }
  877.                     }
  878.                 }
  879.             }
  880.         }
  881.         return $this->renderForm('sub_contractor/interlocutors.html.twig', [
  882.             'clients'   => $allClientParticipants
  883.         ]);
  884.     }
  885.    private function formatUserToExportCsv(array $users):array
  886.    {    
  887.         $userFormated = [];
  888.         $newletter "";
  889.          foreach ($users as $user) {
  890.             $newletter 
  891.             $newletter.= $user->getFreqNotificationEverytime() != null && in_array(5$user->getFreqNotificationEverytime())  ? "Tout le temps, " "";
  892.             $newletter.= $user->getFreqNotificationPerDay() != null && in_array(5$user->getFreqNotificationPerDay())  ? "Une fois par jour, " "";
  893.             $newletter.= $user->getFreqNotificationPerWeek() != null &&  in_array(5$user->getFreqNotificationPerWeek())  ? "Une fois par semaine, " "";
  894.             $newletter.= $user->getFreqNotificationPerMonth() != null && in_array(5$user->getFreqNotificationPerMonth())  ? "Une fois par mois " "";
  895.             $userFormated = [...$userFormated,[
  896.                 "lastname" => $user->getLastname(),
  897.                 "firstname" => $user->getFirstname(),
  898.                 "cellPhone" => $user->getCellPhone() != null $user->getCellPhone(): "-" ,
  899.                 "email" => $user->getEmail()  != null $user->getEmail(): "-" ,
  900.                 "enabled" => $user->isEnabled() ? "actif" "inactif",
  901.                 "entreprise"=> $user->getCompany() != null $user->getCompany()->getName() : "-" ,
  902.                 "gender" => "Monsieur",
  903.                 "created_at" =>$user->getCreatedAt() != null ?  $user->getCreatedAt()->format('Y-m-d H:i:s') : '-',
  904.                 "newsletter"=> $newletter
  905.             ]] ;
  906.             $newletter "";
  907.          }
  908.         return $userFormated;
  909.    }
  910.    #[Route('/admin/fournisseurs/{id}/{availabilty<enable|disable>}'name'subcontractor_toggle_availabilty')]
  911.    public function toggleAvailability(User $userEntityManagerInterface $entityManager): Response
  912.    {
  913.        $user->setEnabled(!$user->isEnabled());
  914.        $entityManager->flush();
  915.        $this->addFlash(
  916.            type'success',
  917.            message'L\'intervenant opérationnel '.$user.' a bien été '. ($user->isEnabled() ? 'activé' 'désactivé')
  918.        );
  919.        return $this->redirectToRoute('sub_contractor_index');
  920.    }
  921.    private function updateUserDataDateCertificate($userData){
  922.         $dateAddCertificate = new \DateTime();
  923.         if(is_null($userData->getVigilanceCertificate())){
  924.             $userData->setDateAddCertificate($dateAddCertificate);
  925.             $userData->setDateUpdateCertificate($dateAddCertificate);
  926.         }else{
  927.             $userData->setDateUpdateCertificate($dateAddCertificate);
  928.         }
  929.    }
  930.    #[Route('/note-partenaire-modified/{id}-{idUser}'name'note_partenaire_modified'methods: ['GET','POST'])]
  931.     public function noteModificationPartenaire(NoteUser $note,$idUserRequest $request,EntityManagerInterface $entityManager): Response
  932.     
  933.         $content $request->request->get('info_mission_edit')['content'];
  934.         if (!is_null($content) and !empty($content)) {
  935.             $note->setContent($content);
  936.             $entityManager->persist($note);
  937.             $entityManager->flush();
  938.            
  939.         }
  940.         $this->addFlash(
  941.             type'success',
  942.             message'Modification effectuée'
  943.         );
  944.         return $this->redirectToRoute('sub_contractor_edit',['id'=>$idUser]);
  945.     }
  946.     #[Route('/note-partenaire-deleted/{id}-{idUser}'name'note_partenaire_deleted'methods: ['GET','POST'])]
  947.     public function noteDeletedPartenaire(NoteUser $note,$idUserRequest $request,EntityManagerInterface $entityManager): Response
  948.     
  949.         $entityManager->remove($note);
  950.         $entityManager->flush(); 
  951.         $this->addFlash(
  952.             type'success',
  953.             message'Suppression effectuée'
  954.         );
  955.         return $this->redirectToRoute('sub_contractor_edit',['id'=>$idUser]);
  956.     }
  957.     #[Route('/add-myflow-mail-to-subcontractor-and-client'name'addmyflow_mail_to_subcontractor_and_client'methods: ['GET','POST'])]
  958.     public function addMyFlowMail(AssociatedMailUserService $associatedMailUserService,EntityManagerInterface $entityManager): JsonResponse
  959.     
  960.         //prendre tout les sous traitant et leur attribué un adresse email myflow.
  961.         $allSubcontractor $entityManager->getRepository(User::class)->findOnlySubcontrator();
  962.         //dd(count($allSubcontractor));
  963.         foreach ($allSubcontractor as $subcontractor) {
  964.             $emailSubcontractor $subcontractor->getParent() != null $subcontractor->getParent()->getEmail() : $subcontractor->getEmail();
  965.             try{
  966.                 //verify if mail is already created
  967.                 $myFlowEmail $associatedMailUserService->getMailWithMyFlowDomain($emailSubcontractor);
  968.                 $isExist $entityManager->getRepository(User::class)->findBy(['myFlowEmail'=>$myFlowEmail]);
  969.                 
  970.                 if (empty($isExist)) {
  971.                     $associatedMailUserService->createEmailMyFlow($emailSubcontractor);
  972.                 }
  973.                 $subcontractor->setMyFlowEmail($myFlowEmail);
  974.                 $entityManager->persist($subcontractor);
  975.                 $entityManager->flush();
  976.             }catch(\Exception $e){}
  977.         }
  978.         
  979.         return new JsonResponse('---success---');
  980.     }
  981.   
  982. }