<?php
// src/Controller/DefaultController.php
namespace App\Controller;
use App\Service\CrmCompteManager;
use App\Service\CrmContactManager;
use App\Service\CrmObjectifManager;
use App\Service\NotificationManager;
use App\Service\Geocoder;
use App\Service\Simplexlsx;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
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\Contracts\HttpClient\HttpClientInterface;
class DefaultController extends AbstractController
{
public function __construct(
UserPasswordEncoderInterface $encoder,
EntityManagerInterface $entityManager,
NotificationManager $notificationManager,
CrmCompteManager $crmCompteManager,
CrmContactManager $crmContactManager,
CrmObjectifManager $crmObjectifManager
) {
$this->encoder = $encoder;
$this->entityManager = $entityManager;
$this->notificationManager = $notificationManager;
$this->crmCompteManager = $crmCompteManager;
$this->crmContactManager = $crmContactManager;
$this->crmObjectifManager = $crmObjectifManager;
}
/**
* @Route("/", name="homepage")
* @Route("/dashboard", name="dashboard")
*/
public function dashboard(Request $request, HttpClientInterface $gpClient): Response
{
// Clears *all* the session, use at your own risk !
// $request->getSession()->clear();
/** @var \Doctrine\DBAL\Connection */
$now = new DateTime('now');
// echo 'now <br/>';
// echo '<pre>';
// print_r($now);
// echo '</pre>';
$dateFinMois = $now->modify('last day of this month')->format('Y-m-d');
// $date = $now->modify('first day of this month + 1 month')->format('d-m-Y');
// $dateNextMonth = $now->modify('last day of this month')->format('d-m-Y');
// echo 'dateFinMois <br/>';
// echo '<pre>';
// print_r($dateFinMois);
// echo '</pre>';
$date = $now->modify('first day of this month + 1 month')->format('Y-m-d');
$dateNextMonth = $now->modify('last day of this month')->format('Y-m-d');
// echo 'date <br/>';
// echo '<pre>';
// print_r($date);
// echo '</pre>';
// echo 'dateNextMonth <br/>';
// echo '<pre>';
// print_r($dateNextMonth);
// echo '</pre>';
// exit();
$connection = $this->getDoctrine()->getConnection();
$facture_impayees = $connection->fetchAssociative("SELECT count(id_facture), SUM (total_ht) AS total FROM search_factu_facture WHERE id_statut = 2 AND archived = 'f'");
$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'");
$contrats = $connection->fetchAllAssociative("SELECT * FROM search_contrats WHERE archived = 'f'");
$contrats_afacturer = $connection->fetchAssociative("SELECT count(c.id_contrat)
FROM contrat c
LEFT JOIN factu_facture f ON f.id_contrat = c.id_contrat
WHERE c.date_fin < now()
AND (f.id IS NULL OR f.id_statut = 1)");
// $date = date_format(date_create($date), 'Y-m-d H:i:s');
// $dateNextMonth = date_format(date_create($dateNextMonth), 'Y-m-d H:i:s');
$detailResponse = $gpClient->request(
'GET',
"/api/contracts/hours/detail"
);
$detailResponse = $detailResponse->toArray(false);
$forfaits = array(); // statut 4
$credit_temps = array(); // statut 2
$credit_temps_recurrent = array(); // statut 2
foreach ($detailResponse['project_time_entries'] as $key => $value) {
$contrat = array();
if (isset($value['id_contrat_factu'])){
$contrat = $connection->fetchAssociative("SELECT * FROM search_contrats WHERE archived = 'f' AND id_contrat = " . $value['id_contrat_factu']);
if (isset($contrat['id_devis'])) {
$devis = $connection->fetchAssociative("SELECT * FROM search_factu_devis WHERE archived = 'f' AND id_devis = " . $contrat['id_devis']);
$value['totalHT'] = $devis['total_ht'];
}
if (isset($contrat['heures'])) {
$value['heuresTotales'] = $contrat['heures'];
}
}
if ($value['type'] == 4){
$forfaits[] = $value;
} else if ($value['type'] == 2 and (isset($contrat['frequence']) != null)){
$credit_temps_recurrent[] = $value;
} else if ($value['type'] == 2) {
$credit_temps[] = $value;
} else {
}
}
return $this->render('dashboard.html.twig', [
'facturesImpayees' => $facture_impayees,
'contratMaintenance' => $contrat_maintenance,
'contrats' => $contrats,
'contratsAFacturer' => $contrats_afacturer,
'forfaits' => $forfaits,
'credit_temps' => $credit_temps,
'credit_temps_recurrent' => $credit_temps_recurrent
]);
}
/**
* @Route("/calendar", name="crm_calendar", methods={"GET"})
*/
public function calendar(Request $request): Response
{
return $this->render('calendar.html.twig', [
'feed_route' => 'crm_act_co_calendar_feed',
'feed_url' => $this->generateUrl('crm_act_co_calendar_feed'),
]);
}
/**
* @Route("/products/import", name="products_import")
*/
public function importProducts(Request $request): Response
{
/** @var \Doctrine\DBAL\Connection */
$connection = $this->getDoctrine()->getConnection();
$xlsx = new Simplexlsx('');
$dimension = $xlsx->dimension();
$entetes = $xlsx->rows();
$agence = $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
$id_agence = $agence['id_agence'];
$results = array();
$countCreates = array('familles' => 0, 'modeles' => 0, 'ssmodeles' => 0, 'versions' => 0, 'options' => 0);
$countFound = array('familles' => 0, 'modeles' => 0, 'ssmodeles' => 0, 'versions' => 0, 'options' => 0);
$errors = array();
for ($i = 3; $i < count($entetes); $i++) {
$line = $entetes[$i];
if ($line[5] != '') {
$famille = trim($line[6]);
$modele = trim($line[7]);
$ssmodele = trim($line[8]);
$version = trim($line[9]);
$description = trim($line[21]);
$prixht = (trim($line[22]) == '') ? 0 : trim($line[22]);
// CREATION FAMILLE / MODELE / SOUS MODELE
if (trim($line[5]) == 'Description racine') {
// create famille
if (!isset($results[$famille])) {
// find famille
$f = $connection->fetchAssociative("SELECT id_famille FROM produit_famille WHERE id_agence = " . $id_agence . " AND nom_famille = " . $connection->quote($famille));
if ($f) {
$famille_id = $f['id_famille'];
$countFound['familles']++;
} else {
$dbFamille = array('nom_famille' => $famille, 'id_agence' => $id_agence);
$result = $connection->insert('produit_famille', $dbFamille);
$famille_id = $connection->lastInsertId();
$countCreates['familles']++;
}
$results[$famille] = array('id' => $famille_id, 'options' => array(), 'modeles' => array());
} else {
$famille_id = $results[$famille]['id'];
}
// create modele
if (!isset($results[$famille]['modeles'][$modele])) {
// find modele
$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));
if ($m) {
$modele_id = $m['id_modele'];
$countFound['modeles']++;
} else {
$dbModele = array('nom_modele' => $modele, 'id_famille' => $famille_id, 'id_agence' => $id_agence);
$result = $connection->insert('produit_modele', $dbModele);
$modele_id = $connection->lastInsertId();
$countCreates['modeles']++;
}
$results[$famille]['modeles'][$modele] = array('id' => $modele_id, 'options' => array(), 'ssmodeles' => array());
} else {
$modele_id = $results[$famille]['modeles'][$modele]['id'];
}
// create sous modele
if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele])) {
// find ssmodele
$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));
if ($sm) {
$ssmodele_id = $sm['id_sub_modele'];
$countFound['ssmodeles']++;
} else {
$dbSsModele = array('nom_sub_modele' => $ssmodele, 'description_sub_modele' => $description, 'id_modele' => $modele_id, 'id_agence' => $id_agence);
$result = $connection->insert('produit_sub_modele', $dbSsModele);
$ssmodele_id = $connection->lastInsertId();
$countCreates['ssmodeles']++;
}
$results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele] = array('id' => $ssmodele_id, 'options' => array(), 'versions' => array());
} else {
$ssmodele_id = $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['id'];
}
// CREATION VERSIONS
} elseif (trim($line[5]) == 'Description machine') {
//identification famille
if (!isset($results[$famille])) {
$errors[] = array('line' => $i + 1, 'message' => 'famille ' . $famille . ' non trouvée');
continue;
} else {
$famille_id = $results[$famille]['id'];
}
//identification modele
if (!isset($results[$famille]['modeles'][$modele])) {
$errors[] = array('line' => $i + 1, 'message' => 'modele ' . $modele . ' non trouvée');
continue;
} else {
$modele_id = $results[$famille]['modeles'][$modele]['id'];
}
//identification ssmodele
if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele])) {
$errors[] = array('line' => $i + 1, 'message' => 'sous modele ' . $ssmodele . ' non trouvée');
continue;
} else {
$ssmodele_id = $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['id'];
}
// create versions
if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version])) {
// find ssmodele
$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));
if ($v) {
$version_id = $v['id_version'];
$countFound['versions']++;
} else {
$dbversion = array('nom_version' => $version, 'description_version' => $description, 'prix_ht_version' => $prixht, 'id_sub_modele' => $ssmodele_id, 'id_agence' => $id_agence);
$result = $connection->insert('produit_version', $dbversion);
$version_id = $connection->lastInsertId();
$countCreates['versions']++;
}
$results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version] = array('id' => $version_id, 'options' => array());
} else {
$version_id = $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version]['id'];
}
// CREATION OPTIONS
} elseif (trim($line[5]) != '') {
//identification famille
if (!isset($results[$famille])) {
$errors[] = array('line' => $i + 1, 'message' => 'famille ' . $famille . ' non trouvée');
continue;
} else {
$famille_id = $results[$famille]['id'];
}
//identification modele
if (!isset($results[$famille]['modeles'][$modele])) {
$errors[] = array('line' => $i + 1, 'message' => 'modele ' . $modele . ' non trouvée');
continue;
} else {
$modele_id = $results[$famille]['modeles'][$modele]['id'];
}
$optionDb = array();
$optionDb['nom_option'] = $description;
$optionDb['description_option'] = $description;
$optionDb['prix_ht_option'] = $prixht;
$optionDb['type_option'] = 1;
$optionDb['code_option'] = trim($line[10]);
$optionDb['qtt_min'] = (trim($line[11]) == '') ? 0 : trim($line[1]);
$optionDb['qtt_max'] = (trim($line[12]) == '') ? 0 : trim($line[12]);
if (trim($line[13]) != '') $optionDb['incompat_1'] = trim($line[13]);
if (trim($line[14]) != '') $optionDb['incompat_2'] = trim($line[14]);
if (trim($line[15]) != '') $optionDb['incompat_3'] = trim($line[15]);
if (trim($line[16]) != '') $optionDb['oblig_1'] = trim($line[16]);
if (trim($line[17]) != '') $optionDb['oblig_2'] = trim($line[17]);
if (trim($line[18]) != '') $optionDb['oblig_3'] = trim($line[18]);
if (trim($line[19]) != '') $optionDb['oblig_4'] = trim($line[19]);
if ($ssmodele == 'Option commune') {
$optionDb['id_modele'] = $modele_id;
// find options
$o = $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE id_modele = " . $modele_id . " AND nom_option = " . $connection->quote($optionDb['nom_option']));
if ($o) {
$option_id = $o['id_option'];
$countFound['options']++;
} else {
$result = $connection->insert('produit_option', $optionDb);
$option_id = $connection->lastInsertId();
$countCreates['options']++;
}
$results[$famille]['modeles'][$modele]['options'][] = array('id' => $option_id);
} else {
//identification ssmodele
if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele])) {
$errors[] = array('line' => $i + 1, 'message' => 'sous modele ' . $ssmodele . ' non trouvée');
continue;
} else {
$ssmodele_id = $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['id'];
}
if ($version == 'Option commune') {
$optionDb['id_sub_modele'] = $ssmodele_id;
// find options
$o = $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE id_sub_modele = " . $ssmodele_id . " AND nom_option = " . $connection->quote($optionDb['nom_option']));
if ($o) {
$option_id = $o['id_option'];
$countFound['options']++;
} else {
$result = $connection->insert('produit_option', $optionDb);
$option_id = $connection->lastInsertId();
$countCreates['options']++;
}
$results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['options'][] = array('id' => $option_id);
} else {
//identification version
if (!isset($results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version])) {
$errors[] = array('line' => $i + 1, 'message' => 'version ' . $version . ' non trouvée');
continue;
} else {
$version_id = $results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version]['id'];
}
$optionDb['id_version'] = $version_id;
// find options
$o = $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE id_version = " . $version_id . " AND nom_option = " . $connection->quote($optionDb['nom_option']));
if ($o) {
$option_id = $o['id_option'];
$countFound['options']++;
} else {
$result = $connection->insert('produit_option', $optionDb);
$option_id = $connection->lastInsertId();
$countCreates['options']++;
}
$results[$famille]['modeles'][$modele]['ssmodeles'][$ssmodele]['versions'][$version]['options'][] = array('id' => $option_id);
}
}
}
}
}
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countCreates);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countFound);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($errors);
echo '</pre>';
exit();
return $this->render('dashboard.html.twig', []);
}
/**
* @Route("/crm/comptes/import", name="crm_comptes_import")
*/
public function importCRMComptes(Request $request): Response
{
/** @var \Doctrine\DBAL\Connection */
$connection = $this->getDoctrine()->getConnection();
$agence = $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
$id_agence = $agence['id_agence'];
$xlsx = new Simplexlsx('');
$dimension = $xlsx->dimension();
$rows = $xlsx->rows();
$entetes = array_flip(array_filter($rows[4]));
$results = array();
$countCreates = array('accounts' => 0);
$countFound = array('accounts' => 0);
$found = [];
$errors = array();
for ($i = 5; $i < count($rows); $i++) {
$line = $rows[$i];
if ($line[4] != '') {
$revendeur_ref = trim($line[27]);
$r = $connection->fetchAssociative("SELECT id_revendeur FROM revendeurs WHERE ref_revendeur = " . $connection->quote($revendeur_ref));
if ($r !== false) {
$ref = trim($line[4]);
$nom = trim($line[3]);
$siret = trim($line[5]);
$type = trim($line[7]);
$code_activite = trim($line[8]);
$secteur_activite = trim($line[9]);
$telephone = trim($line[12]);
$site_internet = trim($line[13]);
$adresse = trim($line[14]);
$comp_adresse = trim($line[15]);
$code_postal = trim($line[16]);
$ville = trim($line[17]);
$region = trim($line[18]);
$pays = trim($line[19]);
$surface = trim($line[32]);
$largeur_min = trim($line[33]);
$largeur_max = trim($line[34]);
$cave = (trim($line[35]) == 'X') ? 't' : 'f';
$commentaire = trim($line[36]);
$id_revendeur = $r['id_revendeur'];
$account = $ref;
// create compte
if (!isset($results[$account])) {
$dbCompte = array(
'compte_nom' => $nom,
'compte_revendeur_ref' => $ref,
'activite_code' => $code_activite,
'site_internet' => $site_internet,
'adresse' => $adresse,
'comp_adresse' => $comp_adresse,
'code_postal' => $code_postal,
'ville' => $ville,
'code_pays' => $pays,
'compte_comment' => $commentaire,
'id_revendeur' => $id_revendeur
);
$geocoder = new Geocoder();
$geocoder->setAddress($adresse, $code_postal, $ville, '', $pays);
if ($geocoder->geocode() !== false) {
$dbCompte['latitude'] = $geocoder->pnt['lat'];
$dbCompte['longitude'] = $geocoder->pnt['lng'];
}
// find compte
$c = $connection->fetchAssociative("SELECT id_compte FROM crm_compte WHERE compte_revendeur_ref = " . $connection->quote($ref));
if ($c) {
$compte_id = $c['id_compte'];
$countFound['accounts']++;
$found[] = ['ref' => $account, 'id' => $compte_id];
try {
$result = $connection->update('crm_compte', $dbCompte, ['id_compte' => $compte_id]);
} catch (\Exception $e) {
$errors[$i] = $e->getMessage();
}
} else {
try {
$result = $connection->insert('crm_compte', $dbCompte);
if ($result === 1) {
$compte_id = $connection->lastInsertId();
$countCreates['accounts']++;
} else {
$errors[$i] = 'Db error';
}
} catch (\Exception $e) {
$errors[$i] = $e->getMessage();
}
}
$results[$account] = array('id' => $compte_id);
} else {
$compte_id = $results[$account]['id'];
$found[] = ['ref' => $account, 'id' => $compte_id];
}
} else {
$errors[$i] = 'Revendeur non trouvé : ' . $revendeur_ref;
}
}
}
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countCreates);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countFound);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($errors);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($found);
echo '</pre>';
exit();
return $this->render('dashboard.html.twig', []);
}
/**
* @Route("/crm/contacts/import", name="crm_contacts_import")
*/
public function importCRMContacts(Request $request): Response
{
/** @var \Doctrine\DBAL\Connection */
$connection = $this->getDoctrine()->getConnection();
$agence = $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
$id_agence = $agence['id_agence'];
$xlsx = new Simplexlsx('');
$dimension = $xlsx->dimension();
$rows = $xlsx->rows(2);
$entetes = array_flip(array_filter($rows[4]));
$results = array();
$countCreates = array('contacts' => 0);
$countFound = array('contacts' => 0);
$errors = array();
$found = [];
$treated = 0;
for ($i = 5; $i < count($rows); $i++) {
$treated++;
$line = $rows[$i];
if ($line[3] != '') {
$ref = trim($line[3]);
$civilite = (trim($line[4]) == 'M') ? 1 : 2;
$nom = trim($line[5]);
$prenom = trim($line[6]);
$telephone = trim($line[7]);
$mobile = trim($line[8]);
$email = trim($line[9]);
$fonction_contact = trim($line[10]);
$service = trim($line[11]);
$departement = trim($line[12]);
$contact = $nom . ' ' . $prenom . ' ' . $ref;
// find account
$a = $connection->fetchAssociative("SELECT id_compte FROM crm_compte WHERE compte_revendeur_ref = " . $connection->quote($ref));
// create contact
if ($a) {
// find contact
$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']);
if ($c) {
$contact_id = $c['id_contact'];
$countFound['contacts']++;
} else {
if (!isset($results[$contact])) {
$dbContact = array(
'id_compte' => $a['id_compte'],
'nom_contact' => $nom,
'prenom_contact' => $prenom,
'civ_contact' => $civilite,
'tel_contact' => $telephone,
'mob_contact' => $mobile,
'email_contact' => $email,
'service_contact' => $service,
'departement_contact' => $departement
);
$result = $connection->insert('crm_contact', $dbContact);
$contact_id = $connection->lastInsertId();
$countCreates['contacts']++;
} else {
$contact_id = $results[$contact]['id'];
$found[] = $nom . ' ' . $prenom . ' ' . $ref;
}
}
$results[$contact] = array('id' => $contact_id);
} else {
$errors[$i] = "Account " . $ref . " not found";
}
}
}
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countCreates);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countFound);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($found);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($treated);
echo '</pre>';
exit();
exit();
return $this->render('dashboard.html.twig', []);
}
/**
* @Route("/structure/revendeurs/import", name="structure_revendeurs_import")
*/
public function importRevendeurs(Request $request): Response
{
/** @var \Doctrine\DBAL\Connection */
$connection = $this->getDoctrine()->getConnection();
$agence = $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
$id_agence = $agence['id_agence'];
$secteur = $connection->fetchAssociative("SELECT id_secteur FROM secteurs WHERE nom_secteur = 'Sud-Ouest' AND id_agence = " . $id_agence);
$id_secteur = $secteur['id_secteur'];
$xlsx = new Simplexlsx('');
$dimension = $xlsx->dimension();
$rows = $xlsx->rows();
$entetes = array_flip(array_filter($rows[0]));
$results = array();
$countCreates = array('revendeurs' => 0);
$countFound = array('revendeurs' => 0);
$found = [];
$errors = array();
for ($i = 1; $i < count($rows); $i++) {
$line = $rows[$i];
if ($line[4] != '') {
$ref_revendeur = trim($line[0]);
$nom_revendeur = trim($line[1]);
$description_revendeur = trim($line[2]);
$revendeur = $ref_revendeur;
// create revendeur
if (!isset($results[$revendeur])) {
// find revendeur
$c = $connection->fetchAssociative("SELECT id_revendeur FROM revendeurs WHERE ref_revendeur = " . $connection->quote($ref_revendeur));
if ($c) {
$revendeur_id = $c['id_revendeur'];
$countFound['revendeurs']++;
$found[] = ['ref' => $revendeur, 'id' => $revendeur_id];
} else {
$dbRevendeur = array(
'ref_revendeur' => $ref_revendeur,
'nom_revendeur' => $nom_revendeur,
'description_revendeur' => $description_revendeur,
'id_secteur' => $id_secteur
);
try {
$result = $connection->insert('revendeurs', $dbRevendeur);
if ($result === 1) {
$revendeur_id = $connection->lastInsertId();
$countCreates['revendeurs']++;
} else {
$errors[$i] = 'Db error';
}
} catch (\Exception $e) {
$errors[$i] = $e->getMessage();
}
}
$results[$revendeur] = array('id' => $revendeur_id);
} else {
$revendeur_id = $results[$revendeur]['id'];
$found[] = ['ref' => $revendeur, 'id' => $revendeur_id];
}
}
}
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countCreates);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countFound);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($errors);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($found);
echo '</pre>';
exit();
return $this->render('dashboard.html.twig', []);
}
/**
* @Route("/options/create/service/", name="options_create_service")
*/
public function createOptionsServiceContacts(Request $request): Response
{
/** @var \Doctrine\DBAL\Connection */
$connection = $this->getDoctrine()->getConnection();
$agence = $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = 'France'");
$id_agence = $agence['id_agence'];
$xlsx = new Simplexlsx('');
$dimension = $xlsx->dimension();
$rows = $xlsx->rows();
$entetes = array_flip(array_filter($rows[0]));
$results = array();
$countCreates = array('options' => 0);
$countFound = array('options' => 0);
$errors = array();
for ($i = 1; $i < count($rows); $i++) {
$line = $rows[$i];
if ($line[1] != '') {
$nom_agence = trim($line[0]);
$nom_option = trim($line[1]);
$code_option = trim($line[2]);
$option = $nom_option;
// create option
if (!isset($results[$nom_agence . $option])) {
// find agence
$a = $connection->fetchAssociative("SELECT id_agence FROM agences WHERE nom_agence = " . $connection->quote($nom_agence));
if ($a) {
// find option
$o = $connection->fetchAssociative("SELECT id_option FROM produit_option WHERE nom_option = " . $connection->quote($nom_option) . " AND id_agence = " . $a['id_agence']);
if ($o) {
$option_id = $o['id_option'];
$countFound['options']++;
} else {
$dbOption = array(
'id_agence' => $a['id_agence'],
'nom_option' => $nom_option,
'code_option' => $code_option,
'qtt_min' => 1,
'qtt_max' => 1,
'type_option' => 2,
'prix_modifiable' => 't'
);
try {
$result = $connection->insert('produit_option', $dbOption);
if ($result === 1) {
$option_id = $connection->lastInsertId();
$countCreates['options']++;
} else {
$errors[$i] = 'Db error';
}
} catch (\Exception $e) {
$errors[$i] = $e->getMessage();
}
}
$results[$nom_agence . $option] = array('id' => $option_id);
} else {
$errors[$i] = "Agence " . $nom_agence . " not found";
}
} else {
$option_id = $results[$nom_agence . $option]['id'];
}
}
}
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countCreates);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($countFound);
echo '</pre>';
echo '<pre>';
print_r(__FILE__ . " Ligne " . __LINE__ . " : ");
print_r($errors);
echo '</pre>';
exit();
return $this->render('dashboard.html.twig', []);
}
/**
* @Route("/map", name="crm_map")
*/
public function map(Request $request): Response
{
return $this->render('map-leaflet.html.twig', [
'layer_route' => 'crm_compte_geojson',
'layer_url' => $this->generateUrl('crm_compte_geojson'),
]);
}
/**
* @Route("/autocomplete", name="autocomplete", methods={"GET"})
*/
public function autocomplete(Request $request): Response
{
$dataset = $request->get('dataset');
$datavalue = $request->get('datavalue');
$datasource = $request->get('datasource');
$connection = $this->getDoctrine()->getConnection();
switch ($dataset) {
case 'commune':
if ($datasource == 'crm_compte_ville' || $datasource == 'crm_contact_ville') {
$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");
} else {
$results = $connection->fetchAllAssociative("SELECT nom_commune, code_postal FROM communes WHERE code_postal LIKE UPPER('" . $datavalue . "%') ORDER BY code_postal");
}
break;
case 'crm_compte':
$filters = array('compte_nom' => $datavalue);
$filters['is_actif'] = true;
if ($request->get('id_agence') != '') {
$filters['id_agence'] = $request->get('id_agence');
}
if ($request->get('id_secteur') != '') {
$filters['id_secteur'] = $request->get('id_secteur');
}
if ($request->get('id_revendeur') != '') {
$filters['id_revendeur'] = $request->get('id_revendeur');
}
$results = $this->crmCompteManager->search($filters, array('sort' => 'compte_nom'), array("compte_nom|| ' - ' || nom_revendeur AS compte_nom ", 'id_compte'));
break;
}
return $this->json($results, 200, [], [
'groups' => 'autocomplete',
]);
}
/**
* @Route("/get/entities", name="get_entities", methods={"GET","POST"})
*/
public function getEntities(Request $request): Response
{
$typeEntity = $request->get('type_entity');
$idParentEntity = $request->get('id_parent_entity');
switch ($typeEntity) {
case 'account':
case 'crm_compte':
$results = $this->crmCompteManager->search(array(), array('sort' => 'compte_nom'), array('compte_nom AS nom_entite', 'id_compte AS id_entite'));
break;
case 'contact':
case 'crm_contact':
$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'));
break;
case 'objective':
case 'crm_objectif':
$results = $this->crmObjectifManager->search(array(), array('sort' => 'title'), array("title AS nom_entite", 'id AS id_entite'));
break;
}
return $this->json($results['rows'], 200, [], [
'groups' => 'entities'
]);
}
/**
* @Route("/top/nav", name="top_nav", methods={"GET"})
*/
public function topNav(Request $request): Response
{
$maintenanceMode = ($_ENV["MAINTENANCE"] == "ENABLED") ? true : false;
return $this->render('_top_nav.html.twig', ['maintenanceMode' => $maintenanceMode]);
}
/**
* @Route("/top/notifications", name="top_notifications", methods={"GET"})
*
*/
public function topNotifications(Request $request): Response
{
$notifications = $this->notificationManager->search([],['sort' => 'date_received DESC']);
$countNotRead = 0;
foreach($notifications['rows'] as $notif){
if($notif['date_read'] == ''){
$countNotRead++;
}
}
return $this->render('_top_notifications.html.twig', ['notifications' => $notifications['rows'], 'countNotRead' => $countNotRead]);
}
}