<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\HttpFoundation\Session\Session;
use App\Entity\Offre;
use App\Form\OffreType;
use App\Entity\Abonnement;
use App\Form\FilterOffreTypeAdvanced;
use App\Form\UserType;
use App\Entity\Locataire;
use App\Form\RapidoType;
use App\Form\CustomUserType as CustomUserFormType;
use App\Service\OffreManager;
use App\Service\AbonnementManager;
use App\Form\LocataireType;
use App\Entity\OffreVerification;
use App\Entity\Paiement;
use App\Entity\PaiementType;
use App\Entity\Document;
use App\Entity\Agence;
use App\Entity\Proprietaire;
use App\Entity\OffreRefBis;
use App\Entity\Convention;
use App\Form\OffreBatchType;
use App\Form\PrelevementType;
use App\Service\PDFManager;
use DateTimeImmutable;
use App\Form\ShareType;
use App\Service\NotificationManager;
class DashboardController extends AbstractController
{
/**
* @Route("/", name="index")
* @Route("/dashboard", name="dashboard")
*/
public function index(Request $request, OffreManager $om, AbonnementManager $am, $uploadDir, NotificationManager $nm, PDFManager $pdf): Response
{
$repo = $this->getDoctrine()->getRepository(Offre::class);
$repoLocataire = $this->getDoctrine()->getRepository(Locataire::class);
$repoAbonnement = $this->getDoctrine()->getRepository(Abonnement::class);
$session = new Session();
$search = $session->get('search_rapido') ? $session->get('search_rapido') : [];
$selection = $session->get('select_rapido', []);
$offres_selection = $repo->findByRef($selection);
$rapido_settings = $session->get('rapido_settings',['length' => 30]);
if($request->get('length') && !empty($request->get('length')))
$rapido_settings['length'] = $request->get('length');
$session->set('rapido_settings', $rapido_settings);
$searchArgs = ['length' => $rapido_settings['length']];
$searchArgs['start'] = $request->get('start') ? $request->get('start') : 0;
$searchArgs['search'] = $request->get('search') ? $request->get('search')['value'] : '';
$searchArgs['order'] = $request->get('order') ? $request->get('order') : [];
$searchArgs['columns'] = $request->get('columns') ? $request->get('columns') : [];
$selectedLocataire = null;
$selectedAbonnement = null;
$locataire = new Locataire();
$abo = new Abonnement();
$abo->setUser($this->getUser());
$abo->setLocataire($locataire);
if($request->get('rapido') && !empty($request->get('rapido')['locataire_search'])){
$selectedLocataire = $locataire = $repoLocataire->find($request->get('rapido')['locataire_search']);
$selectedAbonnement = $abo = $repoAbonnement->find($request->get('rapido')['abonnement_selected']);
}
$rapido_data = ['locataire' => $locataire, 'locataire_search' => $locataire,'offre_search' => $search, 'abonnement' => $abo];
$form_rapido = $this->createForm(RapidoType::class, $rapido_data, ['locataire' => $selectedLocataire, 'abonnement' => $selectedAbonnement]);
$form_rapido->handleRequest($request);
$refreshData = [];
$textAnnonce = '';
$form_share = $this->createForm(ShareType::class,['email' => $locataire->getEmail(), 'tel' => $locataire->getTel1(),'mode' => ['email']]);
$form_share->handleRequest($request);
if($form_share->isSubmitted()){
if($form_share->isValid()){
$data = $form_share->getData();
$mode = $form_share->get('mode')->getData();
$share_data = $form_share->get('data')->getData() ? $this->get('serializer')->decode($form_share->get('data')->getData(), 'json') : [];
$attachments = isset($share_data['attachments']) ? $share_data['attachments'] : [];
$sent = false;
switch($share_data['action']){
case "selection":
$html = $this->renderView("offre/pdf/_listing.html.twig", [
'controller_name' => 'OffreController',
'offres' => $offres_selection,
'title' => 'Selection d\'offres',
'societe' => $pdf->getSociete(),
]);
$selection_pdf = $pdf->render($html,'selection_offre'.'.pdf','portrait','file');
$attachments = [['type' => 'stream', 'file' => $selection_pdf, 'name' => 'selection.pdf']];
$context = ['title' => 'Sélection', 'societe' => $pdf->getSociete(),'offres' => $offres_selection, 'tags' => ['rapido','selection']];
if(in_array("email",$mode))
$sent = $nm->sendTemplatedEmail(preg_split('/[,;|\s]/',$data['email']),'Sélection d\'offres',"convention/email/_selection.html.twig",$context,$attachments);
if(in_array("sms",$mode))
$sent = $nm->sendSms($data['tel'], $this->renderView("convention/sms/_selection.txt.twig"));
break;
case "convention":
$abo = $repoAbonnement->find($share_data['abonnement']);
$convention = $abo->getConventions()->last();
$attachments = [['type' => 'document', 'file' => $convention->getDocument()->getId(), 'name' => 'Convention']];
$context = ['title' => 'Convention', 'societe' => $pdf->getSociete(),'convention' => $convention,'offres' => $offres_selection, 'tags' => ['rapido','convention']];
if(in_array("email",$mode))
$sent = $nm->sendTemplatedEmail(preg_split('/[,;|\s]/',$data['email']),'Convention de délivrance d\'offre de location',"convention/email/_convention.html.twig",$context,$attachments);
if(in_array("sms",$mode))
$sent = $nm->sendSms($data['tel'], $this->renderView("convention/sms/_convention.txt.twig"));
break;
}
if($sent)
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']]);
else
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]);
}
else
{
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]);
}
}
if($form_rapido->isSubmitted())
{
if($form_rapido->getClickedButton() && $form_rapido->getClickedButton()->getName() == "reset"){
$locataire = new Locataire();
$abo = new Abonnement();
$abo->setUser($this->getUser());
$form_rapido = $this->createForm(RapidoType::class, ['locataire' => $locataire, 'locataire_search' => null,'offre_search' => [], 'abonnement' => $abo]);
$session->set('search_rapido',[]);
$formView = $form_rapido->createView();
$refreshData = $this->getRefreshView($formView, $request, $locataire, $textAnnonce,[],$abo);
//dd($refreshData);
$session = new Session();
$session->set('select_rapido',[]);
$refreshData['#formSelection'] = '';
$modalForm = $this->renderView('offre/_modal_proposer_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView,
'selection' => [],
]);
$refreshData['#modalProposer .modal-body'] = $modalForm;
$prelevement_view = $form_rapido->get('prelevement')->createView();
$modalForm = $this->renderView('rapido/_modal_prelevement_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $prelevement_view
]);
$refreshData['#modalPrelevement .modal-body'] = $modalForm;
$form_share = $this->createForm(ShareType::class,['email' => $locataire->getEmail() ? $locataire->getEmail() : '', 'tel' => $locataire->getTel1() ? $locataire->getTel1() : '','mode' => ['email']]);
$refreshData['#modalShare .modal-body .modal-form'] = $this->renderView('modal/_modal_share_body.html.twig',[
'controller_name' => 'OffreController',
'form' => $form_share->createView()
])
;
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);']);
}
$rapido = $form_rapido->getData();
$search = $rapido['offre_search'];
$session->set('search_rapido',$search);
if($request->get('draw') !== null)
{
// CHANGEMENT DE PAGE DU DATATABLE
}
else
{
$locataire = $form_rapido->get('locataire')->getData();
$abo = $form_rapido->get('abonnement')->getData();
$abo = $am->creerAbonnement($locataire, $search, $form_rapido->get('type_paiement')->getData(), $abo,$form_rapido->get('abonnement')->get('plainPassword')->getData() );
$textAnnonceAuto = $am->textAnnonce($abo);
$textAnnonce = !empty($rapido['annonce_profil']) && $rapido['annonce_profil'] != $textAnnonceAuto ? $rapido['annonce_profil'] : $textAnnonceAuto;
if($request->get('action') == 'generate_annonce'){
return new JsonResponse(['status' => 'success','text_annonce' => $textAnnonceAuto, 'abo' => $abo]);
}
if ($form_rapido->isValid()) {
//$abo = $am->creerAbonnement($locataire, $search,$form_rapido->get('type_paiement')->getData());
if(($form_rapido->get('submit_validate')->isClicked() || $form_rapido->get('submit_proposer')->isClicked()) && !count($selection)){
if($request->isXmlHttpRequest()){
$formView = $form_rapido->createView();
$refreshData = array_merge($refreshData,$this->getRefreshView($formView, $request, $locataire, $textAnnonce,[],$abo));
$modalForm = $this->renderView('offre/_modal_proposer_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView,
'selection' => $selection,
]);
$refreshData['#modalProposer .modal-body'] = $modalForm;
$button_label = $form_rapido->getClickedButton()->getConfig()->getOptions()['label'];
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]);
}
}
elseif($form_rapido->get('submit_validate')->isClicked()){
if($request->isXmlHttpRequest()){
$formView = $form_rapido->createView();
/*$refreshData = $this->getRefreshView($formView, $request, $locataire, $textAnnonce,[],$abo);*/
$offres_selection = $repo->findByRef($selection);
$modalForm = $this->renderView('offre/_modal_proposer_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView,
'selection' => $offres_selection,
]);
$refreshData['#modalProposer .modal-body'] = $modalForm;
return new JsonResponse(['status' => 'success','buttonText' => $form_rapido->get("submit_validate")->createView()->vars['label'], 'refresh' => $refreshData, 'actions' => ['open_modal' => '#modalProposer']]);
}
}
elseif($form_rapido->get('submit_validate_prelevement')->isClicked()){
if($request->isXmlHttpRequest()){
$formView = $form_rapido->createView();
return new JsonResponse(['status' => 'success','buttonText' => $form_rapido->get("submit_validate_prelevement")->createView()->vars['label'], 'refresh' => $refreshData, 'actions' => ['open_modal' => '#modalPrelevement']]);
}
}
elseif($form_rapido->get('submit_prelevement')->isClicked()){
if($request->isXmlHttpRequest()){
$data = $form_rapido->get('prelevement')->getData();
$data['nom'] = $form_rapido->get('locataire')->get('nom')->getData();
$data['prenom'] = $form_rapido->get('locataire')->get('prenom')->getData();
$data['civilite'] = $form_rapido->get('locataire')->get('civilite')->getData();
$data['ref'] = $form_rapido->get('abonnement')->getData()->getUsername();
$session->set('rapido_prelevement',$data);
$formView = $form_rapido->get('prelevement')->createView();
$modalForm = $this->renderView('rapido/_modal_prelevement_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView
]);
$refreshData['#modalPrelevement .modal-body'] = $modalForm;
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']]);
}
}
elseif($form_rapido->get('submit_proposer')->isClicked() && count($selection) > $abo->resteVues()){
$formView = $form_rapido->createView();
$refreshData = array_merge($refreshData,$this->getRefreshView($formView, $request, $locataire, $textAnnonce,[],$abo));
$offres_selection = $repo->findByRef($selection);
$modalForm = $this->renderView('offre/_modal_proposer_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView,
'selection' => $offres_selection,
]);
$refreshData['#modalProposer .modal-body'] = $modalForm;
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]);
}
else
{
$offres_selection = $repo->findByRef($selection);
$typeVue = $form_rapido->get('type_vue')->getData();
$proposed = $form_rapido->get('submit_proposer')->isClicked() && $am->proposer($abo, $offres_selection,$typeVue);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($abo);
$entityManager->flush();
//$session->set('select_rapido',[]);
if($request->isXmlHttpRequest()){
$messages = [];
$url = $this->generateUrl('locataire_edit',['id' => $abo->getLocataire()->getId()]);
$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];
/*$selectionView = $this->renderView('rapido/_selection.html.twig',[
'controller_name' => 'OffreController',
'selection' => new ArrayCollection(),
]);
$refreshData['#formSelection'] = $selectionView; */
if($proposed)
$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];
elseif($form_rapido->get('submit_proposer')->isClicked())
$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];
$modalForm = $this->renderView('offre/_modal_proposer_confirm_body.html.twig',[
'controller_name' => 'DashboardController',
'abonnement' => $abo,
'locataire' => $locataire,
'selection' => $offres_selection,
]);
$refreshData['#modalProposer .modal-body'] = $modalForm;
$form_share = $this->createForm(ShareType::class,['email' => $locataire->getEmail() ? $locataire->getEmail() : '', 'tel' => $locataire->getTel1() ? $locataire->getTel1() : '','mode' => ['email']]);
$refreshData['#modalShare .modal-body .modal-form'] = $this->renderView('modal/_modal_share_body.html.twig',[
'controller_name' => 'OffreController',
'form' => $form_share->createView(),
])
;
$new_abo = new Abonnement();
$new_abo->setUser($this->getUser());
$clickedButton = $form_rapido->getClickedButton();
$form_rapido = $this->createForm(RapidoType::class,['locataire' => new Locataire(), 'locataire_search' => [],'abonnement' => $new_abo]);
$formView = $form_rapido->createView();
$refreshData = array_merge($refreshData, $this->getRefreshView($formView, $request, new Locataire()));
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']*/]);
}
}
}
else
if($request->isXmlHttpRequest()){
$formView = $form_rapido->createView();
$refreshData = array_merge($refreshData,$this->getRefreshView($formView, $request, $locataire, $textAnnonce,[],$abo));
$offres_selection = $repo->findByRef($selection);
if($form_rapido->get('submit_proposer')->isClicked()){
$modalForm = $this->renderView('offre/_modal_proposer_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView,
'selection' => $offres_selection,
]);
$refreshData['#modalProposer .modal-body'] = $modalForm;
}
else
if($form_rapido->get('submit_prelevement')->isClicked()){
$prelevement_view = $form_rapido->get('prelevement')->createView();
$modalForm = $this->renderView('rapido/_modal_prelevement_body.html.twig',[
'controller_name' => 'DashboardController',
'form' => $prelevement_view
]);
$refreshData['#modalPrelevement .modal-body'] = $modalForm;
}
switch($form_rapido->getClickedButton()->getName()){
default:
$title = 'Formulaire abonnement';
$errorMessage = 'Le formulaire abonné comporte des erreurs';
break;
case 'submit_proposer':
$title = "Formulaire proposer";
$errorMessage = 'Le formulaire de proposition comporte des erreurs';
break;
case 'submit_prelevement':
$title = "Formulaire prélèvement";
$errorMessage = 'Le formulaire de prélèvement comporte des erreurs';
break;
}
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]);
}
}
}
$offres = $repo->findBySearch($search,$searchArgs);
$total = $repo->findBySearch($search, $searchArgs,true,true);
$total_filtered = $repo->findBySearch($search, $searchArgs,true);
$data = ['data' => [], 'posts' => $_POST];
if($request->get('draw') !== null){
$data['draw'] = $request->get('draw');
$data['recordsTotal'] = $total;
$data['recordsFiltered'] = $total_filtered;
}
$form_offres = $this->createForm(OffreBatchType::class,null, ['offres' => $offres,'rapido' => true,'selection' => $selection, 'only_valid' => true]);
$form_offres_view = $form_offres->createView();
$form_offres->handleRequest($request);
if($form_offres->isSubmitted()){
if($request->get('draw') === null){
foreach($form_offres->get('offres') as $key => $o){
if(!in_array($o->getData()->getRef(),$selection) && $o->get('select')->getData())
$selection[] = $o->getData()->getRef();
else
if(($key = array_search($o->getData()->getRef(),$selection)) !== false && !$o->get('select')->getData()){
unset($selection[$key]);
}
}
$refreshData = [];
$offres_selection = $repo->findByRef($selection);
$selectionView = $this->renderView('rapido/_selection.html.twig',[
'controller_name' => 'OffreController',
'selection' => $offres_selection,
]);
$refreshData['#formSelection'] = $selectionView;
if ($form_offres->isValid()) {
$session->set('select_rapido',$selection);
return new JsonResponse(['status' => 'success', 'refresh' => $refreshData, 'selection' => $offres_selection]);
}
elseif($request->isXmlHttpRequest()) {
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]);
}
}
}
else
$offres_selection = $repo->findByRef($selection);
$data['data'] = $om->getDataTable($form_offres->get('offres'), ['offre_edit']);
$routes = ['add' => 'offre_add', 'update' => 'offre_update', 'edit' => 'offre_edit','delete' => 'offre_delete'];
$routesJson = $this->get('serializer')->serialize($routes, 'json');
$search_verifs = ['verifier' => false];
$total_verifs = $repo->findBySearch($search_verifs, [],true,true);
if($request->isXmlHttpRequest()){
return new JsonResponse($data);
}
else
return $this->render('dashboard/index.html.twig', [
'controller_name' => 'DashboardController',
'data' => ['type' => 'offre', 'routes' => $routesJson,'rows' => $data['data']],
'form' => $form_rapido->createView(),
'form_offres' => $form_offres_view,
'total' => $total,
'total_filtered' => $total_filtered,
'defer' => true,
'num_verifs' => $total_verifs,
'selection' => $offres_selection,
'text_annonce' => $textAnnonce,
'form_share' => $form_share->createView(),
]);
}
public function getRefreshView($formView, $request,$locataire,$textAnnonce = "", $exclusion = [], $abonnement = null){
$refreshData = [];
if(!in_array('formUser', $exclusion)){
$userFormTab = $this->renderView('rapido/form_locataire.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView->children['locataire'],
'form_paiement' => $formView->children['type_paiement'],
'form_abonnement' => $formView->children['abonnement'],
'abonnements' => $locataire->getAbonnements()->filter(function($abo){ return $abo->getPaye(); }),
'current_abonnement' => $abonnement,
'text_annonce' => $textAnnonce,
]);
$refreshData['#formUser'] = $userFormTab;
}
if(!in_array('formOffre', $exclusion)){
$offreFormTab = $this->renderView('rapido/form_offre.html.twig',[
'controller_name' => 'DashboardController',
'form' => $formView->children['offre_search'],
]);
$refreshData['#formOffre'] = $offreFormTab;
}
return $refreshData;
}
/**
* @Route("/rapido/selection/remove/{id}", name="rapido_remove_selection", options={"expose"=true})
*/
public function remove_selection($id = null, Request $request): Response
{
if($request->isXmlHttpRequest()){
$repo = $this->getDoctrine()->getRepository(Offre::class);
$offre = $repo->find($id);
if(!$offre)
throw new NotFoundHttpException('Cette offre n\'existe pas');
$session = new Session();
$selection = $session->get('select_rapido',[]);
if(($key = array_search($offre->getRef(), $selection)) !== false){
unset($selection[$key]);
}
$session->set('select_rapido',$selection);
return new JsonResponse(
[
'refresh' => [],
]
);
}
else
throw new NotFoundHttpException('Page not found');
}
/**
* @Route("/rapido/selection/reset", name="rapido_reset_selection", options={"expose"=true})
*/
public function reset_selection($id = null, Request $request): Response
{
if($request->isXmlHttpRequest()){
$session = new Session();
$session->set('select_rapido',[]);
return new JsonResponse(
[
'refresh' => ['#formSelection' => ''],
'callback' => 'datatables["offres-table"].ajax.reload(null,true);',
'messages' => [
[
'title' => "Selection des offres",
'icon' => 'fa fa fa-check-circle',
'class' => 'bg-warning',
'message' => 'Sélection réinitialisée.',
]
]
]
);
}
else
throw new NotFoundHttpException('Page not found');
}
/**
* @Route("/rapido/locataire/{id}", name="rapido_locataire", options={"expose"=true})
*/
public function locataire_edit($id = null, Request $request): Response
{
if($request->isXmlHttpRequest()){
if($id !== null){
$repo_loc = $this->getDoctrine()->getRepository(Locataire::class);
$locataire = $repo_loc->find($id);
if(!$locataire)
throw new NotFoundHttpException('Ce locataire n\'existe pas');
}else
{
$locataire = new Locataire();
//$this->getDoctrine()->getManager()->persist($locataire);
}
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($locataire);
$abo = new Abonnement();
$abo->setUser($this->getUser());
$form = $this->createForm(RapidoType::class, ['locataire' => $locataire, 'locataire_search' => $locataire,'abonnement' => $abo], ['locataire' => $locataire,'adresse' => $locataire->getDefaultAdresse() ? $locataire->getDefaultAdresse() : null]);
$form->handleRequest($request);
$formView = $form->createView();
$refreshData= $this->getRefreshView($formView,$request, $locataire,'', ['formOffre']);
return new JsonResponse(
['refresh' => $refreshData]
);
}
else
throw new NotFoundHttpException('Page not found');
}
/**
* @Route("/rapido/abonnement/{id}", name="rapido_abonnement", options={"expose"=true})
*/
public function abonnement_edit($id = null, Request $request): Response
{
if($request->isXmlHttpRequest()){
if($id !== null){
$repo_abo = $this->getDoctrine()->getRepository(Abonnement::class);
$abonnement = $repo_abo->find($id);
if(!$abonnement)
throw new NotFoundHttpException('Cet abonnement n\'existe pas');
}else
{
$abonnement = new Abonnement();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($abonnement);
//$this->getDoctrine()->getManager()->persist($abonnement);
}
$locataire = $abonnement->getLocataire();
$form = $this->createForm(RapidoType::class, ['locataire' => $locataire, 'locataire_search' => $locataire,'abonnement' => $abonnement], ['locataire' => $locataire,'abonnement' => $abonnement,'adresse' => $locataire->getDefaultAdresse() ? $locataire->getDefaultAdresse() : null]);
$form->handleRequest($request);
$formView = $form->createView();
$refreshData= $this->getRefreshView($formView,$request, $locataire,'', ['formOffre'], $abonnement);
return new JsonResponse(
['refresh' => $refreshData]
);
}
else
throw new NotFoundHttpException('Page not found');
}
/**
* @Route("/dashboard_advanced",name="dashboard_advanced")
*/
public function advanced(Request $request)
{
if(!$this->isGranted('ROLE_ADMIN'))
return $this->redirectToRoute('dashboard',[ 'forced' => true ]);
$repoVerif = $this->getDoctrine()->getRepository(Offre::class);
$search_verifs = ['verifier' => false];
$total_verifs = $repoVerif->findBySearch($search_verifs, [],true,true);
return $this->render('dashboard/advanced.html.twig', [
'controller_name' => 'DashboardController',
'num_verifs' => $total_verifs,
]);
}
/**
* @Route("/filter", name="filter", options={"expose"=true})
*/
public function filter(Request $request): JsonResponse
{
$repoOffre = $this->getDoctrine()->getRepository(Offre::class);
$repoOffreRefBis = $this->getDoctrine()->getRepository(OffreRefBis::class);
$repoProprietaire = $this->getDoctrine()->getRepository(Proprietaire::class);
$repoAgence = $this->getDoctrine()->getRepository(Agence::class);
$q = $request->get('q');
$page = $request->get('page') ? $request->get('page') : 1;
$maxItems = $request->get('maxItems') ? $request->get('maxItems') : 20;
$totalCount = $totalOffres = $repoOffre->countAll($q);
$totalCount += $totalOffresBis = $repoOffreRefBis->countAll($q);
$totalCount += $totalProprietaires = $repoProprietaire->countAll($q);
$totalCount += $totalAgences = $repoAgence->countAll($q);
$moreOffres = $page*$maxItems < $totalOffres;
$moreOffreBis = $page*$maxItems < $totalOffresBis;
$moreProprietaire = $page*$maxItems < $totalProprietaires;
$moreAgence = $page*$maxItems < $totalAgences;
$more = $moreOffres || $moreOffres || $moreProprietaire || $moreAgence ? true : false;
$offres = $repoOffre->findByQuery($q,false,false,'o.ref','ASC',$page, $maxItems);
$offresBis = $repoOffreRefBis->findByQuery($q,'o.ref','ASC',$page, $maxItems);
$proprietaires = $repoProprietaire->findByQuery($q,'c.nom,c.prenom','ASC',$page, $maxItems);
$agences = $repoAgence->findByQuery($q,'a.denomination','ASC',$page, $maxItems);
$results = [];
foreach($offres as $o){
$offre = ["id" => "offre_".$o->getId(), "text" => "Offre ".$o->getRef()];
$results[] = $offre;
}
foreach($offresBis as $b){
$bis = ["id" => "offre_".$b->getOffre()->getId(), "text" => "Bis ".$b->getRef()];
$results[] = $bis;
}
foreach($proprietaires as $p){
$pro = ["id" => "proprietaire_".$p->getId(), "text" => "Propriétaire ".$p->__toString()];
$results[] = $pro;
}
foreach($agences as $a){
$agence = ["id" => "agence_".$a->getId(), "text" => "Agence ".$a->__toString()];
$results[] = $agence;
}
if($request->isXmlHttpRequest()){
return new JsonResponse(['results' => $results, 'pagination' => ['more' => $more]]);
}
else
throw new NotFoundHttpException('Page not found');
}
/**
* @Route("/rapido/prelevement", name="rapido_prelevement", options={"expose"=true})
*/
public function prelevement(Request $request, PDFManager $pdf): Response
{
$session = new Session();
$data = $session->get('rapido_prelevement');
// Retrieve the HTML generated in our twig file
$html = $this->renderView("rapido/pdf/_prelevement.html.twig", [
'controller_name' => 'DashboardController',
'societe' => $pdf->getSociete(),
'title' => 'Carte Bancaire : Autorisation de Prélèvement',
'data' => $data,
]);
//$session->set('rapido_prelevement', null);
return $pdf->render($html,'prelevement.pdf','portrait');
}
}