src/Controller/DashboardController.php line 55

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\JsonResponse;
  6. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\Form\Extension\Core\Type;
  11. use Doctrine\Common\Collections\ArrayCollection;
  12. use Symfony\Component\HttpFoundation\Session\Session;
  13. use App\Entity\Offre;
  14. use App\Form\OffreType;
  15. use App\Entity\Abonnement;
  16. use App\Form\FilterOffreTypeAdvanced;
  17. use App\Form\UserType;
  18. use App\Entity\Locataire;
  19. use App\Form\RapidoType;
  20. use App\Form\CustomUserType as CustomUserFormType;
  21. use App\Service\OffreManager;
  22. use App\Service\AbonnementManager;
  23. use App\Form\LocataireType;
  24. use App\Entity\OffreVerification;
  25. use App\Entity\Paiement;
  26. use App\Entity\PaiementType;
  27. use App\Entity\Document;
  28. use App\Entity\Agence;
  29. use App\Entity\Proprietaire;
  30. use App\Entity\OffreRefBis;
  31. use App\Entity\Convention;
  32. use App\Form\OffreBatchType;
  33. use App\Form\PrelevementType;
  34. use App\Service\PDFManager;
  35. use DateTimeImmutable;
  36. use App\Form\ShareType;
  37. use App\Service\NotificationManager;
  38. class DashboardController extends AbstractController
  39. {
  40.     /**
  41.      * @Route("/", name="index")
  42.      * @Route("/dashboard", name="dashboard")
  43.      */
  44.     public function index(Request $requestOffreManager $omAbonnementManager $am$uploadDirNotificationManager $nmPDFManager $pdf): Response
  45.     {
  46.        
  47.         
  48.         $repo $this->getDoctrine()->getRepository(Offre::class);
  49.         $repoLocataire $this->getDoctrine()->getRepository(Locataire::class);
  50.         $repoAbonnement $this->getDoctrine()->getRepository(Abonnement::class);
  51.         $session = new Session();    
  52.         
  53.         $search $session->get('search_rapido') ? $session->get('search_rapido') : [];
  54.         $selection $session->get('select_rapido', []);
  55.         $offres_selection $repo->findByRef($selection);
  56.         $rapido_settings $session->get('rapido_settings',['length' => 30]);
  57.         if($request->get('length') && !empty($request->get('length')))
  58.         $rapido_settings['length'] = $request->get('length');
  59.         $session->set('rapido_settings'$rapido_settings);  
  60.         $searchArgs = ['length' => $rapido_settings['length']]; 
  61.         $searchArgs['start'] = $request->get('start') ? $request->get('start') : 0;  
  62.         $searchArgs['search'] = $request->get('search') ? $request->get('search')['value'] : '';
  63.         $searchArgs['order'] = $request->get('order') ? $request->get('order') : [];
  64.         $searchArgs['columns'] = $request->get('columns') ? $request->get('columns') : [];
  65.         $selectedLocataire null;
  66.         $selectedAbonnement null;
  67.         
  68.         $locataire = new Locataire(); 
  69.         $abo = new Abonnement();
  70.         $abo->setUser($this->getUser());  
  71.         $abo->setLocataire($locataire);      
  72.         if($request->get('rapido') && !empty($request->get('rapido')['locataire_search'])){  
  73.             $selectedLocataire $locataire $repoLocataire->find($request->get('rapido')['locataire_search']);
  74.             $selectedAbonnement $abo $repoAbonnement->find($request->get('rapido')['abonnement_selected']);
  75.         }
  76.         $rapido_data = ['locataire' => $locataire'locataire_search' => $locataire,'offre_search' => $search'abonnement' => $abo];       
  77.         $form_rapido $this->createForm(RapidoType::class, $rapido_data, ['locataire' => $selectedLocataire'abonnement' => $selectedAbonnement]);
  78.         $form_rapido->handleRequest($request); 
  79.         $refreshData = [];
  80.         $textAnnonce '';
  81.         
  82.         $form_share $this->createForm(ShareType::class,['email' => $locataire->getEmail(), 'tel' => $locataire->getTel1(),'mode' => ['email']]);
  83.         $form_share->handleRequest($request);        
  84.         if($form_share->isSubmitted()){
  85.             if($form_share->isValid()){
  86.                 $data $form_share->getData();
  87.                 $mode $form_share->get('mode')->getData();
  88.                 $share_data $form_share->get('data')->getData() ?  $this->get('serializer')->decode($form_share->get('data')->getData(), 'json') : [];
  89.                 $attachments = isset($share_data['attachments']) ? $share_data['attachments'] : [];
  90.                 $sent false;
  91.                 switch($share_data['action']){
  92.                     case "selection":  
  93.                     $html $this->renderView("offre/pdf/_listing.html.twig", [
  94.                         'controller_name' => 'OffreController',      
  95.                         'offres' => $offres_selection,
  96.                         'title' => 'Selection d\'offres',
  97.                         'societe' => $pdf->getSociete(),
  98.                     ]);        
  99.             
  100.                     $selection_pdf $pdf->render($html,'selection_offre'.'.pdf','portrait','file');  
  101.                     $attachments = [['type' => 'stream''file' => $selection_pdf'name' => 'selection.pdf']];
  102.                     $context = ['title' => 'Sélection''societe' => $pdf->getSociete(),'offres' => $offres_selection'tags' => ['rapido','selection']];
  103.                     
  104.                     if(in_array("email",$mode))
  105.                     $sent $nm->sendTemplatedEmail(preg_split('/[,;|\s]/',$data['email']),'Sélection d\'offres',"convention/email/_selection.html.twig",$context,$attachments);
  106.                     
  107.                     if(in_array("sms",$mode))
  108.                     $sent $nm->sendSms($data['tel'], $this->renderView("convention/sms/_selection.txt.twig"));      
  109.                     
  110.                     break;
  111.                     case "convention":                    
  112.                         
  113.                     $abo $repoAbonnement->find($share_data['abonnement']);
  114.                     $convention $abo->getConventions()->last();
  115.                     $attachments = [['type' => 'document''file' => $convention->getDocument()->getId(), 'name' => 'Convention']];  
  116.                     
  117.                     $context = ['title' => 'Convention''societe' => $pdf->getSociete(),'convention' => $convention,'offres' => $offres_selection'tags' => ['rapido','convention']];
  118.                    
  119.                     if(in_array("email",$mode))
  120.                     $sent $nm->sendTemplatedEmail(preg_split('/[,;|\s]/',$data['email']),'Convention de délivrance d\'offre de location',"convention/email/_convention.html.twig",$context,$attachments);
  121.                     
  122.                     if(in_array("sms",$mode))
  123.                     $sent $nm->sendSms($data['tel'], $this->renderView("convention/sms/_convention.txt.twig"));   
  124.                     break;
  125.                 }
  126.                 
  127.                 if($sent)
  128.                 return new JsonResponse(['status' => 'success','buttonText' => $form_share->get("submit")->createView()->vars['label'], 'title' => "Partager un document"'icon' => 'fa fa-check-sqaure''class' => 'bg-success''message' => 'La convention a bien été envoyée.''refresh' => $refreshData'actions' => ['close_modal' => '#modalShare']]);                    
  129.                 else
  130.                 return new JsonResponse(['status' => 'error','buttonText' => $form_share->get("submit")->createView()->vars['label'], 'title' => "Partager un document"'icon' => 'fa fa-exclamation-triangle''class' => 'bg-danger''message' => 'Erreur lors de l\'envoi''refresh' => $refreshData]);
  131.                 
  132.             }
  133.             else
  134.             {
  135.             
  136.                 return new JsonResponse(['status' => 'error','buttonText' => $form_share->get("submit")->createView()->vars['label'], 'title' => "Partager un document"'icon' => 'fa fa-exclamation-triangle''class' => 'bg-danger''message' => 'Le formulaire de partage comporte des erreurs.''refresh' => $refreshData]);
  137.             }
  138.         }
  139.        
  140.         
  141.                 
  142.         if($form_rapido->isSubmitted())
  143.         {  
  144.             
  145.             
  146.             if($form_rapido->getClickedButton() && $form_rapido->getClickedButton()->getName() == "reset"){
  147.                 $locataire = new Locataire(); 
  148.                 $abo = new Abonnement();
  149.                 $abo->setUser($this->getUser());
  150.                 $form_rapido $this->createForm(RapidoType::class, ['locataire' => $locataire'locataire_search' => null,'offre_search' => [], 'abonnement' => $abo]);
  151.                 $session->set('search_rapido',[]);
  152.               
  153.                 $formView $form_rapido->createView();               
  154.                 $refreshData $this->getRefreshView($formView$request$locataire$textAnnonce,[],$abo);
  155.                 //dd($refreshData);
  156.                 $session = new Session();  
  157.                 $session->set('select_rapido',[]);
  158.                 $refreshData['#formSelection'] = '';
  159.                
  160.                 $modalForm $this->renderView('offre/_modal_proposer_body.html.twig',[
  161.                     'controller_name' => 'DashboardController',
  162.                     'form' => $formView,
  163.                     'selection' => [],
  164.                 ]);
  165.                 $refreshData['#modalProposer .modal-body'] = $modalForm;                
  166.                 $prelevement_view $form_rapido->get('prelevement')->createView();
  167.                 $modalForm $this->renderView('rapido/_modal_prelevement_body.html.twig',[
  168.                     'controller_name' => 'DashboardController',
  169.                     'form' => $prelevement_view
  170.                 ]);
  171.                 $refreshData['#modalPrelevement .modal-body'] = $modalForm;  
  172.                 
  173.                 $form_share $this->createForm(ShareType::class,['email' => $locataire->getEmail() ? $locataire->getEmail() : '''tel' => $locataire->getTel1() ? $locataire->getTel1() : '','mode' => ['email']]);
  174.                 $refreshData['#modalShare .modal-body .modal-form'] = $this->renderView('modal/_modal_share_body.html.twig',[
  175.                     'controller_name' => 'OffreController',
  176.                     'form' => $form_share->createView()
  177.                     ])
  178.                 ;
  179.                 
  180.                 return new JsonResponse(['status' => 'success','buttonText' => $form_rapido->get('reset')->createView()->vars['label'], 'title' => 'Réinitialisation''icon' => 'fa fa-check-square''class' => 'bg-success''message' => 'Le rapido à bien été réinitialisé.''refresh' => $refreshData,'callback' => 'datatables["offres-table"].ajax.reload(null,false);']);
  181.             }
  182.             $rapido $form_rapido->getData();   
  183.             $search $rapido['offre_search'];
  184.             $session->set('search_rapido',$search);
  185.               
  186.             if($request->get('draw') !== null)
  187.             {
  188.                 // CHANGEMENT DE PAGE DU DATATABLE
  189.             
  190.             }
  191.             else
  192.             {
  193.                 
  194.                 $locataire $form_rapido->get('locataire')->getData();   
  195.                 $abo $form_rapido->get('abonnement')->getData();         
  196.                 $abo $am->creerAbonnement($locataire$search$form_rapido->get('type_paiement')->getData(), $abo,$form_rapido->get('abonnement')->get('plainPassword')->getData() );
  197.         
  198.                 $textAnnonceAuto $am->textAnnonce($abo);
  199.                 $textAnnonce = !empty($rapido['annonce_profil']) && $rapido['annonce_profil'] != $textAnnonceAuto $rapido['annonce_profil'] : $textAnnonceAuto;
  200.                 if($request->get('action') == 'generate_annonce'){                    
  201.                     
  202.                     return new JsonResponse(['status' => 'success','text_annonce' => $textAnnonceAuto'abo' => $abo]);
  203.                 }              
  204.                 if ($form_rapido->isValid()) {     
  205.                     
  206.                     
  207.                     
  208.                     //$abo = $am->creerAbonnement($locataire, $search,$form_rapido->get('type_paiement')->getData());
  209.                     if(($form_rapido->get('submit_validate')->isClicked() || $form_rapido->get('submit_proposer')->isClicked()) && !count($selection)){
  210.                         if($request->isXmlHttpRequest()){
  211.                             $formView $form_rapido->createView();               
  212.                             $refreshData array_merge($refreshData,$this->getRefreshView($formView$request$locataire$textAnnonce,[],$abo));
  213.                             $modalForm $this->renderView('offre/_modal_proposer_body.html.twig',[
  214.                                 'controller_name' => 'DashboardController',
  215.                                 'form' => $formView,
  216.                                 'selection' => $selection,
  217.                             ]);
  218.                             $refreshData['#modalProposer .modal-body'] = $modalForm;
  219.                             $button_label $form_rapido->getClickedButton()->getConfig()->getOptions()['label'];
  220.                            
  221.                                        
  222.                             return new JsonResponse(['status' => 'error','buttonText' => $button_label'title' => "Formulaire abonnement"'icon' => 'fa fa-exclamation-triangle''class' => 'bg-danger''message' => 'La sélection est vide''refresh' => $refreshData]);
  223.                         }
  224.                     }
  225.                     elseif($form_rapido->get('submit_validate')->isClicked()){
  226.                         if($request->isXmlHttpRequest()){
  227.                             $formView $form_rapido->createView();               
  228.                             /*$refreshData = $this->getRefreshView($formView, $request, $locataire, $textAnnonce,[],$abo);*/
  229.                             $offres_selection $repo->findByRef($selection);
  230.                             $modalForm $this->renderView('offre/_modal_proposer_body.html.twig',[
  231.                                 'controller_name' => 'DashboardController',
  232.                                 'form' => $formView,
  233.                                 'selection' => $offres_selection,
  234.                             ]);
  235.                             $refreshData['#modalProposer .modal-body'] = $modalForm;
  236.                             return new JsonResponse(['status' => 'success','buttonText' => $form_rapido->get("submit_validate")->createView()->vars['label'], 'refresh' => $refreshData'actions' => ['open_modal' => '#modalProposer']]);
  237.                         }
  238.                     }
  239.                     elseif($form_rapido->get('submit_validate_prelevement')->isClicked()){
  240.                         if($request->isXmlHttpRequest()){
  241.                             $formView $form_rapido->createView();                                           
  242.                             return new JsonResponse(['status' => 'success','buttonText' => $form_rapido->get("submit_validate_prelevement")->createView()->vars['label'], 'refresh' => $refreshData'actions' => ['open_modal' => '#modalPrelevement']]);
  243.                         }
  244.                     }
  245.                     elseif($form_rapido->get('submit_prelevement')->isClicked()){
  246.                         if($request->isXmlHttpRequest()){
  247.                             $data $form_rapido->get('prelevement')->getData();
  248.                             $data['nom'] = $form_rapido->get('locataire')->get('nom')->getData();
  249.                             $data['prenom'] = $form_rapido->get('locataire')->get('prenom')->getData();
  250.                             $data['civilite'] = $form_rapido->get('locataire')->get('civilite')->getData();
  251.                             $data['ref'] = $form_rapido->get('abonnement')->getData()->getUsername();
  252.                             $session->set('rapido_prelevement',$data);
  253.                             $formView $form_rapido->get('prelevement')->createView();   
  254.                             $modalForm $this->renderView('rapido/_modal_prelevement_body.html.twig',[
  255.                                 'controller_name' => 'DashboardController',
  256.                                 'form' => $formView
  257.                             ]);
  258.     
  259.                             $refreshData['#modalPrelevement .modal-body'] = $modalForm;                     
  260.                             return new JsonResponse(['status' => 'success','buttonText' => $form_rapido->get("submit_prelevement")->createView()->vars['label'], 'refresh' => $refreshData'actions' => ['open_window' => $this->generateUrl('rapido_prelevement'), 'close_modal' => '#modalPrelevement']]);
  261.                         }
  262.                     }
  263.                     elseif($form_rapido->get('submit_proposer')->isClicked() && count($selection) > $abo->resteVues()){
  264.                         $formView $form_rapido->createView();               
  265.                         $refreshData array_merge($refreshData,$this->getRefreshView($formView$request$locataire$textAnnonce,[],$abo));
  266.                         $offres_selection $repo->findByRef($selection);
  267.                         $modalForm $this->renderView('offre/_modal_proposer_body.html.twig',[
  268.                             'controller_name' => 'DashboardController',
  269.                             'form' => $formView,
  270.                             'selection' => $offres_selection,
  271.                         ]);
  272.                         $refreshData['#modalProposer .modal-body'] = $modalForm;
  273.                         return new JsonResponse(['status' => 'error','buttonText' => $form_rapido->get("submit_proposer")->createView()->vars['label'], 'title' => "Formulaire abonnement"'icon' => 'fa fa-exclamation-triangle''class' => 'bg-danger''message' => 'Le nombre de vues restant est insuffisant''refresh' => $refreshData]);
  274.                     }                    
  275.                     else
  276.                     {
  277.                         
  278.                        
  279.                         $offres_selection $repo->findByRef($selection);
  280.                         $typeVue $form_rapido->get('type_vue')->getData();
  281.                         $proposed $form_rapido->get('submit_proposer')->isClicked() && $am->proposer($abo$offres_selection,$typeVue); 
  282.                         
  283.                         
  284.                         
  285.                         $entityManager $this->getDoctrine()->getManager();
  286.                         $entityManager->persist($abo);
  287.                         $entityManager->flush();  
  288.                         
  289.                        
  290.                         
  291.                         //$session->set('select_rapido',[]); 
  292.                         if($request->isXmlHttpRequest()){
  293.                             
  294.                             $messages = [];  
  295.                             $url $this->generateUrl('locataire_edit',['id' => $abo->getLocataire()->getId()]);
  296.                             $messages[] = ['title' => "Formulaire abonnement"'icon' => 'fa fa-check-circle''class' => 'bg-success''message' => 'Abonnement '.$abo->getUsername().' créé avec succés !<br><a href="'.$url.'" class="btn btn-success btn-sm mt-3">Voir le locataire</a>',"autohide" => false];    
  297.                             /*$selectionView = $this->renderView('rapido/_selection.html.twig',[
  298.                                 'controller_name' => 'OffreController',
  299.                                 'selection' => new ArrayCollection(),
  300.                             ]); 
  301.                             $refreshData['#formSelection'] = $selectionView; */ 
  302.                             if($proposed
  303.                                 $messages[] = ['title' => "Formulaire abonnement"'icon' => 'fa fa-check-circle''class' => 'bg-success''message' => sprintf(ngettext('%d offre ajoutée','%d offres ajoutées',count($selection)),count($selection)).' à l\'abonnement '.$abo->getUsername().'.<br><a href="'.$url.'" class="btn btn-success btn-sm mt-3">Voir le locataire</a>',"autohide" => false];    
  304.                             elseif($form_rapido->get('submit_proposer')->isClicked())
  305.                                 $messages[] = ['title' => "Formulaire abonnement"'icon' => 'fa fa-exclamation-triangle''class' => 'bg-danger''message' => 'Aucune offre ajoutée à l\'abonnement '.$abo->getUsername().'.<br><a href="'.$url.'" class="btn btn-success btn-sm mt-3">Voir le locataire</a>',"autohide" => false];   
  306.                            
  307.                             $modalForm $this->renderView('offre/_modal_proposer_confirm_body.html.twig',[
  308.                                 'controller_name' => 'DashboardController',
  309.                                 'abonnement' => $abo,
  310.                                 'locataire' => $locataire,
  311.                                 'selection' => $offres_selection,
  312.                             ]);
  313.                             $refreshData['#modalProposer .modal-body'] = $modalForm;
  314.                             $form_share $this->createForm(ShareType::class,['email' => $locataire->getEmail() ? $locataire->getEmail() : '''tel' => $locataire->getTel1() ? $locataire->getTel1() : '','mode' => ['email']]);
  315.                             $refreshData['#modalShare .modal-body .modal-form'] = $this->renderView('modal/_modal_share_body.html.twig',[
  316.                                 'controller_name' => 'OffreController',
  317.                                 'form' => $form_share->createView(),
  318.                                 ])
  319.                             ;
  320.                                     
  321.                             $new_abo = new Abonnement();
  322.                             $new_abo->setUser($this->getUser());
  323.                             $clickedButton $form_rapido->getClickedButton();
  324.                             
  325.                             $form_rapido $this->createForm(RapidoType::class,['locataire' => new Locataire(), 'locataire_search' => [],'abonnement' => $new_abo]); 
  326.                             $formView $form_rapido->createView(); 
  327.                             
  328.                             $refreshData array_merge($refreshData$this->getRefreshView($formView$request, new Locataire()));
  329.                             
  330.                             return new JsonResponse(['status' => 'success','messages' => $messages'buttonText' => $clickedButton->createView()->vars['label'],'callback' => 'datatables["offres-table"].ajax.reload(null,false);''refresh' => $refreshData'selection' => $offres_selection/*,'actions' => ['close_modal' => '#modalProposer']*/]);
  331.                         }
  332.                     }
  333.                     
  334.                 }
  335.                 else
  336.                 if($request->isXmlHttpRequest()){
  337.                     
  338.                     $formView $form_rapido->createView();               
  339.                     $refreshData array_merge($refreshData,$this->getRefreshView($formView$request$locataire$textAnnonce,[],$abo));
  340.                     $offres_selection $repo->findByRef($selection);
  341.                     if($form_rapido->get('submit_proposer')->isClicked()){
  342.                         $modalForm $this->renderView('offre/_modal_proposer_body.html.twig',[
  343.                             'controller_name' => 'DashboardController',
  344.                             'form' => $formView,
  345.                             'selection' => $offres_selection,
  346.                         ]);
  347.                         $refreshData['#modalProposer .modal-body'] = $modalForm;
  348.                     }
  349.                     else
  350.                     if($form_rapido->get('submit_prelevement')->isClicked()){
  351.                         $prelevement_view $form_rapido->get('prelevement')->createView();
  352.                         $modalForm $this->renderView('rapido/_modal_prelevement_body.html.twig',[
  353.                             'controller_name' => 'DashboardController',
  354.                             'form' => $prelevement_view
  355.                         ]);
  356.                         $refreshData['#modalPrelevement .modal-body'] = $modalForm;
  357.                     }
  358.                    
  359.                     switch($form_rapido->getClickedButton()->getName()){
  360.                         default:
  361.                         $title 'Formulaire abonnement';
  362.                         $errorMessage 'Le formulaire abonné comporte des erreurs';
  363.                         break;
  364.                         case 'submit_proposer':
  365.                         $title "Formulaire proposer";
  366.                         $errorMessage 'Le formulaire de proposition comporte des erreurs';
  367.                         break;
  368.                         case 'submit_prelevement':
  369.                         $title "Formulaire prélèvement";
  370.                         $errorMessage 'Le formulaire de prélèvement comporte des erreurs';
  371.                         break;
  372.                     }
  373.                    
  374.                                
  375.                     
  376.                     return new JsonResponse(['status' => 'error','buttonText' => $form_rapido->getClickedButton()->createView()->vars['label'], 'title' => $title'icon' => 'fa fa-exclamation-triangle''class' => 'bg-danger''message' => $errorMessage'refresh' => $refreshData]);
  377.                 }
  378.                 
  379.               
  380.             } 
  381.         }
  382.         
  383.         $offres $repo->findBySearch($search,$searchArgs);
  384.         $total $repo->findBySearch($search$searchArgs,true,true);
  385.         $total_filtered $repo->findBySearch($search$searchArgs,true);
  386.         
  387.         $data = ['data' => [], 'posts' => $_POST];      
  388.         if($request->get('draw') !== null){
  389.             $data['draw'] = $request->get('draw');
  390.             $data['recordsTotal'] = $total;
  391.             $data['recordsFiltered'] = $total_filtered;       
  392.         }  
  393.         
  394.         
  395.         
  396.         
  397.         $form_offres $this->createForm(OffreBatchType::class,null, ['offres' => $offres,'rapido' => true,'selection' => $selection'only_valid' => true]);
  398.         $form_offres_view $form_offres->createView();
  399.        
  400.         
  401.         
  402.         $form_offres->handleRequest($request);
  403.         
  404.         if($form_offres->isSubmitted()){
  405.             if($request->get('draw') === null){
  406.                 foreach($form_offres->get('offres') as $key => $o){
  407.                    
  408.                     if(!in_array($o->getData()->getRef(),$selection) && $o->get('select')->getData())
  409.                         $selection[] = $o->getData()->getRef();
  410.                     else
  411.                     if(($key array_search($o->getData()->getRef(),$selection)) !== false && !$o->get('select')->getData()){
  412.                         
  413.                         unset($selection[$key]);
  414.                        
  415.                     }
  416.                    
  417.                 } 
  418.                 $refreshData = [];
  419.                 $offres_selection $repo->findByRef($selection);
  420.                 $selectionView $this->renderView('rapido/_selection.html.twig',[
  421.                     'controller_name' => 'OffreController',
  422.                     'selection' => $offres_selection,
  423.                 ]);
  424.                
  425.                 $refreshData['#formSelection'] = $selectionView;
  426.                 if ($form_offres->isValid()) {
  427.                     $session->set('select_rapido',$selection);
  428.                     return new JsonResponse(['status' => 'success''refresh' => $refreshData'selection' => $offres_selection]);
  429.                 }
  430.                 elseif($request->isXmlHttpRequest()) {
  431.                    
  432.                             
  433.                     return new JsonResponse(['status' => 'error''title' => "Selection des offres"'icon' => 'fa fa fa-exclamation-triangle''class' => 'bg-danger''message' => 'La sélection comporte des erreurs.''refresh' => $refreshData'selection' => $offres_selection]);
  434.                 }
  435.                
  436.                     
  437.               
  438.             }
  439.             
  440.         }
  441.         else
  442.          $offres_selection $repo->findByRef($selection);
  443.        
  444.         
  445.         $data['data'] = $om->getDataTable($form_offres->get('offres'), ['offre_edit']);
  446.         $routes = ['add' => 'offre_add''update' => 'offre_update''edit' => 'offre_edit','delete' => 'offre_delete'];
  447.         $routesJson $this->get('serializer')->serialize($routes'json');
  448.         $search_verifs = ['verifier' => false];        
  449.         $total_verifs $repo->findBySearch($search_verifs, [],true,true);
  450.        
  451.         
  452.       
  453.         if($request->isXmlHttpRequest()){
  454.             return  new JsonResponse($data);
  455.         }
  456.         else
  457.         return $this->render('dashboard/index.html.twig', [
  458.             'controller_name' => 'DashboardController'
  459.             'data' =>  ['type' => 'offre''routes' => $routesJson,'rows' => $data['data']],
  460.             'form' => $form_rapido->createView(),  
  461.             'form_offres' => $form_offres_view,  
  462.             'total' => $total,
  463.             'total_filtered' => $total_filtered,
  464.             'defer' => true
  465.             'num_verifs' => $total_verifs,          
  466.             'selection' =>   $offres_selection,
  467.             'text_annonce' => $textAnnonce,
  468.             'form_share' => $form_share->createView(),
  469.         ]);
  470.        
  471.     }
  472.     public function getRefreshView($formView$request,$locataire,$textAnnonce ""$exclusion = [], $abonnement null){
  473.         $refreshData = [];   
  474.         if(!in_array('formUser'$exclusion)){
  475.             $userFormTab $this->renderView('rapido/form_locataire.html.twig',[
  476.                 'controller_name' => 'DashboardController',
  477.                 'form' => $formView->children['locataire'],
  478.                 'form_paiement' => $formView->children['type_paiement'],
  479.                 'form_abonnement' => $formView->children['abonnement'],
  480.                 'abonnements' => $locataire->getAbonnements()->filter(function($abo){ return $abo->getPaye(); }),
  481.                 'current_abonnement' => $abonnement,
  482.                 'text_annonce' => $textAnnonce,
  483.             ]);
  484.             $refreshData['#formUser'] = $userFormTab;
  485.         }
  486.         if(!in_array('formOffre'$exclusion)){       
  487.             
  488.             $offreFormTab $this->renderView('rapido/form_offre.html.twig',[
  489.                 'controller_name' => 'DashboardController',
  490.                 'form' => $formView->children['offre_search'],
  491.             ]);
  492.             $refreshData['#formOffre'] = $offreFormTab;
  493.         }
  494.         return $refreshData;
  495.     }
  496.     
  497.      /**
  498.      * @Route("/rapido/selection/remove/{id}", name="rapido_remove_selection", options={"expose"=true})
  499.      */
  500.     public function remove_selection($id nullRequest $request): Response
  501.     {   
  502.         if($request->isXmlHttpRequest()){
  503.             
  504.            
  505.             $repo $this->getDoctrine()->getRepository(Offre::class);
  506.             $offre $repo->find($id);
  507.             if(!$offre)
  508.             throw new NotFoundHttpException('Cette offre n\'existe pas');
  509.             $session = new Session();
  510.             $selection $session->get('select_rapido',[]);
  511.             if(($key array_search($offre->getRef(), $selection)) !== false){
  512.                 unset($selection[$key]);
  513.             }
  514.             $session->set('select_rapido',$selection);
  515.             return new JsonResponse(
  516.                 [
  517.                     'refresh' => [],
  518.                 ]
  519.             );   
  520.         }
  521.         else
  522.         throw new NotFoundHttpException('Page not found');
  523.     }
  524.     /**
  525.      * @Route("/rapido/selection/reset", name="rapido_reset_selection", options={"expose"=true})
  526.      */
  527.     public function reset_selection($id nullRequest $request): Response
  528.     {   
  529.         if($request->isXmlHttpRequest()){            
  530.             $session = new Session();          
  531.             $session->set('select_rapido',[]);
  532.             return new JsonResponse(
  533.                 [
  534.                     
  535.                     'refresh' => ['#formSelection' => ''],
  536.                     'callback' => 'datatables["offres-table"].ajax.reload(null,true);',
  537.                     'messages' => [
  538.                         [
  539.                             'title' => "Selection des offres"
  540.                             'icon' => 'fa fa fa-check-circle'
  541.                             'class' => 'bg-warning'
  542.                             'message' => 'Sélection réinitialisée.',
  543.                         ]
  544.                     ]
  545.                 ]
  546.             );   
  547.         }
  548.         else
  549.         throw new NotFoundHttpException('Page not found');
  550.     }
  551.     /**
  552.      * @Route("/rapido/locataire/{id}", name="rapido_locataire", options={"expose"=true})
  553.      */
  554.     public function locataire_edit($id nullRequest $request): Response
  555.     {      
  556.         if($request->isXmlHttpRequest()){
  557.             
  558.             if($id !== null){
  559.                 $repo_loc $this->getDoctrine()->getRepository(Locataire::class);
  560.                 $locataire $repo_loc->find($id);
  561.                 if(!$locataire)
  562.                 throw new NotFoundHttpException('Ce locataire n\'existe pas');
  563.             }else
  564.             {
  565.                 $locataire = new Locataire();
  566.                 //$this->getDoctrine()->getManager()->persist($locataire);
  567.             }
  568.            
  569.             
  570.             $entityManager $this->getDoctrine()->getManager();
  571.             $entityManager->persist($locataire);
  572.             $abo = new Abonnement();
  573.             $abo->setUser($this->getUser());
  574.               
  575.             $form $this->createForm(RapidoType::class, ['locataire' => $locataire'locataire_search' => $locataire,'abonnement' => $abo], ['locataire' => $locataire,'adresse' => $locataire->getDefaultAdresse() ? $locataire->getDefaultAdresse() : null]);  
  576.             $form->handleRequest($request);
  577.             $formView $form->createView(); 
  578.             $refreshData$this->getRefreshView($formView,$request$locataire,'', ['formOffre']);
  579.             return new JsonResponse(
  580.                 ['refresh' => $refreshData]
  581.             );   
  582.         }
  583.         else
  584.         throw new NotFoundHttpException('Page not found');
  585.     }
  586.     /**
  587.      * @Route("/rapido/abonnement/{id}", name="rapido_abonnement", options={"expose"=true})
  588.      */
  589.     public function abonnement_edit($id nullRequest $request): Response
  590.     {      
  591.         if($request->isXmlHttpRequest()){
  592.             
  593.             if($id !== null){
  594.                 $repo_abo $this->getDoctrine()->getRepository(Abonnement::class);
  595.                 $abonnement $repo_abo->find($id);
  596.                 if(!$abonnement)
  597.                 throw new NotFoundHttpException('Cet abonnement n\'existe pas');
  598.             }else
  599.             {
  600.                 $abonnement = new Abonnement();
  601.                 $entityManager $this->getDoctrine()->getManager();
  602.                 $entityManager->persist($abonnement);
  603.                 //$this->getDoctrine()->getManager()->persist($abonnement);
  604.             }
  605.            
  606.             
  607.             
  608.             $locataire $abonnement->getLocataire();
  609.                     
  610.               
  611.             $form $this->createForm(RapidoType::class, ['locataire' => $locataire'locataire_search' => $locataire,'abonnement' => $abonnement], ['locataire' => $locataire,'abonnement' => $abonnement,'adresse' => $locataire->getDefaultAdresse() ? $locataire->getDefaultAdresse() : null]);  
  612.             $form->handleRequest($request);
  613.             $formView $form->createView(); 
  614.             $refreshData$this->getRefreshView($formView,$request$locataire,'', ['formOffre'], $abonnement);
  615.             return new JsonResponse(
  616.                 ['refresh' => $refreshData]
  617.             );   
  618.         }
  619.         else
  620.         throw new NotFoundHttpException('Page not found');
  621.     }
  622.     
  623.  
  624.     /**
  625.      * @Route("/dashboard_advanced",name="dashboard_advanced")
  626.      */
  627.     public function advanced(Request $request)
  628.     {
  629.         if(!$this->isGranted('ROLE_ADMIN'))
  630.         return $this->redirectToRoute('dashboard',[ 'forced' => true ]);
  631.         $repoVerif $this->getDoctrine()->getRepository(Offre::class);
  632.         $search_verifs = ['verifier' => false];
  633.         $total_verifs $repoVerif->findBySearch($search_verifs, [],true,true);
  634.         return $this->render('dashboard/advanced.html.twig', [
  635.             'controller_name' => 'DashboardController',
  636.             'num_verifs' => $total_verifs
  637.            
  638.         ]);
  639.         
  640.     }
  641.     /**
  642.      * @Route("/filter", name="filter", options={"expose"=true})
  643.      */
  644.     public function filter(Request $request): JsonResponse
  645.     {
  646.         $repoOffre $this->getDoctrine()->getRepository(Offre::class);
  647.         $repoOffreRefBis $this->getDoctrine()->getRepository(OffreRefBis::class);
  648.         $repoProprietaire $this->getDoctrine()->getRepository(Proprietaire::class);
  649.         $repoAgence $this->getDoctrine()->getRepository(Agence::class);
  650.         $q $request->get('q');
  651.        
  652.         $page $request->get('page') ? $request->get('page') : 1;
  653.         $maxItems $request->get('maxItems') ? $request->get('maxItems') : 20;
  654.        
  655.         $totalCount $totalOffres $repoOffre->countAll($q);
  656.         $totalCount += $totalOffresBis $repoOffreRefBis->countAll($q);
  657.         $totalCount += $totalProprietaires $repoProprietaire->countAll($q);
  658.         $totalCount += $totalAgences $repoAgence->countAll($q);
  659.        
  660.         $moreOffres $page*$maxItems $totalOffres;
  661.         $moreOffreBis $page*$maxItems $totalOffresBis;
  662.         $moreProprietaire $page*$maxItems $totalProprietaires;
  663.         $moreAgence $page*$maxItems $totalAgences;
  664.         $more $moreOffres || $moreOffres || $moreProprietaire || $moreAgence true false;
  665.         $offres $repoOffre->findByQuery($q,false,false,'o.ref','ASC',$page$maxItems);
  666.         $offresBis $repoOffreRefBis->findByQuery($q,'o.ref','ASC',$page$maxItems);
  667.         $proprietaires $repoProprietaire->findByQuery($q,'c.nom,c.prenom','ASC',$page$maxItems);
  668.         $agences $repoAgence->findByQuery($q,'a.denomination','ASC',$page$maxItems);
  669.         $results = [];
  670.         
  671.         foreach($offres as $o){
  672.             $offre = ["id" => "offre_".$o->getId(), "text" => "Offre ".$o->getRef()];           
  673.             $results[] = $offre;
  674.         }
  675.         foreach($offresBis as $b){
  676.             $bis = ["id" => "offre_".$b->getOffre()->getId(), "text" => "Bis ".$b->getRef()];           
  677.             $results[] = $bis;
  678.         }
  679.         foreach($proprietaires as $p){
  680.             $pro = ["id" => "proprietaire_".$p->getId(), "text" => "Propriétaire ".$p->__toString()];           
  681.             $results[] = $pro;
  682.         }
  683.         foreach($agences as $a){
  684.             $agence = ["id" => "agence_".$a->getId(), "text" => "Agence ".$a->__toString()];           
  685.             $results[] = $agence;
  686.         }       
  687.         
  688.         if($request->isXmlHttpRequest()){
  689.             return new JsonResponse(['results' => $results'pagination' => ['more' => $more]]);
  690.         }
  691.         else
  692.         throw new NotFoundHttpException('Page not found');
  693.        
  694.     }
  695.     /**
  696.      * @Route("/rapido/prelevement", name="rapido_prelevement", options={"expose"=true})
  697.      */
  698.     public function prelevement(Request $requestPDFManager $pdf): Response
  699.     {   
  700.         $session = new Session(); 
  701.         $data $session->get('rapido_prelevement');  
  702.         
  703.         
  704.         // Retrieve the HTML generated in our twig file
  705.         $html $this->renderView("rapido/pdf/_prelevement.html.twig", [
  706.             'controller_name' => 'DashboardController'
  707.             'societe' => $pdf->getSociete(),
  708.             'title' => 'Carte Bancaire : Autorisation de Prélèvement',
  709.             'data' => $data,
  710.         ]);
  711.         //$session->set('rapido_prelevement', null);
  712.         return $pdf->render($html,'prelevement.pdf','portrait');
  713.        
  714.     }
  715. }