src/Controller/Api/Prive/ApiEspaceagentController.php line 342

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Api\Prive;
  3. use App\Entity\Appareil;
  4. use App\Entity\Appel;
  5. use App\Entity\Appelstatut;
  6. use App\Entity\Campagne;
  7. use App\Entity\Campagnecollaborateur;
  8. use App\Entity\Campagneprospect;
  9. use App\Entity\Cleaningdb;
  10. use App\Entity\Cleaningdbcollaborateur;
  11. use App\Entity\Commentaire;
  12. use App\Entity\Contact;
  13. use App\Entity\Fichier;
  14. use App\Entity\Prospect;
  15. use App\Entity\Prospectdetail;
  16. use App\Entity\Rdv;
  17. use App\Entity\Utilisateur;
  18. use App\Helpers\Mailing;
  19. use Doctrine\ORM\Query;
  20. use Doctrine\ORM\Query\ResultSetMapping;
  21. use phpDocumentor\Reflection\Types\Boolean;
  22. use Symfony\Component\Filesystem\Filesystem;
  23. use Symfony\Component\HttpFoundation\JsonResponse;
  24. use Symfony\Component\HttpFoundation\Request;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. /**
  27.  * @Route("/espaceagent")
  28.  */
  29. class ApiEspaceagentController extends ApiController
  30. {
  31.     public function saveTrace(string $trace) {
  32.         //file_put_contents("text.json","azizo");
  33.         // save trace
  34.         $utilisateur $this->getUtilisateurConnecte()->getId();
  35.         $today date("Ymd");
  36.         $repertoire "logs/".$utilisateur;
  37.         if (!is_dir($repertoire)) {
  38.             $filesystem = new Filesystem();
  39.             $filesystem->mkdir($repertoire0700);
  40.         }
  41.         $text PHP_EOL."---------------------".date("Y-m-d H:i:s")."------------------------------".PHP_EOL.$trace;
  42.         file_put_contents($repertoire.'/log_'.$today.'.txt'$text FILE_APPEND LOCK_EX);
  43.     }
  44.     /**
  45.      * @Route("/nextprospect", name="api_espaceagent_nextprospect", methods={"POST"})
  46.      * @param Request $request
  47.      * @return JsonResponse
  48.      */
  49.     public function nextprospect(Request $request)
  50.     {
  51.         $data json_decode($request->getContent(), true);
  52.         $id $data['idCampagne'];
  53.         $getToutRappelPrive $data['getRappelPrive'];
  54.         $getToutRappelPartage $data['getRappelPartage'];
  55.         $trace "Input : ".json_encode($data).PHP_EOL;
  56.         // Chercher les campagnesprospect utilisateur
  57.         /** @var Campagne $campagne */
  58.         $campagne $this->em->getRepository(Campagne::class)->find($id);
  59.         if (!$campagne) {
  60.             return $this->apiKo("Campagne non trouvée !!");
  61.         }
  62.         /** @var Campagneprospect $campagneprospect */
  63.         $campagneprospect $this->getCampagneprospect($campagne,$getToutRappelPrive,$getToutRappelPartage);
  64.         if (!$campagneprospect) {
  65.             $trace .= "OutPut : KO";
  66.             return $this->apiKo("Pas de prospect trouvé. Tous les prospects de la campagne ont été traités !");
  67.         }
  68.         $data = [
  69.             "id" => $campagneprospect->getId(),
  70.             "idCampagne" => $campagneprospect->getCampagne() ? $campagneprospect->getCampagne()->getId() : "",
  71.             "idAppelStatut" => $campagneprospect->getAppelstatut() ? $campagneprospect->getAppelstatut()->getId() : "",
  72.             "rappelprive" => $campagneprospect->getRappelprive(),
  73.             "daterappel" => $campagneprospect->getDaterappel(),
  74.             "idUtilisateur" => $campagneprospect->getUtilisateur() ? $campagneprospect->getUtilisateur()->getId():""
  75.         ];
  76.         $trace .= "OutPut : ".json_encode($data).PHP_EOL;
  77.         $this->saveTrace($trace);
  78.         return $this->apioK($campagneprospect);
  79.     }
  80.     /**
  81.      * @Route("/enregistrerappel", name="api_espaceagent_enregistrerappel", methods={"POST"})
  82.      * @param Request $request
  83.      * @return JsonResponse
  84.      */
  85.     public function enregistrerappel(Request $request)
  86.     {
  87.         $data json_decode($request->getContent(), true);
  88.         try {
  89.             if (!isset($data['prospect'])) {
  90.                 return $this->apiKo("Prospect non trouvé !!");
  91.             }
  92.             if (!isset($data['appelsatut'])) {
  93.                 return $this->apiKo("Statut appel non trouvé !!");
  94.             }
  95.             if (!isset($data['campagneprospect'])) {
  96.                 return $this->apiKo("Campagne prospect non trouvé !!");
  97.             }
  98.             // 1. Update info prospect
  99.             $prospect $this->chercherProspect($data['prospect']);
  100.             $prospect $this->saveProspect($prospect$data['prospect']);
  101.             if (!$prospect instanceof Prospect) {
  102.                 return $this->apiKo($prospect);
  103.             }
  104.             /*
  105.              campagneprospect: {id: this.campagneprospect.id},
  106.             prospect: this.prospect,
  107.             commentaire: this.commentaire,
  108.             appelsatut: {id: this.appelstatutSelected.id},
  109.             daterappel: this.dateRappel,
  110.             estpartagerappel: this.estPartageRappel,
  111.             affectera: {id: affecterA}, // affecter le rappel à
  112.             dureeappel: this.timerSecond,
  113.             contact: this.contactSelected,
  114.             numerotelephone: this.numerotelephone,
  115.             daterdv: this.dateRdv
  116.              */
  117.             /** @var Utilisateur $utilisateur */
  118.             $utilisateur $this->getUtilisateurConnecte();
  119.             /** @var Appelstatut $appelstatut */
  120.             $appelstatut $this->getObject(Appelstatut::class, $data['appelsatut']['id']);
  121.             $numerotelephone "";
  122.             if (isset($data['numerotelephone'])) {
  123.                 $numerotelephone $data['numerotelephone'];
  124.             }
  125.             // 2. Commentaires
  126.             /** @var Commentaire $commentaire */
  127.             $commentaire = new Commentaire();
  128.             $commentaire->setProspect($prospect);
  129.             $commentaire->setUtilisateur($utilisateur);
  130.             $commentaire->setDate(new \DateTime());
  131.             $commentaire->setMessage($data['commentaire']);
  132.             $this->em->persist($commentaire);
  133.             $this->em->flush();
  134.             $commentairereponsable = new Commentaire();
  135.             $commentairereponsable->setDate(new \DateTime());
  136.             $commentairereponsable->setMessage("");
  137.             $this->em->persist($commentairereponsable);
  138.             $this->em->flush();
  139.             // 3. Update campagne prospect
  140.             /** @var Campagneprospect $campagneprospect */
  141.             $campagneprospect $this->getObject(Campagneprospect::class, $data['campagneprospect']['id']);
  142.             // contact !
  143.             if (isset($data['contact'])) {
  144.                 $historique $campagneprospect->getHistorique();
  145.                 if (is_null($historique) || $historique == "null") {
  146.                     $historique = array([]);
  147.                 }
  148.                 $historique[] = [
  149.                     "contact" => $data['contact']['id'],
  150.                     "appelstatut" => $appelstatut->getLibelle()
  151.                 ];
  152.                 $campagneprospect->setHistorique($historique);
  153.             }
  154.             $campagneprospect->setCommentaire($data['commentaire']);
  155.             $campagneprospect->setAppelstatut($appelstatut);
  156.             $campagneprospect->setRappelprive(2);
  157.             $campagneprospect->setTraitementdate(new \DateTime());
  158.             $campagneprospect->setTraitementencore(0);
  159.             $campagneprospect->setTraitementpar($utilisateur);
  160.             $campagneprospect->setDaterappel(null);
  161.             // TRAITER LE CAS RAPPELL
  162.             if ($appelstatut->getRappel() && isset($data['estpartagerappel']) && isset($data['daterappel'])) {
  163.                 $campagneprospect->setRappelprive(!$data['estpartagerappel']);
  164.                 $campagneprospect->setDaterappel(new \DateTime($data['daterappel']));
  165.                 // cas rappel privé avec affectation à un autre collaborateur
  166.                 if(!$data['estpartagerappel'] == true) {
  167.                     $affecterA 0;
  168.                     if (isset($data['affectera']) && isset($data['affectera']['id'])) {
  169.                         $affecterA $data['affectera']['id'];
  170.                     }
  171.                     if ($affecterA && $affecterA != $utilisateur->getId()) {
  172.                         $collaborateur $this->getObject(Utilisateur::class,$affecterA);
  173.                         if($collaborateur){
  174.                             $campagneprospect->setUtilisateur($collaborateur);
  175.                         }
  176.                     }
  177.                 }
  178.             }
  179.             $this->em->persist($campagneprospect);
  180.             // 3. Historique des appels
  181.             /** @var Appel $appel */
  182.             $appel = new Appel();
  183.             $appel->setUtilisateur($utilisateur);
  184.             $appel->setCampagneprospect($campagneprospect);
  185.             $appel->setDateappel(new \DateTime());
  186.             $appel->setAppelstatut($appelstatut);
  187.             $appel->setDureeappel($data['dureeappel']);
  188.             $appel->setNumerotelephone($numerotelephone);
  189.             if ($commentaire->getId() > 0) {
  190.                 $appel->setCommentaire($commentaire);
  191.             }
  192.             $this->em->persist($appel);
  193.             // TRAITER LE CAS RDV
  194.             if ($appelstatut->getRdv() && isset($data['daterdv'])) {
  195.                 $rdv = new Rdv();
  196.                 $rdv->setUtilisateur($utilisateur);
  197.                 $rdv->setProspect($prospect);
  198.                 $rdv->setCampagne($campagneprospect->getCampagne());
  199.                 $rdv->setDaterdv(new \DateTime($data['daterdv']));
  200.                 $rdv->setDatecreation(new \DateTime());
  201.                 $rdv->setDatemodification(new \DateTime());
  202.                 $rdv->setCommentaire($commentaire);
  203.                 $rdv->setCommentaireresponsable($commentairereponsable);
  204.                 // contact !
  205.                 if (isset($data['contact']) && isset($data['contact']['id'])) {
  206.                     /** @var Contact $contact */
  207.                     $contact $this->getObject(Contact::class, $data['contact']['id']);
  208.                     if ($contact) {
  209.                         $rdv->setContact($contact);
  210.                     }
  211.                 }
  212.                 $this->em->persist($rdv);
  213.                 // Notification
  214.                 (new Mailing($this->mailer$this->templating))->notificationstatutrdv($rdv);
  215.             }
  216.             //TRAITER LE CAS FICHEQUALIFIE
  217.             if ($appelstatut->getFichequalifie() || $appelstatut->getFichearequalifie()) {
  218.                 // Transférer fiche vers campagne cible
  219.                 $campagnecibleId $campagneprospect->getCampagne()->getCampagnecible();
  220.                 if($campagnecibleId>0){
  221.                     $campagnecible $this->getObject(Campagne::class,$campagnecibleId);
  222.                     if($campagnecible){
  223.                         // verifier l'existance prospect dans la campagne
  224.                         /** @var Campagneprospect $campagneprospectCible */
  225.                         $campagneprospectCible $this->em->getRepository(Campagneprospect::class)->findOneBy(
  226.                             ["prospect" => $prospect,"campagne" => $campagnecible]
  227.                         );
  228.                         if(!$campagneprospectCible){
  229.                             $campagneprospectCible = new Campagneprospect();
  230.                             $campagneprospectCible->setProspect($prospect);
  231.                             $campagneprospectCible->setCampagne($campagnecible);
  232.                         }else{
  233.                             $campagneprospectCible->setAppelstatut(null);
  234.                             $campagneprospectCible->setUtilisateur(null);
  235.                             $campagneprospectCible->setRappelprive(-1);
  236.                             $campagneprospectCible->setDaterappel(null);
  237.                         }
  238.                         $campagneprospectCible->setCommentaire($campagneprospect->getCommentaire());
  239.                         $this->em->persist($campagneprospectCible);
  240.                     }
  241.                 }
  242.             }
  243.             // Flush modification dans la bdd
  244.             $this->em->flush();
  245.             return $this->apioK("1");
  246.         } catch (\Exception $e) {
  247.             //throw $e;
  248.             return $this->apiKo($e->getMessage());
  249.         }
  250.     }
  251.     /////////////////////////////////////// ACTION CLEANING DB ///////////////////////////
  252.     /**
  253.      * @Route("/activecleaningdb", name="api_espaceagent_activecleaningdb", methods={"GET"})
  254.      * @return JsonResponse
  255.      */
  256.     public function activecleaningdb()
  257.     {
  258.         /** @var Cleaningdbcollaborateur $cleaningCollaborateur */
  259.         $cleaningCollaborateur $this->em->getRepository(Cleaningdbcollaborateur::class)->findOneBy(
  260.           [
  261.               "collaborateur" => $this->getUtilisateurConnecte()->getId()
  262.           ]
  263.         );
  264.         if($cleaningCollaborateur == null){
  265.             return $this->apioK(false);
  266.         }
  267.         return $this->apioK(true);
  268.     }
  269.     /**
  270.      * @Route("/verifierdoublon/{id}", name="api_espaceagent_verifierdoublon", methods={"GET"})
  271.      * @param int $id
  272.      * @return JsonResponse
  273.      */
  274.     public function verifierdoublon(int $id)
  275.     {
  276.         if($id == null && $id<=0){
  277.             return $this->apiOk([]);
  278.         }
  279.         $sql "SELECT
  280.                 p.id as id,
  281.                 p.doublonSiret as siret,
  282.                 p.doublonStandard as standard
  283.                 FROM prospectdoublon AS p
  284.                 WHERE p.id NOT IN (SELECT c.uid FROM cleaningdb as c WHERE c.action <>0) 
  285.                 AND (p.id like '%-".$id."' OR p.id like '".$id."-%') LIMIT 1";
  286.         $rsm = new ResultSetMapping();
  287.         $rsm->addScalarResult('id','id');
  288.         $rsm->addScalarResult('siret','siret');
  289.         $rsm->addScalarResult('standard','standard');
  290.         $items $this->em->createNativeQuery($sql,$rsm)->getScalarResult();
  291.         $reponse = [];
  292.         foreach ($items as $item){
  293.             $reponse = [
  294.                 "estdoublon" => true,
  295.                 "standard" => (int) $item["standard"],
  296.                 "siret" => (int) $item["siret"],
  297.                 "uid" => $item["id"]
  298.             ];
  299.         }
  300.         return $this->apiOk($reponse);
  301.     }
  302.     /**
  303.      * @Route("/ouvrirdoublon/{uid}", name="api_espaceagent_ouvrirdoublon", methods={"GET"})
  304.      * @param string $uid
  305.      * @return JsonResponse
  306.      */
  307.     public function ouvrirdoublon(string $uid)
  308.     {
  309.         if(!isset($uid)){
  310.             return $this->apiOk([]);
  311.         }
  312.         /** @var Utilisateur $utilisateur */
  313.         $utilisateur $this->getUtilisateurConnecte();
  314.         /** @var Cleaningdb $cleaningdb */
  315.         $cleaningdb $this->em->getRepository(Cleaningdb::class)->findOneBy(
  316.             [
  317.                 "uid" =>$uid
  318.             ]
  319.         );
  320.         if($cleaningdb != null){
  321.             $cleaningdb->setUtilisateur($utilisateur);
  322.             $this->em->persist($cleaningdb);
  323.             $this->em->flush();
  324.         }else{
  325.             $sql "SELECT
  326.                 p.id as id,
  327.                 p.societe as societe,
  328.                 p.siret as siret,
  329.                 p.standard as standard
  330.                 FROM prospectdoublon AS p
  331.                 WHERE p.id = '".$uid."'
  332.                 LIMIT 1";
  333.             $rsm = new ResultSetMapping();
  334.             $rsm->addScalarResult('id','id');
  335.             $rsm->addScalarResult('societe','societe');
  336.             $rsm->addScalarResult('siret','siret');
  337.             $rsm->addScalarResult('standard','standard');
  338.             $items $this->em->createNativeQuery($sql,$rsm)->getScalarResult();
  339.             foreach ($items as $item){
  340.                 $cleaningdb $this->em->getRepository(Cleaningdb::class)->findOneBy([
  341.                     "uid" => $item["id"]
  342.                 ]);
  343.                 if($cleaningdb == null){
  344.                     $cleaningdb = new Cleaningdb();
  345.                     $cleaningdb->setAction(0);
  346.                     $cleaningdb->setUtilisateur($utilisateur);
  347.                     $cleaningdb->setUid($item["id"] );
  348.                     $cleaningdb->setSociete($item["societe"] );
  349.                     $cleaningdb->setSiret($item["siret"] );
  350.                     $cleaningdb->setStandard($item["standard"] );
  351.                     $this->em->persist($cleaningdb);
  352.                     $this->em->flush();
  353.                 }
  354.             }
  355.         }
  356.         if($cleaningdb != null && $cleaningdb->getId()>0){
  357.             // retourn les prospect doublon
  358.             $ids explode("-",$cleaningdb->getUid());
  359.             /** @var Prospect[] $prospects */
  360.             $prospects $this->em->getRepository(Prospect::class)->findBy([
  361.                 "id" => $ids
  362.             ]);
  363.             $data = [
  364.                 "id" => $cleaningdb->getId(),
  365.                 "prospects" => $prospects,
  366.                 "erreurMessage" => "",
  367.                 "erreur" => false,
  368.             ];
  369.         }else{
  370.             $data = [
  371.                 "id" => "",
  372.                 "prospects" => [],
  373.                 "erreurMessage" => "Pas de prospect doublons trouvé !",
  374.                 "erreur" => true,
  375.             ];
  376.         }
  377.         return $this->apiOk($data);
  378.     }
  379.     /**
  380.      * @Route("/nextprospectdoublon", name="api_espaceagent_nextprospectdoublon", methods={"POST"})
  381.      * @param Request $request
  382.      * @return JsonResponse
  383.      */
  384.     public function nextprospectdoublon(Request $request)
  385.     {
  386.         /** @var Utilisateur $utilisateur */
  387.         $utilisateur $this->getUtilisateurConnecte();
  388.         // Recuperer Next Element à traiter
  389.         /** @var Cleaningdb $cleaningdb */
  390.         $cleaningdb $this->em->getRepository(Cleaningdb::class)->findOneBy(
  391.             [
  392.                 "utilisateur" => $utilisateur->getId(),
  393.                 "action" => 0
  394.             ]
  395.         );
  396.         if($cleaningdb == null){
  397.             $sql "SELECT
  398.                 p.id as id,
  399.                 p.societe as societe,
  400.                 p.siret as siret,
  401.                 p.standard as standard
  402.                 FROM prospectdoublon AS p
  403.                 WHERE p.id NOT IN (SELECT c.uid FROM cleaningdb AS c ) 
  404.                 LIMIT 2";
  405.             $rsm = new ResultSetMapping();
  406.             $rsm->addScalarResult('id','id');
  407.             $rsm->addScalarResult('societe','societe');
  408.             $rsm->addScalarResult('siret','siret');
  409.             $rsm->addScalarResult('standard','standard');
  410.             $items $this->em->createNativeQuery($sql,$rsm)->getScalarResult();
  411.             foreach ($items as $item){
  412.                 $cleaningdb $this->em->getRepository(Cleaningdb::class)->findOneBy([
  413.                     "uid" => $item["id"]
  414.                 ]);
  415.                 if($cleaningdb == null){
  416.                     $cleaningdb = new Cleaningdb();
  417.                     $cleaningdb->setAction(0);
  418.                     $cleaningdb->setUtilisateur($utilisateur);
  419.                     $cleaningdb->setUid($item["id"] );
  420.                     $cleaningdb->setSociete($item["societe"] );
  421.                     $cleaningdb->setSiret($item["siret"] );
  422.                     $cleaningdb->setStandard($item["standard"] );
  423.                     $this->em->persist($cleaningdb);
  424.                     $this->em->flush();
  425.                 }
  426.             }
  427.         }
  428.         if($cleaningdb != null && $cleaningdb->getId()>0){
  429.             // retourn les prospect doublon
  430.             $ids explode("-",$cleaningdb->getUid());
  431.             /** @var Prospect[] $prospects */
  432.             $prospects $this->em->getRepository(Prospect::class)->findBy([
  433.                 "id" => $ids
  434.             ]);
  435.             $data = [
  436.                 "id" => $cleaningdb->getId(),
  437.                 "prospects" => $prospects,
  438.                 "erreurMessage" => "",
  439.                 "erreur" => false,
  440.             ];
  441.         }else{
  442.             $data = [
  443.                 "id" => $cleaningdb->getId(),
  444.                 "prospects" => [],
  445.                 "erreurMessage" => "Pas de prospect doublons trouvé !",
  446.                 "erreur" => true,
  447.             ];
  448.         }
  449.         return $this->apiOk($data);
  450.     }
  451.     /**
  452.      * @Route("/enregistrerdoublon", name="api_espaceagent_enregistrerdoublon", methods={"POST"})
  453.      * @param Request $request
  454.      * @return JsonResponse
  455.      */
  456.     public function enregistrerdoublon(Request $request)
  457.     {
  458.         $data json_decode($request->getContent(), true);
  459.         if(!isset($data["id"])
  460.         || !isset($data["deletedProspects"])
  461.         || !isset($data["savedProspects"])
  462.         || !isset($data["prospectdetail"])
  463.         || !isset($data["prospect"])
  464.         || !isset($data["appreils"])
  465.         || !isset($data["contacts"])
  466.         ){
  467.             return $this->apiKo("Object des données n'est pas valide !");
  468.         }
  469.         $id $data["id"];
  470.         /** @var Cleaningdb $cleaningdb */
  471.         $cleaningdb $this->getObject(Cleaningdb::class,$id);
  472.         if($cleaningdb == null){
  473.             return $this->apiKo("Object des données n'est pas valide !");
  474.         }
  475.        //return $this->apiOk("OK");// a supprimer
  476.         $this->em->getConnection()->beginTransaction();
  477.         try {
  478.            //1. update prospect gardé
  479.             $prospect $this->getObject(Prospect::class,$data["prospect"]["id"]);
  480.             $result $this->saveProspect($prospect,$data["prospect"]);
  481.             if(!($result instanceof Prospect)){
  482.                 throw new \Exception($result);
  483.             }
  484.             $prospectdetail $this->saveProspectdetail($prospect$data["prospectdetail"]);
  485.             if(!($prospectdetail instanceof Prospectdetail)){
  486.                 throw new \Exception($prospectdetail);
  487.             }
  488.             //2. archivé les doublons
  489.             $ids $data["deletedProspects"];
  490.             $historique = [];
  491.             foreach ($ids as $id){
  492.                 /** @var Prospect $prospectArchive */
  493.                 $prospectArchive $this->getObject(Prospect::class,$id);
  494.                 if($prospectArchive != null){
  495.                     $historique =  $this->ArchiverProspect($prospect,$prospectArchive);
  496.                 }
  497.             }
  498.             if($historique instanceof \Exception){
  499.                 throw $historique;
  500.             }
  501.             $cleaningdb->setHistorique($historique);
  502.             $this->em->getConnection()->commit();
  503.             $cleaningdb->setDeletedObjects($data["deletedProspects"]);
  504.             $cleaningdb->setSavedObjects($data["savedProspects"]);
  505.             $cleaningdb->setAction(1);
  506.             return $this->apioK("1");
  507.         } catch (\Exception $e) {
  508.             $this->em->getConnection()->rollBack();
  509.             $cleaningdb->setAction(-1);
  510.             $cleaningdb->setCommentaire($e->getMessage());
  511.             return $this->apiKo($e->getMessage());
  512.         } finally {
  513.             $this->em->persist($cleaningdb);
  514.             $this->em->flush();
  515.         }
  516.     }
  517.     /**
  518.      * @param int $id
  519.      */
  520.         public function ArchiverProspect(Prospect $prospect,Prospect $prospectArchive){
  521.             $historique = [];
  522.             $histo = [];
  523.         try{
  524.             //1. Transfert Contacts
  525.             /** @var Contact[] $contacts */
  526.             $contacts $this->em->getRepository(Contact::class)->findBy(
  527.                 ["prospect" => $prospectArchive->getId()]
  528.             );
  529.             /** @var Contact $contact */
  530.             foreach ($contacts as $contact){
  531.                 $contact->setProspect($prospect);
  532.                 $this->em->persist($contact);
  533.                 $histo[] = ["id" => $contact->getId()];
  534.             }
  535.             $historique[] = ["contacts" => $histo];
  536.             $histo = [];
  537.             //2. Appareils
  538.             /** @var Appareil[] $appareils */
  539.             $appareils $this->em->getRepository(Appareil::class)->findBy(
  540.                 ["prospect" => $prospectArchive->getId()]
  541.             );
  542.             /** @var Appareil $appareil */
  543.             foreach ($appareils as $appareil){
  544.                 $appareil->setProspect($prospect);
  545.                 $this->em->persist($appareil);
  546.                 $histo[] = ["id" => $appareil->getId()];
  547.             }
  548.             $historique[] = ["appareils" => $histo];
  549.             $histo = [];
  550.             //3. CampagneProspect
  551.             /** @var Campagneprospect[] $campagneprospects */
  552.             $campagneprospects $this->em->getRepository(Campagneprospect::class)->findBy(
  553.                 ["prospect" => $prospectArchive->getId()]
  554.             );
  555.             /** @var Campagneprospect $campagneprospect */
  556.             foreach ($campagneprospects as $campagneprospect){
  557.                 $campagneprospect->setProspect($prospect);
  558.                 $this->em->persist($campagneprospect);
  559.                 $histo[] = ["id" => $campagneprospect->getId()];
  560.             }
  561.             $historique[] = ["campagneprospects" => $histo];
  562.             $histo = [];
  563.             //4.Commentaires
  564.             /** @var Commentaire[] $commentaires */
  565.             $commentaires $this->em->getRepository(Commentaire::class)->findBy(
  566.                 ["prospect" => $prospectArchive->getId()]
  567.             );
  568.             /** @var Commentaire $commentaire */
  569.             foreach ($commentaires as $commentaire){
  570.                 $commentaire->setProspect($prospect);
  571.                 $this->em->persist($commentaire);
  572.                 $histo[] = ["id" => $commentaire->getId()];
  573.             }
  574.             $historique[] = ["commentaires" => $histo];
  575.             $histo = [];
  576.             //5. Fichiers
  577.             /** @var Fichier[] $fichiers */
  578.             $fichiers $this->em->getRepository(Fichier::class)->findBy(
  579.                 ["prospect" => $prospectArchive->getId()]
  580.             );
  581.             /** @var Fichier $fichier */
  582.             foreach ($fichiers as $fichier){
  583.                 $fichier->setProspect($prospect);
  584.                 $this->em->persist($fichier);
  585.                 $histo[] = ["id" => $fichier->getId()];
  586.             }
  587.             $historique[] = ["fichiers" => $histo];
  588.             $histo = [];
  589.             //6.Rdv
  590.             /** @var Rdv[] $rdvs */
  591.             $rdvs $this->em->getRepository(Rdv::class)->findBy(
  592.                 ["prospect" => $prospectArchive->getId()]
  593.             );
  594.             /** @var Rdv $rdv */
  595.             foreach ($rdvs as $rdv){
  596.                 $rdv->setProspect($prospect);
  597.                 $this->em->persist($rdv);
  598.                 $histo[] = ["id" => $rdv->getId()];
  599.             }
  600.             $historique[] = ["rdvs" => $histo];
  601.             // Marquer prospect comme supprimé logiquement
  602.             $prospectArchive->setActive(2);
  603.             $this->em->persist($prospectArchive);
  604.             return [
  605.                 "prospect" => $prospect->getId(),
  606.                 "prospectArchive" => $prospectArchive->getId(),
  607.                 "historique" => $historique,
  608.             ];
  609.         }catch (\Exception $e){
  610.             return $e;
  611.         }
  612.         }
  613.     /*
  614.      * #############################STATS##############################
  615.      */
  616.     /**
  617.      * @Route("/mesobjectifs/{id}", name="api_espaceagent_mesobjectifs", methods={"GET"})
  618.      * @param int $id
  619.      * @return JsonResponse
  620.      */
  621.     public function mesobjectifs(int $id)
  622.     {
  623.         // Chercher les campagnesprospect utilisateur
  624.         /** @var Campagne $campagne */
  625.         $campagne $this->em->getRepository(Campagne::class)->find($id);
  626.         if (!$campagne) {
  627.             return $this->apiKo("Campagne non trouvée !!");
  628.         }
  629.         /*
  630.          * SELECT
  631. cam.id AS id,
  632. cam.objectifagent AS objectif,
  633. COUNT(rdv.id) AS realise
  634. FROM
  635. rdv AS rdv
  636. left join campagne AS cam ON cam.id = rdv.campagne_id
  637. LEFT JOIN  campagnecollaborateur AS camcol ON camcol.campagne_id = cam.id
  638. WHERE camcol.collaborateur_id=1
  639. GROUP BY cam.id
  640.          */
  641.         $realise 0;
  642.         $objectif 10;
  643.         $data = [
  644.             "aujourdhui" => [
  645.                 "realise" => $realise,
  646.                 "objectif" => $objectif
  647.             ],
  648.             "cemois" => [
  649.                 "realise" => 15,
  650.                 "objectif" => 30
  651.             ],
  652.         ];
  653.         return $this->apioK($data);
  654.     }
  655.     /**
  656.      * @Route("/mesappels", name="api_espaceagent_mesappels", methods={"GET"})
  657.      * @return JsonResponse
  658.      */
  659.     public function mesappels()
  660.     {
  661.         $data = [];
  662.         return $this->apioK($data);
  663.     }
  664.     /*
  665.         * #############################AUTRES##############################
  666.         */
  667.     /**
  668.      * @param Campagne $campagne
  669.      * @return object|null
  670.      */
  671.     public function getCampagneprospect(Campagne $campagnebool $getToutRappelPrive false,bool $getToutRappelPartage=false): ?object
  672.     {
  673.         // Débloquer les fichiers réservé pour un collaborateur +24heure
  674.         $yesterday strtotime('-1 day');
  675.         $sqlBloque "
  676.         UPDATE campagneprospect
  677.         SET traitementencore = 0
  678.         WHERE date_format(traitementdate,'%Y-%m-%d %H:%i') <= '".gmdate("Y-m-d H:i:s",$yesterday)."' 
  679.         and traitementencore > 0
  680.         ";
  681.         //file_put_contents("temp.json",$sqlBloque);
  682.         try {
  683.             $con $this->em->getConnection();
  684.             $con->executeQuery($sqlBloque);
  685.         } catch (\Exception $e) {
  686.             return $this->apiKo($e->getMessage());
  687.         }
  688.         /** @var Utilisateur $utilisateur */
  689.         $utilisateur $this->getUtilisateurConnecte();
  690.         $idsCampagneRappelPrive "(".$campagne->getId(); // Rappel Privés
  691.         $idsCampagneRappelPartage "(".$campagne->getId(); // Rappel Partagé
  692.         // Si $getToutRappelPrive ou $getToutRappelPartage ===> alors :
  693.         if($getToutRappelPrive == true || $getToutRappelPartage == true) {
  694.             $campagnecollaborateurs $this->em->getRepository(Campagnecollaborateur::class)->findBy(
  695.                   [
  696.                       "collaborateur" => $utilisateur,
  697.                   ]
  698.                 );
  699.             /** @var Campagnecollaborateur $campagnecollaborateur */
  700.             foreach($campagnecollaborateurs as $campagnecollaborateur){
  701.                 if($campagnecollaborateur->getCampagne()->getActive() == 1){
  702.                     if($getToutRappelPrive == true) {
  703.                         $idsCampagneRappelPrive .=",".$campagnecollaborateur->getCampagne()->getId();
  704.                     }
  705.                     if($getToutRappelPartage == true) {
  706.                         $idsCampagneRappelPartage .=",".$campagnecollaborateur->getCampagne()->getId();
  707.                     }
  708.                 }
  709.             }
  710.         }
  711.         $idsCampagneRappelPrive .=")";
  712.         $idsCampagneRappelPartage .=")";
  713.         //1. Chercher Rappel Privé
  714.         $sql "
  715.         SELECT 
  716.                campagneprospect
  717.         FROM " Campagneprospect::class . " as campagneprospect
  718.         LEFT JOIN " Appelstatut::class . " as appelstatut WITH campagneprospect.appelstatut = appelstatut.id
  719.         WHERE date_format(campagneprospect.daterappel,'%Y-%m-%d %H:%i') <= '".gmdate("Y-m-d H:i:s")."' 
  720.         AND appelstatut.rappel=true
  721.         AND campagneprospect.rappelprive = 1 AND campagneprospect.utilisateur = ".$utilisateur->getId()."
  722.         AND campagneprospect.campagne in ".$idsCampagneRappelPrive."
  723.         ORDER BY campagneprospect.rappelprive desc,campagneprospect.daterappel asc
  724.         ";
  725.         //file_put_contents("RappelPriv.txt",$sql);
  726.         /** @var Query $query */
  727.         $query $this->em->createQuery($sql);
  728.         $query->setFirstResult(0);
  729.         $query->setMaxResults(1);
  730.         $campagneprsopect $query->getOneOrNullResult();
  731.         if ($campagneprsopect) {
  732.             return $campagneprsopect;
  733.         }
  734.         //2. Chercher Rappel Partagé
  735.         $sql "
  736.         SELECT 
  737.         campagneprospect
  738.         FROM " Campagneprospect::class . " as campagneprospect
  739.         LEFT JOIN " Appelstatut::class . " as appelstatut WITH campagneprospect.appelstatut = appelstatut.id
  740.         WHERE date_format(campagneprospect.daterappel,'%Y-%m-%d %H:%i') <= '".gmdate("Y-m-d H:i:s")."' 
  741.         AND appelstatut.rappel=true
  742.         AND campagneprospect.campagne in ".$idsCampagneRappelPartage."
  743.         AND campagneprospect.rappelprive = 0
  744.         AND campagneprospect.traitementencore IN (0,".$utilisateur->getId().")
  745.         ORDER BY campagneprospect.rappelprive desc,campagneprospect.daterappel asc
  746.         ";
  747.         //file_put_contents("RappelPartag.txt",$sql);
  748.         /** @var Query $query */
  749.         $query $this->em->createQuery($sql);
  750.         $query->setFirstResult(0);
  751.         $query->setMaxResults(1);
  752.         /** @var Campagneprospect $campagneprsopect */
  753.         $campagneprsopect $query->getOneOrNullResult();
  754.         if ($campagneprsopect) {
  755.             $campagneprsopect->setUtilisateur($utilisateur);
  756.             $campagneprsopect->setTraitementdate(new \DateTime());
  757.             $campagneprsopect->setTraitementencore($utilisateur->getId());
  758.             $this->em->persist($campagneprsopect);
  759.             $this->em->flush();
  760.             return $campagneprsopect;
  761.         }
  762.         //3. Chercher next prospect
  763.         $campagneprsopects $this->em->getRepository(Campagneprospect::class)->findBy(
  764.             [
  765.                 "campagne" => $campagne,
  766.                 "utilisateur" => $utilisateur,
  767.                 "rappelprive" => -1
  768.             ],
  769.             [
  770.                 "id" => "ASC"
  771.             ]
  772.         );
  773.         if (!$campagneprsopects || sizeof($campagneprsopects) == 0) {
  774.             // affecter campagneprospect au utilisateur
  775.             return $this->autoAffectCampagneprospect($campagne$utilisateur);
  776.         }
  777.         // Si reste un seul campagneprospect, alors ajouter +5 !
  778.         if (sizeof($campagneprsopects) == 1) {
  779.             $this->autoAffectCampagneprospect($campagne$utilisateur);
  780.         }
  781.         // returner le premier dans la liste
  782.         return $campagneprsopects[0];
  783.     }
  784.     /**
  785.      * @param Campagne $campagne
  786.      * @param Utilisateur $utilisateur
  787.      * @return Campagneprospect|null
  788.      */
  789.     public function autoAffectCampagneprospect(Campagne $campagneUtilisateur $utilisateur): ?Campagneprospect
  790.     {
  791.         $campagneprsopectFirst null;
  792.         $campagneprsopects $this->em->getRepository(Campagneprospect::class)->findBy(
  793.             [
  794.                 "campagne" => $campagne,
  795.                 "utilisateur" => null,
  796.                 "rappelprive" => -1
  797.             ],
  798.             [
  799.                 "id" => "ASC"
  800.             ],
  801.             5
  802.         );
  803.         // si pas campagneprospect trouvé alors return null
  804.         if (sizeof($campagneprsopects) == 0) {
  805.             return null;
  806.         }
  807.         /** @var Campagneprospect $campagneprsopect */
  808.         foreach ($campagneprsopects as $campagneprsopect) {
  809.             $campagneprsopect->setUtilisateur($utilisateur);
  810.             $this->em->persist($campagneprsopect);
  811.             if ($campagneprsopectFirst == null) {
  812.                 $campagneprsopectFirst $campagneprsopect;
  813.             }
  814.         }
  815.         $this->em->flush();
  816.         return $campagneprsopectFirst;
  817.     }
  818. }