src/Controller/DefaultController.php line 42

Open in your IDE?
  1. <?php
  2. // src/Controller/DefaultController.php
  3. namespace App\Controller;
  4. use App\Service\CrmCompteManager;
  5. use App\Service\CrmContactManager;
  6. use App\Service\CrmObjectifManager;
  7. use App\Service\NotificationManager;
  8. use App\Service\Geocoder;
  9. use App\Service\Simplexlsx;
  10. use DateTime;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  17. use Symfony\Contracts\HttpClient\HttpClientInterface;
  18. class DefaultController extends AbstractController
  19. {
  20.     public function __construct(
  21.         UserPasswordEncoderInterface $encoder,
  22.         EntityManagerInterface $entityManager,
  23.         NotificationManager $notificationManager,
  24.         CrmCompteManager $crmCompteManager,
  25.         CrmContactManager $crmContactManager,
  26.         CrmObjectifManager $crmObjectifManager
  27.     ) {
  28.         $this->encoder $encoder;
  29.         $this->entityManager $entityManager;
  30.         $this->notificationManager $notificationManager;
  31.         $this->crmCompteManager $crmCompteManager;
  32.         $this->crmContactManager $crmContactManager;
  33.         $this->crmObjectifManager $crmObjectifManager;
  34.     }
  35.     /**
  36.      * @Route("/", name="homepage")
  37.      * @Route("/dashboard", name="dashboard")
  38.      */
  39.     public function dashboard(Request $requestHttpClientInterface $gpClient): Response
  40.     {
  41.         // Clears *all* the session, use at your own risk !
  42.         // $request->getSession()->clear();
  43.         /** @var \Doctrine\DBAL\Connection */
  44.         $now = new DateTime('now');
  45.         // echo 'now <br/>';
  46.         // echo '<pre>';
  47.         // print_r($now);
  48.         // echo '</pre>';  
  49.         $dateFinMois  =  $now->modify('last day of this month')->format('Y-m-d');    
  50.         // $date = $now->modify('first day of this month + 1 month')->format('d-m-Y');
  51.         // $dateNextMonth = $now->modify('last day of this month')->format('d-m-Y');
  52.         // echo 'dateFinMois <br/>';
  53.         // echo '<pre>';
  54.         // print_r($dateFinMois);
  55.         // echo '</pre>';  
  56.         $date $now->modify('first day of this month + 1 month')->format('Y-m-d');
  57.         $dateNextMonth $now->modify('last day of this month')->format('Y-m-d');
  58. // echo 'date <br/>';
  59. // echo '<pre>';
  60. // print_r($date);
  61. // echo '</pre>';
  62. // echo 'dateNextMonth <br/>';
  63. // echo '<pre>';
  64. // print_r($dateNextMonth);
  65. // echo '</pre>';
  66. // exit();
  67.         $connection $this->getDoctrine()->getConnection();
  68.         $facture_impayees $connection->fetchAssociative("SELECT count(id_facture), SUM (total_ht) AS total FROM search_factu_facture WHERE id_statut = 2 AND archived = 'f'");
  69.         $contrat_maintenance $connection->fetchAssociative("SELECT count(id_contrat) FROM search_contrats WHERE (id_type = 1 OR id_type = 2) AND date_fin BETWEEN '$date'::timestamp AND  '$dateNextMonth'::timestamp AND archived = 'f'");
  70.         $contrats $connection->fetchAllAssociative("SELECT * FROM search_contrats WHERE archived = 'f'");
  71.         $contrats_afacturer $connection->fetchAssociative("SELECT count(c.id_contrat)
  72.                                                             FROM contrat c
  73.                                                             LEFT JOIN factu_facture f ON f.id_contrat = c.id_contrat
  74.                                                             WHERE c.date_fin < now()
  75.                                                             AND (f.id IS NULL OR f.id_statut = 1)");
  76.         // $date = date_format(date_create($date), 'Y-m-d H:i:s');
  77.         // $dateNextMonth = date_format(date_create($dateNextMonth), 'Y-m-d H:i:s');
  78.         $detailResponse $gpClient->request(
  79.             'GET',
  80.             "/api/contracts/hours/detail"
  81.         );
  82.         $detailResponse $detailResponse->toArray(false);
  83.         $forfaits = array(); // statut 4
  84.         $credit_temps = array(); // statut 2
  85.         $credit_temps_recurrent = array(); // statut 2
  86.         foreach ($detailResponse['project_time_entries'] as $key => $value) {
  87.             $contrat = array();
  88.             if (isset($value['id_contrat_factu'])){
  89.                 $contrat $connection->fetchAssociative("SELECT * FROM search_contrats WHERE archived = 'f' AND id_contrat = " $value['id_contrat_factu']);
  90.                 if (isset($contrat['id_devis'])) {
  91.                     $devis $connection->fetchAssociative("SELECT * FROM search_factu_devis WHERE archived = 'f' AND id_devis = " $contrat['id_devis']);
  92.                     $value['totalHT'] = $devis['total_ht'];
  93.                 }
  94.                 if (isset($contrat['heures'])) {
  95.                     $value['heuresTotales'] = $contrat['heures'];
  96.                 }
  97.             }
  98.             if ($value['type'] == 4){
  99.                 $forfaits[] = $value;
  100.             } else if ($value['type'] == and (isset($contrat['frequence']) != null)){
  101.                 $credit_temps_recurrent[] = $value;
  102.             } else if ($value['type'] == 2) {
  103.                 $credit_temps[] = $value;
  104.             } else {
  105.             }
  106.         }
  107.         return $this->render('dashboard.html.twig', [
  108.             'facturesImpayees' => $facture_impayees,
  109.             'contratMaintenance' => $contrat_maintenance,
  110.             'contrats' => $contrats,
  111.             'contratsAFacturer' => $contrats_afacturer,
  112.             'forfaits' => $forfaits,
  113.             'credit_temps' => $credit_temps,
  114.             'credit_temps_recurrent' => $credit_temps_recurrent
  115.         ]);
  116.     }
  117.     /**
  118.      * @Route("/calendar", name="crm_calendar", methods={"GET"})
  119.      */
  120.     public function calendar(Request $request): Response
  121.     {
  122.         return $this->render('calendar.html.twig', [
  123.             'feed_route' => 'crm_act_co_calendar_feed',
  124.             'feed_url' => $this->generateUrl('crm_act_co_calendar_feed'),
  125.         ]);
  126.     }
  127.     /**
  128.      * @Route("/products/import", name="products_import")
  129.      */
  130.     public function importProducts(Request $request): Response
  131.     {
  132.         /** @var \Doctrine\DBAL\Connection */
  133.         $connection $this->getDoctrine()->getConnection();
  134.         $xlsx = new Simplexlsx('');
  135.         $dimension $xlsx->dimension();
  136.         $entetes $xlsx->rows();
  137.         $agence $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
  138.         $id_agence $agence['id_agence'];
  139.         $results = array();
  140.         $countCreates = array('familles' => 0'modeles' => 0'ssmodeles' => 0'versions' => 0'options' => 0);
  141.         $countFound = array('familles' => 0'modeles' => 0'ssmodeles' => 0'versions' => 0'options' => 0);
  142.         $errors = array();
  143.         for ($i 3$i count($entetes); $i++) {
  144.             $line $entetes[$i];
  145.             if ($line[5] != '') {
  146.                 $famille trim($line[6]);
  147.                 $modele trim($line[7]);
  148.                 $ssmodele trim($line[8]);
  149.                 $version trim($line[9]);
  150.                 $description trim($line[21]);
  151.                 $prixht = (trim($line[22]) == '') ? trim($line[22]);
  152.                 // CREATION FAMILLE / MODELE / SOUS MODELE
  153.                 if (trim($line[5]) == 'Description racine') {
  154.                     // create famille
  155.                     if (!isset($results[$famille])) {
  156.                         // find famille
  157.                         $f $connection->fetchAssociative("SELECT id_famille FROM produit_famille WHERE id_agence = " $id_agence " AND nom_famille = " $connection->quote($famille));
  158.                         if ($f) {
  159.                             $famille_id $f['id_famille'];
  160.                             $countFound['familles']++;
  161.                         } else {
  162.                             $dbFamille = array('nom_famille' =>  $famille'id_agence' => $id_agence);
  163.                             $result $connection->insert('produit_famille'$dbFamille);
  164.                             $famille_id $connection->lastInsertId();
  165.                             $countCreates['familles']++;
  166.                         }
  167.                         $results[$famille] = array('id' => $famille_id'options' => array(), 'modeles' => array());
  168.                     } else {
  169.                         $famille_id $results[$famille]['id'];
  170.                     }
  171.                     // create modele
  172.                     if (!isset($results[$famille]['modeles'][$modele])) {
  173.                         // find modele
  174.                         $m $connection->fetchAssociative("SELECT id_modele FROM produit_modele WHERE id_agence = " $id_agence " AND id_famille = " $famille_id " AND nom_modele = " $connection->quote($modele));
  175.                         if ($m) {
  176.                             $modele_id $m['id_modele'];
  177.                             $countFound['modeles']++;
  178.                         } else {
  179.                             $dbModele = array('nom_modele' => $modele'id_famille' =>  $famille_id'id_agence' => $id_agence);
  180.                             $result $connection->insert('produit_modele'$dbModele);
  181.                             $modele_id $connection->lastInsertId();
  182.                             $countCreates['modeles']++;
  183.                         }
  184.                         $results[$famille]['modeles'][$modele] = array('id' => $modele_id'options' => array(), 'ssmodeles' => array());
  185.                     } else {
  186.                         $modele_id $results[$famille]['modeles'][$modele]['id'];
  187.                     }
  188.                     // create sous modele
  189.                     if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele])) {
  190.                         // find ssmodele
  191.                         $sm $connection->fetchAssociative("SELECT id_sub_modele FROM produit_sub_modele WHERE id_agence = " $id_agence " AND id_modele = " $modele_id " AND nom_sub_modele = " $connection->quote($ssmodele));
  192.                         if ($sm) {
  193.                             $ssmodele_id $sm['id_sub_modele'];
  194.                             $countFound['ssmodeles']++;
  195.                         } else {
  196.                             $dbSsModele = array('nom_sub_modele' => $ssmodele'description_sub_modele' => $description'id_modele' =>  $modele_id'id_agence' => $id_agence);
  197.                             $result $connection->insert('produit_sub_modele'$dbSsModele);
  198.                             $ssmodele_id $connection->lastInsertId();
  199.                             $countCreates['ssmodeles']++;
  200.                         }
  201.                         $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele] = array('id' => $ssmodele_id'options' => array(), 'versions' => array());
  202.                     } else {
  203.                         $ssmodele_id $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['id'];
  204.                     }
  205.                     // CREATION VERSIONS
  206.                 } elseif (trim($line[5]) == 'Description machine') {
  207.                     //identification famille
  208.                     if (!isset($results[$famille])) {
  209.                         $errors[] = array('line' => $i 1'message' => 'famille ' $famille ' non trouvée');
  210.                         continue;
  211.                     } else {
  212.                         $famille_id $results[$famille]['id'];
  213.                     }
  214.                     //identification modele
  215.                     if (!isset($results[$famille]['modeles'][$modele])) {
  216.                         $errors[] = array('line' => $i 1'message' => 'modele ' $modele ' non trouvée');
  217.                         continue;
  218.                     } else {
  219.                         $modele_id $results[$famille]['modeles'][$modele]['id'];
  220.                     }
  221.                     //identification ssmodele
  222.                     if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele])) {
  223.                         $errors[] = array('line' => $i 1'message' => 'sous modele ' $ssmodele ' non trouvée');
  224.                         continue;
  225.                     } else {
  226.                         $ssmodele_id $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['id'];
  227.                     }
  228.                     // create versions
  229.                     if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version])) {
  230.                         // find ssmodele
  231.                         $v $connection->fetchAssociative("SELECT id_version FROM produit_version WHERE id_agence = " $id_agence " AND id_sub_modele = " $ssmodele_id " AND nom_version = " $connection->quote($version));
  232.                         if ($v) {
  233.                             $version_id $v['id_version'];
  234.                             $countFound['versions']++;
  235.                         } else {
  236.                             $dbversion = array('nom_version' => $version'description_version' => $description'prix_ht_version' => $prixht'id_sub_modele' =>  $ssmodele_id'id_agence' => $id_agence);
  237.                             $result $connection->insert('produit_version'$dbversion);
  238.                             $version_id $connection->lastInsertId();
  239.                             $countCreates['versions']++;
  240.                         }
  241.                         $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version] = array('id' => $version_id'options' => array());
  242.                     } else {
  243.                         $version_id $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version]['id'];
  244.                     }
  245.                     // CREATION OPTIONS
  246.                 } elseif (trim($line[5]) != '') {
  247.                     //identification famille
  248.                     if (!isset($results[$famille])) {
  249.                         $errors[] = array('line' => $i 1'message' => 'famille ' $famille ' non trouvée');
  250.                         continue;
  251.                     } else {
  252.                         $famille_id $results[$famille]['id'];
  253.                     }
  254.                     //identification modele
  255.                     if (!isset($results[$famille]['modeles'][$modele])) {
  256.                         $errors[] = array('line' => $i 1'message' => 'modele ' $modele ' non trouvée');
  257.                         continue;
  258.                     } else {
  259.                         $modele_id $results[$famille]['modeles'][$modele]['id'];
  260.                     }
  261.                     $optionDb = array();
  262.                     $optionDb['nom_option'] = $description;
  263.                     $optionDb['description_option'] = $description;
  264.                     $optionDb['prix_ht_option'] = $prixht;
  265.                     $optionDb['type_option'] = 1;
  266.                     $optionDb['code_option'] = trim($line[10]);
  267.                     $optionDb['qtt_min'] = (trim($line[11]) == '') ? trim($line[1]);
  268.                     $optionDb['qtt_max'] = (trim($line[12]) == '') ? trim($line[12]);
  269.                     if (trim($line[13]) != ''$optionDb['incompat_1'] = trim($line[13]);
  270.                     if (trim($line[14]) != ''$optionDb['incompat_2'] = trim($line[14]);
  271.                     if (trim($line[15]) != ''$optionDb['incompat_3'] = trim($line[15]);
  272.                     if (trim($line[16]) != ''$optionDb['oblig_1'] = trim($line[16]);
  273.                     if (trim($line[17]) != ''$optionDb['oblig_2'] = trim($line[17]);
  274.                     if (trim($line[18]) != ''$optionDb['oblig_3'] = trim($line[18]);
  275.                     if (trim($line[19]) != ''$optionDb['oblig_4'] = trim($line[19]);
  276.                     if ($ssmodele == 'Option commune') {
  277.                         $optionDb['id_modele'] = $modele_id;
  278.                         // find options
  279.                         $o $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE id_modele = " $modele_id " AND nom_option = " $connection->quote($optionDb['nom_option']));
  280.                         if ($o) {
  281.                             $option_id $o['id_option'];
  282.                             $countFound['options']++;
  283.                         } else {
  284.                             $result $connection->insert('produit_option'$optionDb);
  285.                             $option_id $connection->lastInsertId();
  286.                             $countCreates['options']++;
  287.                         }
  288.                         $results[$famille]['modeles'][$modele]['options'][] = array('id' => $option_id);
  289.                     } else {
  290.                         //identification ssmodele
  291.                         if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele])) {
  292.                             $errors[] = array('line' => $i 1'message' => 'sous modele ' $ssmodele ' non trouvée');
  293.                             continue;
  294.                         } else {
  295.                             $ssmodele_id $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['id'];
  296.                         }
  297.                         if ($version == 'Option commune') {
  298.                             $optionDb['id_sub_modele'] = $ssmodele_id;
  299.                             // find options
  300.                             $o $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE id_sub_modele = " $ssmodele_id " AND nom_option = " $connection->quote($optionDb['nom_option']));
  301.                             if ($o) {
  302.                                 $option_id $o['id_option'];
  303.                                 $countFound['options']++;
  304.                             } else {
  305.                                 $result $connection->insert('produit_option'$optionDb);
  306.                                 $option_id $connection->lastInsertId();
  307.                                 $countCreates['options']++;
  308.                             }
  309.                             $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['options'][] = array('id' => $option_id);
  310.                         } else {
  311.                             //identification version
  312.                             if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version])) {
  313.                                 $errors[] = array('line' => $i 1'message' => 'version ' $version ' non trouvée');
  314.                                 continue;
  315.                             } else {
  316.                                 $version_id $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version]['id'];
  317.                             }
  318.                             $optionDb['id_version'] = $version_id;
  319.                             // find options
  320.                             $o $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE id_version = " $version_id " AND nom_option = " $connection->quote($optionDb['nom_option']));
  321.                             if ($o) {
  322.                                 $option_id $o['id_option'];
  323.                                 $countFound['options']++;
  324.                             } else {
  325.                                 $result $connection->insert('produit_option'$optionDb);
  326.                                 $option_id $connection->lastInsertId();
  327.                                 $countCreates['options']++;
  328.                             }
  329.                             $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version]['options'][] = array('id' => $option_id);
  330.                         }
  331.                     }
  332.                 }
  333.             }
  334.         }
  335.         echo '<pre>';
  336.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  337.         print_r($countCreates);
  338.         echo '</pre>';
  339.         echo '<pre>';
  340.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  341.         print_r($countFound);
  342.         echo '</pre>';
  343.         echo '<pre>';
  344.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  345.         print_r($errors);
  346.         echo '</pre>';
  347.         exit();
  348.         return $this->render('dashboard.html.twig', []);
  349.     }
  350.     /**
  351.      * @Route("/crm/comptes/import", name="crm_comptes_import")
  352.      */
  353.     public function importCRMComptes(Request $request): Response
  354.     {
  355.         /** @var \Doctrine\DBAL\Connection */
  356.         $connection $this->getDoctrine()->getConnection();
  357.         $agence $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
  358.         $id_agence $agence['id_agence'];
  359.         $xlsx = new Simplexlsx('');
  360.         $dimension $xlsx->dimension();
  361.         $rows $xlsx->rows();
  362.         $entetes array_flip(array_filter($rows[4]));
  363.         $results = array();
  364.         $countCreates = array('accounts' => 0);
  365.         $countFound = array('accounts' => 0);
  366.         $found = [];
  367.         $errors = array();
  368.         for ($i 5$i count($rows); $i++) {
  369.             $line $rows[$i];
  370.             if ($line[4] != '') {
  371.                 $revendeur_ref trim($line[27]);
  372.                 $r $connection->fetchAssociative("SELECT id_revendeur FROM revendeurs WHERE ref_revendeur = " $connection->quote($revendeur_ref));
  373.                 if ($r !== false) {
  374.                     $ref trim($line[4]);
  375.                     $nom trim($line[3]);
  376.                     $siret trim($line[5]);
  377.                     $type trim($line[7]);
  378.                     $code_activite trim($line[8]);
  379.                     $secteur_activite trim($line[9]);
  380.                     $telephone trim($line[12]);
  381.                     $site_internet trim($line[13]);
  382.                     $adresse trim($line[14]);
  383.                     $comp_adresse trim($line[15]);
  384.                     $code_postal trim($line[16]);
  385.                     $ville trim($line[17]);
  386.                     $region trim($line[18]);
  387.                     $pays trim($line[19]);
  388.                     $surface trim($line[32]);
  389.                     $largeur_min trim($line[33]);
  390.                     $largeur_max trim($line[34]);
  391.                     $cave = (trim($line[35]) == 'X') ? 't' 'f';
  392.                     $commentaire trim($line[36]);
  393.                     $id_revendeur $r['id_revendeur'];
  394.                     $account $ref;
  395.                     // create compte
  396.                     if (!isset($results[$account])) {
  397.                         $dbCompte = array(
  398.                             'compte_nom' =>  $nom,
  399.                             'compte_revendeur_ref' => $ref,
  400.                             'activite_code' => $code_activite,
  401.                             'site_internet' => $site_internet,
  402.                             'adresse' => $adresse,
  403.                             'comp_adresse' => $comp_adresse,
  404.                             'code_postal' => $code_postal,
  405.                             'ville' => $ville,
  406.                             'code_pays' => $pays,
  407.                             'compte_comment' => $commentaire,
  408.                             'id_revendeur' => $id_revendeur
  409.                         );
  410.                         $geocoder = new Geocoder();
  411.                         $geocoder->setAddress($adresse$code_postal$ville''$pays);
  412.                         if ($geocoder->geocode() !== false) {
  413.                             $dbCompte['latitude'] = $geocoder->pnt['lat'];
  414.                             $dbCompte['longitude'] = $geocoder->pnt['lng'];
  415.                         }
  416.                         // find compte
  417.                         $c $connection->fetchAssociative("SELECT id_compte FROM crm_compte WHERE compte_revendeur_ref = " $connection->quote($ref));
  418.                         if ($c) {
  419.                             $compte_id $c['id_compte'];
  420.                             $countFound['accounts']++;
  421.                             $found[] = ['ref' => $account'id' => $compte_id];
  422.                             try {
  423.                                 $result $connection->update('crm_compte'$dbCompte, ['id_compte' => $compte_id]);
  424.                             } catch (\Exception $e) {
  425.                                 $errors[$i] = $e->getMessage();
  426.                             }
  427.                         } else {
  428.                             try {
  429.                                 $result $connection->insert('crm_compte'$dbCompte);
  430.                                 if ($result === 1) {
  431.                                     $compte_id $connection->lastInsertId();
  432.                                     $countCreates['accounts']++;
  433.                                 } else {
  434.                                     $errors[$i] = 'Db error';
  435.                                 }
  436.                             } catch (\Exception $e) {
  437.                                 $errors[$i] = $e->getMessage();
  438.                             }
  439.                         }
  440.                         $results[$account] = array('id' => $compte_id);
  441.                     } else {
  442.                         $compte_id $results[$account]['id'];
  443.                         $found[] = ['ref' => $account'id' => $compte_id];
  444.                     }
  445.                 } else {
  446.                     $errors[$i] = 'Revendeur non trouvé : ' $revendeur_ref;
  447.                 }
  448.             }
  449.         }
  450.         echo '<pre>';
  451.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  452.         print_r($countCreates);
  453.         echo '</pre>';
  454.         echo '<pre>';
  455.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  456.         print_r($countFound);
  457.         echo '</pre>';
  458.         echo '<pre>';
  459.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  460.         print_r($errors);
  461.         echo '</pre>';
  462.         echo '<pre>';
  463.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  464.         print_r($found);
  465.         echo '</pre>';
  466.         exit();
  467.         return $this->render('dashboard.html.twig', []);
  468.     }
  469.     /**
  470.      * @Route("/crm/contacts/import", name="crm_contacts_import")
  471.      */
  472.     public function importCRMContacts(Request $request): Response
  473.     {
  474.         /** @var \Doctrine\DBAL\Connection */
  475.         $connection $this->getDoctrine()->getConnection();
  476.         $agence $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
  477.         $id_agence $agence['id_agence'];
  478.         $xlsx = new Simplexlsx('');
  479.         $dimension $xlsx->dimension();
  480.         $rows $xlsx->rows(2);
  481.         $entetes array_flip(array_filter($rows[4]));
  482.         $results = array();
  483.         $countCreates = array('contacts' => 0);
  484.         $countFound = array('contacts' => 0);
  485.         $errors = array();
  486.         $found = [];
  487.         $treated 0;
  488.         for ($i 5$i count($rows); $i++) {
  489.             $treated++;
  490.             $line $rows[$i];
  491.             if ($line[3] != '') {
  492.                 $ref trim($line[3]);
  493.                 $civilite = (trim($line[4]) == 'M') ? 2;
  494.                 $nom trim($line[5]);
  495.                 $prenom trim($line[6]);
  496.                 $telephone trim($line[7]);
  497.                 $mobile trim($line[8]);
  498.                 $email trim($line[9]);
  499.                 $fonction_contact trim($line[10]);
  500.                 $service trim($line[11]);
  501.                 $departement trim($line[12]);
  502.                 $contact $nom ' ' $prenom ' ' $ref;
  503.                 // find account
  504.                 $a $connection->fetchAssociative("SELECT id_compte FROM crm_compte WHERE compte_revendeur_ref = " $connection->quote($ref));
  505.                 // create contact
  506.                 if ($a) {
  507.                     // find contact
  508.                     $c $connection->fetchAssociative("SELECT id_contact FROM crm_contact WHERE nom_contact = " $connection->quote($nom) . " AND prenom_contact = " $connection->quote($prenom) . " AND id_compte = " $a['id_compte']);
  509.                     if ($c) {
  510.                         $contact_id $c['id_contact'];
  511.                         $countFound['contacts']++;
  512.                     } else {
  513.                         if (!isset($results[$contact])) {
  514.                             $dbContact = array(
  515.                                 'id_compte' =>  $a['id_compte'],
  516.                                 'nom_contact' => $nom,
  517.                                 'prenom_contact' => $prenom,
  518.                                 'civ_contact' => $civilite,
  519.                                 'tel_contact' => $telephone,
  520.                                 'mob_contact' => $mobile,
  521.                                 'email_contact' => $email,
  522.                                 'service_contact' => $service,
  523.                                 'departement_contact' => $departement
  524.                             );
  525.                             $result $connection->insert('crm_contact'$dbContact);
  526.                             $contact_id $connection->lastInsertId();
  527.                             $countCreates['contacts']++;
  528.                         } else {
  529.                             $contact_id $results[$contact]['id'];
  530.                             $found[] = $nom ' ' $prenom ' ' $ref;
  531.                         }
  532.                     }
  533.                     $results[$contact] = array('id' => $contact_id);
  534.                 } else {
  535.                     $errors[$i] = "Account " $ref " not found";
  536.                 }
  537.             }
  538.         }
  539.         echo '<pre>';
  540.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  541.         print_r($countCreates);
  542.         echo '</pre>';
  543.         echo '<pre>';
  544.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  545.         print_r($countFound);
  546.         echo '</pre>';
  547.         echo '<pre>';
  548.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  549.         print_r($found);
  550.         echo '</pre>';
  551.         echo '<pre>';
  552.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  553.         print_r($treated);
  554.         echo '</pre>';
  555.         exit();
  556.         exit();
  557.         return $this->render('dashboard.html.twig', []);
  558.     }
  559.     /**
  560.      * @Route("/structure/revendeurs/import", name="structure_revendeurs_import")
  561.      */
  562.     public function importRevendeurs(Request $request): Response
  563.     {
  564.         /** @var \Doctrine\DBAL\Connection */
  565.         $connection $this->getDoctrine()->getConnection();
  566.         $agence $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
  567.         $id_agence $agence['id_agence'];
  568.         $secteur $connection->fetchAssociative("SELECT id_secteur FROM secteurs WHERE nom_secteur = 'Sud-Ouest' AND id_agence = " $id_agence);
  569.         $id_secteur $secteur['id_secteur'];
  570.         $xlsx = new Simplexlsx('');
  571.         $dimension $xlsx->dimension();
  572.         $rows $xlsx->rows();
  573.         $entetes array_flip(array_filter($rows[0]));
  574.         $results = array();
  575.         $countCreates = array('revendeurs' => 0);
  576.         $countFound = array('revendeurs' => 0);
  577.         $found = [];
  578.         $errors = array();
  579.         for ($i 1$i count($rows); $i++) {
  580.             $line $rows[$i];
  581.             if ($line[4] != '') {
  582.                 $ref_revendeur trim($line[0]);
  583.                 $nom_revendeur trim($line[1]);
  584.                 $description_revendeur trim($line[2]);
  585.                 $revendeur $ref_revendeur;
  586.                 // create revendeur
  587.                 if (!isset($results[$revendeur])) {
  588.                     // find revendeur
  589.                     $c $connection->fetchAssociative("SELECT id_revendeur FROM revendeurs WHERE ref_revendeur = " $connection->quote($ref_revendeur));
  590.                     if ($c) {
  591.                         $revendeur_id $c['id_revendeur'];
  592.                         $countFound['revendeurs']++;
  593.                         $found[] = ['ref' => $revendeur'id' => $revendeur_id];
  594.                     } else {
  595.                         $dbRevendeur = array(
  596.                             'ref_revendeur' =>  $ref_revendeur,
  597.                             'nom_revendeur' => $nom_revendeur,
  598.                             'description_revendeur' => $description_revendeur,
  599.                             'id_secteur' => $id_secteur
  600.                         );
  601.                         try {
  602.                             $result $connection->insert('revendeurs'$dbRevendeur);
  603.                             if ($result === 1) {
  604.                                 $revendeur_id $connection->lastInsertId();
  605.                                 $countCreates['revendeurs']++;
  606.                             } else {
  607.                                 $errors[$i] = 'Db error';
  608.                             }
  609.                         } catch (\Exception $e) {
  610.                             $errors[$i] = $e->getMessage();
  611.                         }
  612.                     }
  613.                     $results[$revendeur] = array('id' => $revendeur_id);
  614.                 } else {
  615.                     $revendeur_id $results[$revendeur]['id'];
  616.                     $found[] = ['ref' => $revendeur'id' => $revendeur_id];
  617.                 }
  618.             }
  619.         }
  620.         echo '<pre>';
  621.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  622.         print_r($countCreates);
  623.         echo '</pre>';
  624.         echo '<pre>';
  625.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  626.         print_r($countFound);
  627.         echo '</pre>';
  628.         echo '<pre>';
  629.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  630.         print_r($errors);
  631.         echo '</pre>';
  632.         echo '<pre>';
  633.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  634.         print_r($found);
  635.         echo '</pre>';
  636.         exit();
  637.         return $this->render('dashboard.html.twig', []);
  638.     }
  639.     /**
  640.      * @Route("/options/create/service/", name="options_create_service")
  641.      */
  642.     public function createOptionsServiceContacts(Request $request): Response
  643.     {
  644.         /** @var \Doctrine\DBAL\Connection */
  645.         $connection $this->getDoctrine()->getConnection();
  646.         $agence $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
  647.         $id_agence $agence['id_agence'];
  648.         $xlsx = new Simplexlsx('');
  649.         $dimension $xlsx->dimension();
  650.         $rows $xlsx->rows();
  651.         $entetes array_flip(array_filter($rows[0]));
  652.         $results = array();
  653.         $countCreates = array('options' => 0);
  654.         $countFound = array('options' => 0);
  655.         $errors = array();
  656.         for ($i 1$i count($rows); $i++) {
  657.             $line $rows[$i];
  658.             if ($line[1] != '') {
  659.                 $nom_agence trim($line[0]);
  660.                 $nom_option trim($line[1]);
  661.                 $code_option trim($line[2]);
  662.                 $option $nom_option;
  663.                 // create option
  664.                 if (!isset($results[$nom_agence $option])) {
  665.                     // find agence
  666.                     $a $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = " $connection->quote($nom_agence));
  667.                     if ($a) {
  668.                         // find option
  669.                         $o $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE nom_option = " $connection->quote($nom_option) . " AND id_agence = " $a['id_agence']);
  670.                         if ($o) {
  671.                             $option_id $o['id_option'];
  672.                             $countFound['options']++;
  673.                         } else {
  674.                             $dbOption = array(
  675.                                 'id_agence' =>  $a['id_agence'],
  676.                                 'nom_option' => $nom_option,
  677.                                 'code_option' => $code_option,
  678.                                 'qtt_min' => 1,
  679.                                 'qtt_max' => 1,
  680.                                 'type_option' => 2,
  681.                                 'prix_modifiable' => 't'
  682.                             );
  683.                             try {
  684.                                 $result $connection->insert('produit_option'$dbOption);
  685.                                 if ($result === 1) {
  686.                                     $option_id $connection->lastInsertId();
  687.                                     $countCreates['options']++;
  688.                                 } else {
  689.                                     $errors[$i] = 'Db error';
  690.                                 }
  691.                             } catch (\Exception $e) {
  692.                                 $errors[$i] = $e->getMessage();
  693.                             }
  694.                         }
  695.                         $results[$nom_agence $option] = array('id' => $option_id);
  696.                     } else {
  697.                         $errors[$i] = "Agence " $nom_agence " not found";
  698.                     }
  699.                 } else {
  700.                     $option_id $results[$nom_agence $option]['id'];
  701.                 }
  702.             }
  703.         }
  704.         echo '<pre>';
  705.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  706.         print_r($countCreates);
  707.         echo '</pre>';
  708.         echo '<pre>';
  709.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  710.         print_r($countFound);
  711.         echo '</pre>';
  712.         echo '<pre>';
  713.         print_r(__FILE__ " Ligne " __LINE__ " : ");
  714.         print_r($errors);
  715.         echo '</pre>';
  716.         exit();
  717.         return $this->render('dashboard.html.twig', []);
  718.     }
  719.     /**
  720.      * @Route("/map", name="crm_map")
  721.      */
  722.     public function map(Request $request): Response
  723.     {
  724.         return $this->render('map-leaflet.html.twig', [
  725.             'layer_route' => 'crm_compte_geojson',
  726.             'layer_url' => $this->generateUrl('crm_compte_geojson'),
  727.         ]);
  728.     }
  729.     /**
  730.      * @Route("/autocomplete", name="autocomplete", methods={"GET"})
  731.      */
  732.     public function autocomplete(Request $request): Response
  733.     {
  734.         $dataset $request->get('dataset');
  735.         $datavalue $request->get('datavalue');
  736.         $datasource $request->get('datasource');
  737.         $connection $this->getDoctrine()->getConnection();
  738.         switch ($dataset) {
  739.             case 'commune':
  740.                 if ($datasource == 'crm_compte_ville' || $datasource == 'crm_contact_ville') {
  741.                     $results $connection->fetchAllAssociative("SELECT nom_commune, code_postal FROM communes WHERE code_postal LIKE UPPER('" $datavalue "%') OR nom_commune LIKE UPPER('" $datavalue "%') ORDER BY nom_commune");
  742.                 } else {
  743.                     $results $connection->fetchAllAssociative("SELECT nom_commune, code_postal FROM communes WHERE code_postal LIKE UPPER('" $datavalue "%') ORDER BY code_postal");
  744.                 }
  745.                 break;
  746.             case 'crm_compte':
  747.                 $filters = array('compte_nom' => $datavalue);
  748.                 $filters['is_actif'] = true;
  749.                 if ($request->get('id_agence') != '') {
  750.                     $filters['id_agence'] = $request->get('id_agence');
  751.                 }
  752.                 if ($request->get('id_secteur') != '') {
  753.                     $filters['id_secteur'] = $request->get('id_secteur');
  754.                 }
  755.                 if ($request->get('id_revendeur') != '') {
  756.                     $filters['id_revendeur'] = $request->get('id_revendeur');
  757.                 }
  758.                 $results $this->crmCompteManager->search($filters, array('sort' => 'compte_nom'), array("compte_nom|| ' - ' || nom_revendeur AS compte_nom "'id_compte'));
  759.                 break;
  760.         }
  761.         return $this->json($results200, [], [
  762.             'groups' => 'autocomplete',
  763.         ]);
  764.     }
  765.     /**
  766.      * @Route("/get/entities", name="get_entities", methods={"GET","POST"})
  767.      */
  768.     public function getEntities(Request $request): Response
  769.     {
  770.         $typeEntity $request->get('type_entity');
  771.         $idParentEntity $request->get('id_parent_entity');
  772.         switch ($typeEntity) {
  773.             case 'account':
  774.             case 'crm_compte':
  775.                 $results $this->crmCompteManager->search(array(), array('sort' => 'compte_nom'), array('compte_nom AS nom_entite''id_compte AS id_entite'));
  776.                 break;
  777.             case 'contact':
  778.             case 'crm_contact':
  779.                 $results $this->crmContactManager->search(array('id_compte' => $idParentEntity), array('sort' => 'nom_contact'), array("nom_contact || ' ' || prenom_contact AS nom_entite"'id_contact AS id_entite'));
  780.                 break;
  781.             case 'objective':
  782.             case 'crm_objectif':
  783.                 $results $this->crmObjectifManager->search(array(), array('sort' => 'title'), array("title AS nom_entite"'id AS id_entite'));
  784.                 break;
  785.         }
  786.         return $this->json($results['rows'], 200, [], [
  787.             'groups' => 'entities'
  788.         ]);
  789.     }
  790.     /**
  791.      * @Route("/top/nav", name="top_nav", methods={"GET"})
  792.      */
  793.     public function topNav(Request $request): Response
  794.     {
  795.         $maintenanceMode = ($_ENV["MAINTENANCE"] == "ENABLED") ? true false;
  796.         return $this->render('_top_nav.html.twig', ['maintenanceMode' => $maintenanceMode]);
  797.     }
  798.     /**
  799.      * @Route("/top/notifications", name="top_notifications", methods={"GET"})
  800.      *
  801.      */
  802.     public function topNotifications(Request $request): Response
  803.     {
  804.         $notifications $this->notificationManager->search([],['sort' => 'date_received DESC']);
  805.         $countNotRead 0;
  806.         foreach($notifications['rows'] as $notif){
  807.             if($notif['date_read'] == ''){
  808.                 $countNotRead++;
  809.             }
  810.         }
  811.         return $this->render('_top_notifications.html.twig', ['notifications' => $notifications['rows'], 'countNotRead' => $countNotRead]);
  812.     }
  813. }