src/Controller/visitesCommercialeController.php line 2571
<?phpnamespace App\Controller;use App\Entity\Chantier;use App\Entity\ChantierProduit;use App\Entity\Localisation;use App\Entity\ProductMetrage;use App\Entity\Visite;use App\Entity\Revendeur;use App\Entity\ChantierProduct;use Symfony\Component\Mailer\MailerInterface;use Symfony\Component\Mime\Email;use App\Entity\TypeProduit;use App\Repository\CategoryRepository;use App\Repository\PiRepository;use App\Repository\EgcRepository;use App\Repository\ArchitecteRepository;use App\Repository\ChantierRepository;use App\Repository\ChantierProductRepository;use App\Repository\DepartementRepository;use App\Repository\TypeProduitRepository;use App\Repository\CommercialRepository;use App\Repository\DirecteurRepository;use App\Repository\IntervenantRepository;use App\Repository\NatureChantierRepository;use App\Repository\ProduitRepository;use App\Repository\RevendeurRepository;use App\Repository\TypeChantierRepository;use App\Repository\TypeIntervenantRepository;use App\Repository\VisiteRepository;use App\Repository\ZoneRepository;use App\Entity\Calendar;use App\Entity\Departement;use App\Repository\CalendarRepository;use App\Repository\DepartementRepository as RepositoryDepartementRepository;use Doctrine\ORM\EntityManagerInterface;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\File\Exception\FileException;use Symfony\Component\HttpFoundation\File\UploadedFile;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\HttpFoundation\JsonResponse;use Symfony\Component\Routing\Annotation\Route;use Symfony\Component\Validator\Constraints\All;class visitesCommercialeController extends AbstractController{ private ChantierRepository $chantierRepository;public function __construct(ChantierRepository $chantierRepository){$this->chantierRepository = $chantierRepository;}#[Route('/prospect/ajout', name: 'app_prospect_nouv')]public function nouveauProspect(Request $request,MailerInterface $mailer,VisiteRepository $visiteRep,TypeChantierRepository $typecRep ,ProduitRepository $produitRep,EntityManagerInterface $em,CommercialRepository $comrep,ProduitRepository $prodRep,IntervenantRepository $intervenetRep,TypeIntervenantRepository $typeIntRep ,NatureChantierRepository $natureRep,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep,RevendeurRepository $revendeurRep,DepartementRepository $depRep): Response{$departements = $depRep->findAll();if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$produits = [];$totalBudget = 0; // Variable to store the total budget$user =$this->getUser();$com=$comrep->findOneByUser($user);$visite_id=$visiteRep->findOneById('id');if($request->isMethod('POST')){//dd($request->request->all());$now = new \DateTime();$type=$typecRep->findOneByNom('en prospect');$zone=$zoneRep->findOneById($request->get('zone'));$nat=$natureRep->findOneById($request->get('naturec'));$clientId = $request->get('nomclient');$client = $revendeurRep->find($clientId);$visitetDate=$request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$departements=$depRep->findOneById($request->get('departements'));$ch=new Chantier();$ch->setNom($request->get('nom'));$ch->setRaidechausse('R+'.$request->get('rai'));$ch->setDateModification(new \DateTime());$ch->setValeur($request->get('valeur'));$desProducts = $request->get('products');$ch->setProducts($desProducts);$ch->setConcurrent($request->get('concurrent'));$ch->setMcarre($request->get('mcarre'));$ch->SetVglobal($request->get('vglobal'));$ch->setFinancement($request->get('financement'));//$ch->setOtherclient($request->get('otherclient'));$other=$request->get('otherclient');if (empty($other)) {$ch->setOtherclient(null);} else {$ch->setOtherclient($other);}$datedebut =$request->get('datedebut');$ch->setDatedebut($datedebut);$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande($demandeValue);}if($request->request->get('plan') == 'on'){$ch->setPlanDaction('oui');}else{$ch->setPlanDaction('non');}$ch->setZone($zone);$ch->settype($type);$ch->setNature($nat);$ch->setNombreVisite(1);$ch->setCommercial($com);$ch->setClient($client);$ch->setDepartement($departements);$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setProducts(($desProducts));$visite->setClassement($ch->getType()->getType());$ch->setLatitude($request->get('latitude'));$ch->setLongitude($request->get('longitude'));$ch->setRevendeur('non');$data = json_decode($request->getContent(), true);//envoi emailif( $departements!=null){$email = (new Email())->from('crm@groupe-hammami.com.tn')->to($ch->getDepartement()->getEmail())//->to('amrimaramri@gmail.com')->subject("Invitation")->text('Vous êtes invité par '.$com->getUser()->getPrenom().' '.$com->getUser()->getNom().' pour l\'accompagner dans un chantier. Merci de recontacter pour plus de détails.');$mailer->send($email);}// Create Calendar entity$calendar = new Calendar();$calendar->setTitle($data['title'] ?? 'visite :' . $ch->getNom()); // Use null coalescing operator to handle undefined keys$calendar->setStart(($visitepDate));$calendar->setEnd(($visitepDate));$calendar->setCommercial($com);// Lier le planning à la visite réellement créée pour ce prospect// (auparavant : recherche invalide via findOneById('id'), qui ne retournait jamais la bonne visite)$em->persist($visite);$calendar->setVisite($visite);$em->persist($calendar);$em->flush();/* Upload Photo */$uploaddir = 'telechargement/';$file = $request->files->get('image');if($file != null) {// Vérifier si un fichier a été téléchargéif (!$file instanceof UploadedFile) {throw new FileException('pas de fichier a telechargé');}$fileName = $file->getClientOriginalName();$uploadfile = $uploaddir . $fileName;// Déplacer le fichier téléchargé vers le répertoire de destinationtry {$file->move($uploaddir, $fileName);}catch (FileException $e) {$this->addFlash('error','pas de fichier !!!');}$visite->setPhoto($fileName);}else {$visite->setPhoto(null);}/* End Upload Photo */$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}$ch->addIntervenant($intervenetRep->findOneById($request->get('nomp')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nome')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomap')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomar')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nompilot')));if(\DateTime::createFromFormat('Y-m-d', $visitetDate) >= $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >$visitepDate){$this->addFlash('error','Date de la visite est superieur a la date prochain visite!!!');}elseif($chantierRep->findOneByNomAndProduitandzone($request->get('nom'),$zone) != null ){$this->addFlash('error','Chantier existe deja!!!');}else {$this->addFlash('success','Le prospect est ajouté avec succès!!!');$ch->addVisite($visite);$em->persist($visite);$em->persist($ch);$em->flush();$typeProduit = $em->getRepository(TypeProduit::class)->findOneBy([]);foreach ($request->get('produit') as $pr) {$chantierProduct = new ChantierProduct();$produit = $produitRep->find($pr);$chantierProduct->setProduit($produit);$chantierProduct->setChantier($ch);$em->persist($chantierProduct);$em->flush();}//$this->addFlash('success', 'Le budget total est : ' . $totalBudget);return $this->redirectToRoute('app_prospects');}}$pis=$intervenetRep->findBytype($typeIntRep->findOneById('1'));$egcs=$intervenetRep->findBytype($typeIntRep->findOneById('2'));$apps=$intervenetRep->findBytype($typeIntRep->findOneById('3'));$archs=$intervenetRep->findBytype($typeIntRep->findOneById('4'));$pilots=$intervenetRep->findBytype($typeIntRep->findOneById('5'));$revendeurs = $em->getRepository(Revendeur::class)->findAll();return $this->render('commercial/nouveauprospect.html.twig', ['Tinters'=>$typeIntRep->findAll(),'types' => $typecRep->findAll(),'prod' =>$produitRep->findAll(),'pis'=>$pis,'egcs'=>$egcs ,'apps'=>$apps,'archs'=>$archs,'pilots'=>$pilots,'natures'=>$natureRep->findAll(),'zones'=>$zoneRep->findAll(),'user'=>$com,'totalBudget' => $totalBudget,'revendeurs' => $revendeurs,'departements'=>$depRep->findAll(),]);}#[Route('/prospect/modifier/{id<\d+>}', name: 'app_modifier_prospect')]public function editProspect(Request $request,TypeChantierRepository $typecRep ,ProduitRepository $produitRep,EntityManagerInterface $em,CommercialRepository $comrep,ProduitRepository $prodRep,IntervenantRepository $intervenetRep,TypeIntervenantRepository $typeIntRep ,NatureChantierRepository $natureRep,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep ,VisiteRepository $visiteRep,TypeIntervenantRepository $typeIRep,$id,TypeProduitRepository $typeprodRep,DepartementRepository $depRep,MailerInterface $mailer,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$ch=$chantierRep->find($id);$intervenants = $ch->getIntervenant();$t=$ch->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $ch]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}if($request->isMethod('POST')){//dd($request->request->all());//$type=$typecRep->findOneByNom('en prospect');$now = new \DateTime();$zone=$zoneRep->findOneById($request->get('zone'));$nat=$natureRep->findOneById($request->get('naturec'));$type=$typecRep->findOneById($request->get('typec'));$clientId = $request->get('nomclient');$client = $revendeurRep->find($clientId);$departements=$depRep->findOneById($request->get('departement'));$ch->setNom($request->get('nom'));$ch->setRaidechausse($request->get('rai'));$ch->setMetrage(intval($request->get('metrage')));$ch->setValeur($request->get('valeur'));$ch->setProducts($request->get('products'));$ch->setConcurrent($request->get('concurrent'));$ch->setMcarre($request->get('mcarre'));$ch->SetVglobal($request->get('vglobal'));$ch->setFinancement($request->get('financement'));//$ch->setOtherclient($request->get('otherclient'));$other=$request->get('otherclient');if (empty($other)) {$ch->setOtherclient(null);} else {$ch->setOtherclient($other);}$datedebut =$request->get('datedebut');$ch->setDatedebut($datedebut);$ch->setDepartement($departements);$ch->setClient($client);$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande($demandeValue);}if($request->request->get('plan') == 'on'){$ch->setPlanDaction('oui');}else{$ch->setPlanDaction('non');}$visite = $visiteRep->findOneByChantier($ch);$visitetDate=$request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($ch);$visite->setCause($request->get('cause'));if ($type !== null) {$visite->setClassement($type->getType());}$em->persist($visite);// Répercuter la nouvelle date de visite sur le planning (Calendar) déjà créé pour ce prospectforeach ($visite->getCalendar() as $calendarEvent) {$calendarEvent->setStart($visitepDate);$calendarEvent->setEnd($visitepDate);$em->persist($calendarEvent);}$products = $ch->getChantierProduits();if (count($products) > 0) {foreach ($products as $key => $p) {if (isset($request->get('typec')[$key]) && isset($request->get('produit')[$key])) {$typeChantier = $typecRep->find($request->get('typec')[$key]);$pr = $produitRep->find($request->get('produit')[$key]);$p->setType($typeChantier->getType());$p->setProduit($pr);}}}$ch->setZone($zone);$prod=$prodRep->findOneById($request->get('produit'));$typeProduit = $em->getRepository(TypeProduit::class)->findOneBy([]);$existingChantierProducts = $ch->getChantierProducts();if( $departements!=null){//envoi email$email = (new Email())->from('crm@groupe-hammami.com.tn')->to($ch->getDepartement()->getEmail())//->to('amrimaramri@gmail.com')->subject("Invitation")->text('Vous êtes invité par '.$com->getUser()->getPrenom().' '.$com->getUser()->getNom().' pour l\'accompagner dans un chantier. Merci de recontacter pour plus de détails.');$mailer->send($email);}foreach ($request->get('produit') as $pr) {// Find the product entity$produit = $produitRep->find($pr);// Check if this product is already associated with the chantier$existingChantierProduct = null;foreach ($existingChantierProducts as $existingProduct) {if ($existingProduct->getProduit() === $produit) {$existingChantierProduct = $existingProduct;break;}}if ($existingChantierProduct === null) {// If the product is not associated, create a new ChantierProduct entity$chantierProduct = new ChantierProduct();$chantierProduct->setProduit($produit);$chantierProduct->setChantier($ch);$em->persist($chantierProduct);} else {// If the product is already associated, update the association (optional)// $existingChantierProduct->setProduit($produit); // Optionally update the product if needed}}// Remove any ChantierProduct entities associated with the chantier but not included in the submitted products (optional)foreach ($existingChantierProducts as $existingProduct) {if (!in_array($existingProduct->getProduit()->getId(), $request->get('produit'))) {$em->remove($existingProduct);}}$em->flush();// Persist all changes to the database$em->flush();// Redirect or render the appropriate response$ch->settype($type);$ch->setNature($nat);$ch->setCommercial($com);$ch->setLatitude($request->get('latitude'));$ch->setLongitude($request->get('longitude'));$ch->setDateModification(new \DateTime());$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}foreach ($intervenants as $intervenant) {$ch->removeIntervenant($intervenant);}$ch->addIntervenant($intervenetRep->findOneById($request->get('nomp')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nome')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomap')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomar')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nompilot')));$existingChantier = $chantierRep->findOneBy(['nom' => $request->get('nom'),'zone' => $zone]);if ($existingChantier != null && $ch != null && $existingChantier->getId() != $ch->getId()) {$ChantierName = $ch->getNom(); // Store the previous name before modifying$this->addFlash('error', 'Le nom de chantier "' . $ChantierName . '" existe déjà. Veuillez en choisir un autre !!!');$ch->setNom(''); // Set the name of $ch to an empty string}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >= $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >$visitepDate){$this->addFlash('error','Date de la visite est superieur a la date prochain visite!!!');}else {$this->addFlash('success', 'Le prospect est modifié avec succès!!!');$em->persist($ch);$em->flush();return $this->redirectToRoute('app_prospects');}}$pis=$intervenetRep->findBytype($typeIntRep->findOneById('1'));$egcs=$intervenetRep->findBytype($typeIntRep->findOneById('2'));$apps=$intervenetRep->findBytype($typeIntRep->findOneById('3'));$archs=$intervenetRep->findBytype($typeIntRep->findOneById('4'));$pilots=$intervenetRep->findBytype($typeIntRep->findOneById('5'));$ipi=null;$iegc=null;$iap=null;$iar=null;$ipilots=null;$ints=$ch->getIntervenant();foreach ($ints as $i) {if($i->getType()==$typeIntRep->findOneById('1'))$ipi=$i;elseif($i->getType()==$typeIntRep->findOneById('2'))$iegc=$i;elseif($i->getType()==$typeIntRep->findOneById('3'))$iap=$i;elseif($i->getType()==$typeIntRep->findOneById('4'))$iar=$i;else$ipilots=$i;}$em->persist($ch);$em->flush();$tab=[];$chantierproduit=$ch->getChantierProduits();foreach($chantierproduit as $chs){array_push($tab,$chs->getType());}$revendeurs = $em->getRepository(Revendeur::class)->findAll();return $this->render('commercial/modifierProspect.html.twig', ['chantier'=>$ch,'Tinters'=>$typeIntRep->findAll(),'types' => $typecRep->findAll(),'prod' =>$produitRep->findAll(),'pis'=>$pis,'egcs'=>$egcs ,'apps'=>$apps,'archs'=>$archs,'pilots'=>$pilots,'natures'=>$natureRep->findAll(),'zones'=>$zoneRep->findAll(),'typec'=>$typecRep->findAll(),'typeprod'=>$typeprodRep->findAll(),'departement'=>$depRep->findAll(),'ipi'=>$ipi,'iegc'=>$iegc,'iap'=>$iap,'iar'=>$iar,'ipilots'=>$ipilots,'user'=>$com,'typec'=>$typecRep->findAll(),'t'=>$t,'iegc'=>$iegc,'tabType'=>$tab,'int'=>$ints,'selectedProductIds' => $selectedProductIds,'revendeurs' => $revendeurs,]);}#[Route('/prospect/remove-bloc/{chantierId}/{productId}', name: 'app_remove_bloc')]public function removeProduct($chantierId, $productId, EntityManagerInterface $em): Response{// Fetch the Chantier and ProductMetrage entities based on the provided IDs$chantier = $em->getRepository(Chantier::class)->find($chantierId);$productMetrage = $em->getRepository(ProductMetrage::class)->findOneBy(['chantier' => $chantier, 'product' => $productId]);if (!$chantier || !$productMetrage) {return new JsonResponse(['success' => false, 'message' => 'Entity not found'], 400);}// Check if the Chantier has more than one product$chantierProductsCount = count($chantier->getProductMetrages());if ($chantierProductsCount > 1) {// Remove the ProductMetrage from the Chantier$chantier->removeProductMetrage($productMetrage);// Remove the ProductMetrage from the database$em->remove($productMetrage);// Persist the changes$em->flush();$this->addFlash('error', 'Bloc de produit est supprimé avec succès!!!');// Return a success responsereturn new JsonResponse(['success' => true]);} else {// Return a response indicating that the product cannot be removedreturn new JsonResponse(['success' => false, 'message' => 'Le chantier a un seul produit. Impossible de supprimer l\'ID du bloc.'], 400);}}#[Route('/enNegociation/modifier/{id<\d+>}', name: 'app_modifier_negociation')]public function editNegociation(Request $request,TypeChantierRepository $typecRep ,ProduitRepository $produitRep,EntityManagerInterface $em,CommercialRepository $comrep,ProduitRepository $prodRep,IntervenantRepository $intervenetRep,TypeIntervenantRepository $typeIntRep ,NatureChantierRepository $natureRep,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep , VisiteRepository $visiteRep,TypeIntervenantRepository $typeIRep,$id,TypeProduitRepository $typeprodRep,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$ch=$chantierRep->find($id);$intervenants = $ch->getIntervenant();$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $ch]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}$t=$ch->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){$now = new \DateTime();//dd($request->request->all());//$type=$typecRep->findOneByNom('en prospect');$zone=$zoneRep->findOneById($request->get('zone'));$nat=$natureRep->findOneById($request->get('naturec'));$type=$typecRep->findOneById($request->get('typec'));$clientId = $request->get('nomclient');$client = $revendeurRep->find($clientId);$ch->setNom($request->get('nom'));$ch->setRaidechausse($request->get('rai'));$ch->setMetrage(intval($request->get('metrage')));$ch->setDateModification(new \DateTime());$ch->setValeur($request->get('valeur'));$ch->setProducts($request->get('products'));$ch->setConcurrent($request->get('concurrent'));$ch->setMcarre($request->get('mcarre'));$ch->SetVglobal($request->get('vglobal'));$ch->setFinancement($request->get('financement'));//$ch->setOtherclient($request->get('otherclient'));$other=$request->get('otherclient');if (empty($other)) {$ch->setOtherclient(null);} else {$ch->setOtherclient($other);}$datedebut =$request->get('datedebut');$ch->setDatedebut($datedebut);$ch->setClient($client);$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande($demandeValue);}if($request->request->get('plan') == 'on'){$ch->setPlanDaction('oui');}else{$ch->setPlanDaction('non');}$visite = $visiteRep->findOneByChantier($ch);$visitetDate=$request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($ch);$visite->setCause($request->get('cause'));if ($type !== null) {$visite->setClassement($type->getType());}$em->persist($visite);$products = $ch->getChantierProduits();if (count($products) > 0) {foreach ($products as $key => $p) {if (isset($request->get('typec')[$key]) && isset($request->get('produit')[$key])) {$typeChantier = $typecRep->find($request->get('typec')[$key]);$pr = $produitRep->find($request->get('produit')[$key]);$p->setType($typeChantier->getType());$p->setProduit($pr);}}}$ch->setZone($zone);$prod=$prodRep->findOneById($request->get('produit'));$typeProduit = $em->getRepository(TypeProduit::class)->findOneBy([]);$existingChantierProducts = $ch->getChantierProducts();foreach ($request->get('produit') as $pr) {// Find the product entity$produit = $produitRep->find($pr);// Check if this product is already associated with the chantier$existingChantierProduct = null;foreach ($existingChantierProducts as $existingProduct) {if ($existingProduct->getProduit() === $produit) {$existingChantierProduct = $existingProduct;break;}}if ($existingChantierProduct === null) {// If the product is not associated, create a new ChantierProduct entity$chantierProduct = new ChantierProduct();$chantierProduct->setProduit($produit);$chantierProduct->setChantier($ch);$em->persist($chantierProduct);} else {// If the product is already associated, update the association (optional)// $existingChantierProduct->setProduit($produit); // Optionally update the product if needed}}// Remove any ChantierProduct entities associated with the chantier but not included in the submitted products (optional)foreach ($existingChantierProducts as $existingProduct) {if (!in_array($existingProduct->getProduit()->getId(), $request->get('produit'))) {$em->remove($existingProduct);}}$em->flush();// Persist all changes to the database$em->flush();// Redirect or render the appropriate response$ch->settype($type);$ch->setNature($nat);$ch->setCommercial($com);$ch->setLatitude($request->get('latitude'));$ch->setLongitude($request->get('longitude'));$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}foreach ($intervenants as $intervenant) {$ch->removeIntervenant($intervenant);}$ch->addIntervenant($intervenetRep->findOneById($request->get('nomp')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nome')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomap')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomar')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nompilot')));$existingChantier = $chantierRep->findOneBy(['nom' => $request->get('nom'),'zone' => $zone]);if ($existingChantier != null && $ch != null && $existingChantier->getId() != $ch->getId()) {$ChantierName = $ch->getNom(); // Store the previous name before modifying$this->addFlash('error', 'Le nom de chantier "' . $ChantierName . '" existe déjà. Veuillez en choisir un autre !!!');$ch->setNom(''); // Set the name of $ch to an empty string}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >= $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >$visitepDate){$this->addFlash('error','Date de la visite est superieur a la date prochain visite!!!');}else{$this->addFlash('success','Le chantier en negociation est modifié avec succès!!!');$em->persist($ch);$em->flush();return $this->redirectToRoute('app_enNegociation');}}$pis=$intervenetRep->findBytype($typeIntRep->findOneById('1'));$egcs=$intervenetRep->findBytype($typeIntRep->findOneById('2'));$apps=$intervenetRep->findBytype($typeIntRep->findOneById('3'));$archs=$intervenetRep->findBytype($typeIntRep->findOneById('4'));$pilots=$intervenetRep->findBytype($typeIntRep->findOneById('5'));$ipi=null;$iegc=null;$iap=null;$iar=null;$ipilots=null;$ints=$ch->getIntervenant();foreach ($ints as $i) {if($i->getType()==$typeIntRep->findOneById('1'))$ipi=$i;elseif($i->getType()==$typeIntRep->findOneById('2'))$iegc=$i;elseif($i->getType()==$typeIntRep->findOneById('3'))$iap=$i;elseif($i->getType()==$typeIntRep->findOneById('4'))$iar=$i;else$ipilots=$i;}$em->persist($ch);$em->flush();$tab=[];$chantierproduit=$ch->getChantierProduits();foreach($chantierproduit as $chs){array_push($tab,$chs->getType());}$revendeurs = $em->getRepository(Revendeur::class)->findAll();return $this->render('commercial/modifierNeg.html.twig', ['chantier'=>$ch,'Tinters'=>$typeIntRep->findAll(),'types' => $typecRep->findAll(),'prod' =>$produitRep->findAll(),'pis'=>$pis,'egcs'=>$egcs ,'apps'=>$apps,'archs'=>$archs,'pilots'=>$pilots,'natures'=>$natureRep->findAll(),'zones'=>$zoneRep->findAll(),'typec'=>$typecRep->findAll(),'ipi'=>$ipi,'iegc'=>$iegc,'iap'=>$iap,'iar'=>$iar,'ipilots'=>$ipilots,'user'=>$com,'typec'=>$typecRep->findAll(),'typeprod'=>$typeprodRep->findAll(),'t'=>$t,'iegc'=>$iegc,'tabType'=>$tab,'int'=>$ints,'selectedProductIds' => $selectedProductIds,'revendeurs' => $revendeurs,]);}//modification viste client en cours#[Route('commercial/revendeur/{id}/editNegos', name: 'app_revendeur_editNegos')]public function modifierRevendeurNegos(Request $request, VisiteRepository $visiteRep,EntityManagerInterface $em,Chantier $chantier, TypeChantierRepository $typecRep, CommercialRepository $comrep, ZoneRepository $zoneRep,ProduitRepository $produitRep, RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error', "Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user = $this->getUser();$com = $comrep->findOneByUser($user);$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $chantier]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}if ($request->isMethod('POST')) {$zone = $zoneRep->findOneById($request->get('zone'));// $typec = $typecRep->findOneByNom('en prospect');$typec = $typecRep->findOneById($request->get('typec'));$visitetDate = $request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$chantier->setNom($request->get('nom'));$chantier->setConcurrent($request->get('concurrent'));$chantier->setDemande($request->get('demande') ? 'Revendeur : ' . $request->get('demande') : null);$chantier->setBudgetrev($request->get('budgetrev'));$chantier->setTyperev($request->get('typerev'));$chantier->setType($typec);$chantier->setZone($zone);$chantier->SetVglobal($request->get('vglobal'));// Mise à jour des produits associés au chantier// $chantier->clearChantierProduits();foreach ($request->get('produit') as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantierProduit->setBudgetrev($request->get('budgetrev'));$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}// $visite = new Visite();$visite = $visiteRep->findOneByChantier($chantier);$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($chantier);$visite->setCause($request->get('cause'));$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success', 'visite client a été modifié avec succès!!!');return $this->redirectToRoute('app_enNegociation');}return $this->render('commercial/ModifVisiteRevNegos.html.twig', ['chantier' => $chantier,'zones' => $zoneRep->findAll(),'prod' => $produitRep->findAll(),'user' => $com,'revendeurs' => $revendeurRep->findAll(),'selectedProductIds' => $selectedProductIds,'typec'=>$typecRep->findAll(),]);}#[Route('/encours/modifier/{id<\d+>}', name: 'app_modifier_encours')]public function editEncours(Request $request,TypeChantierRepository $typecRep ,ProduitRepository $produitRep,EntityManagerInterface $em,CommercialRepository $comrep,ProduitRepository $prodRep,IntervenantRepository $intervenetRep,TypeIntervenantRepository $typeIntRep ,NatureChantierRepository $natureRep,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep ,VisiteRepository $visiteRep,TypeIntervenantRepository $typeIRep,$id,TypeProduitRepository $typeprodRep,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$ch=$chantierRep->find($id);$intervenants = $ch->getIntervenant();$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $ch]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}$t=$ch->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){//dd($request->request->all());//$type=$typecRep->findOneByNom('en prospect');$now = new \DateTime();$zone=$zoneRep->findOneById($request->get('zone'));$nat=$natureRep->findOneById($request->get('naturec'));$type=$typecRep->findOneById($request->get('typec'));$clientId = $request->get('nomclient');$client = $revendeurRep->find($clientId);$ch->setNom($request->get('nom'));$ch->setRaidechausse($request->get('rai'));$ch->setMetrage(intval($request->get('metrage')));$ch->setValeur($request->get('valeur'));$ch->setProducts($request->get('products'));$ch->setDateModification(new \DateTime());$ch->setConcurrent($request->get('concurrent'));$ch->setMcarre($request->get('mcarre'));$ch->SetVglobal($request->get('vglobal'));$ch->setFinancement($request->get('financement'));//$ch->setOtherclient($request->get('otherclient'));$other=$request->get('otherclient');if (empty($other)) {$ch->setOtherclient(null);} else {$ch->setOtherclient($other);}$datedebut =$request->get('datedebut');$ch->setDatedebut($datedebut);$ch->setClient($client);$ch->setDateModification(new \DateTime());$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande($demandeValue);}if($request->request->get('plan') == 'on'){$ch->setPlanDaction('oui');}else{$ch->setPlanDaction('non');}$visite = $visiteRep->findOneByChantier($ch);$visitetDate=$request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($ch);$visite->setCause($request->get('cause'));if ($type !== null) {$visite->setClassement($type->getType());}$em->persist($visite);$products = $ch->getChantierProduits();if (count($products) > 0) {foreach ($products as $key => $p) {if (isset($request->get('typec')[$key]) && isset($request->get('produit')[$key])) {$typeChantier = $typecRep->find($request->get('typec')[$key]);$pr = $produitRep->find($request->get('produit')[$key]);$p->setType($typeChantier->getType());$p->setProduit($pr);}}}$ch->setZone($zone);$prod=$prodRep->findOneById($request->get('produit'));$typeProduit = $em->getRepository(TypeProduit::class)->findOneBy([]);$existingChantierProducts = $ch->getChantierProducts();foreach ($request->get('produit') as $pr) {// Find the product entity$produit = $produitRep->find($pr);// Check if this product is already associated with the chantier$existingChantierProduct = null;foreach ($existingChantierProducts as $existingProduct) {if ($existingProduct->getProduit() === $produit) {$existingChantierProduct = $existingProduct;break;}}if ($existingChantierProduct === null) {// If the product is not associated, create a new ChantierProduct entity$chantierProduct = new ChantierProduct();$chantierProduct->setProduit($produit);$chantierProduct->setChantier($ch);$em->persist($chantierProduct);} else {// If the product is already associated, update the association (optional)// $existingChantierProduct->setProduit($produit); // Optionally update the product if needed}}// Remove any ChantierProduct entities associated with the chantier but not included in the submitted products (optional)foreach ($existingChantierProducts as $existingProduct) {if (!in_array($existingProduct->getProduit()->getId(), $request->get('produit'))) {$em->remove($existingProduct);}}$em->flush();// Persist all changes to the database$em->flush();// Redirect or render the appropriate response$ch->settype($type);$ch->setNature($nat);$ch->setCommercial($com);$ch->setLatitude($request->get('latitude'));$ch->setLongitude($request->get('longitude'));$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}foreach ($intervenants as $intervenant) {$ch->removeIntervenant($intervenant);}$ch->addIntervenant($intervenetRep->findOneById($request->get('nomp')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nome')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomap')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomar')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nompilot')));$existingChantier = $chantierRep->findOneBy(['nom' => $request->get('nom'),'zone' => $zone]);if ($existingChantier != null && $ch != null && $existingChantier->getId() != $ch->getId()) {$ChantierName = $ch->getNom(); // Store the previous name before modifying$this->addFlash('error', 'Le nom de chantier "' . $ChantierName . '" existe déjà. Veuillez en choisir un autre !!!');$ch->setNom(''); // Set the name of $ch to an empty string}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >= $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >$visitepDate){$this->addFlash('error','Date de la visite est superieur a la date prochain visite!!!');}else{$this->addFlash('success','Le chantier en cours est modifié avec succès!!!');$em->persist($ch);$em->flush();return $this->redirectToRoute('app_encours');}}$pis=$intervenetRep->findBytype($typeIntRep->findOneById('1'));$egcs=$intervenetRep->findBytype($typeIntRep->findOneById('2'));$apps=$intervenetRep->findBytype($typeIntRep->findOneById('3'));$archs=$intervenetRep->findBytype($typeIntRep->findOneById('4'));$pilots=$intervenetRep->findBytype($typeIntRep->findOneById('5'));$ipi=null;$iegc=null;$iap=null;$iar=null;$ipilots=null;$ints=$ch->getIntervenant();foreach ($ints as $i) {if($i->getType()==$typeIntRep->findOneById('1'))$ipi=$i;elseif($i->getType()==$typeIntRep->findOneById('2'))$iegc=$i;elseif($i->getType()==$typeIntRep->findOneById('3'))$iap=$i;elseif($i->getType()==$typeIntRep->findOneById('4'))$iar=$i;else$ipilots=$i;}$em->persist($ch);$em->flush();$tab=[];$chantierproduit=$ch->getChantierProduits();foreach($chantierproduit as $chs){array_push($tab,$chs->getType());}$revendeurs = $em->getRepository(Revendeur::class)->findAll();return $this->render('commercial/modifierCours.html.twig', ['chantier'=>$ch,'Tinters'=>$typeIntRep->findAll(),'types' => $typecRep->findAll(),'prod' =>$produitRep->findAll(),'pis'=>$pis,'egcs'=>$egcs ,'apps'=>$apps,'archs'=>$archs,'pilots'=>$pilots,'natures'=>$natureRep->findAll(),'zones'=>$zoneRep->findAll(),'typec'=>$typecRep->findAll(),'typeprod'=>$typeprodRep->findAll(),'ipi'=>$ipi,'iegc'=>$iegc,'iap'=>$iap,'iar'=>$iar,'ipilots'=>$ipilots,'user'=>$com,'typec'=>$typecRep->findAll(),'t'=>$t,'iegc'=>$iegc,'tabType'=>$tab,'int'=>$ints,'selectedProductIds' => $selectedProductIds,'revendeurs' => $revendeurs,]);}//modification viste client en cours#[Route('commercial/revendeur/{id}/editEncours', name: 'app_revendeur_editEncours')]public function modifierRevendeurEncours(Request $request, VisiteRepository $visiteRep,EntityManagerInterface $em,Chantier $chantier, TypeChantierRepository $typecRep, CommercialRepository $comrep, ZoneRepository $zoneRep,ProduitRepository $produitRep, RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error', "Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user = $this->getUser();$com = $comrep->findOneByUser($user);$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $chantier]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}if ($request->isMethod('POST')) {$zone = $zoneRep->findOneById($request->get('zone'));// $typec = $typecRep->findOneByNom('en prospect');$typec = $typecRep->findOneById($request->get('typec'));$visitetDate = $request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$chantier->setNom($request->get('nom'));$chantier->setConcurrent($request->get('concurrent'));$chantier->setDemande($request->get('demande') ? 'Revendeur : ' . $request->get('demande') : null);$chantier->setBudgetrev($request->get('budgetrev'));$chantier->setTyperev($request->get('typerev'));$chantier->setType($typec);$chantier->setZone($zone);$chantier->SetVglobal($request->get('vglobal'));// Mise à jour des produits associés au chantier// $chantier->clearChantierProduits();foreach ($request->get('produit') as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantierProduit->setBudgetrev($request->get('budgetrev'));$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}// $visite = new Visite();$visite = $visiteRep->findOneByChantier($chantier);$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($chantier);$visite->setCause($request->get('cause'));$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success', 'visite client a été modifié avec succès!!!');return $this->redirectToRoute('app_encours');}return $this->render('commercial/ModifVisiteRevEncours.html.twig', ['chantier' => $chantier,'zones' => $zoneRep->findAll(),'prod' => $produitRep->findAll(),'user' => $com,'revendeurs' => $revendeurRep->findAll(),'selectedProductIds' => $selectedProductIds,'typec'=>$typecRep->findAll(),]);}#[Route('/enPlandaction/modifier/{id<\d+>}', name: 'app_modifier_planaction')]public function editPlandaction(Request $request,TypeChantierRepository $typecRep ,ProduitRepository $produitRep,EntityManagerInterface $em,CommercialRepository $comrep,ProduitRepository $prodRep,IntervenantRepository $intervenetRep,TypeIntervenantRepository $typeIntRep ,NatureChantierRepository $natureRep,ChantierRepository $chantierRep,DirecteurRepository $directeurRep, ZoneRepository $zoneRep ,VisiteRepository $visiteRep,TypeIntervenantRepository $typeIRep,$id,TypeProduitRepository $typeprodRep,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$ch=$chantierRep->find($id);$intervenants = $ch->getIntervenant();$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $ch]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}$t=$ch->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){//dd($request->request->all());//$type=$typecRep->findOneByNom('en prospect');$now = new \DateTime();$zone=$zoneRep->findOneById($request->get('zone'));$nat=$natureRep->findOneById($request->get('naturec'));$type=$typecRep->findOneById($request->get('typec'));$clientId = $request->get('nomclient');$client = $revendeurRep->find($clientId);$ch->setNom($request->get('nom'));$ch->setRaidechausse($request->get('rai'));$ch->setMetrage(intval($request->get('metrage')));$ch->setValeur($request->get('valeur'));$ch->setProducts($request->get('products'));$ch->setConcurrent($request->get('concurrent'));$ch->setMcarre($request->get('mcarre'));$ch->SetVglobal($request->get('vglobal'));$ch->setFinancement($request->get('financement'));//$ch->setOtherclient($request->get('otherclient'));$other=$request->get('otherclient');if (empty($other)) {$ch->setOtherclient(null);} else {$ch->setOtherclient($other);}$datedebut =$request->get('datedebut');$ch->setDatedebut($datedebut);$ch->setClient($client);$ch->setDateModification(new \DateTime());$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande($demandeValue);}if($request->request->get('plan') == 'on'){$ch->setPlanDaction('oui');}else{$ch->setPlanDaction('non');}$visite = $visiteRep->findOneByChantier($ch);$visitetDate=$request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($ch);$visite->setCause($request->get('cause'));if ($type !== null) {$visite->setClassement($type->getType());}$em->persist($visite);$products = $ch->getChantierProduits();if (count($products) > 0) {foreach ($products as $key => $p) {if (isset($request->get('typec')[$key]) && isset($request->get('produit')[$key])) {$typeChantier = $typecRep->find($request->get('typec')[$key]);$pr = $produitRep->find($request->get('produit')[$key]);$p->setType($typeChantier->getType());$p->setProduit($pr);}}}$ch->setZone($zone);$prod=$prodRep->findOneById($request->get('produit'));$typeprod = $typeprodRep->findOneById($request->get('typeprod'));$typeProduit = $em->getRepository(TypeProduit::class)->findOneBy([]);$existingChantierProducts = $ch->getChantierProducts();foreach ($request->get('produit') as $pr) {// Find the product entity$produit = $produitRep->find($pr);// Check if this product is already associated with the chantier$existingChantierProduct = null;foreach ($existingChantierProducts as $existingProduct) {if ($existingProduct->getProduit() === $produit) {$existingChantierProduct = $existingProduct;break;}}if ($existingChantierProduct === null) {// If the product is not associated, create a new ChantierProduct entity$chantierProduct = new ChantierProduct();$chantierProduct->setProduit($produit);$chantierProduct->setChantier($ch);$em->persist($chantierProduct);} else {// If the product is already associated, update the association (optional)// $existingChantierProduct->setProduit($produit); // Optionally update the product if needed}}// Remove any ChantierProduct entities associated with the chantier but not included in the submitted products (optional)foreach ($existingChantierProducts as $existingProduct) {if (!in_array($existingProduct->getProduit()->getId(), $request->get('produit'))) {$em->remove($existingProduct);}}// Persist all changes to the database$em->flush();// Redirect or render the appropriate response$ch->settype($type);$ch->setNature($nat);$ch->setCommercial($com);$ch->setLatitude($request->get('latitude'));$ch->setLongitude($request->get('longitude'));$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}foreach ($intervenants as $intervenant) {$ch->removeIntervenant($intervenant);}$ch->addIntervenant($intervenetRep->findOneById($request->get('nomp')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nome')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomap')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomar')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nompilot')));$existingChantier = $chantierRep->findOneBy(['nom' => $request->get('nom'),'zone' => $zone]);if ($existingChantier != null && $ch != null && $existingChantier->getId() != $ch->getId()) {$ChantierName = $ch->getNom(); // Store the previous name before modifying$this->addFlash('error', 'Le nom de chantier "' . $ChantierName . '" existe déjà. Veuillez en choisir un autre !!!');$ch->setNom(''); // Set the name of $ch to an empty string}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >= $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >$visitepDate){$this->addFlash('error','Date de la visite est superieur a la date prochain visite!!!');}else {$this->addFlash('success', 'Le chantier en plan d\'action a été modifié avec succès!');$em->persist($ch);$em->flush();return $this->redirectToRoute('app_plan_comm');}}$pis=$intervenetRep->findBytype($typeIntRep->findOneById('1'));$egcs=$intervenetRep->findBytype($typeIntRep->findOneById('2'));$apps=$intervenetRep->findBytype($typeIntRep->findOneById('3'));$archs=$intervenetRep->findBytype($typeIntRep->findOneById('4'));$pilots=$intervenetRep->findBytype($typeIntRep->findOneById('5'));$ipi=null;$iegc=null;$iap=null;$iar=null;$ipilots=null;$ints=$ch->getIntervenant();foreach ($ints as $i) {if($i->getType()==$typeIntRep->findOneById('1'))$ipi=$i;elseif($i->getType()==$typeIntRep->findOneById('2'))$iegc=$i;elseif($i->getType()==$typeIntRep->findOneById('3'))$iap=$i;elseif($i->getType()==$typeIntRep->findOneById('4'))$iar=$i;else$ipilots=$i;}$em->persist($ch);$em->flush();$tab=[];$chantierproduit=$ch->getChantierProduits();foreach($chantierproduit as $chs){array_push($tab,$chs->getType());}$revendeurs = $em->getRepository(Revendeur::class)->findAll();return $this->render('commercial/modifierplan.html.twig', ['chantier'=>$ch,'Tinters'=>$typeIntRep->findAll(),'types' => $typecRep->findAll(),'prod' =>$produitRep->findAll(),'pis'=>$pis,'egcs'=>$egcs ,'apps'=>$apps,'archs'=>$archs,'pilots'=>$pilots,'natures'=>$natureRep->findAll(),'zones'=>$zoneRep->findAll(),'typec'=>$typecRep->findAll(),'ipi'=>$ipi,'iegc'=>$iegc,'iap'=>$iap,'iar'=>$iar,'ipilots'=>$ipilots,'user'=>$com,'typec'=>$typecRep->findAll(),'typeprod'=>$typeprodRep->findAll(),'t'=>$t,'iegc'=>$iegc,'tabType'=>$tab,'int'=>$ints,'selectedProductIds' => $selectedProductIds,'revendeurs' => $revendeurs,]);}/******************************************* modification projet fini ****************************************** */#[Route('/fini/modifier/{id<\d+>}', name: 'app_modifier_fini')]public function editFini(Request $request,TypeChantierRepository $typecRep ,ProduitRepository $produitRep,EntityManagerInterface $em,CommercialRepository $comrep,ProduitRepository $prodRep,IntervenantRepository $intervenetRep,TypeIntervenantRepository $typeIntRep ,NatureChantierRepository $natureRep,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep , VisiteRepository $visiteRep,TypeIntervenantRepository $typeIRep,$id,TypeProduitRepository $typeprodRep,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$ch=$chantierRep->find($id);$intervenants = $ch->getIntervenant();$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $ch]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}$t=$ch->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){$now = new \DateTime();//dd($request->request->all());//$type=$typecRep->findOneByNom('en prospect');$zone=$zoneRep->findOneById($request->get('zone'));$nat=$natureRep->findOneById($request->get('naturec'));$type=$typecRep->findOneById($request->get('typec'));$clientId = $request->get('nomclient');$client = $revendeurRep->find($clientId);$ch->setNom($request->get('nom'));$ch->setRaidechausse($request->get('rai'));$ch->setMetrage(intval($request->get('metrage')));$ch->setDateModification(new \DateTime());$ch->setValeur($request->get('valeur'));$ch->setProducts($request->get('products'));$ch->setConcurrent($request->get('concurrent'));$ch->setMcarre($request->get('mcarre'));$ch->SetVglobal($request->get('vglobal'));$ch->setFinancement($request->get('financement'));//$ch->setOtherclient($request->get('otherclient'));$other=$request->get('otherclient');if (empty($other)) {$ch->setOtherclient(null);} else {$ch->setOtherclient($other);}$datedebut =$request->get('datedebut');$ch->setDatedebut($datedebut);$ch->setClient($client);$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande($demandeValue);}if($request->request->get('plan') == 'on'){$ch->setPlanDaction('oui');}else{$ch->setPlanDaction('non');}$visite = $visiteRep->findOneByChantier($ch);$visitetDate=$request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($ch);$visite->setCause($request->get('cause'));if ($type !== null) {$visite->setClassement($type->getType());}$em->persist($visite);$products = $ch->getChantierProduits();if (count($products) > 0) {foreach ($products as $key => $p) {if (isset($request->get('typec')[$key]) && isset($request->get('produit')[$key])) {$typeChantier = $typecRep->find($request->get('typec')[$key]);$pr = $produitRep->find($request->get('produit')[$key]);$p->setType($typeChantier->getType());$p->setProduit($pr);}}}$ch->setZone($zone);$prod=$prodRep->findOneById($request->get('produit'));$typeProduit = $em->getRepository(TypeProduit::class)->findOneBy([]);$existingChantierProducts = $ch->getChantierProducts();foreach ($request->get('produit') as $pr) {// Find the product entity$produit = $produitRep->find($pr);// Check if this product is already associated with the chantier$existingChantierProduct = null;foreach ($existingChantierProducts as $existingProduct) {if ($existingProduct->getProduit() === $produit) {$existingChantierProduct = $existingProduct;break;}}if ($existingChantierProduct === null) {// If the product is not associated, create a new ChantierProduct entity$chantierProduct = new ChantierProduct();$chantierProduct->setProduit($produit);$chantierProduct->setChantier($ch);$em->persist($chantierProduct);} else {// If the product is already associated, update the association (optional)// $existingChantierProduct->setProduit($produit); // Optionally update the product if needed}}// Remove any ChantierProduct entities associated with the chantier but not included in the submitted products (optional)foreach ($existingChantierProducts as $existingProduct) {if (!in_array($existingProduct->getProduit()->getId(), $request->get('produit'))) {$em->remove($existingProduct);}}$em->flush();// Persist all changes to the database$em->flush();// Redirect or render the appropriate response$ch->settype($type);$ch->setNature($nat);$ch->setCommercial($com);$ch->setLatitude($request->get('latitude'));$ch->setLongitude($request->get('longitude'));$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}foreach ($intervenants as $intervenant) {$ch->removeIntervenant($intervenant);}$ch->addIntervenant($intervenetRep->findOneById($request->get('nomp')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nome')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomap')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nomar')));$ch->addIntervenant($intervenetRep->findOneById($request->get('nompilot')));$existingChantier = $chantierRep->findOneBy(['nom' => $request->get('nom'),'zone' => $zone]);if ($existingChantier != null && $ch != null && $existingChantier->getId() != $ch->getId()) {$ChantierName = $ch->getNom(); // Store the previous name before modifying$this->addFlash('error', 'Le nom de chantier "' . $ChantierName . '" existe déjà. Veuillez en choisir un autre !!!');$ch->setNom(''); // Set the name of $ch to an empty string}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >= $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) >$visitepDate){$this->addFlash('error','Date de la visite est superieur a la date prochain visite!!!');}else{$this->addFlash('success','Le chantier est modifié avec succès!!!');$em->persist($ch);$em->flush();return $this->redirectToRoute('app_finis');}}$pis=$intervenetRep->findBytype($typeIntRep->findOneById('1'));$egcs=$intervenetRep->findBytype($typeIntRep->findOneById('2'));$apps=$intervenetRep->findBytype($typeIntRep->findOneById('3'));$archs=$intervenetRep->findBytype($typeIntRep->findOneById('4'));$pilots=$intervenetRep->findBytype($typeIntRep->findOneById('5'));$ipi=null;$iegc=null;$iap=null;$iar=null;$ipilots=null;$ints=$ch->getIntervenant();foreach ($ints as $i) {if($i->getType()==$typeIntRep->findOneById('1'))$ipi=$i;elseif($i->getType()==$typeIntRep->findOneById('2'))$iegc=$i;elseif($i->getType()==$typeIntRep->findOneById('3'))$iap=$i;elseif($i->getType()==$typeIntRep->findOneById('4'))$iar=$i;else$ipilots=$i;}$em->persist($ch);$em->flush();$tab=[];$chantierproduit=$ch->getChantierProduits();foreach($chantierproduit as $chs){array_push($tab,$chs->getType());}$revendeurs = $em->getRepository(Revendeur::class)->findAll();return $this->render('commercial/modifierFini.html.twig', ['chantier'=>$ch,'Tinters'=>$typeIntRep->findAll(),'types' => $typecRep->findAll(),'prod' =>$produitRep->findAll(),'pis'=>$pis,'egcs'=>$egcs ,'apps'=>$apps,'archs'=>$archs,'pilots'=>$pilots,'natures'=>$natureRep->findAll(),'zones'=>$zoneRep->findAll(),'typec'=>$typecRep->findAll(),'ipi'=>$ipi,'iegc'=>$iegc,'iap'=>$iap,'iar'=>$iar,'ipilots'=>$ipilots,'user'=>$com,'typec'=>$typecRep->findAll(),'typeprod'=>$typeprodRep->findAll(),'t'=>$t,'iegc'=>$iegc,'tabType'=>$tab,'int'=>$ints,'selectedProductIds' => $selectedProductIds,'revendeurs' => $revendeurs,]);}#[Route('commercial/revendeur/{id}/editfini', name: 'app_revendeur_editfini')]public function modifierRevendeurFini(Request $request, VisiteRepository $visiteRep,EntityManagerInterface $em,Chantier $chantier, TypeChantierRepository $typecRep, CommercialRepository $comrep, ZoneRepository $zoneRep,ProduitRepository $produitRep, RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error', "Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user = $this->getUser();$com = $comrep->findOneByUser($user);$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $chantier]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}if ($request->isMethod('POST')) {$zone = $zoneRep->findOneById($request->get('zone'));// $typec = $typecRep->findOneByNom('en prospect');$typec = $typecRep->findOneById($request->get('typec'));$visitetDate = $request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$chantier->setNom($request->get('nom'));$chantier->setConcurrent($request->get('concurrent'));$chantier->setDemande($request->get('demande') ? 'Revendeur : ' . $request->get('demande') : null);$chantier->setBudgetrev($request->get('budgetrev'));$chantier->setTyperev($request->get('typerev'));$chantier->setType($typec);$chantier->setZone($zone);$chantier->SetVglobal($request->get('vglobal'));// Mise à jour des produits associés au chantier// $chantier->clearChantierProduits();foreach ($request->get('produit') as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantierProduit->setBudgetrev($request->get('budgetrev'));$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}// $visite = new Visite();$visite = $visiteRep->findOneByChantier($chantier);$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($chantier);$visite->setCause($request->get('cause'));$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success', 'visite client a été modifié avec succès!!!');return $this->redirectToRoute('app_finis');}return $this->render('commercial/ModifVisiteRevFini.html.twig', ['chantier' => $chantier,'zones' => $zoneRep->findAll(),'prod' => $produitRep->findAll(),'user' => $com,'revendeurs' => $revendeurRep->findAll(),'selectedProductIds' => $selectedProductIds,'typec'=>$typecRep->findAll(),]);}///************************************************************************************************************** */#[Route('commercial/visite/chantier/{id<\d+>}', name: 'app_Ajout_Visite')]public function AjoutVisite(Request $request,EntityManagerInterface $em, Chantier $chantier,TypeChantierRepository $typecRep ,TypeIntervenantRepository $typeIRep ,IntervenantRepository $intervenetRep ,CommercialRepository $comrep,ProduitRepository $produitRep,VisiteRepository $visiteRepository,TypeProduitRepository $typeprodRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$now = new \DateTime();//$visitetDate = $now->format('Y-m-d');$t=$chantier->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $chantier]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}if($request->isMethod('POST')){// dd($request->request->all());$visitetDate=$request->get('date');$visitettype=$request->get('typev');$type=$typecRep->findOneById($request->get('typec'));$iPI=$intervenetRep->findOneById($request->get('nomp'));$iE=$intervenetRep->findOneById($request->get('nome'));$iAP=$intervenetRep->findOneById($request->get('nomap'));$iAR=$intervenetRep->findOneById($request->get('nomar'));$iPILOTS=$intervenetRep->findOneById($request->get('nomapilot'));$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setProducts($request->get('products'));$visite->setDateCreation(new \DateTime());$visite->setBudget($request->get('budget'));$visite->setCause($request->get('cause'));$visite->setDatevisite($visitetDate);$visite->settype($visitettype);$visite->setChantier($chantier);if ($type !== null) {$visite->setClassement($type->getType());}if(!$chantier->getIntervenant()->contains($iPI)){$chantier->addIntervenant($iPI);}if(!$chantier->getIntervenant()->contains($iE)){$chantier->addIntervenant($iE);}if(!$chantier->getIntervenant()->contains($iAP)){$chantier->addIntervenant($iAP);}if(!$chantier->getIntervenant()->contains($iAR)){$chantier->addIntervenant($iAR);}if(!$chantier->getIntervenant()->contains($iPILOTS)){$chantier->addIntervenant($iPILOTS);}////// begin photo$uploaddir = 'telechargement/';$file = $request->files->get('image');if($file != null){// Vérifier si un fichier a été téléchargéif (!$file instanceof UploadedFile) {throw new FileException('pas de fichier a telechargé');}$fileName = $file->getClientOriginalName();$uploadfile = $uploaddir . $fileName;// Déplacer le fichier téléchargé vers le répertoire de destinationtry {$file->move($uploaddir, $fileName);} catch (FileException $e) {$this->addFlash('error','pas de fichier !!!');}$visite->setPhoto($fileName);}else{$visite->setPhoto(null);}///////end photo// Verifier la date de la visite$derniereVisite = $chantier->getVisite()->last();if (($type !== null && $type->gettype() == 'en negociation' && $chantier->getType() !== null && $chantier->getType()->getType() == 'en cours') ||($type !== null && $type->gettype() == 'en prospect' && $chantier->getType() !== null && $chantier->getType()->getType() == 'en negociation') ||($type !== null && $type->gettype() == 'en prospect' && $chantier->getType() !== null && $chantier->getType()->getType() == 'en cours')) { $this->addFlash('error', 'Etat incorrect !!! Veuillez sélectionner l\'état du chantier.');}elseif ($derniereVisite->getDatevisite() > $visitetDate ) {$this->addFlash('error','Date de la derniere visite est superieur a la date de la nouvelle visite!!!');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) > $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}else{if ($chantier->getType() != $type){$chantier->setType($type);}$chantier->addVisite($visite);$chantier->setNombreVisite($chantier->getNombreVisite()+1);$products=$chantier->getChantierProduits();$chantier->setProducts($request->get('products'));if(count($products)>0){foreach($products as $key=>$p){if(isset($request->get('typec')[$key])){$typeChantier=$typecRep->find($request->get('typec')[$key]);$pr=$produitRep->find($request->get('produit')[$key]);$p->setType($typeChantier->getType());$p->setProduit($pr);}}}$prod=$produitRep->findOneById($request->get('produit'));$typeprod = $typeprodRep->findOneById($request->get('typeprod'));$typeProduit = $em->getRepository(TypeProduit::class)->findAll();$typeProduit = $em->getRepository(TypeProduit::class)->findOneBy([]);foreach ($request->get('produit') as $pr) {// Find the product by its ID$produit = $produitRep->find($pr);// Check if the product existsif ($produit !== null) {// Check if there is already a ChantierProduct associated with the product$existingChantierProduct = $em->getRepository(ChantierProduct::class)->findOneBy(['produit' => $produit,'chantier' => $chantier,]);// If there is no existing ChantierProduct for this product and chantier, create oneif ($existingChantierProduct === null) {$chantierProduct = new ChantierProduct();$chantierProduct->setProduit($produit);$chantierProduct->setChantier($chantier);$chantierProduct->setVisite($visite);// Ensure all Visite entities associated with the Chantier are persistedforeach ($chantier->getVisite() as $visite) {$em->persist($visite);}$em->persist($chantierProduct);$em->flush();}}}$uploaddir = 'telechargement/';$tab2 = [];if (isset($_FILES['devis'])) { // Check if 'devis' is set in $_FILES arrayfor ($i = 0; $i < count($_FILES['devis']['name']); $i++) {$uploadfile = $uploaddir . basename($_FILES['devis']['name'][$i]);if (move_uploaded_file($_FILES['devis']['tmp_name'][$i], $uploadfile)) {$tab2[] = $_FILES['devis']['name'][$i];}}} else {// Handle the case where no files were uploadedecho "No files uploaded.";}// Assuming $visite is defined and has a setDevis method$visite->setDevis(implode(',', $tab2)); // Corrected $tab to $tab2if($request->request->get('plan') == 'on'){$chantier->setPlanDaction('oui');}else{$chantier->setPlanDaction('non');}$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success','La visite est ajoutée avec succès!!!');return $this->redirectToRoute('app_liste_visite',['id'=>$chantier->getId(),]);}}$pis=$intervenetRep->findBytype($typeIRep->findOneById('1'));$egcs=$intervenetRep->findBytype($typeIRep->findOneById('2'));$apps=$intervenetRep->findBytype($typeIRep->findOneById('3'));$archs=$intervenetRep->findBytype($typeIRep->findOneById('4'));$pilots=$intervenetRep->findBytype($typeIRep->findOneById('5'));$ints=$chantier->getIntervenant();$ipi=null;$iegc=null;$iap=null;$iar=null;$ipilots=null;foreach ($ints as $i) {if($i->getType()==$typeIRep->findOneById('1'))$ipi=$i;elseif($i->getType()==$typeIRep->findOneById('2'))$iegc=$i;elseif($i->getType()==$typeIRep->findOneById('3'))$iap=$i;elseif($i->getType()==$typeIRep->findOneById('4'))$iar=$i;else$ipilots=$i;}$tab=[];$chantierproduit=$chantier->getChantierProduits();foreach($chantierproduit as $ch){array_push($tab,$ch->getType());}return $this->render('commercial/visite.html.twig', ['chant' => $chantier,'typec'=>$typecRep->findAll(),'t'=>$t,'prod'=>$produitRep->findAll(),'ipi'=>$ipi,'iegc'=>$iegc,'iap'=>$iap,'iar'=>$iar,'ipilots'=>$ipilots,'tabType'=>$tab,'pis'=>$pis,'egcs'=>$egcs ,'apps'=>$apps,'archs'=>$archs,'pilots'=>$pilots,'int'=>$ints,'user'=>$com,'typeprod'=>$typeprodRep->findAll(),'selectedProductIds' => $selectedProductIds,]);}#[Route('commercial/visite/liste/{id<\d+>}', name: 'app_liste_visite')]public function listeVisite(Chantier $chantier,VisiteRepository $visiteRep ,CommercialRepository $comrep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);$visites = $visiteRep->findByChantier($chantier);// Fetch products for each visit$productsByVisite = [];foreach ($visites as $visite) {$productsByVisite[$visite->getId()] = $visite->getChantierProducts();}return $this->render('commercial/listeVisite.html.twig', ['visites' => $visites,'c'=>$chantier,'user'=>$com,'productsByVisite' => $productsByVisite,]);}#[Route('directeur/visite/liste/{id<\d+>}', name: 'app_liste_visite_dir')]public function listeVisitesDir(Chantier $chantier,VisiteRepository $visiteRep,DirecteurRepository $dirRep): Response{if (!$this->isGranted('ROLE_DIRECTION') && !$this->isGranted('ROLE_DIRECTEUR')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$dir=$dirRep->findOneByUser($user);$templates = 'direction/listeVisite.html.twig';$parameters = ['visites' => $visiteRep->findByChantier($chantier),'c'=>$chantier,'user'=>$dir,];if ($this->isGranted('ROLE_DIRECTEUR')) {// Override template and parameters for ROLE_DIRECTEUR$templates = 'directeur/listeVisite.html.twig';$parameters = ['visites' => $visiteRep->findByChantier($chantier),'c'=>$chantier,'user'=>$dir,];}return $this->render($templates, $parameters);}////////////////////////////revendeuurr#[Route('commercial/revendeur/ajout', name: 'app_revendeur')]public function nouveauRevendeur(Request $request,EntityManagerInterface $em, TypeChantierRepository $typecRep,CommercialRepository $comrep ,VisiteRepository $visiteRep,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep, ProduitRepository $produitRep,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){$now = new \DateTime();$zone=$zoneRep->findOneById($request->get('zone'));$typec=$typecRep->findOneByNom('en prospect');$visitetDate=$request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$ch=new Chantier();$ch->setNom($request->get('nom'));$ch->setDateModification(new \DateTime());$ch->setConcurrent($request->get('concurrent'));$ch->setChoix($request->get('choix'));$ch->SetVglobal($request->get('vglobal'));$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande('client : '.$demandeValue);}$budgetrev = $request->get('budgetrev');$ch->setBudgetrev($budgetrev);$typerev = $request->get('typerev');$ch->setTyperev($typerev);$ch->settype($typec);foreach ($request->get('produit') as $pr) {$prod = $produitRep->findOneById($pr);// Retrieve the budgetrev value from your request data, ensuring it's not null.$budgetrev = $request->get('budgetrev') ?? ''; // If budgetrev is null, set an empty string.$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($ch);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');// Set the budgetrev property of the ChantierProduit entity.$chantierProduit->setBudgetrev($budgetrev);$ch->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}$ch->setZone($zone);$ch->setNombreVisite(1);$ch->setCommercial($com);$ch->setRevendeur('oui');$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);if ($visitepDate !== null) {$visite->setDatepvisite($visitepDate);} else {$visite->setDatepvisite(null); // or don't set it at all, depending on your business logic}$uploaddir = 'telechargement/';$tab2 = [];if (isset($_FILES['devis'])) { // Check if 'devis' is set in $_FILES arrayfor ($i = 0; $i < count($_FILES['devis']['name']); $i++) {$uploadfile = $uploaddir . basename($_FILES['devis']['name'][$i]);if (move_uploaded_file($_FILES['devis']['tmp_name'][$i], $uploadfile)) {$tab2[] = $_FILES['devis']['name'][$i];}}} else {// Handle the case where no files were uploadedecho "No files uploaded.";}// Assuming $visite is defined and has a setDevis method$visite->setDevis(implode(',', $tab2)); // Corrected $tab to $tab2$data = json_decode($request->getContent(), true);// Create Calendar entity$calendar = new Calendar();$calendar->setTitle($data['title'] ?? $ch->getNom()); // Use null coalescing operator to handle undefined keys$calendar->setStart(($visitepDate));$calendar->setEnd(($visitepDate));$calendar->setCommercial($com);$em->persist($calendar);$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}////////////////////////bug la visite de clients deja existe/////////////////////$user =$this->getUser();$com=$comrep->findOneByUser($user);$chantierRep = $this->chantierRepository->findBy(['commercial' => $com]);$nom = $request->get('nom');$found = false;foreach ($chantierRep as $chantier) {if ($chantier->getNom() === $nom) {$found = true;break;}}if($found){//////////////////////////////////////////////////////////////////////////////////////////////////////$this->addFlash('error', "La visite de client existe déjà ! Veuillez consulter la liste des visites.");return $this->redirectToRoute('app_revendeur_list');}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) > $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');return $this->redirectToRoute('app_revendeur_list');}else{$this->addFlash('success','Le client est ajouté avec succès!!!');$ch->addVisite($visite);$em->persist($visite);$em->persist($ch);$em->flush();return $this->redirectToRoute('app_revendeur_list');}}$revendeurs = $em->getRepository(Revendeur::class)->findAll();return $this->render('commercial/nouveauRevendeur.html.twig', ['zones'=>$zoneRep->findAll(),'prod'=>$produitRep->findAll(),'user'=>$com,'revendeurs' => $revendeurs,]);}#[Route('commercial/liste/revendeur', name: 'app_revendeur_list')]public function listrev(ChantierRepository $toutChRep , CommercialRepository $comrep ,TypeChantierRepository $typeCRep,TypeIntervenantRepository $typeIRep,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);$t=$typeCRep->findOneByNom('en prospect');$toutch= $toutChRep->findByrevcommercial($com,'oui');return $this->render('commercial/listerevendeur.html.twig', ['ch' =>$toutch,'revendeur' => $revendeurRep->findAll(),'user'=>$com,]);}#[Route('commercial/visiteRev/liste/{id<\d+>}', name: 'app_liste_visiteRev')]public function listeVisiteRev(Chantier $chantier,VisiteRepository $visiteRep ,CommercialRepository $comrep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);return $this->render('commercial/listeVisiteRev.html.twig', ['visites' => $visiteRep->findByChantier($chantier, ['id' => 'desc']),'c'=>$chantier,'user'=>$com,'ch'=>$chantier,]);}#[Route('commercial/visiteRev/chantier/{id<\d+>}', name: 'app_Ajout_VisiteRev')]public function AjoutVisiteRev(Request $request,EntityManagerInterface $em, Chantier $chantier,TypeChantierRepository $typecRep ,TypeIntervenantRepository $typeIRep ,IntervenantRepository $intervenetRep ,CommercialRepository $comrep, ProduitRepository $produitRep,RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$now = new \DateTime();//$visitetDate = $now->format('Y-m-d');$t=$chantier->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){// dd($request->request->all());$visitetDate=$request->get('date');$type=$typecRep->findOneById($request->get('typec'));$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDateCreation(new \DateTime());$visite->setCause($request->get('cause'));$visite->setBudget($request->get('budget'));// $prod=$produitRep->findOneById($request->get('produit'));//$chantier->addChantierProduit($prod);$visitettype=$request->get('typev');$visite->settype($visitettype);// Parcourez les produits envoyés dans la requêteforeach ($request->get('produit') as $pr) {// Récupérez le produit à partir du repository$prod = $produitRep->findOneById($pr);// Vérifiez si le produit est déjà associé au chantier$alreadyAdded = false;foreach ($chantier->getChantierProduits() as $chantierProduit) {if ($chantierProduit->getProduit()->getId() == $prod->getId()) {$alreadyAdded = true;break;}}// Si le produit n'est pas déjà associé, créez une nouvelle associationif (!$alreadyAdded) {$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}}$uploaddir = 'telechargement/';$tab2 = [];if (isset($_FILES['devis'])) { // Check if 'devis' is set in $_FILES arrayfor ($i = 0; $i < count($_FILES['devis']['name']); $i++) {$uploadfile = $uploaddir . basename($_FILES['devis']['name'][$i]);if (move_uploaded_file($_FILES['devis']['tmp_name'][$i], $uploadfile)) {$tab2[] = $_FILES['devis']['name'][$i];}}} else {// Handle the case where no files were uploadedecho "No files uploaded.";}// Assuming $visite is defined and has a setDevis method$visite->setDevis(implode(',', $tab2)); // Corrected $tab to $tab2$visite->setDatevisite($visitetDate);$visite->setChantier($chantier);if ($type !== null) {$visite->setClassement($type->getType());}$chantier->settype($type);$chantier->addVisite($visite);$chantier->setNombreVisite($chantier->getNombreVisite()+1);$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success','La visite est ajoutée avec succès!!!');return $this->redirectToRoute('app_liste_visiteRev',['id'=>$chantier->getId(),]);}return $this->render('commercial/visiteRev.html.twig', ['chant' => $chantier,'typec'=>$typecRep->findAll(),'t'=>$t,'prod'=>$produitRep->findAll(),'revendeur' => $revendeurRep->findAll(),'user'=>$com,]);}///////////////////////////modif revendeur//prospect#[Route('commercial/revendeur/{id}/editprospect', name: 'app_revendeur_edit')]public function modifierRevendeur(Request $request, VisiteRepository $visiteRep,EntityManagerInterface $em, Chantier $chantier, TypeChantierRepository $typecRep, CommercialRepository $comrep, ZoneRepository $zoneRep, ProduitRepository $produitRep, RevendeurRepository $revendeurRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error', "Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user = $this->getUser();$com = $comrep->findOneByUser($user);$chantierProducts = $em->getRepository(ChantierProduct::class)->findBy(['chantier' => $chantier]);// Tableau pour stocker les identifiants des produits déjà associés au chantier$selectedProductIds = [];foreach ($chantierProducts as $chantierProduct) {$selectedProductIds[] = $chantierProduct->getProduit()->getId();}if ($request->isMethod('POST')) {$zone = $zoneRep->findOneById($request->get('zone'));// $typec = $typecRep->findOneByNom('en prospect');$typec = $typecRep->findOneById($request->get('typec'));$visitetDate = $request->get('date');$visitepDate = new \DateTime($request->get('datepvisite'));$chantier->setNom($request->get('nom'));$chantier->setConcurrent($request->get('concurrent'));$chantier->setDemande($request->get('demande') ? 'Revendeur : ' . $request->get('demande') : null);$chantier->setBudgetrev($request->get('budgetrev'));$chantier->setTyperev($request->get('typerev'));$chantier->setType($typec);$chantier->setZone($zone);$chantier->SetVglobal($request->get('vglobal'));// Mise à jour des produits associés au chantier// $chantier->clearChantierProduits();foreach ($request->get('produit') as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantierProduit->setBudgetrev($request->get('budgetrev'));$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}// $visite = new Visite();$visite = $visiteRep->findOneByChantier($chantier);$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setDatepvisite($visitepDate);$visite->setChantier($chantier);$visite->setCause($request->get('cause'));$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success', 'visite client a été modifié avec succès!!!');return $this->redirectToRoute('app_prospects');}return $this->render('commercial/ModifVisiteRev.html.twig', ['chantier' => $chantier,'zones' => $zoneRep->findAll(),'prod' => $produitRep->findAll(),'user' => $com,'revendeurs' => $revendeurRep->findAll(),'selectedProductIds' => $selectedProductIds,'typec'=>$typecRep->findAll(),]);}////////////////////////////architect///////////////////////#[Route('commercial/architect/ajout', name: 'app_architect')]public function nouveauArchitect (Request $request,EntityManagerInterface $em,CommercialRepository $comrep ,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep,ProduitRepository $produitRep,ArchitecteRepository $architecteRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){$now = new \DateTime();$zone=$zoneRep->findOneById($request->get('zone'));$visitetDate=$request->get('date');$ch=new Chantier();$ch->setNom($request->get('nom'));$demandeValue = $request->get('demande');if (empty($demandeValue)) {$ch->setDemande(null);} else {$ch->setDemande('Architecte : '.$demandeValue);}foreach ($request->get('produit') as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($ch);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$ch->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}$ch->setZone($zone);$ch->setNombreVisite(1);$ch->setCommercial($com);$ch->setArchitect('oui');$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}if($chantierRep->findOneByNom(($request->get('nom')))!=null){$this->addFlash('error', "La visite de l'architecte existe déjà ! Veuillez consulter la liste des visites.");}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) > $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}else{$this->addFlash('success', 'La visite de l\'architecte est ajoutée avec succès!!!');$ch->addVisite($visite);$em->persist($visite);$em->persist($ch);$em->flush();return $this->redirectToRoute('app_architect_list');}}return $this->render('commercial/nouveauArchitect.html.twig', ['zones'=>$zoneRep->findAll(),'prod'=>$produitRep->findAll(),'architecte' => $architecteRep->findAll(),'user'=>$com,]);}#[Route('commercial/liste/architect', name: 'app_architect_list')]public function listarchitect(ChantierRepository $toutChRep , CommercialRepository $comrep ,TypeChantierRepository $typeCRep,TypeIntervenantRepository $typeIRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);$t=$typeCRep->findOneByNom('en prospect');$toutcha= $toutChRep->findByarchcommercial($com,'oui');return $this->render('commercial/listearchitect.html.twig', ['ch' =>$toutcha,'user'=>$com,]);}#[Route('commercial/visiteArch/liste/{id<\d+>}', name: 'app_liste_visiteArch')]public function listeVisiteArch(Chantier $chantier,VisiteRepository $visiteRep ,CommercialRepository $comrep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);return $this->render('commercial/listeVisiteArch.html.twig', ['visites' => $visiteRep->findByChantier($chantier),'c'=>$chantier,'user'=>$com,'ch'=>$chantier,]);}#[Route('commercial/visiteArch/chantier/{id<\d+>}', name: 'app_Ajout_VisiteArch')]public function AjoutVisiteArch(Request $request,EntityManagerInterface $em, Chantier $chantier,TypeChantierRepository $typecRep ,TypeIntervenantRepository $typeIRep ,IntervenantRepository $intervenetRep ,CommercialRepository $comrep,ProduitRepository $produitRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$now = new \DateTime();//$visitetDate = $now->format('Y-m-d');$t=$chantier->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){// dd($request->request->all());$visitetDate=$request->get('date');//$prod=$produitRep->findOneById($request->get('produit'));//$chantier->addChantierProduit($prod);foreach ($request->get('produit') as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setChantier($chantier);$chantier->addVisite($visite);$chantier->setNombreVisite($chantier->getNombreVisite()+1);$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success','La visite est ajoutée avec succès!!!');return $this->redirectToRoute('app_liste_visiteArch',['id'=>$chantier->getId(),]);}return $this->render('commercial/visiteArch.html.twig', ['chant' => $chantier,'t'=>$t,'prod'=>$produitRep->findAll(),'user'=>$com,]);}////////////////////////////pi///////////////////////#[Route('commercial/pi/ajout', name: 'app_pi')]public function nouveauPi (Request $request,EntityManagerInterface $em,CommercialRepository $comrep ,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep,ProduitRepository $produitRep,PiRepository $piRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){$now = new \DateTime();$zone=$zoneRep->findOneById($request->get('zone'));$visitetDate=$request->get('date');$ch=new Chantier();$ch->setNom($request->get('nom'));$produits = $request->get('produit');if (is_array($produits) && count($produits) > 0) {foreach ($produits as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($ch);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$ch->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}}$ch->setZone($zone);$ch->setNombreVisite(1);$ch->setCommercial($com);$ch->setPi('oui');$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}if($chantierRep->findOneByNom(($request->get('nom')))!=null){$this->addFlash('error', "La visite de PI existe déjà ! Veuillez consulter la liste des visites.");}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) > $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}else{$this->addFlash('success','Pi est ajouté avec succès!!!');$ch->addVisite($visite);$em->persist($visite);$em->persist($ch);$em->flush();//return $this->redirectToRoute('app_architect_list');}}return $this->render('commercial/nouveauPi.html.twig', ['zones'=>$zoneRep->findAll(),'prod'=>$produitRep->findAll(),'pi' => $piRep->findAll(),'user'=>$com,]);}#[Route('commercial/liste/pi', name: 'app_pi_list')]public function listpi(ChantierRepository $toutChRep , CommercialRepository $comrep ,TypeChantierRepository $typeCRep,TypeIntervenantRepository $typeIRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);$t=$typeCRep->findOneByNom('en prospect');$toutcha= $toutChRep->findBypicommercial($com,'oui');return $this->render('commercial/listepi.html.twig', ['ch' =>$toutcha,'user'=>$com,]);}#[Route('commercial/visitepi/liste/{id<\d+>}', name: 'app_liste_visitepi')]public function listeVisitePi(Chantier $chantier,VisiteRepository $visiteRep ,CommercialRepository $comrep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);return $this->render('commercial/listeVisitepi.html.twig', ['visites' => $visiteRep->findByChantier($chantier),'c'=>$chantier,'user'=>$com,'ch'=>$chantier,]);}#[Route('commercial/visitepi/chantier/{id<\d+>}', name: 'app_Ajout_Visitepi')]public function AjoutVisitepi(Request $request,EntityManagerInterface $em, Chantier $chantier,TypeChantierRepository $typecRep ,TypeIntervenantRepository $typeIRep ,IntervenantRepository $intervenetRep ,CommercialRepository $comrep,ProduitRepository $produitRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$now = new \DateTime();//$visitetDate = $now->format('Y-m-d');$t=$chantier->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){// dd($request->request->all());$visitetDate=$request->get('date');//$prod=$produitRep->findOneById($request->get('produit'));//$chantier->addChantierProduit($prod);$produits = $request->get('produit');if (is_array($produits) && count($produits) > 0) {foreach ($produits as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}}$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setChantier($chantier);$chantier->addVisite($visite);$chantier->setNombreVisite($chantier->getNombreVisite()+1);$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success','La visite est ajoutée avec succès!!!');return $this->redirectToRoute('app_liste_visitepi',['id'=>$chantier->getId(),]);}return $this->render('commercial/visitepi.html.twig', ['chant' => $chantier,'t'=>$t,'prod'=>$produitRep->findAll(),'user'=>$com,]);}////////////////////////////egc///////////////////////#[Route('commercial/egc/ajout', name: 'app_egc')]public function nouveauEGC (Request $request,EntityManagerInterface $em,CommercialRepository $comrep ,ChantierRepository $chantierRep, DirecteurRepository $directeurRep, ZoneRepository $zoneRep,ProduitRepository $produitRep,EgcRepository $egcRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){$now = new \DateTime();$zone=$zoneRep->findOneById($request->get('zone'));$visitetDate=$request->get('date');$ch=new Chantier();$ch->setNom($request->get('nom'));$produits = $request->get('produit');if (is_array($produits) && count($produits) > 0) {foreach ($produits as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($ch);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$ch->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}}$ch->setZone($zone);$ch->setNombreVisite(1);$ch->setCommercial($com);$ch->setEgc('oui');$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$directeurs=$directeurRep->findAll();foreach ($directeurs as $d) {$ch->addDirecteur($d);}if($chantierRep->findOneByNom(($request->get('nom')))!=null){$this->addFlash('error', "La visite de egc existe déjà ! Veuillez consulter la liste des visites.");}elseif(\DateTime::createFromFormat('Y-m-d', $visitetDate) > $now){$this->addFlash('error','Date de la visite est superieur a la date systeme!!!');}else{$this->addFlash('success','egc est ajouté avec succès!!!');$ch->addVisite($visite);$em->persist($visite);$em->persist($ch);$em->flush();return $this->redirectToRoute('app_egc_list');}}return $this->render('commercial/nouveauegc.html.twig', ['zones'=>$zoneRep->findAll(),'prod'=>$produitRep->findAll(),'egc' => $egcRep->findAll(),'user'=>$com,]);}#[Route('commercial/liste/egc', name: 'app_egc_list')]public function listegc(ChantierRepository $toutChRep , CommercialRepository $comrep ,TypeChantierRepository $typeCRep,TypeIntervenantRepository $typeIRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);$t=$typeCRep->findOneByNom('en prospect');$toutcha= $toutChRep->findByegccommercial($com,'oui');return $this->render('commercial/listeegc.html.twig', ['ch' =>$toutcha,'user'=>$com,]);}#[Route('commercial/visiteegc/liste/{id<\d+>}', name: 'app_liste_visiteegc')]public function listeVisiteeGC(Chantier $chantier,VisiteRepository $visiteRep ,CommercialRepository $comrep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$com=$comrep->findOneByUser($user);return $this->render('commercial/listeVisiteegc.html.twig', ['visites' => $visiteRep->findByChantier($chantier),'c'=>$chantier,'user'=>$com,'ch'=>$chantier,]);}#[Route('commercial/visiteegc/chantier/{id<\d+>}', name: 'app_Ajout_Visiteegc')]public function AjoutVisiteegc(Request $request,EntityManagerInterface $em, Chantier $chantier,TypeChantierRepository $typecRep ,TypeIntervenantRepository $typeIRep ,IntervenantRepository $intervenetRep ,CommercialRepository $comrep,ProduitRepository $produitRep): Response{if (!$this->isGranted('ROLE_COMMERCIAL')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$now = new \DateTime();//$visitetDate = $now->format('Y-m-d');$t=$chantier->getType();$user =$this->getUser();$com=$comrep->findOneByUser($user);if($request->isMethod('POST')){// dd($request->request->all());$visitetDate=$request->get('date');//$prod=$produitRep->findOneById($request->get('produit'));//$chantier->addChantierProduit($prod);$produits = $request->get('produit');if (is_array($produits) && count($produits) > 0) {foreach ($produits as $pr) {$prod = $produitRep->findOneById($pr);$chantierProduit = new ChantierProduit();$chantierProduit->setChantier($chantier);$chantierProduit->setProduit($prod);$chantierProduit->setType('en prospect');$chantier->addChantierProduit($chantierProduit);$em->persist($chantierProduit);}}$visite= new Visite();$visite->setObservation($request->get('observation'));$visite->setDatevisite($visitetDate);$visite->setChantier($chantier);$chantier->addVisite($visite);$chantier->setNombreVisite($chantier->getNombreVisite()+1);$em->persist($visite);$em->persist($chantier);$em->flush();$this->addFlash('success','La visite est ajoutée avec succès!!!');return $this->redirectToRoute('app_liste_visiteegc',['id'=>$chantier->getId(),]);}return $this->render('commercial/visiteegc.html.twig', ['chant' => $chantier,'t'=>$t,'prod'=>$produitRep->findAll(),'user'=>$com,]);}#[Route('dir/visiteRev/liste/{id<\d+>}', name: 'dir_liste_visiteRev')]public function listedirVisiteRev(Chantier $chantier,VisiteRepository $visiteRep ,DirecteurRepository $dirRep): Response{if (!$this->isGranted('ROLE_DIRECTION')) {$this->addFlash('error',"Vous n'avez pas le droit!!!");return $this->redirectToRoute('app_login');}$user =$this->getUser();$dir=$dirRep->findOneByUser($user);return $this->render('direction/listeVisiteRev.html.twig', ['visites' => $visiteRep->findByChantier($chantier, ['id' => 'desc']),'c'=>$chantier,'user'=>$dir,'ch'=>$chantier,]);}}