<?php
namespace App\Controller\Admin;
use App\Entity\{EodriveClient, Site, Commande};
use App\Form\EodriveClient\{UserType};
use App\Controller\AppBaseController;
use App\Security\StubAuthenticator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Omines\DataTablesBundle\Adapter\ArrayAdapter;
use Omines\DataTablesBundle\Column\{DateTimeColumn, BoolColumn, TextColumn, MapColumn};
use Omines\DataTablesBundle\Controller\DataTablesTrait;
use Omines\DataTablesBundle\Adapter\Doctrine\ORMAdapter;
use Doctrine\ORM\QueryBuilder;
use App\Manager\{CommandeManager, ClientManager, MoneticoHelper};
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* @Route("/client")
* @IsGranted("ROLE_SUPER_ADMIN")
*/
class EodriveClientController extends AppBaseController
{
use DataTablesTrait;
/**
* @Route("/", name="admin.client.list")
*/
public function listAction(Request $request){
$table = $this->createDataTable()
->add('num', TextColumn::class, ['field'=>'c.id','label' => 'Id', 'className' => 'bold', 'searchable' => true ])
->add('nom', TextColumn::class, ['label' => 'Nom', 'className' => 'bold', 'searchable' => true ])
->add('prenom', TextColumn::class, ['label' => 'Prénom', 'className' => 'bold', 'searchable' => true ])
->add('societe', TextColumn::class, ['label' => 'Société', 'className' => 'bold', 'searchable' => true ])
->add('siret', TextColumn::class, ['label' => 'Siret', 'className' => 'bold', 'searchable' => true ])
->add('tel', TextColumn::class, ['label' => 'Tel.', 'className' => 'bold', 'searchable' => true ])
->add('email', TextColumn::class, ['label' => 'Email', 'className' => 'bold', 'searchable' => true ])
->add('lastLogin', DateTimeColumn::class, ['label' => 'Dernière conexion', 'field' => 'user.lastLogin', 'format' => 'd/m/Y H:i:s', 'orderable' => true])
->add('etat', TextColumn::class, ['label' => 'Etat', 'className' => 'bold', 'searchable' => true ])
->add('nbConnexion', TextColumn::class, ['label' => 'Nombre de connexions', 'render' => function($value, $context) {
$nbConnexion = 0;
$users = $this->getRepository('App:Bflow\UserBO')->findBy(['clientEodrive' => $context]);
foreach ( $users as $user )
{
$nbConnexion += $user->getNombreConnexion();
}
return $nbConnexion;
}])
->createAdapter(ORMAdapter::class, [
'entity' => EodriveClient::class,
'query' => function (QueryBuilder $builder) {
$builder
->select('c')
->from(EodriveClient::class, 'c')
;
},
])
->add('id', TextColumn::class, ['label' => 'Actions', 'render' => function($value, $context) {
/**/
$action =
'<div class="dropdown small">
<button class="btn btn-xs small border" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-bars"></i>
</button>
<div class="dropdown-menu small" aria-labelledby="dropdownMenuButton">
';
$action .= '<a class="dropdown-item small" href="'.$this->generateUrl('admin.client.edit', ['id' => $value], true).'"><i class="fas fa-pencil-alt"></i> Éditer</a>';
$action .= '<a class="dropdown-item small delete" data-id="'.$value.'" data-message="Êtes vous sûre de vouloir supprimer ce client?" href="'.$this->generateUrl('admin.client.delete', ['id' => $value], true).'"><i class="fas fa-trash"></i> Supprimer</a>';
$action .= '<a class="dropdown-item small" href="'.$this->generateUrl('admin.client.regenererPasswd', ['id' => $value], true).'"><i class="fas fa-envelope"></i> Réinitialiser mot de passe</a>';
$action .= '<a class="dropdown-item small" href="'.$this->generateUrl('admin.client.send-lien-paiement', ['id' => $value], true).'"><i class="fas fa-envelope"></i> Envoyer lien de paiement</a>';
$action .= '<a class="dropdown-item small" href="'.$this->generateUrl('admin.client.sendActivation', ['id' => $value], true).'"><i class="fas fa-envelope"></i> Envoyer activation et mot de passe</a>';
$action .= '</div>
</div>';
return $action;
}])
->handleRequest($request);
if ($table->isCallback()) {
return $table->getResponse();
}
return $this->render('admin/client/list.html.twig', ['datatable' => $table] );
}
/**
* @Route("/sendActivation/{id}", name="admin.client.sendActivation")
*/
public function sendActivation(EodriveClient $client, Request $request, ClientManager $clientManager){
$clientManager->envoiActivationDomaine($client);
// $clientManager->envoiReinitialiseMdp($client);
$this->addFlash("success", "Le mail de réinitialisation à été envoyé correctement");
return $this->redirectToRoute('admin.client.list');
}
/**
* @Route("/regenererPasswd/{id}", name="admin.client.regenererPasswd")
*/
public function regenererPasswdAction(EodriveClient $client, Request $request, ClientManager $clientManager){
$clientManager->envoiReinitialiseMdp($client);
$this->addFlash("success", "Le mail de réinitialisation à été envoyé correctement");
return $this->redirectToRoute('admin.client.list');
}
/**
* @Route("/domaineActif/{id}", name="admin.client.domaineActif")
*/
public function domaineActifAction(EodriveClient $client, Request $request, ClientManager $clientManager){
$client->setEtat(EodriveClient::ETAT_INSCRIT);
$this->save($client);
$clientManager->envoiActivationDomaine($client);
$clientManager->sendClient($client);
$this->addFlash("success", "Le client a été passé en 'inscrit' et a reçu ses informations de connexion.");
return $this->redirectToRoute('admin.client.list');
}
/**
* @Route("/add", name="admin.client.add")
*/
public function addAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, CommandeManager $commandeManager, ClientManager $clientManager): Response
{
$user = new EodriveClient();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/*if($user->getIsCompteGratuit()){
$commandeManager->generateFree($user);
}
*/
$this->save($user);
$this->addFlash("success", "Le client à été créé correctement");
$clientManager->sendClient($client);
return $this->redirectToRoute('admin.client.list');
}
return $this->render('admin/client/new.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/edit/{id}", name="admin.client.edit")
*/
public function editAction(EodriveClient $user, Request $request, UserPasswordEncoderInterface $passwordEncoder, ClientManager $clientManager, CommandeManager $commandeManager): Response
{
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/*if($user->getIsCompteGratuit()){
$commandeManager->generateFree($user);
}*/
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
// $clientManager->sendUpdateClient($user);
$this->addFlash("success", "Le client à été modifié correctement");
return $this->redirectToRoute('admin.client.edit', ['id' => $user->getId() ]);
}
return $this->render('admin/client/edit.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/delete/{id}", name="admin.client.delete")
*/
public function deleteAction(EodriveClient $client, Request $request): Response
{
$client->setUserAdmin(null);
$this->save($client);
$vehiculeClients = $this->getRepository("App:Bflow\VehiculeClient")->findByClientEodrive($client);
foreach ($vehiculeClients as $v) {
$planning = $this->getRepository("App:Bflow\Flotte\Planning\Planning")->findByResource($v);
foreach ($planning as $p) {
$this->delete($p);
}
$pvs = $this->getRepository("App:Bflow\Flotte\GestionPV")->findByVehiculeClient($v);
foreach ($pvs as $pv) {
$this->delete($pv);
}
$this->delete($v);
}
$clients_ = $this->getRepository("App:Bflow\Client")->findByClientEodrive($client);
foreach ($clients_ as $c) {
$ints = $c->getInterlocuteurs();
$users = $this->getRepository("App:Bflow\UserBO")->findByClient($c);
foreach($users as $u){
$u->setClient(null);
$this->save($u);
}
foreach ($ints as $int) {
if($int->getUser()->getClient() == $client){
$int->getUser()->setClient(null);
}
$int->setClient(null);
$this->save($int);
}
$this->delete($c);
}
$commandes = $this->getRepository("App:Commande")->findByClient($client);
foreach ($commandes as $c) {
$c->setClient(null);
$this->save($c);
$this->delete($c);
}
$financeurs = $this->getRepository("App:Bflow\Flotte\CoordonnerFinanceurs")->findByClientEodrive($client);
foreach ($financeurs as $i) {
$this->delete($i);
}
$interlocteurs = $this->getRepository("App:Bflow\Interlocuteur")->findByClientEodrive($client);
foreach ($interlocteurs as $i) {
$i->setUser(null);
$this->delete($i);
}
$client->setUserAdmin(null);
$this->save($client);
$users = $this->getRepository("App:Bflow\UserBO")->findByClientEodrive($client);
foreach ($users as $u) {
$u->setClientEodrive(null);
$this->save($u);
$this->delete($u);
}
$this->save($client);
$this->delete($client);
$this->addFlash("success", "Le client à été supprimée correctement");
return $this->redirectToRoute('admin.client.list');
}
/**
* @Route("/ajax-update-client-commentaire", name="admin.client.update-comment")
*/
public function ajaxUpdateProspectCommentAction(Request $request){
$comment = $request->request->get('comment');
$id = $request->request->get('id');
$eodriveClient = $this->getRepository(EodriveClient::class)->find($id);
$eodriveClient->setCommentaire($comment);
$this->save($eodriveClient);
return new JsonResponse(['success' => true]);
}
/**
* @Route("/envoi-lien-paiement/{id}", name="admin.client.send-lien-paiement")
*/
public function sendLienAction(EodriveClient $adherent, Request $request, CommandeManager $commandeManager, MoneticoHelper $moneticoHelper, ClientManager $clientManager){
$em = $this->getDoctrine()->getManager();
$commande = new Commande();
$commande = $commandeManager->createCommande($commande);
$commande->setClient($adherent);
$commande->setNumCommande($commandeManager->generateNumCommande($adherent));
$url_paiement = $moneticoHelper->generateLink($commande);
$clientManager->envoiURLPaiement($adherent, $url_paiement);
$commande->setLinkSended(true);
$em->persist($commande);
$em->flush();
$this->addFlash("success", "Le lien a été envoyé");
return $this->redirectToRoute('admin.client.list');
}
}
?>