src/Controller/CrmController.php line 411

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Appel;
  4. use App\Entity\AppelStatut;
  5. use App\Entity\AppelSujet;
  6. use App\Entity\Apprenant;
  7. use App\Entity\Compagne;
  8. use App\Entity\Incident;
  9. use App\Entity\Rdv;
  10. use App\Entity\Tache;
  11. use App\Entity\Utilisateur;
  12. use App\Form\AppelType;
  13. use App\Service\InwiApi;
  14. use App\Service\NewDoceboApi;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. /**
  21. * @Route("crm")
  22. */
  23. class CrmController extends AbstractController
  24. {
  25. /**
  26. * @Route("/index/OP", name="crm_index")
  27. */
  28. public function index()
  29. {
  30. $em = $this->getDoctrine()->getManager();
  31. $user = $this->getUser();
  32. $appelRepo = $this->getDoctrine()->getRepository(Appel::class);
  33. $rdvRepo = $this->getDoctrine()->getRepository(Rdv::class);
  34. $dateDebutRdv = date('Y-m-d', strtotime('-1 days')) . "T00:00";
  35. $listRdvs = $rdvRepo->findAllMyRdvByDate($user, $dateDebutRdv);
  36. $dateDebut = date('Y-m-d');
  37. $dateFin = date('Y-m-d');
  38. $compagneRepo = $em->getRepository(Compagne::class);
  39. $compagneActive = $compagneRepo->getActivesCampagnes();
  40. foreach ($compagneActive as $compagne) {
  41. $objectif = 0;
  42. $ValideNumbers = $this->getDoctrine()->getRepository(Apprenant::class)->findApprenantsValidesByCampagneTwo($compagne);
  43. $objectif = count($ValideNumbers);
  44. $compagne->setObjectif($objectif);
  45. $em->persist($compagne);
  46. }
  47. $em->flush();
  48. return $this->render('crm/index.html.twig', [
  49. 'compagnes' => $compagneActive,
  50. 'appelRepo' => $appelRepo,
  51. 'dateDebut' => $dateDebut,
  52. 'dateFin' => $dateFin,
  53. 'listRdvs' => $listRdvs
  54. ]);
  55. }
  56. /**
  57. * Détails de la compagne
  58. * @Route("/compagne/{id}/OP", name="crm_compagne")
  59. */
  60. public function compagne(Compagne $compagne)
  61. {
  62. return $this->render('crm/compagne.html.twig', [
  63. 'compagne' => $compagne,
  64. ]);
  65. }
  66. /**
  67. * Afficher le details des Cdrs d'une appel par date
  68. * @Route("/by-user/{userId}/OP", name="cdrs_by_user")
  69. */
  70. public function cdrsByUser($userId)
  71. {
  72. die("To do");
  73. $dateDebut = '';
  74. $dateFin = '';
  75. if (isset($_POST['rangeDate'])) {
  76. $rangeDate = $_POST['rangeDate'];
  77. $dates = explode(" - ", $rangeDate);
  78. $begin = explode("/", $dates[0]);
  79. $dateDebut = $begin[2] . "-" . $begin[1] . "-" . $begin[0];
  80. $end = explode("/", $dates[1]);
  81. $dateFin = $end[2] . "-" . $end[1] . "-" . $end[0];
  82. }
  83. $userRepo = $this->getDoctrine()->getRepository(Utilisateur::class);
  84. $userByExto = $userRepo->findOneById($userId);
  85. $UserCdrs = $userByExto->getCdrsByDate($dateDebut, $dateFin);
  86. $appelRepo = $this->getDoctrine()->getRepository(Appel::class);
  87. return $this->render('IdeoDashBundle:ucm/cdr:cdr_extension.html.twig', [
  88. 'userByExto' => $userByExto,
  89. 'UserCdrs' => $UserCdrs,
  90. 'dateDebut' => $dateDebut,
  91. 'dateFin' => $dateFin,
  92. 'appelRepo' => $appelRepo
  93. ]);
  94. // return new JsonResponse('thank you');
  95. }
  96. /**
  97. * changer la mission de l'agent Emission/Reception
  98. * @Route("/changeMissionAgent/{idMission}", name="change_mission_agent_ajax")
  99. **/
  100. public function changeMissionAgentAjax($idMission = 0)
  101. {
  102. $user = $this->getUser();
  103. $em = $this->getDoctrine()->getManager();
  104. $user->setAgentMission($idMission);
  105. $em->persist($user);
  106. $em->flush();
  107. $response = "La mission de l'agent a été bien changée => " . $idMission;
  108. $resp = new Response(json_encode($response, JSON_UNESCAPED_UNICODE));
  109. $resp->headers->set('Content-Type', 'application/json');
  110. return $resp;
  111. }
  112. /**
  113. * Afficher l'affiche de l'apprenant et demarrer un appel pour un RDV
  114. * @Route("/callapprenantrdv/{id}/{rdvid}", name="crm_call_apprenant_rdv")
  115. * @return void
  116. */
  117. public function callApprenantRdv(Apprenant $apprenant, $rdvid = -1)
  118. {
  119. $em = $this->getDoctrine()->getManager();
  120. $ApprenantRepo = $em->getRepository(Apprenant::class);
  121. $compagne = $ApprenantRepo->getLastCompagne($apprenant);
  122. if (!is_object($compagne)) {
  123. $compagne = null;
  124. }
  125. if (!is_object($apprenant)) {
  126. $this->addFlash('success', 'Vous ne pouvez pas appeler l\'apprnenants');
  127. return $this->redirectToRoute('crm_index');
  128. }
  129. // recuperer la liste des Utilisateurs SPOP
  130. $utilisateurs = $em->getRepository(Utilisateur::class)->findSPOP();
  131. // recuperer la liste des Utilisateurs SPOP
  132. $appelStatuts = $em->getRepository(AppelStatut::class)->findByRole("ROLE_SP");
  133. // recuperer la liste des sujets des appels
  134. $appelSujets = $em->getRepository(AppelSujet::class)->findByRole("ROLE_SP");
  135. return $this->render('crm/callApprenant.html.twig', [
  136. 'compagne' => $compagne,
  137. 'apprenant' => $apprenant,
  138. 'utilisateursSPOP' => $utilisateurs,
  139. 'appelStatuts' => $appelStatuts,
  140. 'appelSujets' => $appelSujets,
  141. 'rdv' => $rdvid
  142. ]);
  143. }
  144. /**
  145. * Ajouter un RDV en ajax
  146. * @Route("/addRdv/{id}", name="add_rdv_ajax")
  147. * @return void
  148. **/
  149. public function addRdvAjax(Apprenant $apprenant)
  150. {
  151. if ($_POST['dateNotif'] != '') {
  152. $user = $this->getUser();
  153. $em = $this->getDoctrine()->getManager();
  154. $rdv = new rdv();
  155. $rdv->setApprenant($apprenant);
  156. $sujetRdv = $em->getRepository(AppelSujet::class)->findOneById($_POST['sujetRdv']);
  157. $rdv->setSujet($sujetRdv);
  158. if (strlen($_POST['dateNotif']) <= 16)
  159. $rdv->setDate($_POST['dateNotif'] . 'T' . $_POST['creneaux']);
  160. $rdv->setAgentEmetteur($user);
  161. $recep = $em->getRepository(Utilisateur::class)->findById($_POST['utilisateurs']);
  162. $rdv->setAgentRecepteur($recep[0]);
  163. $rdv->setStatut(0);
  164. $rdv->setCommentaire($_POST['commentaire']);
  165. $rdv->setDateInsert(date("Y-m-d\TH:i:s", strtotime("+0 hour")));
  166. $rdv->setEtat(1);
  167. $em->persist($rdv);
  168. $em->flush();
  169. $response["success"] = "Rdv a été ajouté";
  170. $resp = new Response(json_encode($response, JSON_UNESCAPED_UNICODE));
  171. $resp->headers->set('Content-Type', 'application/json');
  172. return $resp;
  173. }
  174. }
  175. /**
  176. * Historiser Appel
  177. * @Route("/historiser-appel/{id}", name="historiser_appel")
  178. * @return void
  179. **/
  180. public function historiser_appel(Apprenant $apprenant)
  181. {
  182. $em = $this->getDoctrine()->getManager();
  183. $user = $this->getUser();
  184. $appel = new Appel();
  185. $ApprenantRepo = $em->getRepository(Apprenant::class);
  186. $sujet = $em->getRepository(AppelSujet::class)->findOneById($_POST['sujet']);
  187. $statut = $em->getRepository(AppelStatut::class)->findOneById($_POST['statut']);
  188. $appel->setApprenant($apprenant);
  189. $appel->setSujet($sujet);
  190. $appel->setAgent($user);
  191. $appel->setStatut($statut);
  192. $appel->setDetails($_POST["details"]);
  193. $appel->setDate(date("Y-m-d\TH:i:s", strtotime('1 hour')));
  194. $appel->setType($_POST["type"]);
  195. $appel->setBrouillon($_POST['brouillon']);
  196. $appel->setQualification($_POST['qualification']);
  197. $apprenant->setCreneau($_POST['creneau1'] . " - " . $_POST['creneau2']);
  198. $apprenant->setQualificationWebi($_POST['qualiCv']);
  199. if ($_POST['task']) {
  200. $tache = $em->getRepository(Tache::class)->findOneById($_POST['task']);
  201. $appel->setTache($tache);
  202. $calls = $em->getRepository(Appel::class)->findByTache($tache);
  203. if (!$calls) {
  204. $tache->getCompagne()->setTentative($tache->getCompagne()->getTentative() + 1);
  205. $em->persist($tache);
  206. $em->flush();
  207. }
  208. } else {
  209. $appel->setTache(null);
  210. $tache = 0;
  211. }
  212. $compagne = $ApprenantRepo->getLastCompagne($apprenant);
  213. if (!is_object($compagne)) {
  214. $compagne = null;
  215. }
  216. if (is_object($compagne)) {
  217. // incrémenter le nombre des apprants qu'on appelé au moins une seule fois
  218. if ($em->getRepository(Tache::class)->findtasksApprenantByCampagne($compagne, $apprenant)) {
  219. $tache = $em->getRepository(Tache::class)->findtasksApprenantByCampagne($compagne, $apprenant)[0];
  220. $calls = $em->getRepository(Appel::class)->findByTache($tache);
  221. if (!$calls) {
  222. // ssi l'apprenant n'a pas d'appels incrémenter par 1
  223. $compagne->setTentative($compagne->getTentative() + 1);
  224. $em->persist($compagne);
  225. $em->flush();
  226. }
  227. }
  228. /********************************
  229. // incrementer la progression de la campagne
  230. */
  231. $idStatut = $appel->getStatut()->getId();
  232. if ($_POST['qualification'] == 1) {
  233. $appel->setQualification(1);
  234. $compagne->setProgression($compagne->getProgression() + 1);
  235. if ($tache and $tache->getEtat() != 1) {
  236. $tache->setEtat(1);
  237. }
  238. } elseif ($idStatut == 2) {
  239. // Si le status (A RAPPELER) empecher le systeme de rappel automatiquement l'apprenant
  240. if ($tache) {
  241. $tache->setEtat(2);
  242. }
  243. } else {
  244. if ($tache) {
  245. $tache->setEtat(0);
  246. }
  247. }
  248. // incrementer la couche de la tache
  249. // $tache->setCouche($tache->getCouche()+1);
  250. if (is_object($tache)) {
  251. $em->persist($tache);
  252. $em->flush();
  253. }
  254. }
  255. // enregistrer l'appel
  256. if (is_object($compagne) and is_object($tache)) {
  257. $appel->setTache($tache);
  258. }
  259. // if ($_POST["statutIncident"]) {
  260. // $incident = new Incident();
  261. // $incident->setEntite($_POST["entite"]);
  262. // $incident->setVille($_POST["ville"]);
  263. // $incident->setMaterielUtilise($_POST["materiel_utilise"]);
  264. // $incident->setConnexion($_POST["connexion"]);
  265. // $incident->setNavigateur($_POST["navigateur"]);
  266. // $incident->setOutilTechnique($_POST["outil_technique"]);
  267. // $incident->setSujet($_POST["sujetInci"]);
  268. // $incident->setDescription($_POST["description"]);
  269. // $incident->setDate($_POST["dateInci"]);
  270. // $incident->setApprenant($apprenant);
  271. // $em->persist($incident);
  272. // $em->flush();
  273. // $appel->setIncident($incident);
  274. // }
  275. $em->persist($appel);
  276. $em->flush();
  277. $em->persist($apprenant);
  278. $em->flush();
  279. //send sms to get rate of call
  280. if (in_array($appel->getStatut()->getId(), [1, 17]) and !empty($appel->getId())) {
  281. $emetteur = "BeLearning";
  282. if ($apprenant->getInscriptions()) {
  283. foreach ($apprenant->getInscriptions() as $ins) {
  284. $emetteur = $ins->getProjet()->getClient()->getSmsLabel();
  285. }
  286. }
  287. $site_url = (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ? 'https://' . $_SERVER['HTTP_HOST'] : 'http://' . $_SERVER['HTTP_HOST'];
  288. $link = $site_url . "/apprenant/evaluer-appel/" . $appel->getId();
  289. $smsApi = new InwiApi();
  290. $resp = $smsApi->sendRateSms($emetteur, $apprenant->getGsm(), $link);
  291. }
  292. // changer le status du RDV actuel
  293. if (isset($_POST['rdv']) and $_POST['rdv'] != -1 and $_POST['rdv'] > 0) {
  294. $rdv = $em->getRepository(Rdv::class)->findOneById($_POST['rdv']);
  295. $rdv->setStatut(1);
  296. $em->persist($rdv);
  297. $em->flush();
  298. }
  299. $response["success"] = "L'appel a été cloturé";
  300. $this->addFlash('success', "L'historisation a été bien ajouté");
  301. $resp = new Response(json_encode($response, JSON_UNESCAPED_UNICODE));
  302. $resp->headers->set('Content-Type', 'application/json');
  303. return $resp;
  304. }
  305. /**
  306. * Historiser Appel Auto lorsque l'opérateur oublier l'historisation d'appel
  307. * @Route("/historiser-appel-auto/{id}", name="historiser_appel_auto")
  308. * @return void
  309. **/
  310. public function historiser_appel_auto(Apprenant $apprenant)
  311. {
  312. $em = $this->getDoctrine()->getManager();
  313. $user = $this->getUser();
  314. $appel = new Appel();
  315. $sujet = $em->getRepository(AppelSujet::class)->findOneById(1);
  316. $statut = $em->getRepository(AppelStatut::class)->findOneById(1);
  317. $appel->setApprenant($apprenant);
  318. $appel->setSujet($sujet);
  319. $appel->setAgent($user);
  320. $appel->setStatut($statut);
  321. $appel->setDate(date("Y-m-d\TH:i:s", strtotime('1 hour')));
  322. $appel->setType(1);
  323. // enregitrer cette hitorisation en tant que brouillon
  324. $appel->setBrouillon(1);
  325. $appel->setQualification(0);
  326. $em->persist($appel);
  327. $em->flush();
  328. $this->addFlash('success', "L'historisation a été bien ajouté");
  329. $response["success"] = "L'historisation a été bien ajouté";
  330. $resp = new Response(json_encode($response, JSON_UNESCAPED_UNICODE));
  331. $resp->headers->set('Content-Type', 'application/json');
  332. return $resp;
  333. }
  334. /**
  335. * Historiser Appel
  336. * @Route("/historiser-appel-boucle/{id}/{compagne}", name="historiser_appel_boucle")
  337. **/
  338. public function historiser_appel_boucle(Apprenant $apprenant, Compagne $compagne)
  339. {
  340. $em = $this->getDoctrine()->getManager();
  341. $user = $this->getUser();
  342. $appel = new Appel();
  343. $sujet = $em->getRepository(AppelSujet::class)->findOneById($_POST['sujet']);
  344. $statut = $em->getRepository(AppelStatut::class)->findOneById($_POST['statut']);
  345. $appel->setApprenant($apprenant);
  346. $appel->setSujet($sujet);
  347. $appel->setAgent($user);
  348. $appel->setStatut($statut);
  349. $appel->setDetails($_POST["details"]);
  350. $appel->setDate(date("Y-m-d\TH:i:s", strtotime('1 hour')));
  351. $appel->setType($_POST["type"]);
  352. $appel->setBrouillon($_POST['brouillon']);
  353. $appel->setQualification($_POST['qualification']);
  354. $apprenant->setCreneau($_POST['creneau1'] . " - " . $_POST['creneau2']);
  355. $apprenant->setQualificationWebi($_POST['qualiCv']);
  356. if (is_object($compagne)) {
  357. // incrémenter le nombre des apprants qu'on appelé au moins une seule fois
  358. $tache = $em->getRepository(Tache::class)->findtasksApprenantByCampagne($compagne, $apprenant)[0];
  359. $calls = $em->getRepository(Appel::class)->findByTache($tache);
  360. if (!$calls) {
  361. // ssi l'apprenant n'a pas d'appels incrimenter par 1
  362. $compagne->setTentative($compagne->getTentative() + 1);
  363. }
  364. // incrementer la progression de la campagne
  365. $idStatut = $appel->getStatut()->getId();
  366. if ($_POST['qualification'] == 1) {
  367. $appel->setQualification(1);
  368. $compagne->setProgression($compagne->getProgression() + 1);
  369. if ($tache and $tache->getEtat() != 1) {
  370. $tache->setEtat(1);
  371. }
  372. } elseif ($idStatut == 2) {
  373. // Si le status (A RAPPELER) empecher le systeme de rappel automatiquement l'apprenant
  374. $tache->setEtat(2);
  375. } else {
  376. $tache->setEtat(0);
  377. }
  378. // incrementer la couche de la tache
  379. $tache->setCouche($tache->getCouche() + 1);
  380. $em->persist($tache);
  381. $em->flush();
  382. }
  383. // $compagne->setCouche($tache->getCouche());
  384. $em->persist($compagne);
  385. $em->flush();
  386. // enregistrer l'appel
  387. if (is_object($compagne)) {
  388. $appel->setTache($tache);
  389. }
  390. // if ($_POST["statutIncident"]) {
  391. // $incident = new Incident();
  392. // $incident->setEntite($_POST["entite"]);
  393. // $incident->setVille($_POST["ville"]);
  394. // $incident->setMaterielUtilise($_POST["materiel_utilise"]);
  395. // $incident->setConnexion($_POST["connexion"]);
  396. // $incident->setNavigateur($_POST["navigateur"]);
  397. // $incident->setOutilTechnique($_POST["outil_technique"]);
  398. // $incident->setSujet($_POST["sujetInci"]);
  399. // $incident->setDescription($_POST["description"]);
  400. // $incident->setDate($_POST["dateInci"]);
  401. // $incident->setApprenant($apprenant);
  402. // $em->persist($incident);
  403. // $em->flush();
  404. // $appel->setIncident($incident);
  405. // }
  406. $em->persist($appel);
  407. $em->flush();
  408. $em->persist($apprenant);
  409. $em->flush();
  410. // disable priority calling whene call is done
  411. $apprenant->setPriority(0);
  412. $em->persist($apprenant);
  413. $em->flush();
  414. //send sms to get rate of call
  415. if (in_array($appel->getStatut()->getId(), [1, 17]) and !empty($appel->getId())) {
  416. $emetteur = "BeLearning";
  417. if ($apprenant->getInscriptions()) {
  418. foreach ($apprenant->getInscriptions() as $ins) {
  419. $emetteur = $ins->getProjet()->getClient()->getSmsLabel();
  420. }
  421. }
  422. $site_url = (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ? 'https://' . $_SERVER['HTTP_HOST'] : 'http://' . $_SERVER['HTTP_HOST'];
  423. $link = $site_url . "/apprenant/evaluer-appel/" . $appel->getId();
  424. $smsApi = new InwiApi();
  425. $resp = $smsApi->sendRateSms($emetteur, $apprenant->getGsm(), $link);
  426. }
  427. // ajouter l'appel au RDV s'il existe
  428. // $idRdvAppel = $request->request->get('idRdvAppel');
  429. // if ($idRdvAppel != 0) {
  430. // $newRdv = $em->getRepository(Rdv::class)->findOneById($idRdvAppel);
  431. // $newRdv->setAppel($appel);
  432. // $em->persist($newRdv);
  433. // $em->flush();
  434. // }
  435. $response["success"] = "L'appel a été cloturé";
  436. $this->addFlash('success', "L'historisation a été bien ajouté");
  437. $resp = new Response(json_encode($response, JSON_UNESCAPED_UNICODE));
  438. $resp->headers->set('Content-Type', 'application/json');
  439. return $resp;
  440. }
  441. /**
  442. * Appeler les apprenants d'une compagne
  443. * @Route("/calling/{id}", name="crm_calling")
  444. * @return void
  445. */
  446. public function startCalling(Compagne $compagne)
  447. {
  448. $em = $this->getDoctrine()->getManager();
  449. $user = $this->getUser();
  450. // RECUPERE LE FORMULAIRE DE STORISATION
  451. $appel = new Appel();
  452. $form = $this->createForm(AppelType::class, $appel);
  453. // recuperer un seul apprenant non abouti
  454. $apprenant = $compagne->getApprenantByAgent($user);
  455. $response = $this->CloseOrNextCampagne($compagne, $apprenant);
  456. if ($response != "Ok") {
  457. return $response;
  458. }
  459. // recuperer la liste des Utilisateurs SPOP
  460. $utilisateurs = $em->getRepository(Utilisateur::class)->findSPOP();
  461. // recuperer la liste des Utilisateurs SPOP
  462. $appelStatuts = $em->getRepository(AppelStatut::class)->findByRole("ROLE_SP");
  463. // recuperer la liste des sujets des appels
  464. $appelSujets = $em->getRepository(AppelSujet::class)->findByRole("ROLE_SP");
  465. return $this->render('crm/callApprenantCompagne.html.twig', [
  466. 'compagne' => $compagne,
  467. 'apprenant' => $apprenant,
  468. 'form' => $form->createView(),
  469. 'utilisateursSPOP' => $utilisateurs,
  470. 'appelStatuts' => $appelStatuts,
  471. 'appelSujets' => $appelSujets
  472. ]);
  473. }
  474. /**
  475. * Cette fonction est pour objectif de verifier s'il faut passer à la couche suivante ou continuer dans la couche currente
  476. *
  477. * @return void
  478. */
  479. public function CloseOrNextCampagne($compagne, $apprenant)
  480. {
  481. $em = $this->getDoctrine()->getManager();
  482. $NewCoucheCompagne = 0;
  483. $response = 0;
  484. $codeOperation = 0;
  485. $campagneCurrentCoucheObjtif = $compagne->getCurrentCouche()->getObjectif();
  486. $campagneCurrentCoucheTantative = $compagne->getCurrentCouche()->getTentative();
  487. $campagneObjectif = $compagne->getObjectif();
  488. $campagneProgress = $compagne->getProgression();
  489. if ($campagneObjectif == $campagneProgress) {
  490. // fermer la campagne
  491. $compagne->setState(3);
  492. $em->persist($compagne);
  493. $em->flush();
  494. $response = 4;
  495. } elseif ($compagne->getState() != 2) {
  496. // afficher un message Flash si la campagne est en mode Pause
  497. $response = 1;
  498. $codeOperation = 400;
  499. } elseif (!is_object($apprenant)) {
  500. if ($campagneCurrentCoucheTantative == $campagneCurrentCoucheObjtif) {
  501. $NewCoucheCompagne = 1;
  502. $codeOperation = 100;
  503. } else {
  504. $response = 3;
  505. }
  506. } elseif ($campagneCurrentCoucheTantative == $campagneCurrentCoucheObjtif) {
  507. // tester si il faut passer à la couche suivante
  508. // fermer la compagne et passer à la couche suivante
  509. $NewCoucheCompagne = 1;
  510. $codeOperation = 200;
  511. } else {
  512. // tester si la couche candidat est superieur ou egal au couche campagne
  513. // passer à la couche suivante
  514. $tache = $em->getRepository(Tache::class)->findtasksApprenantByCampagne($compagne, $apprenant)[0];
  515. if ($tache->getCouche() >= $compagne->getCouche()) {
  516. $NewCoucheCompagne = 1;
  517. $codeOperation = 300;
  518. }
  519. }
  520. if ($NewCoucheCompagne == 1) {
  521. $compagne->newCouche();
  522. $compagne->setState(1);
  523. $compagne->setCouche((int)$compagne->getCouche() + 1);
  524. $em->persist($compagne);
  525. $em->flush();
  526. $response = 2;
  527. }
  528. if ($response == 1) {
  529. $this->addFlash(
  530. 'success',
  531. 'Infos (' . $codeOperation . ') !! La ' . $compagne->getNom() . ' est en mode Pause. Merci de contacter l\'équipe GP pour l\'activer '
  532. );
  533. return $this->redirectToRoute('crm_index');
  534. } elseif ($response == 2) {
  535. $this->addFlash(
  536. 'success',
  537. 'Felicitation (' . $codeOperation . ') !! La couche ' . ((int)$compagne->getCouche() - 1) . ' de La ' . $compagne->getNom() . ' est terminé. Merci de passer à la suivante'
  538. );
  539. return $this->redirectToRoute('crm_index');
  540. } elseif ($response == 3) {
  541. $this->addFlash(
  542. 'success',
  543. 'Vous ne pouvez pas appeler les apprnenants de La campagne ' . $compagne->getNom() . '. Veuillez réessayer demain'
  544. );
  545. return $this->redirectToRoute('crm_index');
  546. } elseif ($response == 4) {
  547. $this->addFlash(
  548. 'success',
  549. 'Felicitation !! vous avez atteint l\'objectif. La campagne ' . $compagne->getNom() . ' est terminée'
  550. );
  551. return $this->redirectToRoute('crm_index');
  552. } else {
  553. return "Ok";
  554. }
  555. }
  556. /**
  557. * recuperer un apprenant par téléphone en ajax
  558. * @Route("/getapprenant/{phonenumber}", name="crm_get_apprenant")
  559. * @return void
  560. */
  561. public function getApprenantAjax($phonenumber)
  562. {
  563. $em = $this->getDoctrine()->getManager();
  564. $ApprenantRepo = $em->getRepository(Apprenant::class);
  565. $Apprenant = $ApprenantRepo->getByPhoneNumber($phonenumber);
  566. $client = $ApprenantRepo->getClient($Apprenant);
  567. if (is_object($Apprenant)) {
  568. $apprennatArray = [
  569. 'statut' => true,
  570. 'id' => $Apprenant->getId(),
  571. 'fullName' => $Apprenant->getFirstname() . ' ' . $Apprenant->getLastname(),
  572. 'client' => $client->getNom(),
  573. 'gsm' => $Apprenant->getGsm()
  574. ];
  575. } else {
  576. $apprennatArray = [
  577. 'statut' => false,
  578. 'msg' => "aucun apprenant correspondant"
  579. ];
  580. }
  581. return new JsonResponse($apprennatArray);
  582. }
  583. /**
  584. * Afficher l'affiche de l'apprenant
  585. * @Route("/showapprenant/{id}/OP", name="crm_show_apprenant")
  586. * @return void
  587. */
  588. public function showApprenant(Apprenant $apprenant)
  589. {
  590. $em = $this->getDoctrine()->getManager();
  591. $ApprenantRepo = $em->getRepository(Apprenant::class);
  592. $compagne = $ApprenantRepo->getLastCompagne($apprenant);
  593. if (!is_object($compagne)) {
  594. $compagne = null;
  595. }
  596. if (!is_object($apprenant)) {
  597. $this->addFlash('success', 'Vous ne pouvez pas appeler l\'apprnenants');
  598. return $this->redirectToRoute('crm_index');
  599. }
  600. // recuperer la liste des Utilisateurs SPOP
  601. $utilisateurs = $em->getRepository(Utilisateur::class)->findSPOP();
  602. // recuperer la liste des Utilisateurs SPOP
  603. $appelStatuts = $em->getRepository(AppelStatut::class)->findAll();
  604. // recuperer la liste des sujets des appels
  605. $appelSujets = $em->getRepository(AppelSujet::class)->findAll();
  606. return $this->render('crm/showApprenant.html.twig', [
  607. 'compagne' => $compagne,
  608. 'apprenant' => $apprenant,
  609. 'utilisateursSPOP' => $utilisateurs,
  610. 'appelStatuts' => $appelStatuts,
  611. 'appelSujets' => $appelSujets
  612. ]);
  613. }
  614. /**
  615. * Afficher l'affiche de l'apprenant et demarrer un appel pour un RDV Coach
  616. * @Route("/callapprenantrdvCoach/{id}/{rdvid}/OP", name="crm_call_apprenant_rdv_coach")
  617. * @return void
  618. */
  619. public function callApprenantRdvCoach(Apprenant $apprenant, $rdvid = -1)
  620. {
  621. $em = $this->getDoctrine()->getManager();
  622. if (!is_object($apprenant)) {
  623. $this->addFlash('success', 'Vous ne pouvez pas appeler l\'apprnenants');
  624. return $this->redirectToRoute('crm_index');
  625. }
  626. $appelSujets = $em->getRepository(AppelSujet::class)->findAll();
  627. $appelStatuts = $em->getRepository(AppelStatut::class)->findBy(["role" => "ROLE_OP"]);
  628. return $this->render('crm/callApprenantCoach.html.twig', [
  629. 'apprenant' => $apprenant,
  630. 'applesSujets' => $appelSujets,
  631. 'appelStatuts' => $appelStatuts,
  632. 'rdv' => $rdvid
  633. ]);
  634. }
  635. }