<?php
namespace App\Controller\Client;
use App\Entity\Admin;
use App\Entity\Adminevent;
use App\Entity\Client;
use App\Entity\Clientdocument;
use App\Entity\Clientrelation;
use App\Entity\Clientvente;
use App\Entity\Fournisseur;
use App\Form\User\AdmineventType;
use App\Form\User\ClientdocumentType;
use App\Form\User\ClientType;
use App\Utils\Dates\MalysDates;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/client")
*/
class ClientController extends AbstractController
{
private $malysDates;
/**
* @required
*/
public function setMalysDates(MalysDates $malysDates)
{
$this->malysDates = $malysDates;
}
private PaginatorInterface $paginator;
public function __construct(PaginatorInterface $paginator)
{
$this->paginator = $paginator;
}
/* AFFICHAGE INDEX CLIENT */
/**
* @Route("/index/{id}", name="malys_client_index", defaults={"id"=0})
*/
public function indexAction($id, EntityManagerInterface $em)
{
/* RECUPERATION DU CLIENT EN BASE */
$client = $em->getRepository(Client::class)->find($id);
/* RECUPERATION DES RDV DU CLIENT */
$rdv = $em->getRepository(Adminevent::class)->findBy(array('idclient' => $client, 'type' => 'rdv'), array('datefr' => 'desc'), 5, 0);
/* RECUPERATION DES PROBLEMES DU CLIENT */
$pbm = $em->getRepository(Adminevent::class)->findBy(array('idclient' => $client, 'type' => 'pbm'), array('datefr' => 'desc'), 5, 0);
/* COORDONNEES POUR LA MAP */
$geocode = explode('|', $client->getGeocode());
$lat = isset($geocode[1]) ? $geocode[0] : null;
$lng = isset($geocode[1]) ? $geocode[1] : null;
/* annee courante par défaut */
$date = date('Y');
/* RECUPERATION CA CLIENT */
$cv = $em->getRepository(Clientvente::class)->findMyClientCa($id, "all");
/* tableau a afficher */
$totalCaGenere = array();
$totalCaCommission = array();
$totalSolde = array();
$t_ListeCA = array();
$t_ListeMois = array();
$t_ListeDetail = array();
$t_ListeFamille = array();
foreach ($cv as $v) {
//echo $v[0]->getIdfournisseur()->getFamille()." // ".$v['ca_genere']."<br/>";
//TABLEAU DETAILLE
$t_ListeCA[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()][intval($v[0]->getDatefr()->format('m'))]['ca_genere'] = $v['ca_genere'];
$t_ListeCA[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()][intval($v[0]->getDatefr()->format('m'))]['ca_commission'] = ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$t_ListeCA[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()][intval($v[0]->getDatefr()->format('m'))]['solde'] = number_format($v[0]->getSolde(), 2, '.', '');
$t_ListeCA[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()]['idclient'] = $v[0]->getIdclient()->getId();
$t_ListeCA[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()]['idfournisseur'] = $v[0]->getIdfournisseur()->getId();
//TABLEAU CA PAR FAMILLE
if (intval($v[0]->getDatefr()->format('Y')) == $date)
($v[0]->getIdfournisseur()->getFamille() != "") ? $t_ListeFamille[$v[0]->getIdfournisseur()->getFamille()] += $v['ca_genere'] : $t_ListeFamille["Autre"] += $v['ca_genere'];
//TABLEAU MOIS PAR MOIS
if (!isset($t_ListeMois[intval($v[0]->getDatefr()->format('Y'))][intval($v[0]->getDatefr()->format('m'))]))
$t_ListeMois[intval($v[0]->getDatefr()->format('Y'))][intval($v[0]->getDatefr()->format('m'))] = array('ca_genere' => 0, 'ca_commission' => 0, 'solde' => 0);
$t_ListeMois[intval($v[0]->getDatefr()->format('Y'))][intval($v[0]->getDatefr()->format('m'))]['ca_genere'] += number_format($v['ca_genere'], 2, '.', '');
$t_ListeMois[intval($v[0]->getDatefr()->format('Y'))][intval($v[0]->getDatefr()->format('m'))]['ca_commission'] += ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$t_ListeMois[intval($v[0]->getDatefr()->format('Y'))][intval($v[0]->getDatefr()->format('m'))]['solde'] += number_format($v[0]->getSolde(), 2, '.', '');
// TOTAUX
if (isset($totalCaGenere[intval($v[0]->getDatefr()->format('Y'))])) {
$totalCaGenere[intval($v[0]->getDatefr()->format('Y'))] += number_format($v['ca_genere'], 2, '.', '');
} else {
$totalCaGenere[intval($v[0]->getDatefr()->format('Y'))] = number_format($v['ca_genere'], 2, '.', '');
}
if (isset($totalCaGenere[intval($v[0]->getDatefr()->format('Y'))])) {
$totalCaCommission[intval($v[0]->getDatefr()->format('Y'))] += ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$totalSolde[intval($v[0]->getDatefr()->format('Y'))] += number_format($v[0]->getSolde(), 2, '.', '');
} else {
$totalCaCommission[intval($v[0]->getDatefr()->format('Y'))] = ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$totalSolde[intval($v[0]->getDatefr()->format('Y'))] = number_format($v[0]->getSolde(), 2, '.', '');
}
//TABLEAU PAR TYPE DETAIL
if (!isset($t_ListeDetail[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()]))
$t_ListeDetail[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()] = array('ca_genere' => 0, 'ca_commission' => 0, 'solde' => 0);
$t_ListeDetail[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()]['ca_genere'] += number_format($v['ca_genere'], 2, '.', '');
$t_ListeDetail[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()]['ca_commission'] += ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$t_ListeDetail[intval($v[0]->getDatefr()->format('Y'))][$v[0]->getIdfournisseur()->getNom()]['solde'] += number_format($v[0]->getSolde(), 2, '.', '');
}
//CREATE JSON AND ORDER T_CHART_FAMILLE
$t_ca_famille = array();
foreach ($t_ListeFamille as $key => $value) {
array_push($t_ca_famille, array($key, $value));
}
$volume = array();
foreach ($t_ca_famille as $key => $row) {
$volume[$key] = $row[1];
$edition[$key] = $row[0];
}
if ($volume) {
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $t_ca_famille);
}
$t_ListeFamille = array();
array_push($t_ListeFamille, (object)array('type' => 'pie', 'name' => 'Famille', 'data' => $t_ca_famille));
$t_famille_chart_json = json_encode($t_ListeFamille);
//INSERT DIFF
for ($i = $date - 2; $i <= $date; $i++) {
if (isset($t_ListeCA[$i])) {
foreach ($t_ListeCA[$i] as $key => $v) {
for ($j = 1; $j <= 12; $j++) {
if (isset($t_ListeCA[$i][$key][$j - 1]['ca_genere']) && isset($t_ListeCA[$i][$key][$j]['ca_genere'])) {
$t_ListeCA[$i][$key][$j]['diff'] = number_format(($t_ListeCA[$i][$key][$j]['ca_genere'] - $t_ListeCA[$i][$key][$j - 1]['ca_genere']) / $t_ListeCA[$i][$key][$j - 1]['ca_genere'] * 100, 2, '.', '');
}
}
}
}
}
//CREATE JSON FOR CHART CA
$t_ca_chart = array();
foreach ($t_ListeMois as $key => $item_ca) {
$t_ca = array();
for ($i = 1; $i <= 12; $i++) {
(isset($item_ca[$i]['ca_genere']) && intval($item_ca[$i]['ca_genere']) != 0) ? array_push($t_ca, $item_ca[$i]['ca_genere']) : array_push($t_ca, null);
}
($key == date("Y")) ? array_push($t_ca_chart, (object)array('name' => $key, 'data' => $t_ca)) : array_push($t_ca_chart, (object)array('name' => $key, 'visible' => false, 'data' => $t_ca));
}
$t_ca_chart_json = json_encode($t_ca_chart);
/* mois du tableau */
$tab_mois_fr = $this->malysDates->getTabMoisFr();
return $this->render('client/index.html.twig', array(
'lat' => $lat,
'lng' => $lng,
'client' => $client,
'rdv' => $rdv,
'pbm' => $pbm,
'user' => $this->getUser()->getFamille(),
't_ListeCA' => $t_ListeCA,
't_ListeMois' => $t_ListeMois,
't_ListeDetail' => $t_ListeDetail,
'tab_mois_fr' => $tab_mois_fr,
'totalCaGenere' => $totalCaGenere,
'totalSolde' => $totalSolde,
'totalCaCommission' => $totalCaCommission,
't_famille_chart_json' => $t_famille_chart_json,
't_ca_chart_json' => $t_ca_chart_json
));
}
/* AJOUT/MODIFICATION DE CLIENT */
/**
* @Route("/modifier/{id}", name="malys_client_modify", defaults={"id"=0})
*/
public function modifyAction($id, Request $request, EntityManagerInterface $em)
{
if ($id)
$client = $em->getRepository(Client::class)->find($id);
else
$client = new Client;
if ($id && $this->isGranted('ROLE_ADMIN'))
$form = $this->createForm(ClientType::class, $client, ['prospect' => $client->getProspect(), 'isAdmin' => false]);
else
$form = $this->createForm(ClientType::class, $client, [
'prospect' => $client->getProspect(),
'isAdmin' => true
]);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
if (!$client->getProspect() && $form->get('sameAsAdresse')->getData()) {
$client->setAdresseFacturation($client->getAdresse());
$client->setCpFacturation($client->getCp());
$client->setVilleFacturation($client->getVille());
}
/* EST */
if ($client->getDateclientfr() == null)
$client->setDateclientfr($client->getDatefr());
if ($client->getIdadmin() == null)
$client->setIdadmin($this->getUser());
$em->persist($client);
$em->flush();
return $this->redirect($this->generateUrl('malys_client_show', array('id' => $client->getId())));
}
}
return $this->render('client/modify.html.twig', array('form' => $form->createView(), 'client' => $client));
}
/* AFFICHAGE FICHE CLIENT */
/**
* @Route("/voir/{id}", name="malys_client_show")
*/
public function showAction($id, EntityManagerInterface $em)
{
/* RECUPERATION DU CLIENT EN BASE */
$client = $em->getRepository(Client::class)->find($id);
/* RECUPERATION DES DOCUMENTS DU CLIENT */
$docs = $em->getRepository(Clientdocument::class)->findClientDocuments($id);
/* RECUPERATION DES RDV DU CLIENT */
$rdv = $em->getRepository(Adminevent::class)->findBy(array('idclient' => $client, 'type' => 'rdv'), array('datefr' => 'desc'), 5, 0);
/* RECUPERATION DES PROBLEMES DU CLIENT */
$pbm = $em->getRepository(Adminevent::class)->findBy(array('idclient' => $client, 'type' => 'pbm'), array('datefr' => 'desc'), 5, 0);
/* COORDONNEES POUR LA MAP */
$geocode = explode('|', $client->getGeocode());
$lat = isset($geocode[1]) ? $geocode[0] : null;
$lng = isset($geocode[1]) ? $geocode[1] : null;
$tab_fonction = array(
1 => 'Chef',
2 => 'Patron',
3 => 'Resp Bar',
4 => 'Gerant',
5 => 'Autre'
);
$tab_typeaffaire = array('0' => 'Restaurant traditionnel', '1' => 'VAE', '2' => 'Bitrot <100 couverts/jours', '3' => 'Brasserie', '4' => 'Bar pur', '5' => 'Hotel', '6' => 'Boite de nuit', '7' => 'Traiteur', '8' => 'Autre');
$tab_typecontrat = array(
1 => 'Pret',
2 => 'MaD',
3 => 'Avance sur remise'
);
$relations = $em->getRepository(Clientrelation::class)->findBy(array('idclient' => $id));
return $this->render('client/show.html.twig', array(
'lat' => $lat,
'lng' => $lng,
'client' => $client,
'rdv' => $rdv,
'pbm' => $pbm,
'docs' => $docs,
'tab_fonction' => $tab_fonction,
'tab_typeaffaire' => $tab_typeaffaire,
'tab_typecontrat' => $tab_typecontrat,
'relations' => $relations,
//'contrat' => $client.contrat
));
}
/* PASSE PROSPECT EN CLIENT */
/**
* @Route("/passer_en_client/{id}", name="malys_client_siwtchToClient")
*/
public function swicthToClientAction($id,Request $request, EntityManagerInterface $em)
{
$client = $em->getRepository(Client::class)->find($id);
if (!$client) {
throw $this->createNotFoundException('Client non trouvé');
}
$client->setSameAsAdresse(false);
// Créer un formulaire pour le client
if ($id && $this->isGranted('ROLE_ADMIN'))
$form = $this->createForm(ClientType::class, $client, [
'prospect' => $client->getProspect(),
'isAdmin' => true
]);
else
$form = $this->createForm(ClientType::class, $client, [
'prospect' => $client->getProspect(),
'isAdmin' => false
]);
// Soumettre le formulaire si la requête est POST
$client->setProspect(0);
$client->setNote(0);
$client->setActivite(1);
$client->setDateclientfr(new \DateTime("now"));
$em->persist($client);
$em->flush();
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
$em->persist($client);
$em->flush();
// Redirection vers la page du client
return $this->redirect($this->generateUrl('malys_client_show', array('id' => $id)));
}
}
// Si le formulaire n'est pas valide, on retourne à la page de modification du client avec les erreurs
return $this->render('client/modify.html.twig', array('form' => $form->createView(), 'client' => $client));
}
/* LIEN FOURNISSEURS */
/**
* @Route("/fournisseurs/{id}", name="malys_client_fournisseurs")
*/
public function linkSupplierAction($id,Request $request, EntityManagerInterface $em)
{
$client = $em->getRepository(Client::class)->find($id);
$clientrelation = $em->getRepository(Clientrelation::class)->findByIdclient($id);
$fournisseurs = $em->getRepository(Fournisseur::class)->findBySource($client->getSource(), array('nom' => 'asc'));
/* LIEN DES FOURNISSEURS */
$rel = array();
foreach ($clientrelation as $c)
$rel[$c->getIdfournisseur()->getId()] = $c->getCode();
$pdf = $this->get('white_october.tcpdf')->create();
if ($request->getMethod() == 'POST') {
$em->createQuery("DELETE App\Entity\Clientrelation r WHERE r.idclient = " . $id)->execute();
$chcode = $request->request->get('chcode');
$chclient = $request->request->get('chclient');
foreach ($chclient as $key => $val) {
$r = new Clientrelation;
$r->setCode(isset($chcode[$key]) ? $chcode[$key] : '');
$r->setIdclient($client);
$r->setIdfournisseur($this->getFournisseur($fournisseurs, $val));
$client = $em->getRepository(Client::class)->find($id);
$joursLivraison = $client->getJoursLivraison();
// Doctrine gère automatiquement la désérialisation JSON
$fournisseur = $em->getRepository(Fournisseur::class)->find($r->getIdfournisseur()->getId());
// Générer le contenu HTML avec le moteur Twig
$html = $this->render('client/ouverture.html.twig', [
'title' => 'Fiche ouverture de compte Adhérent / MALYS-PRESTACHEF',
'client' => $client,
'fournisseur' => $fournisseur,
'joursLivraison' => is_array($joursLivraison) ? $joursLivraison : [],
])->getContent(); // récupère le contenu HTML généré
// Ajouter une page au PDF
$pdf->AddPage('P', 'A4'); // Orientation portrait, taille A4
// Désactiver les marges pour occuper toute la page
$pdf->SetAutoPageBreak(false); // Désactive la rupture automatique de page
// Écrire le contenu HTML dans le PDF
$pdf->writeHTML($html); // Appeler cette méthode sur l'objet TCPDF
// 📌 Spécifier le chemin de sauvegarde
$documentPath = $this->getParameter('kernel.project_dir') . '/public/documents'; // Répertoire de sauvegarde
// Créer le nom du fichier PDF avec un nom dynamique (par exemple, basé sur l'ID du client)
$pdfFileName = 'fiche_ouverture_' . $client->getId() . '.pdf';
// 📌 Sauvegarder le fichier PDF dans le répertoire spécifié
$pdf->Output($documentPath . $pdfFileName, 'F'); // 'F' pour enregistrer le fichier sur le système
$r->setFichierOuverture($documentPath . $pdfFileName); // Enregistrez le chemin du fichier
echo $documentPath . $pdfFileName;
exit;
$em->persist($r);
}
$em->flush();
return $this->redirect($this->generateUrl('malys_client_fournisseurs', array('id' => $client->getId())));
}
return $this->render('client/fournisseurs.html.twig', array('client' => $client, 'fournisseurs' => $fournisseurs, 'clientrelation' => $rel));
}
/* CA GENERE */
/**
* @Route("/ca/{id}/{date}", name="malys_client_ca", defaults={"date"=0})
*/
public function caAction($id, $date, EntityManagerInterface $em)
{
/* annee courante par défaut */
if ($date == 0)
$date = date('Y');
$client = $em->getRepository(Client::class)->find($id);
$cv = $em->getRepository(Clientvente::class)->findMyClientCa($id, $date);
/* tableau a afficher */
$totalCaGenere = 0;
$totalCaCommission = 0;
$totalSolde = 0;
$t_ListeCA = array();
$t_ListeMois = array();
$t_ListeDetail = array();
foreach ($cv as $v) {
//TABLEAU DETAILLE
$t_ListeCA[$v[0]->getIdfournisseur()->getNom()][intval($v[0]->getDatefr()->format('m'))]['ca_genere'] = $v['ca_genere'];
$t_ListeCA[$v[0]->getIdfournisseur()->getNom()][intval($v[0]->getDatefr()->format('m'))]['ca_commission'] = ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$t_ListeCA[$v[0]->getIdfournisseur()->getNom()][intval($v[0]->getDatefr()->format('m'))]['solde'] = number_format($v[0]->getSolde(), 2, '.', '');
$t_ListeCA[$v[0]->getIdfournisseur()->getNom()]['idclient'] = $v[0]->getIdclient()->getId();
$t_ListeCA[$v[0]->getIdfournisseur()->getNom()]['idfournisseur'] = $v[0]->getIdfournisseur()->getId();
//TABLEAU MOIS PAR MOIS
if (!isset($t_ListeMois[intval($v[0]->getDatefr()->format('m'))]))
$t_ListeMois[intval($v[0]->getDatefr()->format('m'))] = array('ca_genere' => 0, 'ca_commission' => 0, 'solde' => 0);
$t_ListeMois[intval($v[0]->getDatefr()->format('m'))]['ca_genere'] += number_format($v['ca_genere'], 2, '.', '');
$t_ListeMois[intval($v[0]->getDatefr()->format('m'))]['ca_commission'] += ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$t_ListeMois[intval($v[0]->getDatefr()->format('m'))]['solde'] += number_format($v[0]->getSolde(), 2, '.', '');
// TOTAUX
$totalCaGenere += number_format($v['ca_genere'], 2, '.', '');
$totalCaCommission += ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$totalSolde += number_format($v[0]->getSolde(), 2, '.', '');
//TABLEAU PAR TYPE DETAIL
if (!isset($t_ListeDetail[$v[0]->getIdfournisseur()->getNom()]))
$t_ListeDetail[$v[0]->getIdfournisseur()->getNom()] = array('ca_genere' => 0, 'ca_commission' => 0, 'solde' => 0);
$t_ListeDetail[$v[0]->getIdfournisseur()->getNom()]['ca_genere'] += number_format($v['ca_genere'], 2, '.', '');
$t_ListeDetail[$v[0]->getIdfournisseur()->getNom()]['ca_commission'] += ($v[0]->getIdadmin()->getId() == $this->getUser()->getId()) ? number_format($v['ca_commission'], 2, '.', '') : 0;
$t_ListeDetail[$v[0]->getIdfournisseur()->getNom()]['solde'] += number_format($v[0]->getSolde(), 2, '.', '');
}
/* selecteur de date */
$begin = date("Y", time()) - 3;
$end = date("Y", time()) + 1;
/* mois du tableau */
$tab_mois_fr = $this->malysDates->getTabMoisFr();
return $this->render('client/ca.html.twig', array(
'date' => $date,
'client' => $client,
'begin' => $begin,
'end' => $end,
't_ListeCA' => $t_ListeCA,
't_ListeMois' => $t_ListeMois,
't_ListeDetail' => $t_ListeDetail,
'tab_mois_fr' => $tab_mois_fr,
'totalCaGenere' => $totalCaGenere,
'totalSolde' => $totalSolde,
'totalCaCommission' => $totalCaCommission
));
}
/* AJOUT/MODIFICATION D'EVENEMENT */
/**
* @Route("/ajouter_event/{id_client}/{type}/{id_event}", name="malys_client_addevent", defaults={"id_event"=0})
*/
public function addEventAction($id_client, $id_event, $type,Request $request, EntityManagerInterface $em)
{
if ($id_event)
$event = $em->getRepository(Adminevent::class)->find($id_event);
else
$event = new Adminevent;
$client = $em->getRepository(Client::class)->find($id_client);
$form = $this->createForm(AdmineventType::class, $event, [
'prospect' => $client->getProspect(),
'type' => $type,
'em' => $em,
]);
if ($request->getMethod() == 'POST') {
$form->handleRequest($request);
if ($form->isValid()) {
$event->setType($request->get('chtype'));
$event->setIdadmin($this->getUser());
$event->setIdclient($client);
$em->persist($event);
$em->flush();
return $this->redirect($this->generateUrl('malys_client_show', array('id' => $client->getId())));
}
}
return $this->render('client/addEvent.html.twig', array('form' => $form->createView(), 'client' => $client, 'type' => $type));
}
/* SUPPRESSION D'UN EVENEMENT */
/**
* @Route("/supprimer_event/{id_client}/{id_event}", name="malys_client_delevent")
*/
public function delEventAction($id_client, $id_event, EntityManagerInterface $em)
{
$event = $em->getRepository(Adminevent::class)->find($id_event);
$em->remove($event);
$em->flush();
return $this->redirect($this->generateUrl('malys_client_show', array('id' => $id_client)));
}
/* AJOUT DE DOCUMENT */
/**
* @Route("/ajouter_document/{id_client}", name="malys_client_adddoc")
*/
public function addDocAction($id_client, Request $request, EntityManagerInterface $em)
{
$doc = new Clientdocument();
$client = $em->getRepository(Client::class)->find($id_client);
$form = $this->createForm( ClientdocumentType::class, $doc);
if ($request->isMethod('POST')) {
$form->handleRequest($request);
if ($form->isValid()) {
$doc->upload($client->getId());
$doc->setIdclient($client);
$em->persist($doc);
$em->flush();
return $this->redirect($this->generateUrl('malys_client_show', array('id' => $id_client)));
}
}
return $this->render('client/addDoc.html.twig', array('form' => $form->createView(), 'client' => $client));
}
/* SUPPRESSION D'UN DOCUMENT */
/**
* @Route("/supprimer_document/{id_client}/{id_doc}", name="malys_client_deldoc")
*/
public function delDocAction($id_client, $id_doc, EntityManagerInterface $em)
{
$doc = $em->getRepository(Clientdocument::class)->find($id_doc);
$doc->setEtat(0);
$em->remove($doc);
$em->flush();
return $this->redirect($this->generateUrl('malys_client_show', array('id' => $id_client)));
}
/* MAINTENANCE CLIENT */
/**
* @Route("/admin/maintenance", name="malys_client_maintenance")
*/
public function maintenanceAction(Request $request, EntityManagerInterface $em)
{
$page = $request->query->getInt('page', 1);
$affiche = $request->query->getInt('affiche');
$type = $request->query->getInt('type');
$nom = $request->query->get('nom');
//RECUPERATION DES CLIENTS
$clients = $em->getRepository(Client::class)->findAllOrderByAfficheProspectNom($page, $nom, $type, $affiche, $this->paginator);
return $this->render('client/maintenance.html.twig', array('clients' => $clients));
}
/* AFFICHE OU NON UN CLIENT */
/**
* @Route("/admin/affiche/{id}", name="malys_client_affiche")
*/
public function afficheAction($id, Request $request, EntityManagerInterface $em)
{
$client = $em->getRepository(Client::class)->find($id);
if ($client->getAffiche() == 1)
$client->setAffiche(0);
else
$client->setAffiche(1);
$em->flush();
return $this->redirect($this->generateUrl('malys_client_maintenance', [
'nom' => $request->query->get('nom'),
'type' => $request->query->get('type'),
'affiche' => $request->query->get('affiche'),
'page' => $request->query->get('page'),
]));
}
/**
* @Route("/admin/supprimer/{id}", name="malys_client_supprimer")
*/
public function supprimerAction($id,Request $request, EntityManagerInterface $em)
{
$client = $em->getRepository(Client::class)->find($id);
if (!$client) {
throw $this->createNotFoundException('Client non trouvé.');
}
$ventes = $em->getRepository(Clientvente::class)->findBy(['idclient' => $client]);
foreach ($ventes as $vente) {
$em->remove($vente);
}
$em->remove($client);
$em->flush();
$this->addFlash('success', 'Client supprimé avec succès.');
return $this->redirectToRoute('malys_client_maintenance', [
'nom' => $request->query->get('nom'),
'type' => $request->query->get('type'),
'affiche' => $request->query->get('affiche'),
'page' => $request->query->get('page'),
]); // Redirection après suppression
}
/**
* @Route("/sans_commandes/{date}", name="malys_client_sans_commandes", defaults={"date"=0})
*/
public function withoutOrderAction($date, EntityManagerInterface $em)
{
/* mois du tableau */
$tab_mois_fr = $this->malysDates->getTabMoisFr();
/* annee courante par défaut */
if ($date == 0)
$date = date('Y');
//RECUPERATION DES DONNEES FACTURES
$clientVente = $em->getRepository(Clientvente::class)->getAllClientsVentesInYear($date);
$t_ListeCA = array();
$t_ListeMois = array();
$t_ListeDetail = array();
foreach ($clientVente as $cv) {
//TABLEAU DETAILLE
$key = $cv['idClient'] . $cv['nomFournisseur'];
$mois = intval($cv[0]['datefr']->format('m'));
$t_ListeCA[$key][$mois]['ca_genere'] = number_format($cv[0]['montantht'], 2, '.', '');
$t_ListeCA[$key]['client'] = $cv['nomClient'];
$t_ListeCA[$key]['fournisseur'] = $cv['nomFournisseur'];
$t_ListeCA[$key]['commercial'] = $cv['contact'];
$t_ListeCA[$key]['cp'] = $cv['cpClient'];
$t_ListeCA[$key]['idclient'] = $cv['idClient'];
$t_ListeCA[$key]['idfournisseur'] = $cv['idFournisseur'];
//TABLEAU MOIS PAR MOIS
if (!isset($t_ListeMois[$mois]))
$t_ListeMois[$mois] = array('ca_genere' => 0);
$t_ListeMois[$mois]['ca_genere'] += number_format($cv[0]['montantht'], 2, '.', '');
$t_ListeMois[$mois]['client'] = $cv['nomClient'];
$t_ListeMois[$mois]['fournisseur'] = $cv['nomFournisseur'];
$t_ListeMois[$mois]['commercial'] = $cv['contact'];
$t_ListeMois[$mois]['cp'] = $cv['cpClient'];
//TABLEAU PAR TYPE DETAIL
if (!isset($t_ListeDetail[$key]))
$t_ListeDetail[$key] = array('ca_genere' => 0);
$t_ListeDetail[$key]['ca_genere'] += number_format($cv[0]['montantht'], 2, '.', '');
$t_ListeDetail[$key]['client'] = $cv['nomClient'];
$t_ListeDetail[$key]['fournisseur'] = $cv['nomFournisseur'];
$t_ListeDetail[$key]['commercial'] = $cv['contact'];
$t_ListeDetail[$key]['cp'] = $cv['cpClient'];
}
/* selecteur de date */
$begin = date("Y", time()) - 3;
$end = date("Y", time()) + 1;
return $this->render('client/withoutOrder.html.twig', array(
'begin' => $begin,
'end' => $end,
'date' => $date,
'tab_mois_fr' => $tab_mois_fr,
't_ListeCA' => $t_ListeCA,
't_ListeMois' => $t_ListeMois,
't_ListeDetail' => $t_ListeDetail,
));
}
/* AFFICHAGE DE LA MAP CLIENT */
/**
* @Route("/carte", name="malys_client_map")
*/
public function mapAction(Request $request, EntityManagerInterface $em)
{
//RECUPERATION DES UTILISATEURS POUR LISTE DEROULANTE
$admins = $em->getRepository(Admin::class)->findAllOrderByContact();
/* GENERATION DE LA LISTE CLIENT */
$t_emplacements = array();
$t_clients = array();
if ($request->getMethod() == 'POST') {
$clients = $em->getRepository(Client::class)->findClientsForMap($request->get('chtype'), $request->get('chcp'), $request->get('chactivite'), $request->get('chnote'), $request->get('chidadmin'));
foreach ($clients as $c) {
$t_geoloc = explode("|", $c->getGeocode());
if ($c->getGeocode() != '0|0' && count($t_geoloc) == 2 && $t_geoloc[0] != 0 && $t_geoloc[1] != 0)
$t_emplacements[] = "'" . str_replace("'", "", $c->getNom() . " - " . $c->getIdadmin()->getContact()) . "' , " . $t_geoloc[0] . ", " . $t_geoloc[1] . ", 1";
$t_clients[] = str_replace("'", "", $c->getNom() . " - " . $c->getIdadmin()->getContact());
}
}
return $this->render('client/map.html.twig', array(
'admins' => $admins,
't_emplacements' => $t_emplacements,
't_clients' => $t_clients,
));
}
/* CALCUL DES GEOCODES */
/**
* @Route("/calcul_geocode", name="malys_client_geocode")
*/
public function calcGeocodeAction(EntityManagerInterface $em)
{
//RECUPERATION DES CLIENTS SANS GEOCODE
$clients = $em->getRepository(Client::class)->findAllWithoutGeocode(150);
foreach ($clients as $c) {
$reponseGoogle = file_get_contents('http://maps.google.com/maps/geo?q=' . urlencode($c->getAdresse() . " " . $c->getCp() . " " . $c->getVille() . " " . $c->getPays()) . '&output=csv&key=ABQIAAAADxbV76bneFH864wunOoZxhR6dygP_f_bLnyCVNpf2ThnBuN3bxS3r1o22-RHvHY7f17qJiY06l3LHQ');
if ($reponseGoogle != '') {
$codes = explode(",", $reponseGoogle);
$c->setGeocode($codes[2] . "|" . $codes[3]);
}
}
$em->flush();
return $this->redirect($this->generateUrl('malys_client_map'));
}
/* GET FOURNISSEUR IN ARRAY */
private function getFournisseur($fournisseurs, $id)
{
foreach ($fournisseurs as $f)
if ($f->getId() == $id)
return $f;
return null;
}
/**
* @Route("/chercher/client", name="malys_client_recherche")
*/
public function searchClientsAction(Request $request, EntityManagerInterface $em)
{
$searchTerm = $request->get('q');
$clients = $em->getRepository(Client::class)
->createQueryBuilder('c')
->where('c.nom LIKE :term')
->andWhere('c.prospect =:prospect')
->andWhere('c.affiche =:affiche')
->setParameter('term', $searchTerm . '%')
->setParameter('prospect', 0)
->setParameter('affiche', 1)
->getQuery()
->getResult();
$results = [];
foreach ($clients as $client) {
$results[] = [
'id' => $client->getId(),
'text' => $client->getNom(),
];
}
return new JsonResponse($results);
}
/**
* @Route("/chercher/prospect", name="malys_prospect_recherche")
*/
public function searchProspectsAction(Request $request, EntityManagerInterface $em)
{
$searchTerm = $request->get('q'); // Le terme de recherche
// Rechercher les prospects en fonction du nom (ou tout autre champ pertinent)
$prospects = $em->getRepository(Client::class)
->createQueryBuilder('c')
->where('c.nom LIKE :term')
->andWhere('c.prospect =:prospect')
->andWhere('c.affiche =:affiche')
->setParameter('term', $searchTerm . '%')
->setParameter('prospect', 1)
->setParameter('affiche', 1)
->getQuery()
->getResult();
$results = [];
foreach ($prospects as $prospect) {
$noteSymbol = ($prospect->getNote() == 2) ? '+' : '-';
$results[] = [
'id' => $prospect->getId(),
'text' => $prospect->getNom() . ' ' . $noteSymbol,
];
}
return new JsonResponse($results);
}
}