<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\DBAL\Connection;
use Symfony\Component\HttpFoundation\Request;
use App\Service\FirmeService;
use App\Service\LocalisationService;
use App\Service\RubriquePrestationService;
use App\Service\ProduitKompassService;
use App\Service\FirmeDetailsService;
use App\Service\FirmeUpService;
use App\Service\ModificationLoggerService;
use Symfony\Component\HttpFoundation\JsonResponse;
class FirmeUpController extends AbstractController
{
private $connection;
private $firmeService;
private $localisationService;
private $rubriqueprestationService;
private $produitKompassService;
private $FirmeDetailsService;
private $FirmeUpService;
private $ModificationLoggerService;
public function __construct(Connection $connection,FirmeService $firmeService,LocalisationService $localisationService ,RubriquePrestationService $rubriqueprestationService,ProduitKompassService $produitKompassService,FirmeDetailsService $FirmeDetailsService,FirmeUpService $FirmeUpService,ModificationLoggerService $ModificationLoggerService)
{
$this->connection = $connection;
$this->firmeService = $firmeService;
$this->localisationService = $localisationService;
$this->rubriqueprestationService = $rubriqueprestationService;
$this->produitKompassService = $produitKompassService;
$this->FirmeDetailsService = $FirmeDetailsService;
$this->FirmeUpService = $FirmeUpService;
$this->ModificationLoggerService = $ModificationLoggerService;
}
/**
* @Route("/nonFirmePL/up", name="app_non_profession_lib")
*/
public function nonFirmeUpPL(Request $request,FirmeService $firmeService): Response
{
$pageSubtitle = 'Fiche client';
$user = $this->getUser();
if (!$user instanceof \App\Entity\UserRegistration) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$userId = $user->getId();
// $codeFirme = $user->getCodeFirme();
$firme = $firmeService->getFirmeByUserId($userId);
if ($firme) {
$firme['horaires'] = json_decode($firme['horaires'] ?? '[]', true);
$firme['pause'] = json_decode($firme['pause'] ?? '[]', true);
$firme['rubriques'] = json_decode($firme['rubriques'] ?? '[]', true);
$firme['prestations'] = json_decode($firme['prestations'] ?? '[]', true);
$firme['produits'] = json_decode($firme['produits'] ?? '[]', true);
$firme['marques'] = json_decode($firme['marques'] ?? '[]', true);
$firme['actes'] = json_decode($firme['actes'] ?? '[]', true);
$firme['activite'] = $firme['activite'] ?? '';
} else {
// Par exemple, on passe un tableau vide au template
$firme = [
'horaires' => [],
'pause' => [],
'rubriques' => [],
'prestations' => [],
'produits' => [],
'marques' => [],
'actes' => [],
'activite' => '',
];
}
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$juridique = $firmeService->getJuridiqueByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
$certification = $firmeService->getCertificationByUserId($userId);
$anneesCA = json_decode($finance['annee_ca'] ?? '[]', true);
rsort($anneesCA, SORT_NUMERIC);
$gammesCA = json_decode($finance['gamme_ca'] ?? '[]', true);
$zoneExport = json_decode($finance['zone_export'] ?? '[]', true);
$pourcExport = json_decode($finance['pourc_export'] ?? '[]', true);
$anneesGammes = [];
foreach ($anneesCA as $index => $annee) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gammesCA[$index] ?? null
];
}
$zonesExportList = [];
foreach ($zoneExport as $index => $zone) {
$zonesExportList[] = [
'zone' => $zone,
'pourcentage' => $pourcExport[$index] ?? null
];
}
// dd($juridique,$finance);
if ($coordonnee) {
$coordonnee['telefone'] = json_decode($coordonnee['telefone'] ?? '[]', true);
$coordonnee['portable'] = json_decode($coordonnee['portable'] ?? '[]', true);
$coordonnee['whatsapp'] = json_decode($coordonnee['whatsapp'] ?? '[]', true);
$coordonnee['email'] = json_decode($coordonnee['email'] ?? '[]', true);
$coordonnee['site_web'] = json_decode($coordonnee['site_web'] ?? '[]', true);
$coordonnee['facebook'] = json_decode($coordonnee['facebook'] ?? '[]', true);
$coordonnee['instagram'] = json_decode($coordonnee['instagram'] ?? '[]', true);
$coordonnee['linkedin'] = json_decode($coordonnee['linkedin'] ?? '[]', true);
} else {
// On initialise à vide pour éviter toute erreur dans le template
$coordonnee = [
'telefone' => [],
'portable' => [],
'whatsapp' => [],
'email' => [],
'site_web' => [],
'facebook' => [],
'instagram' => [],
'linkedin' => [],
];
}
if (!$user) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$roles = $user->getRoles();
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
// $produits =$this->rubriqueprestationService->getAllProduits();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$natures =$this->rubriqueprestationService->getAllNatures();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
// dd($ficheCustomer);
return $this->render('nonCustomer/firme_up/profession_lib.html.twig', [
'villes' => $villes,
'rubriques' => $rubriques,
'fonctions' => $fonctions,
'natures' => $natures,
'fichiers' => $fichiers,
'formeJur' => $formeJur,
'banques' => $banques,
'zonesExp' => $zonesExp,
'themes' => $themes,
'firme' => $firme,
'localisation' => $localisation,
'coordonnee' => $coordonnee,
'rubriques' => $rubriques,
'juridique' => $juridique,
'finance' => $finance,
'pourcExport' => $pourcExport,
'anneesGammes' => $anneesGammes,
'gammeCA' => $gammeCA,
'zonesExportList' => $zonesExportList,
'dirigeants' => $dirigeants,
'certification' => $certification,
// 'produits' => $produits,
]);
}
/**
* @Route("/nonFirme/up", name="app_non_societe")
*/
public function nonFirmeUpSociete(Request $request,FirmeService $firmeService): Response
{
$pageSubtitle = 'Fiche client';
$user = $this->getUser();
if (!$user instanceof \App\Entity\UserRegistration) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$userId = $user->getId();
// $codeFirme = $user->getCodeFirme();
$firme = $firmeService->getFirmeByUserId($userId);
if ($firme) {
$firme['horaires'] = json_decode($firme['horaires'] ?? '[]', true);
$firme['pause'] = json_decode($firme['pause'] ?? '[]', true);
$firme['rubriques'] = json_decode($firme['rubriques'] ?? '[]', true);
$firme['prestations'] = json_decode($firme['prestations'] ?? '[]', true);
$firme['produits'] = json_decode($firme['produits'] ?? '[]', true);
$firme['marques'] = json_decode($firme['marques'] ?? '[]', true);
$firme['actes'] = json_decode($firme['actes'] ?? '[]', true);
} else {
// Par exemple, on passe un tableau vide au template
$firme = [
'horaires' => [],
'pause' => [],
'rubriques' => [],
'prestations' => [],
'produits' => [],
'marques' => [],
'actes' => [],
];
}
$wproduits = $this->produitKompassService->getLienProduitW13ByUserId($userId);
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$juridique = $firmeService->getJuridiqueByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
$certification = $firmeService->getCertificationByUserId($userId);
$anneesCA = json_decode($finance['annee_ca'] ?? '[]', true);
rsort($anneesCA, SORT_NUMERIC);
$gammesCA = json_decode($finance['gamme_ca'] ?? '[]', true);
$zoneExport = json_decode($finance['zone_export'] ?? '[]', true);
$pourcExport = json_decode($finance['pourc_export'] ?? '[]', true);
$anneesGammes = [];
foreach ($anneesCA as $index => $annee) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gammesCA[$index] ?? null
];
}
$zonesExportList = [];
foreach ($zoneExport as $index => $zone) {
$zonesExportList[] = [
'zone' => $zone,
'pourcentage' => $pourcExport[$index] ?? null
];
}
// dd($juridique,$finance);
if ($coordonnee) {
$coordonnee['telefone'] = json_decode($coordonnee['telefone'] ?? '[]', true);
$coordonnee['portable'] = json_decode($coordonnee['portable'] ?? '[]', true);
$coordonnee['whatsapp'] = json_decode($coordonnee['whatsapp'] ?? '[]', true);
$coordonnee['email'] = json_decode($coordonnee['email'] ?? '[]', true);
$coordonnee['site_web'] = json_decode($coordonnee['site_web'] ?? '[]', true);
$coordonnee['facebook'] = json_decode($coordonnee['facebook'] ?? '[]', true);
$coordonnee['instagram'] = json_decode($coordonnee['instagram'] ?? '[]', true);
$coordonnee['linkedin'] = json_decode($coordonnee['linkedin'] ?? '[]', true);
} else {
// On initialise à vide pour éviter toute erreur dans le template
$coordonnee = [
'telefone' => [],
'portable' => [],
'whatsapp' => [],
'email' => [],
'site_web' => [],
'facebook' => [],
'instagram' => [],
'linkedin' => [],
];
}
if (!$user) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$roles = $user->getRoles();
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$natures =$this->rubriqueprestationService->getAllNatures();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$produits =$this->rubriqueprestationService->getAllProduits();
// $marques =$this->rubriqueprestationService->getAllMarques();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
// $codesProduits = $firme['produits'] ?? [];
// // Transformer les codes en tableau associatif code => libellé
// $firme['produits'] = $this->rubriqueprestationService->getLibellesProduits($codesProduits);
// $codesMarques = $firme['marques'] ?? [];
// Transformer les codes en tableau associatif code => libellé
// $firme['marques'] = $this->rubriqueprestationService->getLibellesMarques($codesMarques);
// dd($dirigeants);
if (!empty($dirigeants) && is_array($dirigeants)) {
foreach ($dirigeants as &$d) {
$p = $d['portable'] ?? null;
if ($p && $p[0] === '[') {
$d['portables'] = json_decode($p, true);
} elseif ($p) {
$d['portables'] = [$p];
} else {
$d['portables'] = [];
}
}
} else {
$dirigeants = []; // tu initialises à un tableau vide pour éviter d'autres erreurs plus loin
}
$kompassProduits = $this->produitKompassService->getProduitsKompassUserId($userId);
// dd($ficheCustomer);
return $this->render('nonCustomer/firme_up/societe.html.twig', [
'villes' => $villes,
'rubriques' => $rubriques,
'fonctions' => $fonctions,
'natures' => $natures,
'fichiers' => $fichiers,
'formeJur' => $formeJur,
'banques' => $banques,
'zonesExp' => $zonesExp,
'themes' => $themes,
'firme' => $firme,
'localisation' => $localisation,
'coordonnee' => $coordonnee,
'rubriques' => $rubriques,
'juridique' => $juridique,
'finance' => $finance,
'pourcExport' => $pourcExport,
'anneesGammes' => $anneesGammes,
'gammeCA' => $gammeCA,
'zonesExportList' => $zonesExportList,
'dirigeants' => $dirigeants,
'certification' => $certification,
'produits' => $produits,
// 'marques' => $marques,
'wproduits' => $wproduits,
'kompassProduits' => $kompassProduits,
]);
}
/**
* @Route("/nonFirmeUp/insert", name="insert_nonFirmeUp", methods={"POST"})
*/
public function insertNonFirmeUp(Request $request,FirmeService $firmeService): Response
{
$user = $this->getUser();
if (!$user instanceof \App\Entity\UserRegistration) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$userId = $user->getId();
// Récupération de toutes les données
$data = $request->request->all();
$wproduits = $this->produitKompassService->getLienProduitW13ByUserId($userId);
// dd($wproduits);
$firme = $firmeService->getFirmeByUserId($userId);
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
// dd($firme);
$juridique = $firmeService->getJuridiqueByUserId($userId);
// dd($juridique);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
function isNotEmpty($value): bool {
if (is_array($value)) {
foreach ($value as $v) {
if (trim((string)$v) !== '') {
return true;
}
}
return false;
}
return trim((string)$value) !== '';
}
// dd($data);
$jours = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'];
$horaires = [];
foreach ($jours as $jour) {
$isChecked = $request->request->get('checkbox_' . $jour);
if ($isChecked) {
$start = $request->request->get('start_' . $jour);
$end = $request->request->get('end_' . $jour);
$horaires[$jour] = [
'actif' => true,
'start' => $start,
'end' => $end
];
} else {
$horaires[$jour] = [
'actif' => false,
'start' => null,
'end' => null
];
}
}
// ➕ Traitement cohérent pour la pause
$pauseEnabled = $request->request->get('pause_enabled'); // existe uniquement si cochée
$pauseStart = $request->request->get('pause_start');
$pauseEnd = $request->request->get('pause_end');
$pause = [];
if ($pauseEnabled) {
$pause = [
'actif' => true,
'start' => $pauseStart,
'end' => $pauseEnd
];
} else {
$pause = [
'actif' => false,
'start' => null,
'end' => null
];
}
$horairesJson = json_encode($horaires);
$pauseJson = json_encode($pause);
$produits = $request->request->get('field29');
$positionsProduits = $request->request->get('Prfield31');
$marques = $request->request->get('field30');
$positionsMarques = $request->request->get('field31');
// Filtrer les produits avec valeurs non vides
$produitsAvecPositions = [];
if (!empty($produits) && is_array($produits)) {
foreach ($produits as $index => $produit) {
if (trim($produit) !== '') {
$produitsAvecPositions[] = [
'produit' => $produit,
'position' => $positionsProduits[$index] ?? null
];
}
}
}
// // Filtrer les marques avec valeurs non vides
$marquesAvecPositions = [];
if (!empty($marques) && is_array($marques)) {
foreach ($marques as $index => $marque) {
if (trim($produit) !== '') {
$marquesAvecPositions[] = [
'marque' => $marque,
'position' => $positionsMarques[$index] ?? null
];
}
}
}
//up_firme
$raison_social = $request->request->get('field1');
$nature = $request->request->get('field2');
$horaires = $horairesJson;
$pause = $pauseJson;
$rubriques = $this->filterJsonField($request->request->all('field26'));
$prestations = $this->filterJsonField($request->request->all('field28'));
// Filtrer la description_rub
$description_rub = trim($request->request->get('field27') ?? '');
// Encodage final
$produits = !empty($produitsAvecPositions) ? json_encode($produitsAvecPositions) : null;
$marques = !empty($marquesAvecPositions) ? json_encode($marquesAvecPositions) : null;
// $produits = $this->filterJsonField($request->request->all('field29'));;
// $marques = $this->filterJsonField($request->request->all('field30'));;
$validation = $request->request->get('validation') ?? null;
$date_creation = new \DateTime();
$date_validation = $validation === '1' ? new \DateTime() : null;
$pl_or_societe = "S";
$etat='C';
if (trim($userId) !== '' || trim($raison_social) !== '' || trim($nature) !== '' || $horaires !== '[]' || $pause !== '[]' || $rubriques !== null ||$description_rub !== '' || $prestations !== null || !empty($produits) || !empty($marques))
{
if ($firme) {
$synchroniser ="0";
$this->firmeService->updateFirme(
$userId,null,
$raison_social,
$nature,
$horairesJson,
$pauseJson,
$rubriques,
$description_rub,
$prestations,
$produits,
$marques,
$validation,
$date_validation,
null, // nom
null, // prenom
null, // actes
null, // activite
null, // description
$pl_or_societe,
$etat,
$synchroniser
);
} else {
$synchroniser ="0";
$this->firmeService->insererFirme(
$userId,null,
$raison_social,
$nature,
$horairesJson,
$pauseJson,
$rubriques,
$description_rub,
$prestations,
$produits,
$marques,
$validation,
$date_validation,
$date_creation,
null,
null,
null,
null,
null,
$pl_or_societe,
$etat,
$synchroniser
);
}
}
//up_localisations
$adresse = $request->request->get('field3');
$code_ville = $request->request->get('field4');
$nom_ville = $this->firmeService->getNomVille($code_ville);
$code_quartier = $request->request->get('field5');
$nom_quartier = $this->firmeService->getNomQuartier($code_quartier);
$code_postal = $request->request->get('field6');
$longitude = $request->request->get('field11');
$latitude = $request->request->get('field12');
if (trim($adresse) !== '' || trim($code_ville) !== '' || trim($nom_ville) !== '' || trim($code_quartier) !== '' || trim($nom_quartier) !== '' || trim($code_postal) !== '' || trim($longitude) !== '' || trim($latitude) !== '')
{
if ($localisation) {
$this->firmeService->updateLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
} else {
$this->firmeService->insererLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
}
}
//up_coordonnées
$telefone = $this->filterJsonField($request->request->all('field7'));
$portable = $this->filterJsonField($request->request->all('field8'));
$whatsapp = $this->filterJsonField($request->request->all('wfield8'));
$email = $this->filterJsonField($request->request->all('field9'));
$site_web = $this->filterJsonField($request->request->all('field10'));
$facebook = $this->filterJsonField($request->request->all('facebook'));
$instagram = $this->filterJsonField($request->request->all('instagram'));
$linkedin = $this->filterJsonField($request->request->all('linkedin'));
// Puis tu peux appeler ton service
if ($telefone !== null || $portable !== null || $whatsapp !== null || $email !== null || $site_web !== null || $facebook !== null || $instagram !== null || $linkedin !== null) {
if ($coordonnee) {
$this->firmeService->updateCoordonnees($userId,null, $telefone, $portable, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
} else {
$this->firmeService->insererCoordonnees($userId,null, $telefone, $portable, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
}
}
//up_juridiques
$forme_juridique = $request->request->get('field13');
$annee_creation = $request->request->get('field14');
// dd($annee_creation);
$effectif = $request->request->get('field15');
$ice = $request->request->get('field17');
$identifiant_fiscal = $request->request->get('field18');
$patente = $request->request->get('field19');
$capital = $request->request->get('field16');
$inp = $request->request->get('PLfield31');
$rc = $request->request->get('field20');
$ville_rc = $request->request->get('field21');
$effectif = trim($effectif) !== '' ? (int)$effectif : null;
$capital = trim($capital) !== '' ? (int)$capital : null;
if (trim($forme_juridique) !== '' || trim($annee_creation) !== '' || trim($effectif) !== '' || trim($capital) !== '' || trim($ice) !== '' || trim($identifiant_fiscal) !== '' || trim($patente) !== '' || trim($rc) !== '' || trim($ville_rc) !== '' || trim($inp) !== '') {
if ($juridique) {
$this->firmeService->updateJuridiques($userId,null,$forme_juridique,$annee_creation,$effectif,$capital,$ice,null,$patente,$rc,$ville_rc,$identifiant_fiscal);
} else {
$this->firmeService->insererJuridiques($userId,null,$forme_juridique,$annee_creation,$effectif,$capital,$ice,null,$patente,$rc,$ville_rc,$identifiant_fiscal);
}
}
//up_finances
// Nettoyage des champs
$banques = $this->cleanValue($request->request->get('field34'));
$zone_export = $this->cleanValue($request->request->get('field35'));
$pourc_export = $this->cleanValue($request->request->get('field36'));
$annee_ca = $this->cleanValue($request->request->get('field32', []));
$gamme_ca = $this->cleanValue($request->request->get('field33', []));
// ⚠️ Sécuriser pour éviter foreach sur null
$annee_ca = is_array($annee_ca) ? $annee_ca : [];
$gamme_ca = is_array($gamme_ca) ? $gamme_ca : [];
$anneesGammes = [];
foreach ($annee_ca as $i => $annee) {
if (!empty($annee) && isset($gamme_ca[$i]) && !empty($gamme_ca[$i])) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gamme_ca[$i],
];
}
}
// Sauvegarde en JSON
$annee_ca = array_column($anneesGammes, 'annee_ca');
$gamme_ca = array_column($anneesGammes, 'gamme_ca');
// Insertion ou mise à jour si au moins un champ est renseigné
if ($annee_ca !== null || $gamme_ca !== null || $banques !== null || $zone_export !== null || $pourc_export !== null) {
if ($finance) {
$firmeService->updateFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
} else {
$firmeService->insererFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
}
}
//up_dirigeants
$noms = $request->request->get('field22', []);
$prenoms = $request->request->get('field23', []);
$civilites = $request->request->get('civilite', []);
$fonctionCodes = $request->request->get('field24', []);
$portables = $request->request->get('field25', []);
$whatsapps = $request->request->get('whatsappd', []);
$emails = $request->request->get('emaild', []);
$ids = $request->request->get('id', []);
$deletedRaw = $request->request->get('deleted_dirigeants', '');
// Convertir en tableau
$deletedIds = [];
if (is_string($deletedRaw) && $deletedRaw !== '') {
$deletedIds = explode(',', $deletedRaw);
}
// dd($deletedIds); // Vérifier si on reçoit bien les IDs supprimés
// Supprimer les dirigeants supprimés
if (!empty($deletedIds)) {
$firmeService->supprimerDirigeants($deletedIds);
}
$codeFirme = null;
// Synchroniser les autres (insert/update)
$firmeService->synchroniserDirigeants($ids, $noms, $prenoms, $civilites, $fonctionCodes, $portables, $whatsapps, $emails, $codeFirme, $userId);
// up_certifications
// Récupération des champs du formulaire
$certification = $request->request->get('certification');
$organisme = $request->request->get('organisme');
$type = $request->request->get('type_certification');
$produit = $request->request->get('produit_certification');
$date_expiration = $request->request->get('date_expiration');
// Vérifier s’il y a une certification existante pour ce code_firme
$certificationExist = $this->firmeService->getCertificationByUserId($userId);
// dd($certificationExist);
// Vérifier s'il y a des données remplies
if (
trim($certification) !== '' || trim($organisme) !== '' ||
trim($type) !== '' || trim($produit) !== '' || trim($date_expiration) !== ''
) {
if ($certificationExist) {
// faire update
$this->firmeService->updateCertification(
$userId,null,
$certification,
$organisme,
$type,
$produit,
$date_expiration
);
} else {
// faire insert
$this->firmeService->insererCertification(
$userId,null,
$certification,
$organisme,
$type,
$produit,
$date_expiration
);
}
}
$natures =$this->rubriqueprestationService->getAllNatures();
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
$wproduits = $this->produitKompassService->getLienProduitW13ByUserId($userId);
return $this->render('nonCustomer/firme_up/home.html.twig', [
'firme' => $firme,
'codeFirme' => $codeFirme,
]);
}
/**
* @Route("/PlNonFirmeUp/insert", name="insert_nonFirmeUpPL", methods={"POST"})
*/
public function insertNonFirmeUpPL(Request $request,FirmeService $firmeService): Response
{
$user = $this->getUser();
// if (!$user instanceof \App\Entity\UserRegistration) {
// $this->addFlash('error', 'Veuillez vous connecter.');
// return $this->redirectToRoute('app_login');
// }
$userId = $user->getId();
// Récupération de toutes les données
$data = $request->request->all();
// dd($data);
$description = $data['PLfield28'] ?? null;
// Récupération de toutes les données
$data = $request->request->all();
// dd($data);
$firme = $firmeService->getFirmeByUserId($userId);
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
// dd($firme);
$juridique = $firmeService->getJuridiqueByUserId($userId);
// dd($juridique);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
// Fonction utilitaire pour nettoyer les champs JSON
// dd($data);
$jours = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'];
$horaires = [];
foreach ($jours as $jour) {
$isChecked = $request->request->get('checkbox_' . $jour);
if ($isChecked) {
$start = $request->request->get('start_' . $jour);
$end = $request->request->get('end_' . $jour);
$horaires[$jour] = [
'actif' => true,
'start' => $start,
'end' => $end
];
} else {
$horaires[$jour] = [
'actif' => false,
'start' => null,
'end' => null
];
}
}
// ➕ Traitement cohérent pour la pause
$pauseEnabled = $request->request->get('pause_enabled'); // existe uniquement si cochée
$pauseStart = $request->request->get('pause_start');
$pauseEnd = $request->request->get('pause_end');
$pause = [];
if ($pauseEnabled) {
$pause = [
'actif' => true,
'start' => $pauseStart,
'end' => $pauseEnd
];
} else {
$pause = [
'actif' => false,
'start' => null,
'end' => null
];
}
$horairesJson = json_encode($horaires);
$pauseJson = json_encode($pause);
//up_firme
$nom = $request->request->get('PLfield1');
$prenom = $request->request->get('PLfield2');
$activite = $request->request->get('PLfield26');
$description = $request->request->get('PLfield28');
$horaires = $horairesJson;
$pause = $pauseJson;
$actes = $this->filterJsonField($request->request->all('acte'));
$validation = $request->request->get('validation') ?? null;
$date_creation = new \DateTime();
$date_validation = $validation === '1' ? new \DateTime() : null;
$pl_or_societe = "P";
$etat='C';
if (trim($userId) !== '' || trim($nom) !== '' || trim($prenom) !== '' || trim($activite) !== '' || trim($description) !== '' || $horaires !== '[]' || $pause !== '[]' || $actes !== null)
{
if ($firme) {
$synchroniser ="0";
$this->firmeService->updateFirme(
$userId,
null,
null, // raison_social (pas dans ce contexte)
null, // nature (pas dans ce contexte)
$horairesJson,
$pauseJson,
null, // rubriques (pas dans ce contexte)
null, // description_rub
null, // prestations
null, // produits
null, // marques
$validation,
$date_validation,
$nom,
$prenom,
$actes,
$activite,
$description,
$pl_or_societe,
$etat,
$synchroniser
);
} else {
$synchroniser ="0";
$this->firmeService->insererFirme(
$userId,null,
null,
null,
$horairesJson,
$pauseJson,
null,
null,
null,
null,
null,
$validation,
$date_validation,
$date_creation,
$nom,
$prenom,
$actes,
$activite,
$description,
$pl_or_societe,
$etat,
$synchroniser
);
}
}
//up_localisations
$adresse = $request->request->get('PLfield3');
$code_ville = $request->request->get('PLfield4');
$nom_ville = $this->firmeService->getNomVille($code_ville);
$code_quartier = $request->request->get('PLfield5');
$nom_quartier = $this->firmeService->getNomQuartier($code_quartier);
$code_postal = $request->request->get('PLfield6');
$longitude = $request->request->get('PLfield11');
$latitude = $request->request->get('PLfield12');
if (trim($adresse) !== '' || trim($code_ville) !== '' || trim($nom_ville) !== '' || trim($code_quartier) !== '' || trim($nom_quartier) !== '' || trim($code_postal) !== '' || trim($longitude) !== '' || trim($latitude) !== '')
{
if ($localisation) {
$this->firmeService->updateLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
} else {
$this->firmeService->insererLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
}
}
//up_coordonnées
$telefone = $this->filterJsonField($request->request->all('Pfield7'));
$whatsapp = $this->filterJsonField($request->request->all('Pwhatsapp'));
$email = $this->filterJsonField($request->request->all('Pemail'));
$site_web = $this->filterJsonField($request->request->all('Psite'));
$facebook = $this->filterJsonField($request->request->all('PLfacebook'));
$instagram = $this->filterJsonField($request->request->all('PLinstagram'));
$linkedin = $this->filterJsonField($request->request->all('PLlinkedin'));
// Puis tu peux appeler ton service
if ($telefone !== null || $whatsapp !== null || $email !== null || $site_web !== null || $facebook !== null || $instagram !== null || $linkedin !== null) {
if ($coordonnee) {
$this->firmeService->updateCoordonnees($userId,null, $telefone, null, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
} else {
$this->firmeService->insererCoordonnees($userId,null, $telefone, null, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
}
}
//up_juridiques
$annee_creation = $request->request->get('PLfield14');
$ice = $request->request->get('PLfield29');
$identifiant_fiscal = $request->request->get('PLfield30');
$inp = $request->request->get('PLfield31');
$rc = $request->request->get('PLfield20');
$ville_rc = $request->request->get('PLfield21');
if (trim($annee_creation) !== '' || trim($ice) !== '' || trim($identifiant_fiscal) !== '' || trim($rc) !== '' || trim($ville_rc) !== '' || trim($inp) !== '') {
if ($juridique) {
$this->firmeService->updateJuridiques($userId,null,null,$annee_creation,null,null,$ice,$inp,null,$rc,$ville_rc,$identifiant_fiscal);
} else {
$this->firmeService->insererJuridiques($userId,null,null,$annee_creation,null,null,$ice,$inp,null,$rc,$ville_rc,$identifiant_fiscal);
}
}
//up_finances
// Nettoyage des champs
$banques = $this->cleanValue($request->request->get('PLfield34'));
$zone_export = $this->cleanValue($request->request->get('PLfield35'));
$pourc_export = $this->cleanValue($request->request->get('PLfield36'));
$annee_ca = $this->cleanValue($request->request->get('PLfield32', []));
$gamme_ca = $this->cleanValue($request->request->get('PLfield33', []));
$anneesGammes = [];
foreach ($annee_ca as $i => $annee) {
if (!empty($annee) && isset($gamme_ca[$i]) && !empty($gamme_ca[$i])) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gamme_ca[$i],
];
}
}
// Sauvegarde en JSON
$annee_ca = array_column($anneesGammes, 'annee_ca');
$gamme_ca = array_column($anneesGammes, 'gamme_ca');
// Insertion ou mise à jour si au moins un champ est renseigné
if ($annee_ca !== null || $gamme_ca !== null || $banques !== null || $zone_export !== null || $pourc_export !== null) {
if ($finance) {
$firmeService->updateFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
} else {
$firmeService->insererFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
}
}
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
return $this->render('nonCustomer/firme_up/home.html.twig', [
'firme' => $firme,
]);
}
/**
* @Route("/PlFirmeUp/insert", name="insert_PlFirmeUp", methods={"POST"})
*/
public function insertPLFirmeUp(Request $request,FirmeService $firmeService): Response
{
$description = $data['PLfield28'] ?? null;
// Récupération de toutes les données
$data = $request->request->all();
$codeFirme = $request->request->get('codeFirme');
$firmeCRM = $this->firmeService->getAllFirmeData($codeFirme);
$firme = $firmeService->getFirmeByCodeAdmin($codeFirme);
$localisation = $firmeService->getLocalisationByCodeFirme($codeFirme);
$coordonnee = $firmeService->getCoordonneeByCodeFirme($codeFirme);
$finance = $firmeService->getFinanceByCodeFirme($codeFirme);
// dd($finance);
$juridique = $firmeService->getJuridiqueByCodeFirme($codeFirme);
// Fonction utilitaire pour nettoyer les champs JSON
// dd($data);
$jours = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'];
$horaires = [];
foreach ($jours as $jour) {
$isChecked = $request->request->get('checkbox_' . $jour);
if ($isChecked) {
$start = $request->request->get('start_' . $jour);
$end = $request->request->get('end_' . $jour);
$horaires[$jour] = [
'actif' => true,
'start' => $start,
'end' => $end
];
} else {
$horaires[$jour] = [
'actif' => false,
'start' => null,
'end' => null
];
}
}
// ➕ Traitement cohérent pour la pause
$pauseEnabled = $request->request->get('pause_enabled'); // existe uniquement si cochée
$pauseStart = $request->request->get('pause_start');
$pauseEnd = $request->request->get('pause_end');
$pause = [];
if ($pauseEnabled) {
$pause = [
'actif' => true,
'start' => $pauseStart,
'end' => $pauseEnd
];
} else {
$pause = [
'actif' => false,
'start' => null,
'end' => null
];
}
$horairesJson = json_encode($horaires);
$pauseJson = json_encode($pause);
//up_firme
$nom = $request->request->get('PLfield1');
$prenom = $request->request->get('PLfield2');
$activite = $request->request->get('PLfield26');
$description = $request->request->get('PLfield28');
$horaires = $horairesJson;
$pause = $pauseJson;
$actes = $this->filterJsonField($request->request->all('acte'));
$validation = $request->request->get('validation') ?? null;
$date_creation = new \DateTime();
$date_validation = $validation === '1' ? new \DateTime() : null;
$pl_or_societe = "P";
if (trim($codeFirme) !== '' || trim($nom) !== '' || trim($prenom) !== '' || trim($activite) !== '' || trim($description) !== '' || $horaires !== '[]' || $pause !== '[]' || $actes !== null)
{
if ($firme) {
$etat='U';
$synchroniser ="0";
$this->firmeService->updateFirme(
null,
$codeFirme,
null, // raison_social (pas dans ce contexte)
null, // nature (pas dans ce contexte)
$horairesJson,
$pauseJson,
null, // rubriques (pas dans ce contexte)
null, // description_rub
null, // prestations
null, // produits
null, // marques
$validation,
$date_validation,
$nom,
$prenom,
$actes,
$activite,
$description,
$pl_or_societe,
$etat,
$synchroniser
);
} else {
$etat='C';
$synchroniser ="1";
$this->firmeService->insererFirme(
null,
$codeFirme,
null,
null,
$horairesJson,
$pauseJson,
null,
null,
null,
null,
null,
$validation,
$date_validation,
$date_creation,
$nom,
$prenom,
$actes,
$activite,
$description,
$pl_or_societe,
$etat,
$synchroniser
);
}
}
$rsComp = trim($firmeCRM['firme']['rs_comp']);
$mots = preg_split('/\s+/', $rsComp); // Séparer par les espaces multiples
$nombreMots = count($mots);
if ($nombreMots === 2) {
$firmeCRM['nom'] = $mots[0];
$firmeCRM['prenom'] = $mots[1];
} elseif ($nombreMots >= 3) {
$firmeCRM['nom'] = $mots[0] . ' ' . $mots[1];
$firmeCRM['prenom'] = $mots[$nombreMots - 1];
} else {
// Cas limite : un seul mot
$firmeCRM['nom'] = $rsComp;
$firmeCRM['prenom'] = '';
}
// dd($firmeCRM);
// les données anciennes
$oldDataFirme = [
'horaires' => json_encode( $firmeCRM['horaires']),
'nom' => $firmeCRM['nom'] ,
'prenom' => $firmeCRM['prenom'],
'actes' => $firmeCRM['actes'],
'activite' => $firmeCRM['firme']['code_fichier'],
'description_activite' => $firmeCRM['firme']['tp_48'],
];
// lesdonnées nouvelles (après modification)
$newDataFirme = [
'horaires' => $horaires,
'nom' => $nom ,
'prenom' => $prenom,
'actes' => $actes,
'activite' => $activite,
'description_activite' => $description,
];
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_firme',
$oldDataFirme,
$newDataFirme,
$codeFirme,
null,
'UPDATE'
);
// dd($actes, $newDataFirme);
// dd([
// 'actes' => $actes,
// 'newDataFirme' => $newDataFirme,
// ]);
//up_localisations
$adresse = $request->request->get('PLfield3');
$code_ville = $request->request->get('PLfield4');
$nom_ville = $this->firmeService->getNomVille($code_ville);
$code_quartier = $request->request->get('PLfield5');
$nom_quartier = $this->firmeService->getNomQuartier($code_quartier);
$code_postal = $request->request->get('PLfield6');
$longitude = $request->request->get('PLfield11');
$latitude = $request->request->get('PLfield12');
if (trim($adresse) !== '' || trim($code_ville) !== '' || trim($nom_ville) !== '' || trim($code_quartier) !== '' || trim($nom_quartier) !== '' || trim($code_postal) !== '' || trim($longitude) !== '' || trim($latitude) !== '')
{
if ($localisation) {
$this->firmeService->updateLocalisation(null,$codeFirme, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
} else {
$this->firmeService->insererLocalisation(null,$codeFirme, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
}
}
// les données anciennes
$oldDataLocalisation = [
'adresse' => $firmeCRM['firme']['num_voie'] . ' ' . $firmeCRM['firme']['lib_voie'] . ' ' . $firmeCRM['firme']['comp_voie'] . '' . $firmeCRM['firme']['ville'] . ' - Maroc',
'code_ville' => $firmeCRM['firme']['code_ville'],
'ville' => $firmeCRM['firme']['ville'],
'code_quartier' => $firmeCRM['firme']['code_quart'],
'quartier' => $firmeCRM['firme']['quartier'],
'code_postal' => $firmeCRM['firme']['code_postal'],
'longitude' => $firmeCRM['firme']['longitude'],
'latitude' => $firmeCRM['firme']['latitude'],
];
// dd($firmeCRM);
// lesdonnées nouvelles (après modification)
$newDataLocalisation = [
'adresse' => $adresse,
'code_ville' => $code_ville,
'ville' => $nom_ville,
'code_quartier' => $code_quartier,
'quartier' => $nom_quartier,
'code_postal' => $code_postal,
'longitude' => $longitude,
'latitude' => $latitude,
];
// dd($oldDataLocalisation, $newDataLocalisation);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_localisations',
$oldDataLocalisation,
$newDataLocalisation,
$codeFirme,
null,
'UPDATE'
);
//up_coordonnées
$telefone = $this->filterJsonField($request->request->all('Pfield7'));
$whatsapp = $this->filterJsonField($request->request->all('Pwhatsapp'));
$email = $this->filterJsonField($request->request->all('Pemail'));
$site_web = $this->filterJsonField($request->request->all('Psite'));
$facebook = $this->filterJsonField($request->request->all('PLfacebook'));
$instagram = $this->filterJsonField($request->request->all('PLinstagram'));
$linkedin = $this->filterJsonField($request->request->all('PLlinkedin'));
// Puis tu peux appeler ton service
if ($telefone !== null || $whatsapp !== null || $email !== null || $site_web !== null || $facebook !== null || $instagram !== null || $linkedin !== null) {
if ($coordonnee) {
$this->firmeService->updateCoordonnees(null,$codeFirme, $telefone, null, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
} else {
$this->firmeService->insererCoordonnees(null,$codeFirme, $telefone, null, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
}
}
$oldDataCoordonnee = [
'telefone' => $firmeCRM['telefones'] ?? [],
'portable' => $firmeCRM['portables'] ?? [],
'whatsapp' => $firmeCRM['whatsapps'] ?? [],
'email' => $firmeCRM['emails'] ?? [],
'site_web' => $firmeCRM['sites'] ?? [],
'facebook' => $firmeCRM['reseaux_sociaux']['facebook'] ?? null,
'instagram' => $firmeCRM['reseaux_sociaux']['instagram'] ?? null,
'linkedin' => $firmeCRM['reseaux_sociaux']['linkedin'] ?? null,
];
// lesdonnées nouvelles (après modification)
$newDataCoordonnee = [
'telefone' => $telefone,
'whatsapp' => $whatsapp,
'email' => $email,
'site_web' => $site_web,
'facebook' => $facebook,
'instagram' => $instagram,
'linkedin' => $linkedin,
];
// // Synchroniser les tableaux vides entre old et new
// foreach ($oldDataCoordonnee as $champ => $ancienneValeur) {
// // Si l’ancienne valeur est un tableau vide
// if (is_array($ancienneValeur) && empty($ancienneValeur)) {
// $newDataCoordonnee[$champ] = [];
// }
// // Si les deux sont des chaînes JSON vides ("[]")
// if ($ancienneValeur === '[]') {
// $newDataCoordonnee[$champ] = '[]';
// }
// }
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_coordonnees',
$oldDataCoordonnee,
$newDataCoordonnee,
$codeFirme,
null,
'UPDATE'
);
//up_juridiques
$annee_creation = $request->request->get('PLfield14');
$ice = $request->request->get('PLfield29');
$identifiant_fiscal = $request->request->get('PLfield30');
$inp = $request->request->get('PLfield31');
$rc = $request->request->get('PLfield20');
$ville_rc = $request->request->get('PLfield21');
$user_id = null;
if (trim($annee_creation) !== '' || trim($ice) !== '' || trim($identifiant_fiscal) !== '' || trim($rc) !== '' || trim($ville_rc) !== '' || trim($inp) !== '') {
if ($juridique) {
$this->firmeService->updateJuridiques($user_id,$codeFirme,null,$annee_creation,null,null,$ice,$inp,null,$rc,$ville_rc,$identifiant_fiscal);
} else {
$this->firmeService->insererJuridiques($user_id,$codeFirme,null,$annee_creation,null,null,$ice,$inp,null,$rc,$ville_rc,$identifiant_fiscal);
}
}
$firmeCRM['firme']['date_creation'] = date('Y', strtotime($firmeCRM['firme']['date_creation']));
// les données anciennes
$oldDataJuridique = [
'annee_creation' =>$firmeCRM['firme']['date_creation'],
'ice' => $firmeCRM['firme']['ref_ann_leg'],
'inp' =>$firmeCRM['firme']['inp'],
'identifiant_fiscal' =>$firmeCRM['firme']['ident_fisc'],
'ville_rc' =>$firmeCRM['firme']['code_ville_rc'],
'rc' =>$firmeCRM['firme']['rc'],
];
// lesdonnées nouvelles (après modification)
$newDataJuridique = [
'annee_creation' => $annee_creation,
'ice' => $ice,
'inp' => $inp,
'identifiant_fiscal' => $identifiant_fiscal,
'ville_rc' => $ville_rc,
'rc' => $rc,
];
// dd($oldDataJuridique, $newDataJuridique);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_juridiques',
$oldDataJuridique,
$newDataJuridique,
$codeFirme,
null,
'UPDATE'
);
//up_finances
// Nettoyage des champs
$banques = $this->cleanValue($request->request->get('PLfield34'));
$zone_export = $this->cleanValue($request->request->get('PLfield35'));
$pourc_export = $this->cleanValue($request->request->get('PLfield36'));
$annee_ca = $this->cleanValue($request->request->get('PLfield32', []));
$gamme_ca = $this->cleanValue($request->request->get('PLfield33', []));
// dd($zone_export,$pourc_export);
// S’assurer que les valeurs sont bien des tableaux
if (!is_array($annee_ca)) {
$annee_ca = [];
}
if (!is_array($gamme_ca)) {
$gamme_ca = [];
}
$anneesGammes = [];
foreach ($annee_ca as $i => $annee) {
if (!empty($annee) && isset($gamme_ca[$i]) && !empty($gamme_ca[$i])) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gamme_ca[$i],
];
}
}
// Sauvegarde en JSON
$annee_ca = array_column($anneesGammes, 'annee_ca');
$gamme_ca = array_column($anneesGammes, 'gamme_ca');
// Insertion ou mise à jour si au moins un champ est renseigné
if ($annee_ca !== null || $gamme_ca !== null || $banques !== null || $zone_export !== null || $pourc_export !== null) {
if ($finance) {
$firmeService->updateFinances(null,$codeFirme, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
} else {
$firmeService->insererFinances(null,$codeFirme, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
}
}
$oldBanques = $firmeCRM['banques'] ?? [];
if (is_string($oldBanques)) {
$decoded = json_decode($oldBanques, true);
$oldBanques = json_last_error() === JSON_ERROR_NONE ? $decoded : [$oldBanques];
}
$oldZones = [];
$oldPourcentages = [];
if (!empty($firmeCRM['exports'])) {
foreach ($firmeCRM['exports'] as $exp) {
$oldZones[] = $exp['CODE_ZONE'] ?? null;
$oldPourcentages[] = $exp['TAUX'] ?? null;
}
}
$oldAnnees = [];
$oldGammes = [];
if (!empty($firmeCRM['finances'])) {
foreach ($firmeCRM['finances'] as $financeItem) {
$oldAnnees[] = $financeItem['ANNEE'] ?? null;
$oldGammes[] = $financeItem['CA'] ?? null;
}
}
// --- Construction du tableau final cohérent ---
$oldDataFinance = [
'banques' => $oldBanques,
'zone_export' => $oldZones,
'pourc_export'=> $oldPourcentages,
'annee_ca' => $oldAnnees,
'gamme_ca' => $oldGammes,
];
$newDataFinance = [
'banques' => $banques,
'zone_export' => $zone_export,
'pourc_export' => $pourc_export,
'annee_ca' => $annee_ca,
'gamme_ca' => $gamme_ca,
];
// dd($firmeCRM,$newDataFinance);
// Synchroniser les tableaux vides entre old et new
// dd($oldDataFinance, $newDataFinance);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_finances',
$oldDataFinance,
$newDataFinance,
$codeFirme,
null,
'UPDATE'
);
$ficheCustomer =$this->firmeService->getFirmeByCodeCustomer($codeFirme);
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
return $this->render('customer/firme_up/home.html.twig', [
'firme' => $firme,
'codeFirme' => $codeFirme,
]);
}
// /**
// * @Route("/firme/up/{codeFirme}", name="app_firme_up")
// */
// public function firmeUp(string $codeFirme,Request $request,FirmeService $firmeService): Response
// {
// $data = $request->request->all();
// // dd($data);
// $pageSubtitle = 'Fiche client';
// $user = $this->getUser();
// if (!$user instanceof \App\Entity\User) {
// $this->addFlash('error', 'Veuillez vous connecter.');
// return $this->redirectToRoute('app_login');
// }
// // $codeFirme = $user->getCodeFirme();
// $codeFichier = $firmeService->getValidatedCodeFichier($codeFirme);
// $firme = $firmeService->getAllFirmeData($codeFirme);
// // dd($firme['produits']);
// if ($firme) {
// $firme['raison_social'] = $firme['firme']['rs_comp'];
// $firme['nature'] = $firme['firme']['code_nature'];
// $firme['description_activite'] = $firme['firme']['tp_48'];
// $firme['description_rub'] = $firme['firme']['tp_48'];
// $firme['activite'] = $firme['firme']['code_fichier'];
// $rsComp = trim($firme['firme']['rs_comp']);
// $mots = preg_split('/\s+/', $rsComp); // Séparer par les espaces multiples
// $nombreMots = count($mots);
// if ($nombreMots === 2) {
// $firme['nom'] = $mots[0];
// $firme['prenom'] = $mots[1];
// } elseif ($nombreMots >= 3) {
// $firme['nom'] = $mots[0] . ' ' . $mots[1];
// $firme['prenom'] = $mots[$nombreMots - 1];
// } else {
// // Cas limite : un seul mot
// $firme['nom'] = $rsComp;
// $firme['prenom'] = '';
// }
// $firme['description_activite'] = $firme['firme']['tp_48'];
// $firme['horaires'] = $firme['horaires'];
// $firme['pause'] = '[]';
// $firme['rubriques'] = json_decode($firme['rubriques'] ?? '[]', true);
// $firme['prestations'] = json_decode($firme['prestations'] ?? '[]', true);
// // $firme['produits'] = json_decode($firme['produits'] ?? '[]', true);
// $firme['produits'] = '';
// // $firme['marques'] = json_decode($firme['marques'] ?? '[]', true);
// $firme['marques'] ='';
// $firme['actes'] = json_decode($firme['actes'] ?? '[]', true);
// } else {
// // Par exemple, on passe un tableau vide au template
// $firme = [
// 'horaires' => [],
// 'pause' => [],
// 'rubriques' => [],
// 'prestations' => [],
// 'produits' => [],
// 'marques' => [],
// 'actes' => [],
// ];
// }
// $localisation['adresse'] = $firme['firme']['num_voie'] . ' ' . $firme['firme']['lib_voie'] . ' ' . $firme['firme']['comp_voie'] . '' . $firme['firme']['ville'] . ' - Maroc';
// // $localisation['adresse'] = $firme['firme']['adresse_ompic'];
// $localisation['ville'] = $firme['firme']['ville'];
// $localisation['code_ville'] = $firme['firme']['code_ville'];
// $localisation['quartier'] = $firme['firme']['quartier'];
// $localisation['code_quartier'] = $firme['firme']['code_quart'];
// $localisation['code_postal'] = $firme['firme']['code_postal'];
// $localisation['longitude'] = $firme['firme']['longitude'];
// $localisation['latitude'] = $firme['firme']['latitude'];
// // dd($localisation);
// $firme['firme']['date_creation'] = date('Y', strtotime($firme['firme']['date_creation']));
// $juridique['annee_creation'] = $firme['firme']['date_creation'];
// $juridique['effectif'] = $firme['firme']['eff_max'];
// $juridique['ice'] = $firme['firme']['ref_ann_leg'];
// $juridique['inp'] = $firme['firme']['inp'];
// $juridique['identifiant_fiscal'] = $firme['firme']['ident_fisc'];
// $juridique['rc'] = $firme['firme']['rc'];
// $juridique['ville_rc'] = $firme['firme']['code_ville_rc'];
// $juridique['forme_juridique'] = $firme['firme']['code_forme_jur'];
// $juridique['patente'] = $firme['firme']['patente'];
// $juridique['capital'] = $firme['firme']['cap'];
// // $finance['ANNEE_CA'] = $firme['firme']['ANNEE_CA'];
// // $finance['gamme_ca'] = $firme['firme']['gamme_ca'];
// $finance['banques'] = $firme['banques'];
// $finance['zone_export'] = $firme['zones'];
// $finance['pourc_export'] = $firme['pourcentages'];
// // $annee_ca_raw = $finance['annee_ca'] ?? '[]';
// // $gamme_ca_raw = $finance['gamme_ca'] ?? '[]';
// // if (is_string($annee_ca_raw) && str_starts_with(trim($annee_ca_raw), '[')) {
// // $anneesCA = json_decode($annee_ca_raw, true);
// // rsort($anneesCA, SORT_NUMERIC);
// // } else {
// // $anneesCA = [$annee_ca_raw];
// // rsort($anneesCA, SORT_NUMERIC);
// // }
// // if (is_string($gamme_ca_raw) && str_starts_with(trim($gamme_ca_raw), '[')) {
// // $gammesCA = json_decode($gamme_ca_raw, true);
// // } else {
// // $gammesCA = [$gamme_ca_raw];
// // }
// $zoneExport = json_decode($finance['zone_export'] ?? '[]', true);
// $pourcExport = json_decode($finance['pourc_export'] ?? '[]', true);
// // --- ANNEES ET GAMMES CA ---
// $anneesGammes = [];
// if (!empty($firme['finances'])) {
// foreach ($firme['finances'] as $f) {
// $anneesGammes[] = [
// 'annee_ca' => $f['ANNEE'] ?? null,
// 'gamme_ca' => $f['CA'] ?? null
// ];
// }
// // Trier les années décroissantes
// usort($anneesGammes, fn($a, $b) => $b['annee_ca'] <=> $a['annee_ca']);
// }
// $zonesExportList = [];
// if (is_array($zoneExport)) {
// foreach ($zoneExport as $index => $zone) {
// $zonesExportList[] = [
// 'zone' => $zone,
// 'pourcentage' => $pourcExport[$index] ?? null
// ];
// }
// }
// // $coordonnee = $firmeService->getCoordonneeByCodeFirme($codeFirme);
// $coordonnee['telefone'] = $firme['telefones'];
// $coordonnee['portable'] = $firme['portables'];
// $coordonnee['whatsapp'] = $firme['whatsapps'];
// $coordonnee['email'] = $firme['emails'];
// $coordonnee['site_web'] = $firme['sites'];
// $coordonnee['facebook'] = $firme['reseaux_sociaux']['facebook'] ?? null;
// $coordonnee['instagram'] = $firme['reseaux_sociaux']['instagram'] ?? null;
// $coordonnee['linkedin'] = $firme['reseaux_sociaux']['linkedin'] ?? null;
// // dd($coordonnee);
// if ($coordonnee) {
// $coordonnee['telefone'] = json_decode($firme['telefones'] ?? '[]', true);
// $coordonnee['portable'] = json_decode($firme['portables'] ?? '[]', true);
// $coordonnee['whatsapp'] = json_decode($firme['whatsapps'] ?? '[]', true);
// $coordonnee['email'] = json_decode($firme['emails'] ?? '[]', true);
// $coordonnee['site_web'] = json_decode($firme['sites'] ?? '[]', true);
// $coordonnee['facebook'] = json_decode($firme['reseaux_sociaux']['facebook'] ?? '[]', true);
// $coordonnee['instagram'] = json_decode($firme['reseaux_sociaux']['instagram'] ?? '[]', true);
// $coordonnee['linkedin'] = json_decode($firme['reseaux_sociaux']['linkedin'] ?? '[]', true);
// } else {
// // On initialise à vide pour éviter toute erreur dans le template
// $coordonnee = [
// 'telefone' => [],
// 'portable' => [],
// 'whatsapp' => [],
// 'email' => [],
// 'site_web' => [],
// 'facebook' => [],
// 'instagram' => [],
// 'linkedin' => [],
// ];
// }
// // dd($coordonnee);
// // $certification = $firmeService->getCertificationByFirme($codeFirme);
// $certification['certification'] = $firme['certifications']['CERTIFICATION'] ?? '';
// $certification['organisme'] = $firme['certifications']['AUT_CERTIFICATION'] ?? '';
// $certification['type'] = $firme['certifications']['NUM_CERTIFICATION'] ?? '';
// $certification['produit'] = $firme['certifications']['PRODUIT'] ?? '';
// $certification['date_expiration'] = $firme['certifications']['CERT_EXPIRATION'] ?? null;
// if (!empty($certification['date_expiration'])) {
// $date = new \DateTime($certification['date_expiration']);
// $certification['date_expiration'] = $date->format('Y-m-d');
// }
// $dirigeants = [];
// $codeToCivilite = [
// '01' => 'M',
// '02' => 'Mme',
// '04' => 'Dr',
// '18' => 'Pr', // Prof
// ];
// foreach ($firme['dirigeants'] as $dirigeant) {
// $portables = array_filter([
// $dirigeant['tel_1'] ?? null,
// $dirigeant['tel_2'] ?? null,
// ]);
// $dirigeants[] = [
// 'id' => $dirigeant['id'] ?? null,
// 'nom' => $dirigeant['nom'] ?? '',
// 'prenom' => $dirigeant['prenom'] ?? '',
// 'civilite' => $codeToCivilite[$dirigeant['civilite']] ?? '',
// 'fonction' => $dirigeant['code_fonction'] ?? '',
// 'email' => $dirigeant['email'] ?? '',
// 'portable' => implode(', ', $portables),
// 'whatsapp' => $dirigeant['whatsapp'] ?? '',
// ];
// }
// foreach ($dirigeants as &$d) {
// $p = $d['portable'];
// // Si c'est un JSON, décoder en tableau
// if ($p && $p[0] === '[') {
// $d['portables'] = json_decode($p, true);
// }
// // Si c'est un numéro simple, mettre dans un tableau
// elseif ($p) {
// $d['portables'] = [$p];
// }
// // Si vide
// else {
// $d['portables'] = [];
// }
// }
// $wproduits = $firme['activites_w13'];
// if (!$user) {
// $this->addFlash('error', 'Veuillez vous connecter.');
// return $this->redirectToRoute('app_login');
// }
// $roles = $user->getRoles();
// $villes =$this->localisationService->getAllVilles();
// $villesRC =$this->localisationService->getAllVillesRC();
// $rubriques =$this->rubriqueprestationService->getAllRubriques();
// $fonctions =$this->rubriqueprestationService->getAllFonctions();
// $natures =$this->rubriqueprestationService->getAllNatures();
// $fichiers =$this->rubriqueprestationService->getAllProfLib();
// $formeJur =$this->rubriqueprestationService->getAllFormeJur();
// $gammeCA =$this->rubriqueprestationService->getAllGammeCA();
// $produits =$this->rubriqueprestationService->getAllProduits();
// // $marques =$this->rubriqueprestationService->getAllMarques();
// $banques =$this->rubriqueprestationService->getAllBanques();
// $zonesExp = $this->localisationService->getAllZonesExport();
// $themes = $this->produitKompassService->getThemes();
// $ficheCustomer =$this->firmeService->getFirmeByCodeCustomer($codeFirme);
// $ficheAdmin =$this->firmeService->getFirmeByCodeAdmin($codeFirme);
// $ficheModerator =$this->firmeService->getFirmeByCodeAdmin($codeFirme);
// $codesProduits = $firme['produits'] ?? [];
// $kompassProduits = $firme['produits'];
// // // Transformer les codes en tableau associatif code => libellé
// // $firme['produits'] = $this->rubriqueprestationService->getLibellesProduits($codesProduits);
// // $codesMarques = $firme['marques'] ?? [];
// // // Transformer les codes en tableau associatif code => libellé
// // $firme['marques'] = $this->rubriqueprestationService->getLibellesMarques($codesMarques);
// // $codeFirme= $codeFirme;
// // dd($ficheCustomer);
// if (in_array('ROLE_CUSTOMER', $roles)) {
// // if (!$codeFichier) {
// return $this->render('customer/firme_up/index.html.twig', [
// 'ficheCustomer' => $ficheCustomer,
// 'villes' => $villes,
// 'villesRC' => $villesRC,
// 'rubriques' => $rubriques,
// 'fonctions' => $fonctions,
// 'natures' => $natures,
// 'fichiers' => $fichiers,
// 'formeJur' => $formeJur,
// 'banques' => $banques,
// 'zonesExp' => $zonesExp,
// 'themes' => $themes,
// 'codeFirme' => $codeFirme,
// 'wproduits' => $wproduits,
// 'firme' => $firme,
// 'localisation' => $localisation,
// 'coordonnee' => $coordonnee,
// 'juridique' => $juridique,
// 'finance' => $finance,
// 'pourcExport' => $pourcExport,
// 'anneesGammes' => $anneesGammes,
// 'gammeCA' => $gammeCA,
// 'zonesExportList' => $zonesExportList,
// 'dirigeants' => $dirigeants,
// 'certification' => $certification,
// 'codeFichier' => $codeFichier,
// 'produits' => $produits,
// // 'marques' => $marques,
// 'codeFirme' => $codeFirme,
// 'kompassProduits' => $kompassProduits,
// ]);
// }
// if (in_array('ROLE_ADMIN', $roles)) {
// return $this->render('admin/firme_up/index.html.twig', [
// 'ficheAdmin' => $ficheAdmin,
// 'pageSubtitle' => 'Fiche administrateur',
// 'firme' => $firme,
// // 'produits' => $produits,
// // 'marques' => $marques,
// 'villes' => $villes,
// 'villesRC' => $villesRC,
// 'rubriques' => $rubriques,
// 'fonctions' => $fonctions,
// 'natures' => $natures,
// 'fichiers' => $fichiers,
// 'formeJur' => $formeJur,
// 'banques' => $banques,
// 'zonesExp' => $zonesExp,
// 'themes' => $themes,
// 'wproduits' => $wproduits,
// 'localisation' => $localisation,
// 'coordonnee' => $coordonnee,
// 'juridique' => $juridique,
// 'finance' => $finance,
// 'pourcExport' => $pourcExport,
// 'anneesGammes' => $anneesGammes,
// 'gammeCA' => $gammeCA,
// 'zonesExportList' => $zonesExportList,
// 'dirigeants' => $dirigeants,
// 'certification' => $certification,
// 'codeFichier' => $codeFichier,
// 'codeFirme' => $codeFirme,
// ]);
// }
// if (in_array('ROLE_MODERATOR', $roles) || in_array('ROLE_MODERATOR', $roles)) {
// return $this->render('moderator/firme_up/index.html.twig', [
// 'ficheAdmin' => $ficheAdmin,
// 'pageSubtitle' => 'Fiche moderateur',
// ]);
// }
// $this->addFlash('error', 'Accès interdit.');
// return $this->redirectToRoute('app_customer');
// }
/**
* @Route("/firme/up/{codeFirme}", name="app_firme_up")
*/
public function firmeUp(string $codeFirme, Request $request, FirmeUpService $firmeUpService): Response
{
$user = $this->getUser();
if (!$user instanceof \App\Entity\User) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$data = $firmeUpService->prepareFirmeData($codeFirme);
// dd($data);
// dd($data['syncFlag']);
$roles = $user->getRoles();
if (in_array('ROLE_CUSTOMER', $roles)) {
return $this->render('customer/firme_up/index.html.twig', $data);
}
if (in_array('ROLE_ADMIN', $roles)) {
return $this->render('admin/firme_up/index.html.twig', $data);
}
if (in_array('ROLE_MODERATOR', $roles)) {
return $this->render('moderator/firme_up/index.html.twig', $data);
}
$this->addFlash('error', 'Accès interdit.');
return $this->redirectToRoute('app_customer');
}
/**
* @Route("/firmeUp/insert", name="insert_firmeUp", methods={"POST"})
*/
public function insertFirmeUp(Request $request,FirmeService $firmeService,ProduitKompassService $produitKompassService,ModificationLoggerService $ModificationLoggerService): Response
{
$codeFirme = $request->request->get('codeFirme');
$data = $request->request->all();
$firmeCRM = $this->firmeService->getAllFirmeData($codeFirme);
$kompassProduitsCRM = $firmeCRM['produits'];
$wproduitsCRM = $firmeCRM['activites_w13'];
$kompassProduitsUD = $this->produitKompassService->getProduitsKompass($codeFirme);
$wproduitsUD = $this->produitKompassService->getLienProduitW13($codeFirme);
// 🧩 Décodage JSON si nécessaire
if (is_string($kompassProduitsCRM)) {
$kompassProduitsCRM = json_decode($kompassProduitsCRM, true) ?? [];
}
if (is_string($wproduitsCRM)) {
$wproduitsCRM = json_decode($wproduitsCRM, true) ?? [];
}
if (is_string($kompassProduitsUD)) {
$kompassProduitsUD = json_decode($kompassProduitsUD, true) ?? [];
}
if (is_string($wproduitsUD)) {
$wproduitsUD = json_decode($wproduitsUD, true) ?? [];
}
// dd($wproduitsUD,$wproduitsCRM,$kompassProduitsUD ,$kompassProduitsCRM);
// ========================
// 🔹 Préparer les produits W13
// ========================
$oldWProduits = array_map(fn($p) => [
'code_produit' => $p['CODE_WF13'] ?? $p['code_produit'] ?? '',
// 'lib_produit' => $p['lib_produit'] ?? $p['LIB_PRODUIT'] ?? '',
'export' => $p['EXPORTATEUR'] ?? '',
'import' => $p['IMPORTATEUR'] ?? '',
'fda' => $p['FDA'] ?? '',
], $wproduitsCRM);
$newWProduits = array_map(fn($p) => [
'code_produit' => $p['CODE_PRODUIT_WF13'] ?? '',
// 'lib_produit' => $p['lib_produit'] ?? $p['LIB_PRODUIT'] ?? '',
'export' => $p['export'] ?? '',
'import' => $p['import'] ?? '',
'fda' => $p['fda'] ?? '',
], $wproduitsUD);
// 🔹 Logger les différences W13
$this->ModificationLoggerService->logComplexeDifferencesProduit(
'BD_EDICOM',
'updatedata',
'up_activite_WF13',
$oldWProduits,
$newWProduits,
$codeFirme,
null,
'UPDATE'
);
// ========================
// 🔹 Préparer les produits Kompass
// ========================
$oldKompass = array_map(fn($p) => [
'code_produit' => $p['code_produit'] ?? '',
// 'lib_produit' => $p['lib_produit'] ?? $p['LIB_PRODUIT'] ?? '',
'export' => $p['export'] ?? '',
'import' => $p['import'] ?? '',
'fda' => $p['fda'] ?? '',
], $kompassProduitsCRM);
$newKompass = array_map(fn($p) => [
'code_produit' => $p['code_produit'] ?? '',
// 'lib_produit' => $p['lib_produit'] ?? '',
'export' => $p['export'] ?? '',
'import' => $p['import'] ?? '',
'fda' => $p['fda'] ?? '',
], $kompassProduitsUD);
// 🔹 Logger les différences Kompass
$this->ModificationLoggerService->logComplexeDifferencesProduit(
'BD_EDICOM',
'updatedata',
'up_produits_kompass',
$oldKompass,
$newKompass,
$codeFirme,
null,
'UPDATE'
);
$firme = $firmeService->getFirmeByCodeAdmin($codeFirme);
$localisation = $firmeService->getLocalisationByCodeFirme($codeFirme);
$coordonnee = $firmeService->getCoordonneeByCodeFirme($codeFirme);
$finance = $firmeService->getFinanceByCodeFirme($codeFirme);
$juridique = $firmeService->getJuridiqueByCodeFirme($codeFirme);
$dirigeants = $firmeService->getDirigeantsByCodeFirme($codeFirme);
function isNotEmpty($value): bool {
if (is_array($value)) {
foreach ($value as $v) {
if (trim((string)$v) !== '') {
return true;
}
}
return false;
}
return trim((string)$value) !== '';
}
$jours = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'];
$horaires = [];
foreach ($jours as $jour) {
$isChecked = $request->request->get('checkbox_' . $jour);
if ($isChecked) {
$start = $request->request->get('start_' . $jour);
$end = $request->request->get('end_' . $jour);
$horaires[$jour] = [
'actif' => true,
'start' => $start,
'end' => $end
];
} else {
$horaires[$jour] = [
'actif' => false,
'start' => null,
'end' => null
];
}
}
// ➕ Traitement cohérent pour la pause
$pauseEnabled = $request->request->get('pause_enabled'); // existe uniquement si cochée
$pauseStart = $request->request->get('pause_start');
$pauseEnd = $request->request->get('pause_end');
$pause = [];
if ($pauseEnabled) {
$pause = [
'actif' => true,
'start' => $pauseStart,
'end' => $pauseEnd
];
} else {
$pause = [
'actif' => false,
'start' => null,
'end' => null
];
}
$horairesJson = json_encode($horaires);
$pauseJson = json_encode($pause);
$produits = $request->request->get('field29');
$positionsProduits = $request->request->get('Prfield31');
$marques = $request->request->get('field30');
$positionsMarques = $request->request->get('field31');
// Filtrer les produits avec valeurs non vides
$produitsAvecPositions = [];
if (!empty($produits) && is_array($produits)) {
foreach ($produits as $index => $produit) {
if (trim($produit) !== '') {
$produitsAvecPositions[] = [
'produit' => $produit,
'position' => $positionsProduits[$index] ?? null
];
}
}
}
// // Filtrer les marques avec valeurs non vides
$marquesAvecPositions = [];
if (!empty($marques) && is_array($marques)) {
foreach ($marques as $index => $marque) {
if (trim($produit) !== '') {
$marquesAvecPositions[] = [
'marque' => $marque,
'position' => $positionsMarques[$index] ?? null
];
}
}
}
//up_firme
$raison_social = $request->request->get('field1');
$nature = $request->request->get('field2');
$horaires = $horairesJson;
$pause = $pauseJson;
$rubriques = $this->filterJsonField($request->request->all('field26'));
$prestations = $this->filterJsonField($request->request->all('field28'));
// Filtrer la description_rub
$description_rub = trim($request->request->get('field27') ?? '');
// Encodage final
$produits = !empty($produitsAvecPositions) ? json_encode($produitsAvecPositions) : null;
$marques = !empty($marquesAvecPositions) ? json_encode($marquesAvecPositions) : null;
// $produits = $this->filterJsonField($request->request->all('field29'));;
// $marques = $this->filterJsonField($request->request->all('field30'));;
$validation = $request->request->get('validation') ?? null;
$date_creation = new \DateTime();
$date_validation = $validation === '1' ? new \DateTime() : null;
$pl_or_societe = "S";
if (trim($codeFirme) !== '' || trim($raison_social) !== '' || trim($nature) !== '' || $horaires !== '[]' || $pause !== '[]' || $rubriques !== null ||$description_rub !== '' || $prestations !== null || !empty($produits) || !empty($marques))
{
if ($firme) {
$etat='U';
$synchroniser="0";
$this->firmeService->updateFirme(
null,
$codeFirme,
$raison_social,
$nature,
$horairesJson,
$pauseJson,
$rubriques,
$description_rub,
$prestations,
$produits,
$marques,
$validation,
$date_validation,
null, // nom
null, // prenom
null, // actes
null, // activite
null, // description
$pl_or_societe,
$etat,
$synchroniser
);
} else {
$etat='C';
$synchroniser="0";
$this->firmeService->insererFirme(
null,
$codeFirme,
$raison_social,
$nature,
$horairesJson,
$pauseJson,
$rubriques,
$description_rub,
$prestations,
$produits,
$marques,
$validation,
$date_validation,
$date_creation,
null,
null,
null,
null,
null,
$pl_or_societe,
$etat,
$synchroniser
);
}
}
// les données anciennes
$oldDataFirme = [
'raison_social' => $firmeCRM['firme']['rs_comp'] ,
'nature' => $firmeCRM['firme']['code_nature'],
'rubriques' => $firmeCRM['rubriques'],
'description_rub' => $firmeCRM['firme']['tp_48'],
'prestations' => $firmeCRM['prestations'],
'produits' => $produits,
'marques' => $marques,
'horaires' => json_encode( $firmeCRM['horaires'])
];
// dd($firmeCRM);
// lesdonnées nouvelles (après modification)
$newDataFirme = [
'raison_social' => $raison_social,
'nature' => $nature,
'rubriques' => $rubriques,
'description_rub' => $description_rub,
'prestations' => $prestations,
'produits' => $produits,
'marques' => $marques,
'horaires' => $horaires,
];
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_firme',
$oldDataFirme,
$newDataFirme,
$codeFirme,
null,
'UPDATE'
);
// dd($oldDataFirme,$newDataFirme);
//up_localisations
$adresse = $request->request->get('field3');
$code_ville = $request->request->get('field4');
$nom_ville = $this->firmeService->getNomVille($code_ville);
$code_quartier = $request->request->get('field5');
$nom_quartier = $this->firmeService->getNomQuartier($code_quartier);
$code_postal = $request->request->get('field6');
$longitude = $request->request->get('field11');
$latitude = $request->request->get('field12');
if (trim($adresse) !== '' || trim($code_ville) !== '' || trim($nom_ville) !== '' || trim($code_quartier) !== '' || trim($nom_quartier) !== '' || trim($code_postal) !== '' || trim($longitude) !== '' || trim($latitude) !== '')
{
if ($localisation) {
$this->firmeService->updateLocalisation(null,$codeFirme, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
} else {
$this->firmeService->insererLocalisation(null,$codeFirme, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
}
}
// les données anciennes
$oldDataLocalisation = [
'adresse' => $firmeCRM['firme']['num_voie'] . ' ' . $firmeCRM['firme']['lib_voie'] . ' ' . $firmeCRM['firme']['comp_voie'] . '' . $firmeCRM['firme']['ville'] . ' - Maroc',
'code_ville' => $firmeCRM['firme']['code_ville'],
'ville' => $firmeCRM['firme']['ville'],
'code_quartier' => $firmeCRM['firme']['code_quart'],
'quartier' => $firmeCRM['firme']['quartier'],
'code_postal' => $firmeCRM['firme']['code_postal'],
'longitude' => $firmeCRM['firme']['longitude'],
'latitude' => $firmeCRM['firme']['latitude'],
];
// dd($firmeCRM);
// lesdonnées nouvelles (après modification)
$newDataLocalisation = [
'adresse' => $adresse,
'code_ville' => $code_ville,
'ville' => $nom_ville,
'code_quartier' => $code_quartier,
'quartier' => $nom_quartier,
'code_postal' => $code_postal,
'longitude' => $longitude,
'latitude' => $latitude,
];
// dd($oldDataLocalisation, $newDataLocalisation);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_localisations',
$oldDataLocalisation,
$newDataLocalisation,
$codeFirme,
null,
'UPDATE'
);
//up_coordonnées
$telefone = $this->filterJsonField($request->request->all('field7'));
$portable = $this->filterJsonField($request->request->all('field8'));
$whatsapp = $this->filterJsonField($request->request->all('wfield8'));
$email = $this->filterJsonField($request->request->all('field9'));
$site_web = $this->filterJsonField($request->request->all('field10'));
$facebook = $this->filterJsonField($request->request->all('facebook'));
$instagram = $this->filterJsonField($request->request->all('instagram'));
$linkedin = $this->filterJsonField($request->request->all('linkedin'));
// Puis tu peux appeler ton service
if ($telefone !== null || $portable !== null || $whatsapp !== null || $email !== null || $site_web !== null || $facebook !== null || $instagram !== null || $linkedin !== null) {
if ($coordonnee) {
$this->firmeService->updateCoordonnees(null,$codeFirme, $telefone, $portable, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
} else {
$this->firmeService->insererCoordonnees(null,$codeFirme, $telefone, $portable, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
}
}
// les données anciennes
$oldDataCoordonnee = [
'telefone' => $firmeCRM['telefones'] ?? [],
'portable' => $firmeCRM['portables'] ?? [],
'whatsapp' => $firmeCRM['whatsapps'] ?? [],
'email' => $firmeCRM['emails'] ?? [],
'site_web' => $firmeCRM['sites'] ?? [],
'facebook' => $firmeCRM['reseaux_sociaux']['facebook'] ?? null,
'instagram' => $firmeCRM['reseaux_sociaux']['instagram'] ?? null,
'linkedin' => $firmeCRM['reseaux_sociaux']['linkedin'] ?? null,
];
// lesdonnées nouvelles (après modification)
$newDataCoordonnee = [
'telefone' => $telefone,
'portable' => $portable,
'whatsapp' => $whatsapp,
'email' => $email,
'site_web' => $site_web,
'facebook' => $facebook,
'instagram' => $instagram,
'linkedin' => $linkedin,
];
// Synchroniser les tableaux vides entre old et new
foreach ($oldDataCoordonnee as $champ => $ancienneValeur) {
// Si l’ancienne valeur est un tableau vide
if (is_array($ancienneValeur) && empty($ancienneValeur)) {
$newDataCoordonnee[$champ] = [];
}
// // Si les deux sont des chaînes JSON vides ("[]")
// if ($ancienneValeur === '[]') {
// $newDataCoordonnee[$champ] = '[]';
// }
}
// dd($oldDataCoordonnee, $newDataCoordonnee);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_coordonnees',
$oldDataCoordonnee,
$newDataCoordonnee,
$codeFirme,
null,
'UPDATE'
);
//up_juridiques
$forme_juridique = $request->request->get('field13');
$annee_creation = $request->request->get('field14');
// dd($annee_creation);
$effectif = $request->request->get('field15');
$ice = $request->request->get('field17');
$identifiant_fiscal = $request->request->get('field18');
$patente = $request->request->get('field19');
$capital = $request->request->get('field16');
$inp = $request->request->get('PLfield31');
$rc = $request->request->get('field20');
$ville_rc = $request->request->get('field21');
$effectif = trim($effectif) !== '' ? (int)$effectif : null;
$capital = trim($capital) !== '' ? (int)$capital : null;
$user_id = null;
// dd($forme_juridique);
if (trim($forme_juridique) !== '' || trim($annee_creation) !== '' || trim($effectif) !== '' || trim($capital) !== '' || trim($ice) !== '' || trim($identifiant_fiscal) !== '' || trim($patente) !== '' || trim($rc) !== '' || trim($ville_rc) !== '' || trim($inp) !== '') {
if ($juridique) {
$this->firmeService->updateJuridiques( $user_id,$codeFirme,$forme_juridique,$annee_creation,$effectif,$capital,$ice,null,$patente,$rc,$ville_rc,$identifiant_fiscal);
} else {
$this->firmeService->insererJuridiques( $user_id,$codeFirme,$forme_juridique,$annee_creation,$effectif,$capital,$ice,null,$patente,$rc,$ville_rc,$identifiant_fiscal);
}
}
$effectif = trim($effectif) !== '' ? (string)$effectif : null;
$capital = trim($capital) !== '' ? (string)$capital : null;
$firmeCRM['firme']['date_creation'] = date('Y', strtotime($firmeCRM['firme']['date_creation']));
// les données anciennes
$oldDataJuridique = [
'annee_creation' =>$firmeCRM['firme']['date_creation'],
'effectif' =>$firmeCRM['firme']['eff_max'],
'ice' => $firmeCRM['firme']['ref_ann_leg'],
'inp' =>$firmeCRM['firme']['inp'],
'identifiant_fiscal' =>$firmeCRM['firme']['ident_fisc'],
'ville_rc' =>$firmeCRM['firme']['code_ville_rc'],
'rc' =>$firmeCRM['firme']['rc'],
'forme_juridique' =>$firmeCRM['firme']['code_forme_jur'],
'patente' => $firmeCRM['firme']['patente'],
'capital' => $firmeCRM['firme']['cap'],
];
// lesdonnées nouvelles (après modification)
$newDataJuridique = [
'annee_creation' => $annee_creation,
'effectif' => $effectif,
'ice' => $ice,
'inp' => $inp,
'identifiant_fiscal' => $identifiant_fiscal,
'ville_rc' => $ville_rc,
'rc' => $rc,
'forme_juridique' => $forme_juridique,
'patente' => $patente,
'capital' => $capital,
];
// dd($oldDataJuridique, $newDataJuridique);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_juridiques',
$oldDataJuridique,
$newDataJuridique,
$codeFirme,
null,
'UPDATE'
);
//up_finances
// Nettoyage des champs
$banques = $this->cleanValue($request->request->get('field34'));
$zone_export = $this->cleanValue($request->request->get('field35'));
$pourc_export = $this->cleanValue($request->request->get('field36'));
$annee_ca = $this->cleanValue($request->request->get('field32', []));
$gamme_ca = $this->cleanValue($request->request->get('field33', []));
// Forcer en tableau si ce n’est pas déjà un
$annee_ca = is_array($annee_ca) ? $annee_ca : [$annee_ca];
$gamme_ca = is_array($gamme_ca) ? $gamme_ca : [$gamme_ca];
$anneesGammes = [];
foreach ($annee_ca as $i => $annee) {
if (!empty($annee) && isset($gamme_ca[$i]) && !empty($gamme_ca[$i])) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gamme_ca[$i],
];
}
}
// Insertion ou mise à jour si au moins un champ est renseigné
if ($annee_ca !== null || $gamme_ca !== null || $banques !== null || $zone_export !== null || $pourc_export !== null) {
if ($finance) {
$firmeService->updateFinances(null,$codeFirme, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
} else {
$firmeService->insererFinances(null,$codeFirme, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
}
}
$oldBanques = $firmeCRM['banques'] ?? [];
if (is_string($oldBanques)) {
$decoded = json_decode($oldBanques, true);
$oldBanques = json_last_error() === JSON_ERROR_NONE ? $decoded : [$oldBanques];
}
$oldZones = [];
$oldPourcentages = [];
if (!empty($firmeCRM['exports'])) {
foreach ($firmeCRM['exports'] as $exp) {
$oldZones[] = $exp['CODE_ZONE'] ?? null;
$oldPourcentages[] = $exp['TAUX'] ?? null;
}
}
$oldAnnees = [];
$oldGammes = [];
if (!empty($firmeCRM['finances'])) {
foreach ($firmeCRM['finances'] as $financeItem) {
$oldAnnees[] = $financeItem['ANNEE'] ?? null;
$oldGammes[] = $financeItem['CA'] ?? null;
}
}
// --- Construction du tableau final cohérent ---
$oldDataFinance = [
'banques' => $oldBanques,
'zone_export' => $oldZones,
'pourc_export'=> $oldPourcentages,
'annee_ca' => $oldAnnees,
'gamme_ca' => $oldGammes,
];
$newDataFinance = [
'banques' => $banques,
'zone_export' => $zone_export,
'pourc_export' => $pourc_export,
'annee_ca' => $annee_ca,
'gamme_ca' => $gamme_ca,
];
// dd($firmeCRM,$newDataFinance);
// Synchroniser les tableaux vides entre old et new
// dd($oldDataFinance, $newDataFinance);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_finances',
$oldDataFinance,
$newDataFinance,
$codeFirme,
null,
'UPDATE'
);
//up_dirigeants
$noms = $request->request->get('field22', []);
$prenoms = $request->request->get('field23', []);
$civilites = $request->request->get('civilite', []);
$fonctionCodes = $request->request->get('field24', []);
$portables = $request->request->get('field25', []);
$whatsapps = $request->request->get('whatsappd', []);
$emails = $request->request->get('emaild', []);
$ids = $request->request->get('id', []);
$deletedRaw = $request->request->get('deleted_dirigeants', '');
// Convertir en tableau
$deletedIds = [];
if (is_string($deletedRaw) && $deletedRaw !== '') {
$deletedIds = explode(',', $deletedRaw);
}
// dd($deletedIds); // Vérifier si on reçoit bien les IDs supprimés
// Supprimer les dirigeants supprimés
if (!empty($deletedIds)) {
$firmeService->supprimerDirigeants($deletedIds);
}
$userId = null;
// Synchroniser les autres (insert/update)
$this->firmeService->synchroniserDirigeants($ids, $noms, $prenoms, $civilites, $fonctionCodes, $portables, $whatsapps, $emails, $codeFirme, $userId);
$dirigeantsCRM = $firmeCRM['dirigeants'];
// dd($dirigeantsCRM);
// Table de correspondance code → civilité
$codeToCivilite = [
'01' => 'M',
'02' => 'Mme',
'04' => 'Dr',
'18' => 'Pr',
];
// =========================
// Anciennes données (depuis CRM)
// =========================
// ============================
// 🧩 Préparation des anciennes données (depuis le CRM)
// ============================
$oldDataDirigeant = [];
foreach ($dirigeantsCRM as $dir) {
$civilite = $dir['civilite'] ?? '';
// 🔹 Traduction du code vers texte si nécessaire
if (isset($codeToCivilite[$civilite])) {
$civilite = $codeToCivilite[$civilite];
}
$row = [
'civilite' => $civilite,
'nom' => trim($dir['nom'] ?? ''),
'prenom' => trim($dir['prenom'] ?? ''),
'fonction' => trim($dir['code_fonction'] ?? ''),
'portable' => json_encode(array_filter([$dir['tel_1'] ?? '', $dir['tel_2'] ?? '']), JSON_UNESCAPED_UNICODE),
'whatsapp' => '', // champ inexistant côté CRM
'email' => trim($dir['email'] ?? ''),
];
// ✅ Clé unique : nom_prenom_email
$key = strtolower(trim(($row['nom'] ?? '') . '_' . ($row['prenom'] ?? '') . '_' . ($row['email'] ?? '')));
$oldDataDirigeant[$key] = $row;
}
// ============================
// 🧩 Préparation des nouvelles données (formulaire soumis)
// ============================
$newDataDirigeant = [];
for ($i = 0; $i < count($noms); $i++) {
$portableValue = $portables[$i] ?? '';
if (is_array($portableValue)) {
$portableValue = json_encode(array_map('trim', $portableValue), JSON_UNESCAPED_UNICODE);
} else {
$portableValue = trim($portableValue);
}
$row = [
'civilite' => trim($civilites[$i] ?? ''),
'nom' => trim($noms[$i] ?? ''),
'prenom' => trim($prenoms[$i] ?? ''),
'fonction' => trim($fonctionCodes[$i] ?? ''),
'portable' => $portableValue,
'whatsapp' => trim($whatsapps[$i] ?? ''),
'email' => trim($emails[$i] ?? ''),
];
// ✅ Même clé unique
$key = strtolower(trim(($row['nom'] ?? '') . '_' . ($row['prenom'] ?? '') . '_' . ($row['email'] ?? '')));
$newDataDirigeant[$key] = $row;
}
// ============================
// 🧠 Journalisation (comparaison des deux tableaux)
// ============================
$this->ModificationLoggerService->logComplexeDifferences(
'BD_EDICOM',
'updatedata',
'up_dirigeants',
$oldDataDirigeant,
$newDataDirigeant,
$codeFirme,
$userId,
'UPDATE'
);
// up_certifications
// Récupération des champs du formulaire
$certification = $request->request->get('certification');
$organisme = $request->request->get('organisme');
$type = $request->request->get('type_certification');
$produit = $request->request->get('produit_certification');
$date_expiration = $request->request->get('date_expiration');
// Vérifier s’il y a une certification existante pour ce code_firme
$certificationExist = $this->firmeService->getCertificationByFirme($codeFirme);
// dd($certificationExist);
// Vérifier s'il y a des données remplies
if (
trim($certification) !== '' || trim($organisme) !== '' ||
trim($type) !== '' || trim($produit) !== '' || trim($date_expiration) !== ''
) {
if ($certificationExist) {
// faire update
$this->firmeService->updateCertification(
null,
$codeFirme,
$certification,
$organisme,
$type,
$produit,
$date_expiration
);
} else {
// faire insert
$this->firmeService->insererCertification(
null,
$codeFirme,
$certification,
$organisme,
$type,
$produit,
$date_expiration
);
}
}
$certifications = $firmeCRM['certifications'] ?? [];
$oldDataCertification = [
'certification' => $certifications['CERTIFICATION'] ?? '',
'organisme' => $certifications['AUT_CERTIFICATION'] ?? '',
'type'=> $certifications['NUM_CERTIFICATION'] ?? '',
'produit' => $certifications['PRODUIT'] ?? '',
'date_expiration' => $certifications['CERT_EXPIRATION'] ?? '',
];
$newDataCertification = [
'certification' => $certification,
'organisme' => $organisme,
'type'=> $type,
'produit' => $produit,
'date_expiration' => $date_expiration,
];
// dd($newDataCertification, $oldDataCertification);
$this->ModificationLoggerService->logDifferences(
'BD_EDICOM',
'updatedata',
'up_certifications',
$oldDataCertification,
$newDataCertification,
$codeFirme,
null,
'UPDATE'
);
$ficheCustomer =$this->firmeService->getFirmeByCodeCustomer($codeFirme);
$natures =$this->rubriqueprestationService->getAllNatures();
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
$wproduits = $this->produitKompassService->getLienProduitW13($codeFirme);
$user = $this->getUser();
if (in_array('ROLE_ADMIN', $user->getRoles()) || in_array('ROLE_MODERATOR', $user->getRoles())) {
return $this->redirectToRoute('fiches');
} elseif (in_array('ROLE_CUSTOMER', $user->getRoles())) {
return $this->render('customer/firme_up/home.html.twig', [
'firme' => $firme,
'codeFirme' => $codeFirme,
]);
}
}
// /**
// * @Route("/firmeUp/insert", name="insert_firmeUp", methods={"POST"})
// */
// public function insertFirmeUp(Request $request, FirmeService $firmeService, FirmeUpService $firmeUpService): Response
// {
// $user = $this->getUser();
// if (!$user instanceof \App\Entity\User) {
// $this->addFlash('error', 'Veuillez vous connecter.');
// return $this->redirectToRoute('app_login');
// }
// $clientData = $request->request->all();
// $codeFirme = $clientData['codeFirme'] ?? null;
// // Appel du service principal
// $firmeUpService->insertFirmeUp($clientData);
// // Vérification du rôle utilisateur
// if (in_array('ROLE_ADMIN', $user->getRoles()) || in_array('ROLE_MODERATOR', $user->getRoles())) {
// return $this->redirectToRoute('fiches');
// } elseif (in_array('ROLE_CUSTOMER', $user->getRoles())) {
// $firme = $firmeService->getFirmeByCodeAdmin($codeFirme);
// return $this->render('customer/firme_up/home.html.twig', [
// 'firme' => $firme,
// 'codeFirme' => $codeFirme,
// ]);
// }
// return new JsonResponse(['status' => 'success']);
// }
/**
* @Route("/fiches", name="fiches")
*/
public function toutesLesFiches(): Response
{
$user = $this->getUser();
if (!$user instanceof \App\Entity\User) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$fiches = $this->firmeService->getAllFirmes();
// Décoder le JSON dans chaque fiche pour avoir un tableau de codes rubriques
foreach ($fiches as &$fiche) {
if (!empty($fiche['rubriques'])) {
$fiche['rubriques_decoded'] = json_decode($fiche['rubriques'], true); // tableau de codes rubriques
} else {
$fiche['rubriques_decoded'] = [];
}
}
// unset($fiche); // pour éviter effets secondaires
// $fiche['actes'] = json_decode($fiche['actes'], true);
// dd($fiche['actes']);
// Récupération de la liste complète code => libellé rubriques
$rubriquesRaw = $this->rubriqueprestationService->getAllRubriques();
$rubriques = [];
foreach ($rubriquesRaw as $r) {
$rubriques[$r['Code_Rubrique']] = $r['Lib_Rubrique'];
}
foreach ($fiches as &$fiche) {
if (!empty($fiche['actes']) && is_string($fiche['actes'])) {
$decoded = json_decode($fiche['actes'], true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
$fiche['actes_decoded_array'] = $decoded;
} else {
$fiche['actes_decoded_array'] = [];
}
} else {
$fiche['actes_decoded_array'] = [];
}
}
// dd($fiches);
$pageSubtitle = 'Liste des fiches firmes';
if (in_array('ROLE_ADMIN', $user->getRoles())) {
return $this->render('admin/firme_up/list.html.twig', [
'pageSubtitle' => 'Liste des fiches firmes','rubriques' => $rubriques,
'fiches' => $fiches,
'rubriques' => $rubriques,
]);
} elseif (in_array('ROLE_MODERATOR', $user->getRoles())) {
return $this->render('moderator/firme_up/list.html.twig', [
'pageSubtitle' => 'Liste des fiches firmes',
'fiches' => $fiches,
]);
}
}
/**
* @Route("/nonfiches", name="nonfiches")
*/
public function toutesLesNonFiches(): Response
{
$fiches = $this->firmeService->getAllNonFirmes();
$user = $this->getUser();
if (!$user instanceof \App\Entity\User) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$pageSubtitle = 'Liste des fiches firmes';
foreach ($fiches as &$fiche) {
if (!empty($fiche['rubriques'])) {
$fiche['rubriques_decoded'] = json_decode($fiche['rubriques'], true); // tableau de codes rubriques
} else {
$fiche['rubriques_decoded'] = [];
}
}
foreach ($fiches as &$fiche) {
if (!empty($fiche['actes']) && is_string($fiche['actes'])) {
$decoded = json_decode($fiche['actes'], true);
if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
$fiche['actes_decoded_array'] = $decoded;
} else {
$fiche['actes_decoded_array'] = [];
}
} else {
$fiche['actes_decoded_array'] = [];
}
}
if (in_array('ROLE_ADMIN', $user->getRoles())) {
return $this->render('admin/nonFirme_up/list.html.twig', [
'pageSubtitle' => 'Liste des fiches non firmes',
'fiches' => $fiches,
]);
} elseif (in_array('ROLE_MODERATOR', $user->getRoles())) {
return $this->render('moderator/nonFirme_up/list.html.twig', [
'pageSubtitle' => 'Liste des fiches non firmes',
'fiches' => $fiches,
]);
}
}
/**
* @Route("/firme/delete/{codeFirme}", name="app_firme_delete")
*/
public function deleteFirme(Request $request, string $codeFirme): Response
{
$user = $this->getUser();
if (!$user) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$roles = $user->getRoles();
if (!in_array('ROLE_ADMIN', $roles) && !in_array('ROLE_MODERATOR', $roles)) {
$this->addFlash('error', 'Accès interdit.');
return $this->redirectToRoute('lu');
}
try {
$this->firmeService->deleteFirme($codeFirme);
$this->addFlash('success', 'Fiche supprimée avec succès.');
} catch (\Exception $e) {
$this->addFlash('error', 'Erreur lors de la suppression de la fiche.');
}
return $this->redirectToRoute('fiches');
}
/**
* @Route("/nonFirme/delete/{userId}", name="app_nonFirme_delete")
*/
public function deleteNonFirme(Request $request, string $userId, FirmeService $firmeService): Response
{
$user = $this->getUser();
$firme = $firmeService->getFirmeByUserId($userId);
if (!$user) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$roles = $user->getRoles();
if (!in_array('ROLE_ADMIN', $roles) && !in_array('ROLE_MODERATOR', $roles)) {
$this->addFlash('error', 'Accès interdit.');
return $this->redirectToRoute('app_customer');
}
try {
$this->firmeService->deleteNonFirme($userId);
$this->addFlash('success', 'Fiche supprimée avec succès.');
} catch (\Exception $e) {
$this->addFlash('error', 'Erreur lors de la suppression de la fiche.');
}
return $this->redirectToRoute('nonfiches');
}
/**
* @Route("/api/quartiers/{codeVille}", name="api_quartiers")
*/
public function getQuartiers(string $codeVille): JsonResponse
{
$quartiers = $this->localisationService->getQuartiersByVille($codeVille);
return $this->json($quartiers);
}
/**
* @Route("/api/code-postal/{codeQuartier}", name="api_code_postal")
*/
public function getCodePostale(string $codeQuartier): JsonResponse
{
// dd($codeQuartier);
$codePostale = $this->localisationService->getCodePostalByQuartier($codeQuartier);
return $this->json($codePostale);
}
/**
* @Route("/rebrique/productSearch", name="app_reb_productSearch")
*/
public function productSearch(Request $request, ProduitKompassService $rebriqueService): Response
{
$product = $request->get('product');
return $this->json($rebriqueService->produitWSearch($product));
}
/**
* @Route("/rebrique/productKompassSearch", name="app_kompass_productSearch")
*/
public function productKompassSearch(Request $request, ProduitKompassService $rebriqueService): Response
{
$product = $request->get('product');
return $this->json($rebriqueService->productKompassSearch($product));
}
/**
* @Route("/rebrique/secteurs", name="app_reb_secteurs")
*/
public function getSecteurs(Request $request, ProduitKompassService $rebriqueService): Response
{
$codeTheme = $request->get('codeTheme');
$codeSecteur = $request->get('codeSecteur');
$codeBranch = $request->get('codeBranch');
if($codeTheme){
return $this->json($rebriqueService->getSecteur($codeTheme));
}
else if($codeBranch){
return $this->json($rebriqueService->getProductBranches($codeBranch));
} else{
return $this->json($rebriqueService->getBranches($codeSecteur));
}
}
/**
* @Route("/firme/wproduitAjouter", name="app_wproduitAjouter")
*/
// public function wproduitAjouter(Request $request, ProduitKompassService $firmesService): Response
// {
// $productsData = json_decode($request->get('productsData'), true);
// $product = $firmesService->wproduitAjouter($productsData);
// return $this->json('');
// }
/**
* @Route("/firme/wproduitAjouter", name="wproduit_ajouter", methods={"POST"})
*/
public function wproduitAjouter(Request $request, ProduitKompassService $ProduitKompassService): JsonResponse
{
$json = $request->request->get('productsData');
$productsData = json_decode($json, true);
// dd($productsData);
if (!is_array($productsData)) {
return new JsonResponse(['status' => 'error', 'message' => 'Format de données invalide'], 400);
}
$userId = null;
$success = $ProduitKompassService->wproduitAjouter($productsData, $userId);
return new JsonResponse(['status' => $success ? 'ok' : 'error']);
}
/**
* @Route("/firme/wproduitSupprimer", name="app_wproduitSupprimer", methods={"POST"})
*/
public function wproduitSupprimer(Request $request, ProduitKompassService $firmesService): Response
{
// Récupérer les IDs envoyés en JSON
$productsData = json_decode($request->getContent(), true);
if (empty($productsData)) {
return $this->json(['error' => 'Aucun produit sélectionné pour suppression.'], 400);
}
$result = $firmesService->wproduitSupprimer($productsData);
if ($result) {
return $this->json(['success' => 'Produits supprimés avec succès.']);
}
return $this->json(['error' => 'Erreur lors de la suppression.'], 500);
}
/**
* @Route("/firme/wproduitAjouterUserId", name="wproduit_ajouter_user", methods={"POST"})
*/
public function wproduitAjouterUserId(Request $request, ProduitKompassService $ProduitKompassService): JsonResponse
{
// Récupération de toutes les données envoyées par AJAX
$json = $request->request->all();
// Récupération du tableau JSON des produits
$productsData = json_decode($json['productsData'] ?? '[]', true);
// Récupération du user_id envoyé
$userId = $json['user_id'] ?? null;
// Appel du service avec le userId
$success = $ProduitKompassService->wproduitAjouterUserId($productsData, $userId);
return new JsonResponse(['status' => $success ? 'ok' : 'error']);
}
/**
* @Route("/firme/wproduitSupprimerUser", name="app_wproduitSupprimerUser", methods={"POST"})
*/
public function wproduitSupprimerUser(Request $request, ProduitKompassService $firmesService): Response
{
// Récupérer les IDs envoyés en JSON
$productsData = json_decode($request->getContent(), true);
if (empty($productsData)) {
return $this->json(['error' => 'Aucun produit sélectionné pour suppression.'], 400);
}
$result = $firmesService->wproduitSupprimerUser($productsData);
if ($result) {
return $this->json(['success' => 'Produits supprimés avec succès.']);
}
return $this->json(['error' => 'Erreur lors de la suppression.'], 500);
}
/**
* @Route("/reload-table", name="reload_table", methods={"GET"})
*/
public function reloadTable(Request $request, ProduitKompassService $firmesService): Response
{
$codeFirme = $request->query->get('codeFirme');
// dd($codeFirme);
$wproduits = $firmesService->getLienProduitW13($codeFirme);
return new JsonResponse($wproduits);
}
/**
* @Route("/reload-usertable", name="reload_user_table", methods={"GET"})
*/
public function reloadUserTable(Request $request, ProduitKompassService $firmesService): Response
{
// Récupérer le userId envoyé en GET
$userId = $request->query->get('userId');
if (!$userId) {
return new JsonResponse(['error' => 'userId manquant'], 400);
}
// Appel au service pour récupérer les produits liés à cet utilisateur
$wproduits = $firmesService->getLienProduitW13ByUserId($userId);
return new JsonResponse($wproduits);
}
/**
* @Route("/reload-kompasstable", name="reload_kompasstable", methods={"GET"})
*/
public function reloadKompassTable(Request $request, ProduitKompassService $firmesService): Response
{
$codeFirme = $request->query->get('codeFirme');
// dd($codeFirme);
$kproduits = $firmesService->getProduitsKompass($codeFirme);
return new JsonResponse($kproduits);
}
/**
* @Route("/reload-userkompasstable", name="reload_user_kompasstable", methods={"GET"})
*/
public function reloadUserKompassTable(Request $request, ProduitKompassService $firmesService): Response
{
$userId = $request->query->get('userId'); // 🔹 on récupère bien "userId"
$kproduits = $firmesService->getProduitsKompassUserId($userId);
return new JsonResponse($kproduits);
}
/**
* @Route("/firme/kproduitAjouter", name="kproduit_ajouter", methods={"POST"})
*/
public function kproduitAjouter(Request $request, ProduitKompassService $produitKompassService): JsonResponse
{
$productsData = json_decode($request->request->get('productsData'), true);
// dd($productsData);
if (!is_array($productsData)) {
return new JsonResponse(['status' => 'error', 'message' => 'Format de données invalide'], 400);
}
$userId = null;
$success = $produitKompassService->kproduitAjouter($productsData, $userId);
// dd($success);
return new JsonResponse(['status' => $success ? 'ok' : 'error']);
}
/**
* @Route("/firme/kproduitSupprimer", name="app_kproduitSupprimer", methods={"POST"})
*/
public function kproduitSupprimer(Request $request, ProduitKompassService $firmesService): Response
{
// Récupérer les IDs envoyés en JSON
$productsData = json_decode($request->getContent(), true);
// dd($productsData);
if (empty($productsData)) {
return $this->json(['error' => 'Aucun produit sélectionné pour suppression.'], 400);
}
$result = $firmesService->kproduitSupprimer($productsData);
if ($result) {
return $this->json(['success' => 'Produits supprimés avec succès.']);
}
return $this->json(['error' => 'Erreur lors de la suppression.'], 500);
}
/**
* @Route("/firme/kproduitAjouterUserId", name="kproduit_ajouter_user", methods={"POST"})
*/
public function kproduitAjouterUserId(Request $request, ProduitKompassService $ProduitKompassService): JsonResponse
{
// Récupération de toutes les données envoyées par AJAX
$json = $request->request->all();
// Récupération du tableau JSON des produits
$productsData = json_decode($json['productsData'] ?? '[]', true);
// Récupération du user_id envoyé
$userId = $json['user_id'] ?? null;
// Appel du service avec le userId
$success = $ProduitKompassService->kproduitAjouterUserId($productsData, $userId);
return new JsonResponse(['status' => $success ? 'ok' : 'error']);
}
/**
* @Route("/firme/kproduitSupprimerUser", name="app_kproduitSupprimerUser", methods={"POST"})
*/
public function kproduitSupprimerUser(Request $request, ProduitKompassService $firmesService): Response
{
// Récupérer les IDs envoyés en JSON
$productsData = json_decode($request->getContent(), true);
if (empty($productsData)) {
return $this->json(['error' => 'Aucun produit sélectionné pour suppression.'], 400);
}
$result = $firmesService->wproduitSupprimerUser($productsData);
if ($result) {
return $this->json(['success' => 'Produits supprimés avec succès.']);
}
return $this->json(['error' => 'Erreur lors de la suppression.'], 500);
}
// /**
// * @Route("/fiche/{id}/details", name="fiche_details")
// */
// public function ficheDetails($id): Response
// {
// // Récupérer la fiche depuis la base de données
// $fiche = $this->firmeService->getFicheFirmeById($id);
// if (!$fiche) {
// throw $this->createNotFoundException('Fiche non trouvée');
// }
// return $this->render('fiche/details.html.twig', [
// 'fiche' => $fiche,
// ]);
// }
/**
* @Route("/nonFirmePL/up/{userId}", name="details_non_profession_lib")
*/
public function nonFirmeUpPLDetails(int $userId, FirmeService $firmeService): Response
{
// dd($userId);
$user = $this->getUser();
if (
!$user instanceof \App\Entity\User &&
!$user instanceof \App\Entity\UserRegistration
) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$pageSubtitle = 'Fiche client';
$firme = $firmeService->getFirmeByUserId($userId);
if ($firme) {
$firme['horaires'] = json_decode($firme['horaires'] ?? '[]', true);
$firme['pause'] = json_decode($firme['pause'] ?? '[]', true);
$firme['rubriques'] = json_decode($firme['rubriques'] ?? '[]', true);
$firme['prestations'] = json_decode($firme['prestations'] ?? '[]', true);
$firme['produits'] = json_decode($firme['produits'] ?? '[]', true);
$firme['marques'] = json_decode($firme['marques'] ?? '[]', true);
$firme['actes'] = json_decode($firme['actes'] ?? '[]', true);
$firme['activite'] = $firme['activite'] ?? '';
} else {
// Par exemple, on passe un tableau vide au template
$firme = [
'horaires' => [],
'pause' => [],
'rubriques' => [],
'prestations' => [],
'produits' => [],
'marques' => [],
'actes' => [],
'activite' => '',
];
}
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$juridique = $firmeService->getJuridiqueByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
$certification = $firmeService->getCertificationByUserId($userId);
$anneesCA = json_decode($finance['annee_ca'] ?? '[]', true);
rsort($anneesCA, SORT_NUMERIC);
$gammesCA = json_decode($finance['gamme_ca'] ?? '[]', true);
$zoneExport = json_decode($finance['zone_export'] ?? '[]', true);
$pourcExport = json_decode($finance['pourc_export'] ?? '[]', true);
$anneesGammes = [];
foreach ($anneesCA as $index => $annee) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gammesCA[$index] ?? null
];
}
$zonesExportList = [];
foreach ($zoneExport as $index => $zone) {
$zonesExportList[] = [
'zone' => $zone,
'pourcentage' => $pourcExport[$index] ?? null
];
}
// dd($juridique,$finance);
if ($coordonnee) {
$coordonnee['telefone'] = json_decode($coordonnee['telefone'] ?? '[]', true);
$coordonnee['portable'] = json_decode($coordonnee['portable'] ?? '[]', true);
$coordonnee['whatsapp'] = json_decode($coordonnee['whatsapp'] ?? '[]', true);
$coordonnee['email'] = json_decode($coordonnee['email'] ?? '[]', true);
$coordonnee['site_web'] = json_decode($coordonnee['site_web'] ?? '[]', true);
$coordonnee['facebook'] = json_decode($coordonnee['facebook'] ?? '[]', true);
$coordonnee['instagram'] = json_decode($coordonnee['instagram'] ?? '[]', true);
$coordonnee['linkedin'] = json_decode($coordonnee['linkedin'] ?? '[]', true);
} else {
// On initialise à vide pour éviter toute erreur dans le template
$coordonnee = [
'telefone' => [],
'portable' => [],
'whatsapp' => [],
'email' => [],
'site_web' => [],
'facebook' => [],
'instagram' => [],
'linkedin' => [],
];
}
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$natures =$this->rubriqueprestationService->getAllNatures();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
// dd($ficheCustomer);
return $this->render('admin/nonFirme_up/profession_lib.html.twig', [
'villes' => $villes,
'rubriques' => $rubriques,
'fonctions' => $fonctions,
'natures' => $natures,
'fichiers' => $fichiers,
'formeJur' => $formeJur,
'banques' => $banques,
'zonesExp' => $zonesExp,
'themes' => $themes,
'firme' => $firme,
'localisation' => $localisation,
'coordonnee' => $coordonnee,
'rubriques' => $rubriques,
'juridique' => $juridique,
'finance' => $finance,
'pourcExport' => $pourcExport,
'anneesGammes' => $anneesGammes,
'gammeCA' => $gammeCA,
'zonesExportList' => $zonesExportList,
'dirigeants' => $dirigeants,
'certification' => $certification,
]);
}
/**
* @Route("/DetailsNonFirme/up/{userId}", name="details_non_societe")
*/
public function nonFirmeUpSocieteDetails(int $userId, FirmeService $firmeService): Response
{
$pageSubtitle = 'Fiche client';
$user = $this->getUser();
if (
!$user instanceof \App\Entity\User &&
!$user instanceof \App\Entity\UserRegistration
) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$firme = $firmeService->getFirmeByUserId($userId);
if ($firme) {
$firme['horaires'] = json_decode($firme['horaires'] ?? '[]', true);
$firme['pause'] = json_decode($firme['pause'] ?? '[]', true);
$firme['rubriques'] = json_decode($firme['rubriques'] ?? '[]', true);
$firme['prestations'] = json_decode($firme['prestations'] ?? '[]', true);
$firme['produits'] = json_decode($firme['produits'] ?? '[]', true);
$firme['marques'] = json_decode($firme['marques'] ?? '[]', true);
$firme['actes'] = json_decode($firme['actes'] ?? '[]', true);
} else {
// Par exemple, on passe un tableau vide au template
$firme = [
'horaires' => [],
'pause' => [],
'rubriques' => [],
'prestations' => [],
'produits' => [],
'marques' => [],
'actes' => [],
];
}
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$juridique = $firmeService->getJuridiqueByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
$certification = $firmeService->getCertificationByUserId($userId);
$anneesCA = json_decode($finance['annee_ca'] ?? '[]', true);
rsort($anneesCA, SORT_NUMERIC);
$gammesCA = json_decode($finance['gamme_ca'] ?? '[]', true);
$zoneExport = json_decode($finance['zone_export'] ?? '[]', true);
$pourcExport = json_decode($finance['pourc_export'] ?? '[]', true);
$anneesGammes = [];
foreach ($anneesCA as $index => $annee) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gammesCA[$index] ?? null
];
}
$zonesExportList = [];
foreach ($zoneExport as $index => $zone) {
$zonesExportList[] = [
'zone' => $zone,
'pourcentage' => $pourcExport[$index] ?? null
];
}
// dd($juridique,$finance);
if ($coordonnee) {
$coordonnee['telefone'] = json_decode($coordonnee['telefone'] ?? '[]', true);
$coordonnee['portable'] = json_decode($coordonnee['portable'] ?? '[]', true);
$coordonnee['whatsapp'] = json_decode($coordonnee['whatsapp'] ?? '[]', true);
$coordonnee['email'] = json_decode($coordonnee['email'] ?? '[]', true);
$coordonnee['site_web'] = json_decode($coordonnee['site_web'] ?? '[]', true);
$coordonnee['facebook'] = json_decode($coordonnee['facebook'] ?? '[]', true);
$coordonnee['instagram'] = json_decode($coordonnee['instagram'] ?? '[]', true);
$coordonnee['linkedin'] = json_decode($coordonnee['linkedin'] ?? '[]', true);
} else {
// On initialise à vide pour éviter toute erreur dans le template
$coordonnee = [
'telefone' => [],
'portable' => [],
'whatsapp' => [],
'email' => [],
'site_web' => [],
'facebook' => [],
'instagram' => [],
'linkedin' => [],
];
}
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$natures =$this->rubriqueprestationService->getAllNatures();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
$codesProduits = $firme['produits'] ?? [];
// // Transformer les codes en tableau associatif code => libellé
// $firme['produits'] = $this->rubriqueprestationService->getLibellesProduits($codesProduits);
// $codesMarques = $firme['marques'] ?? [];
// // Transformer les codes en tableau associatif code => libellé
// $firme['marques'] = $this->rubriqueprestationService->getLibellesMarques($codesMarques);
if (!empty($dirigeants) && is_array($dirigeants)) {
foreach ($dirigeants as &$d) {
$p = $d['portable'] ?? null;
if ($p && $p[0] === '[') {
$d['portables'] = json_decode($p, true);
} elseif ($p) {
$d['portables'] = [$p];
} else {
$d['portables'] = [];
}
}
} else {
$dirigeants = []; // tu initialises à un tableau vide pour éviter d'autres erreurs plus loin
}
$kompassProduits = $this->produitKompassService->getProduitsKompassUserId($userId);
$produits =$this->rubriqueprestationService->getAllProduits();
$wproduits = $this->produitKompassService->getLienProduitW13ByUserId($userId);
// dd($ficheCustomer);
return $this->render('admin/nonFirme_up/societe.html.twig', [
'villes' => $villes,
'rubriques' => $rubriques,
'fonctions' => $fonctions,
'natures' => $natures,
'fichiers' => $fichiers,
'formeJur' => $formeJur,
'banques' => $banques,
'zonesExp' => $zonesExp,
'themes' => $themes,
'firme' => $firme,
'localisation' => $localisation,
'coordonnee' => $coordonnee,
'rubriques' => $rubriques,
'juridique' => $juridique,
'finance' => $finance,
'pourcExport' => $pourcExport,
'anneesGammes' => $anneesGammes,
'gammeCA' => $gammeCA,
'zonesExportList' => $zonesExportList,
'dirigeants' => $dirigeants,
'certification' => $certification,
'pageSubtitle' => 'Liste des fiches non firmes',
'firme' => $firme,
'kompassProduits' => $kompassProduits,
'produits' => $produits,
'wproduits' => $wproduits,
]);
}
/**
* @Route("/DetailsNonFirmeUp/insertDetails", name="insert_details_nonFirmeUp", methods={"POST"})
*/
public function insertNonFirmeUpDetails(Request $request,FirmeService $firmeService): Response
{
$user = $this->getUser();
if (!$user instanceof \App\Entity\UserRegistration) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
// Récupération de toutes les données
$data = $request->request->all();
$userId = $request->request->get('user_id');
$wproduits = $this->produitKompassService->getLienProduitW13ByUserId($userId);
$firme = $firmeService->getFirmeByUserId($userId);
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
// dd($firme);
$juridique = $firmeService->getJuridiqueByUserId($userId);
// dd($juridique);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
function isNotEmpty($value): bool {
if (is_array($value)) {
foreach ($value as $v) {
if (trim((string)$v) !== '') {
return true;
}
}
return false;
}
return trim((string)$value) !== '';
}
// dd($data);
$jours = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'];
$horaires = [];
foreach ($jours as $jour) {
$isChecked = $request->request->get('checkbox_' . $jour);
if ($isChecked) {
$start = $request->request->get('start_' . $jour);
$end = $request->request->get('end_' . $jour);
$horaires[$jour] = [
'actif' => true,
'start' => $start,
'end' => $end
];
} else {
$horaires[$jour] = [
'actif' => false,
'start' => null,
'end' => null
];
}
}
// ➕ Traitement cohérent pour la pause
$pauseEnabled = $request->request->get('pause_enabled'); // existe uniquement si cochée
$pauseStart = $request->request->get('pause_start');
$pauseEnd = $request->request->get('pause_end');
$pause = [];
if ($pauseEnabled) {
$pause = [
'actif' => true,
'start' => $pauseStart,
'end' => $pauseEnd
];
} else {
$pause = [
'actif' => false,
'start' => null,
'end' => null
];
}
$horairesJson = json_encode($horaires);
$pauseJson = json_encode($pause);
$produits = $request->request->get('field29');
$positionsProduits = $request->request->get('Prfield31');
$marques = $request->request->get('field30');
$positionsMarques = $request->request->get('field31');
// Filtrer les produits avec valeurs non vides
$produitsAvecPositions = [];
if (!empty($produits) && is_array($produits)) {
foreach ($produits as $index => $produit) {
if (trim($produit) !== '') {
$produitsAvecPositions[] = [
'produit' => $produit,
'position' => $positionsProduits[$index] ?? null
];
}
}
}
// // Filtrer les marques avec valeurs non vides
$marquesAvecPositions = [];
if (!empty($marques) && is_array($marques)) {
foreach ($marques as $index => $marque) {
if (trim($produit) !== '') {
$marquesAvecPositions[] = [
'marque' => $marque,
'position' => $positionsMarques[$index] ?? null
];
}
}
}
//up_firme
$raison_social = $request->request->get('field1');
$nature = $request->request->get('field2');
$horaires = $horairesJson;
$pause = $pauseJson;
$rubriques = $this->filterJsonField($request->request->all('field26'));
$prestations = $this->filterJsonField($request->request->all('field28'));
// Filtrer la description_rub
$description_rub = trim($request->request->get('field27') ?? '');
$produits = !empty($produitsAvecPositions) ? json_encode($produitsAvecPositions) : null;
$marques = !empty($marquesAvecPositions) ? json_encode($marquesAvecPositions) : null;
// // Encodage final
// $produits = $this->filterJsonField($request->request->all('field29'));;
// $marques = $this->filterJsonField($request->request->all('field30'));;
$validation = $request->request->get('validation') ?? null;
$date_creation = new \DateTime();
$validation = '1' ;
$date_validation = $validation === '1' ? new \DateTime() : null;
$pl_or_societe = "S";
$etat='C';
if (trim($userId) !== '' || trim($raison_social) !== '' || trim($nature) !== '' || $horaires !== '[]' || $pause !== '[]' || $rubriques !== null ||$description_rub !== '' || $prestations !== null || !empty($produits) || !empty($marques))
{
if ($firme) {
$synchroniser ="0";
$this->firmeService->updateFirme(
$userId,null,
$raison_social,
$nature,
$horairesJson,
$pauseJson,
$rubriques,
$description_rub,
$prestations,
$produits,
$marques,
$validation,
$date_validation,
null, // nom
null, // prenom
null, // actes
null, // activite
null, // description
$pl_or_societe,
$etat,
$synchroniser
);
} else {
$synchroniser ="0";
$this->firmeService->insererFirme(
$userId,null,
$raison_social,
$nature,
$horairesJson,
$pauseJson,
$rubriques,
$description_rub,
$prestations,
$produits,
$marques,
$validation,
$date_validation,
$date_creation,
null,
null,
null,
null,
null,
$pl_or_societe,
$etat,
$synchroniser
);
}
}
//up_localisations
$adresse = $request->request->get('field3');
$code_ville = $request->request->get('field4');
$nom_ville = $this->firmeService->getNomVille($code_ville);
$code_quartier = $request->request->get('field5');
$nom_quartier = $this->firmeService->getNomQuartier($code_quartier);
$code_postal = $request->request->get('field6');
$longitude = $request->request->get('field11');
$latitude = $request->request->get('field12');
if (trim($adresse) !== '' || trim($code_ville) !== '' || trim($nom_ville) !== '' || trim($code_quartier) !== '' || trim($nom_quartier) !== '' || trim($code_postal) !== '' || trim($longitude) !== '' || trim($latitude) !== '')
{
if ($localisation) {
$this->firmeService->updateLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
} else {
$this->firmeService->insererLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
}
}
//up_coordonnées
$telefone = $this->filterJsonField($request->request->all('field7'));
$portable = $this->filterJsonField($request->request->all('field8'));
$whatsapp = $this->filterJsonField($request->request->all('wfield8'));
$email = $this->filterJsonField($request->request->all('field9'));
$site_web = $this->filterJsonField($request->request->all('field10'));
$facebook = $this->filterJsonField($request->request->all('facebook'));
$instagram = $this->filterJsonField($request->request->all('instagram'));
$linkedin = $this->filterJsonField($request->request->all('linkedin'));
// Puis tu peux appeler ton service
if ($telefone !== null || $portable !== null || $whatsapp !== null || $email !== null || $site_web !== null || $facebook !== null || $instagram !== null || $linkedin !== null) {
if ($coordonnee) {
$this->firmeService->updateCoordonnees($userId,null, $telefone, $portable, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
} else {
$this->firmeService->insererCoordonnees($userId,null, $telefone, $portable, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
}
}
//up_juridiques
$forme_juridique = $request->request->get('field13');
$annee_creation = $request->request->get('field14');
// dd($annee_creation);
$effectif = $request->request->get('field15');
$ice = $request->request->get('field17');
$identifiant_fiscal = $request->request->get('field18');
$patente = $request->request->get('field19');
$capital = $request->request->get('field16');
$inp = $request->request->get('PLfield31');
$rc = $request->request->get('field20');
$ville_rc = $request->request->get('field21');
$effectif = trim($effectif) !== '' ? (int)$effectif : null;
$capital = trim($capital) !== '' ? (int)$capital : null;
if (trim($forme_juridique) !== '' || trim($annee_creation) !== '' || trim($effectif) !== '' || trim($capital) !== '' || trim($ice) !== '' || trim($identifiant_fiscal) !== '' || trim($patente) !== '' || trim($rc) !== '' || trim($ville_rc) !== '' || trim($inp) !== '') {
if ($juridique) {
$this->firmeService->updateJuridiques($userId,null,$forme_juridique,$annee_creation,$effectif,$capital,$ice,null,$patente,$rc,$ville_rc,$identifiant_fiscal);
} else {
$this->firmeService->insererJuridiques($userId,null,$forme_juridique,$annee_creation,$effectif,$capital,$ice,null,$patente,$rc,$ville_rc,$identifiant_fiscal);
}
}
//up_finances
// Nettoyage des champs
$banques = $this->cleanValue($request->request->get('field34'));
$zone_export = $this->cleanValue($request->request->get('field35'));
$pourc_export = $this->cleanValue($request->request->get('field36'));
$annee_ca = $this->cleanValue($request->request->get('field32', []));
$gamme_ca = $this->cleanValue($request->request->get('field33', []));
$anneesGammes = [];
foreach ($annee_ca as $i => $annee) {
if (!empty($annee) && isset($gamme_ca[$i]) && !empty($gamme_ca[$i])) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gamme_ca[$i],
];
}
}
// Sauvegarde en JSON
$annee_ca = array_column($anneesGammes, 'annee_ca');
$gamme_ca = array_column($anneesGammes, 'gamme_ca');
// Insertion ou mise à jour si au moins un champ est renseigné
if ($annee_ca !== null || $gamme_ca !== null || $banques !== null || $zone_export !== null || $pourc_export !== null) {
if ($finance) {
$firmeService->updateFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
} else {
$firmeService->insererFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
}
}
//up_dirigeants
$noms = $request->request->get('field22', []);
$prenoms = $request->request->get('field23', []);
$civilites = $request->request->get('civilite', []);
$fonctionCodes = $request->request->get('field24', []);
$portables = $request->request->get('field25', []);
$whatsapps = $request->request->get('whatsappd', []);
$emails = $request->request->get('emaild', []);
$ids = $request->request->get('id', []);
$deletedRaw = $request->request->get('deleted_dirigeants', '');
// Convertir en tableau
$deletedIds = [];
if (is_string($deletedRaw) && $deletedRaw !== '') {
$deletedIds = explode(',', $deletedRaw);
}
// dd($deletedIds); // Vérifier si on reçoit bien les IDs supprimés
// Supprimer les dirigeants supprimés
if (!empty($deletedIds)) {
$firmeService->supprimerDirigeants($deletedIds);
}
$codeFirme = null;
// Synchroniser les autres (insert/update)
$firmeService->synchroniserDirigeants($ids, $noms, $prenoms, $civilites, $fonctionCodes, $portables, $whatsapps, $emails, $codeFirme, $userId);
// up_certifications
// Récupération des champs du formulaire
$certification = $request->request->get('certification');
$organisme = $request->request->get('organisme');
$type = $request->request->get('type_certification');
$produit = $request->request->get('produit_certification');
$date_expiration = $request->request->get('date_expiration');
// Vérifier s’il y a une certification existante pour ce code_firme
$certificationExist = $this->firmeService->getCertificationByUserId($userId);
// dd($certificationExist);
// Vérifier s'il y a des données remplies
if (
trim($certification) !== '' || trim($organisme) !== '' ||
trim($type) !== '' || trim($produit) !== '' || trim($date_expiration) !== ''
) {
if ($certificationExist) {
// faire update
$this->firmeService->updateCertification(
$userId,null,
$certification,
$organisme,
$type,
$produit,
$date_expiration
);
} else {
// faire insert
$this->firmeService->insererCertification(
$userId,null,
$certification,
$organisme,
$type,
$produit,
$date_expiration
);
}
}
$natures =$this->rubriqueprestationService->getAllNatures();
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
$wproduits = $this->produitKompassService->getLienProduitW13($codeFirme);
$fiches = $this->firmeService->getAllNonFirmes();
return $this->render('admin/nonFirme_up/list.html.twig', [
'pageSubtitle' => 'Liste des fiches non firmes',
'fiches' => $fiches,
'firme' => $firme,
'codeFirme' => $codeFirme,
]);
}
/**
* @Route("/PlNonFirmeUp/insertDetails", name="insert_details_nonFirmeUpPL", methods={"POST"})
*/
public function insertNonFirmeUpPLDetails(Request $request,FirmeService $firmeService): Response
{
$user = $this->getUser();
if (!$user instanceof \App\Entity\UserRegistration) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$description = $data['PLfield28'] ?? null;
// Récupération de toutes les données
$data = $request->request->all();
// dd($data);
$userId = $request->request->get('user_id');
// dd($data);
$firme = $firmeService->getFirmeByUserId($userId);
$localisation = $firmeService->getLocalisationByUserId($userId);
$coordonnee = $firmeService->getCoordonneeByUserId($userId);
$finance = $firmeService->getFinanceByUserId($userId);
// dd($firme);
$juridique = $firmeService->getJuridiqueByUserId($userId);
// dd($juridique);
$dirigeants = $firmeService->getDirigeantsByUserId($userId);
// Fonction utilitaire pour nettoyer les champs JSON
// dd($data);
$jours = ['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche'];
$horaires = [];
foreach ($jours as $jour) {
$isChecked = $request->request->get('checkbox_' . $jour);
if ($isChecked) {
$start = $request->request->get('start_' . $jour);
$end = $request->request->get('end_' . $jour);
$horaires[$jour] = [
'actif' => true,
'start' => $start,
'end' => $end
];
} else {
$horaires[$jour] = [
'actif' => false,
'start' => null,
'end' => null
];
}
}
// ➕ Traitement cohérent pour la pause
$pauseEnabled = $request->request->get('pause_enabled'); // existe uniquement si cochée
$pauseStart = $request->request->get('pause_start');
$pauseEnd = $request->request->get('pause_end');
$pause = [];
if ($pauseEnabled) {
$pause = [
'actif' => true,
'start' => $pauseStart,
'end' => $pauseEnd
];
} else {
$pause = [
'actif' => false,
'start' => null,
'end' => null
];
}
$horairesJson = json_encode($horaires);
$pauseJson = json_encode($pause);
//up_firme
$nom = $request->request->get('PLfield1');
$prenom = $request->request->get('PLfield2');
$activite = $request->request->get('PLfield26');
$description = $request->request->get('PLfield28');
$horaires = $horairesJson;
$pause = $pauseJson;
$actes = $this->filterJsonField($request->request->all('acte'));
$validation = $request->request->get('validation') ?? null;
$date_creation = new \DateTime();
$validation = '1' ;
$date_validation = $validation === '1' ? new \DateTime() : null;
$pl_or_societe = "P";
$etat='C';
if (trim($userId) !== '' || trim($nom) !== '' || trim($prenom) !== '' || trim($activite) !== '' || trim($description) !== '' || $horaires !== '[]' || $pause !== '[]' || $actes !== null)
{
if ($firme) {
$synchroniser ="0";
$this->firmeService->updateFirme(
$userId,
null,
null, // raison_social (pas dans ce contexte)
null, // nature (pas dans ce contexte)
$horairesJson,
$pauseJson,
null, // rubriques (pas dans ce contexte)
null, // description_rub
null, // prestations
null, // produits
null, // marques
$validation,
$date_validation,
$nom,
$prenom,
$actes,
$activite,
$description,
$pl_or_societe,
$etat,
$synchroniser
);
} else {
$synchroniser ="0";
$this->firmeService->insererFirme(
$userId,null,
null,
null,
$horairesJson,
$pauseJson,
null,
null,
null,
null,
null,
$validation,
$date_validation,
$date_creation,
$nom,
$prenom,
$actes,
$activite,
$description,
$pl_or_societe,
$etat,
$synchroniser
);
}
}
//up_localisations
$adresse = $request->request->get('PLfield3');
$code_ville = $request->request->get('PLfield4');
$nom_ville = $this->firmeService->getNomVille($code_ville);
$code_quartier = $request->request->get('PLfield5');
$nom_quartier = $this->firmeService->getNomQuartier($code_quartier);
$code_postal = $request->request->get('PLfield6');
$longitude = $request->request->get('PLfield11');
$latitude = $request->request->get('PLfield12');
if (trim($adresse) !== '' || trim($code_ville) !== '' || trim($nom_ville) !== '' || trim($code_quartier) !== '' || trim($nom_quartier) !== '' || trim($code_postal) !== '' || trim($longitude) !== '' || trim($latitude) !== '')
{
if ($localisation) {
$this->firmeService->updateLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
} else {
$this->firmeService->insererLocalisation($userId,null, $adresse, $code_ville, $nom_ville, $code_quartier, $nom_quartier, $code_postal, $longitude, $latitude);
}
}
//up_coordonnées
$telefone = $this->filterJsonField($request->request->all('Pfield7'));
$whatsapp = $this->filterJsonField($request->request->all('Pwhatsapp'));
$email = $this->filterJsonField($request->request->all('Pemail'));
$site_web = $this->filterJsonField($request->request->all('Psite'));
$facebook = $this->filterJsonField($request->request->all('PLfacebook'));
$instagram = $this->filterJsonField($request->request->all('PLinstagram'));
$linkedin = $this->filterJsonField($request->request->all('PLlinkedin'));
// Puis tu peux appeler ton service
if ($telefone !== null || $whatsapp !== null || $email !== null || $site_web !== null || $facebook !== null || $instagram !== null || $linkedin !== null) {
if ($coordonnee) {
$this->firmeService->updateCoordonnees($userId,null, $telefone, null, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
} else {
$this->firmeService->insererCoordonnees($userId,null, $telefone, null, $whatsapp, $email, $site_web, $facebook, $instagram, $linkedin);
}
}
//up_juridiques
$annee_creation = $request->request->get('PLfield14');
$ice = $request->request->get('PLfield29');
$identifiant_fiscal = $request->request->get('PLfield30');
$inp = $request->request->get('PLfield31');
$rc = $request->request->get('PLfield20');
$ville_rc = $request->request->get('PLfield21');
if (trim($annee_creation) !== '' || trim($ice) !== '' || trim($identifiant_fiscal) !== '' || trim($rc) !== '' || trim($ville_rc) !== '' || trim($inp) !== '') {
if ($juridique) {
$this->firmeService->updateJuridiques($userId,null,null,$annee_creation,null,null,$ice,$inp,null,$rc,$ville_rc,$identifiant_fiscal);
} else {
$this->firmeService->insererJuridiques($userId,null,null,$annee_creation,null,null,$ice,$inp,null,$rc,$ville_rc,$identifiant_fiscal);
}
}
//up_finances
// Nettoyage des champs
$banques = $this->cleanValue($request->request->get('PLfield34'));
$zone_export = $this->cleanValue($request->request->get('PLfield35'));
$pourc_export = $this->cleanValue($request->request->get('PLfield36'));
$annee_ca = $this->cleanValue($request->request->get('PLfield32', []));
$gamme_ca = $this->cleanValue($request->request->get('PLfield33', []));
$anneesGammes = [];
foreach ($annee_ca as $i => $annee) {
if (!empty($annee) && isset($gamme_ca[$i]) && !empty($gamme_ca[$i])) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gamme_ca[$i],
];
}
}
// Sauvegarde en JSON
$annee_ca = array_column($anneesGammes, 'annee_ca');
$gamme_ca = array_column($anneesGammes, 'gamme_ca');
// Insertion ou mise à jour si au moins un champ est renseigné
if ($annee_ca !== null || $gamme_ca !== null || $banques !== null || $zone_export !== null || $pourc_export !== null) {
if ($finance) {
$firmeService->updateFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
} else {
$firmeService->insererFinances($userId,null, $annee_ca, $gamme_ca, $banques, $zone_export, $pourc_export);
}
}
$villes =$this->localisationService->getAllVilles();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
$fiches = $this->firmeService->getAllNonFirmes();
return $this->redirectToRoute('nonfiches');
}
/**
* @Route("/promouvoir-utilisateur/{userId}", name="promouvoir_utilisateur")
*/
public function promouvoirUtilisateur(int $userId, FirmeService $firmeService): Response
{
$result = $firmeService->promouvoirUtilisateur($userId);
// dd($result );
if (!$result['success']) {
$this->addFlash('error', $result['message']);
} else {
$this->addFlash('success', $result['message']);
}
return $this->redirectToRoute('nonfiches');
}
/**
* @Route("/DetailsFirmePL/up/{codeFirme}", name="details_profession_lib")
*/
public function FirmeUpPLDetails(string $codeFirme, FirmeService $firmeService): Response
{
$user = $this->getUser();
if (!$user instanceof \App\Entity\User) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$pageSubtitle = 'Fiche client';
$firme = $firmeService->getFirmeByCodeAdmin($codeFirme);
$modification = $firmeService->getNewData($codeFirme);
// dd($modification);
if ($firme) {
$firme['horaires'] = json_decode($firme['horaires'] ?? '[]', true);
$firme['pause'] = json_decode($firme['pause'] ?? '[]', true);
$firme['rubriques'] = json_decode($firme['rubriques'] ?? '[]', true);
$firme['prestations'] = json_decode($firme['prestations'] ?? '[]', true);
$firme['produits'] = json_decode($firme['produits'] ?? '[]', true);
$firme['marques'] = json_decode($firme['marques'] ?? '[]', true);
$firme['actes'] = json_decode($firme['actes'] ?? '[]', true);
$firme['activite'] = $firme['activite'] ?? '';
} else {
$firme = [
'horaires' => [],
'pause' => [],
'rubriques' => [],
'prestations' => [],
'produits' => [],
'marques' => [],
'actes' => [],
'activite' => '',
];
}
$wproduits = $this->produitKompassService->getLienProduitW13($codeFirme);
$localisation = $firmeService->getLocalisationByCodeFirme($codeFirme);
$coordonnee = $firmeService->getCoordonneeByCodeFirme($codeFirme);
$juridique = $firmeService->getJuridiqueByCodeFirme($codeFirme);
$finance = $firmeService->getFinanceByCodeFirme($codeFirme);
$dirigeants = $firmeService->getDirigeantsByCodeFirme($codeFirme);
$certification = $firmeService->getCertificationByCodeFirme($codeFirme);
$anneesCA = json_decode($finance['annee_ca'] ?? '[]', true);
rsort($anneesCA, SORT_NUMERIC);
$gammesCA = json_decode($finance['gamme_ca'] ?? '[]', true);
$zoneExport = json_decode($finance['zone_export'] ?? '[]', true);
$pourcExport = json_decode($finance['pourc_export'] ?? '[]', true);
// Construire le tableau années + gammes
$anneesGammes = [];
foreach ($anneesCA as $index => $annee) {
$anneesGammes[] = [
'annee_ca' => $annee,
'gamme_ca' => $gammesCA[$index] ?? null
];
}
// Trier en ordre décroissant (comme dans Cas 1)
usort($anneesGammes, fn($a, $b) => $b['annee_ca'] <=> $a['annee_ca']);
// Construire le tableau zones + pourcentage
$zonesExportList = [];
foreach ($zoneExport as $index => $zone) {
$zonesExportList[] = [
'zone' => $zone,
'pourcentage' => $pourcExport[$index] ?? null
];
}
// dd($juridique,$finance);
if ($coordonnee) {
$coordonnee['telefone'] = json_decode($coordonnee['telefone'] ?? '[]', true);
$coordonnee['portable'] = json_decode($coordonnee['portable'] ?? '[]', true);
$coordonnee['whatsapp'] = json_decode($coordonnee['whatsapp'] ?? '[]', true);
$coordonnee['email'] = json_decode($coordonnee['email'] ?? '[]', true);
$coordonnee['site_web'] = json_decode($coordonnee['site_web'] ?? '[]', true);
$coordonnee['facebook'] = json_decode($coordonnee['facebook'] ?? '[]', true);
$coordonnee['instagram'] = json_decode($coordonnee['instagram'] ?? '[]', true);
$coordonnee['linkedin'] = json_decode($coordonnee['linkedin'] ?? '[]', true);
} else {
// On initialise à vide pour éviter toute erreur dans le template
$coordonnee = [
'telefone' => [],
'portable' => [],
'whatsapp' => [],
'email' => [],
'site_web' => [],
'facebook' => [],
'instagram' => [],
'linkedin' => [],
];
}
$villes =$this->localisationService->getAllVilles();
$villesRC =$this->localisationService->getAllVillesRC();
$rubriques =$this->rubriqueprestationService->getAllRubriques();
$fonctions =$this->rubriqueprestationService->getAllFonctions();
$natures =$this->rubriqueprestationService->getAllNatures();
$fichiers =$this->rubriqueprestationService->getAllProfLib();
$formeJur =$this->rubriqueprestationService->getAllFormeJur();
$gammeCA =$this->rubriqueprestationService->getAllGammeCA();
$banques =$this->rubriqueprestationService->getAllBanques();
$zonesExp = $this->localisationService->getAllZonesExport();
$themes = $this->produitKompassService->getThemes();
return $this->render('admin/firme_up/indexPl.html.twig', [
'villes' => $villes,
'villesRC' => $villesRC,
'rubriques' => $rubriques,
'fonctions' => $fonctions,
'natures' => $natures,
'fichiers' => $fichiers,
'formeJur' => $formeJur,
'banques' => $banques,
'zonesExp' => $zonesExp,
'themes' => $themes,
'firme' => $firme,
'localisation' => $localisation,
'coordonnee' => $coordonnee,
'rubriques' => $rubriques,
'juridique' => $juridique,
'finance' => $finance,
'pourcExport' => $pourcExport,
'anneesGammes' => $anneesGammes,
'gammeCA' => $gammeCA,
'zonesExportList' => $zonesExportList,
'dirigeants' => $dirigeants,
'certification' => $certification,
'wproduits' => $wproduits,
'modification' => $modification,
]);
}
// /**
// * @Route("/DetailsFirme/up/{codeFirme}", name="details_societe")
// */
// public function FirmeUpSocieteDetails(string $codeFirme, FirmeService $firmeService): Response
// {
// $user = $this->getUser();
// if (!$user instanceof \App\Entity\User) {
// $this->addFlash('error', 'Veuillez vous connecter.');
// return $this->redirectToRoute('app_login');
// }
// $pageSubtitle = 'Fiche client';
// $firme = $firmeService->getFirmeByCodeAdmin($codeFirme);
// // $oldValueFirme = $firmeService->getAllFirmeData($codeFirme);
// // dd($firme,$oldValueFirme);
// if ($firme) {
// $firme['horaires'] = json_decode($firme['horaires'] ?? '[]', true);
// $firme['pause'] = json_decode($firme['pause'] ?? '[]', true);
// $firme['rubriques'] = json_decode($firme['rubriques'] ?? '[]', true);
// $firme['prestations'] = json_decode($firme['prestations'] ?? '[]', true);
// $firme['produits'] = json_decode($firme['produits'] ?? '[]', true);
// $firme['marques'] = json_decode($firme['marques'] ?? '[]', true);
// $firme['actes'] = json_decode($firme['actes'] ?? '[]', true);
// } else {
// // Par exemple, on passe un tableau vide au template
// $firme = [
// 'horaires' => [],
// 'pause' => [],
// 'rubriques' => [],
// 'prestations' => [],
// 'produits' => [],
// 'marques' => [],
// 'actes' => [],
// ];
// }
// $wproduits = $this->produitKompassService->getLienProduitW13($codeFirme);
// $kompassProduits = $this->produitKompassService->getProduitsKompass($codeFirme);
// $localisation = $firmeService->getLocalisationByCodeFirme($codeFirme);
// $coordonnee = $firmeService->getCoordonneeByCodeFirme($codeFirme);
// $juridique = $firmeService->getJuridiqueByCodeFirme($codeFirme);
// $finance = $firmeService->getFinanceByCodeFirme($codeFirme);
// $dirigeants = $firmeService->getDirigeantsByCodeFirme($codeFirme);
// $certification = $firmeService->getCertificationByCodeFirme($codeFirme);
// $anneesCA = json_decode($finance['annee_ca'] ?? '[]', true);
// rsort($anneesCA, SORT_NUMERIC);
// $gammesCA = json_decode($finance['gamme_ca'] ?? '[]', true);
// $zoneExport = json_decode($finance['zone_export'] ?? '[]', true);
// $pourcExport = json_decode($finance['pourc_export'] ?? '[]', true);
// // dd($finance);
// $anneesGammes = [];
// foreach ($anneesCA as $index => $annee) {
// $anneesGammes[] = [
// 'annee_ca' => $annee,
// 'gamme_ca' => $gammesCA[$index] ?? null
// ];
// }
// $zonesExportList = [];
// foreach ($zoneExport as $index => $zone) {
// $zonesExportList[] = [
// 'zone' => $zone,
// 'pourcentage' => $pourcExport[$index] ?? null
// ];
// }
// // dd($juridique,$finance);
// if ($coordonnee) {
// $coordonnee['telefone'] = json_decode($coordonnee['telefone'] ?? '[]', true);
// $coordonnee['portable'] = json_decode($coordonnee['portable'] ?? '[]', true);
// $coordonnee['whatsapp'] = json_decode($coordonnee['whatsapp'] ?? '[]', true);
// $coordonnee['email'] = json_decode($coordonnee['email'] ?? '[]', true);
// $coordonnee['site_web'] = json_decode($coordonnee['site_web'] ?? '[]', true);
// $coordonnee['facebook'] = json_decode($coordonnee['facebook'] ?? '[]', true);
// $coordonnee['instagram'] = json_decode($coordonnee['instagram'] ?? '[]', true);
// $coordonnee['linkedin'] = json_decode($coordonnee['linkedin'] ?? '[]', true);
// } else {
// // On initialise à vide pour éviter toute erreur dans le template
// $coordonnee = [
// 'telefone' => [],
// 'portable' => [],
// 'whatsapp' => [],
// 'email' => [],
// 'site_web' => [],
// 'facebook' => [],
// 'instagram' => [],
// 'linkedin' => [],
// ];
// }
// $villes =$this->localisationService->getAllVilles();
// $villesRC =$this->localisationService->getAllVillesRC();
// $rubriques =$this->rubriqueprestationService->getAllRubriques();
// // $marques =$this->rubriqueprestationService->getAllMarques();
// $produits =$this->rubriqueprestationService->getAllProduits();
// $fonctions =$this->rubriqueprestationService->getAllFonctions();
// $natures =$this->rubriqueprestationService->getAllNatures();
// $fichiers =$this->rubriqueprestationService->getAllProfLib();
// $formeJur =$this->rubriqueprestationService->getAllFormeJur();
// $gammeCA =$this->rubriqueprestationService->getAllGammeCA();
// $banques =$this->rubriqueprestationService->getAllBanques();
// $zonesExp = $this->localisationService->getAllZonesExport();
// $themes = $this->produitKompassService->getThemes();
// // $codesProduits = $firme['produits'] ?? [];
// // // Transformer les codes en tableau associatif code => libellé
// // $firme['produits'] = $this->rubriqueprestationService->getLibellesProduits($codesProduits);
// // $codesMarques = $firme['marques'] ?? [];
// // // Transformer les codes en tableau associatif code => libellé
// // $firme['marques'] = $this->rubriqueprestationService->getLibellesMarques($codesMarques);
// if (is_array($dirigeants)) {
// foreach ($dirigeants as &$d) {
// $p = $d['portable'] ?? null;
// if ($p && $p[0] === '[') {
// $d['portables'] = json_decode($p, true);
// } else {
// $d['portables'] = []; // <--- toujours définir la clé
// }
// }
// } else {
// $dirigeants = []; // éviter d'avoir un foreach sur null
// }
// // dd($firme);
// return $this->render('admin/firme_up/index.html.twig', [
// 'villes' => $villes,
// 'villesRC' => $villesRC,
// 'rubriques' => $rubriques,
// 'fonctions' => $fonctions,
// 'natures' => $natures,
// 'fichiers' => $fichiers,
// 'formeJur' => $formeJur,
// 'banques' => $banques,
// 'produits' => $produits,
// // 'marques' => $marques,
// 'zonesExp' => $zonesExp,
// 'themes' => $themes,
// 'firme' => $firme,
// 'localisation' => $localisation,
// 'coordonnee' => $coordonnee,
// 'rubriques' => $rubriques,
// 'juridique' => $juridique,
// 'finance' => $finance,
// 'pourcExport' => $pourcExport,
// 'anneesGammes' => $anneesGammes,
// 'gammeCA' => $gammeCA,
// 'zonesExportList' => $zonesExportList,
// 'dirigeants' => $dirigeants,
// 'certification' => $certification,
// 'pageSubtitle' => 'Liste des fiches non firmes',
// 'firme' => $firme,
// 'wproduits' => $wproduits,
// 'kompassProduits' => $kompassProduits,
// ]);
// }
/**
* @Route("/DetailsFirme/up/{codeFirme}", name="details_societe")
*/
public function FirmeUpSocieteDetails(string $codeFirme, FirmeDetailsService $FirmeDetailsService,FirmeUpService $firmeUpService,FirmeService $firmeService): Response
{
$user = $this->getUser();
if (!$user instanceof \App\Entity\User) {
$this->addFlash('error', 'Veuillez vous connecter.');
return $this->redirectToRoute('app_login');
}
$data = $FirmeDetailsService->getFirmeDetails($codeFirme);
$dataCRM = $firmeUpService->prepareFirmeData($codeFirme);
$modification = $firmeService->getNewData($codeFirme);
foreach ($modification as &$modif) {
if (!empty($modif['ancienne_valeur']) && ($modif['ancienne_valeur'][0] === '{' || $modif['ancienne_valeur'][0] === '[')) {
$decoded = json_decode($modif['ancienne_valeur'], true);
$modif['ancienne_valeur_decoded'] = $decoded;
// Produits Kompass
if ($modif['table_source'] === 'up_produits_kompass' && isset($decoded['code_produit'])) {
$lib = $firmeService->getLibProduitByCode($decoded['code_produit']);
$decoded['lib_produit'] = $lib ?? '';
}
// Activités WF13
if ($modif['table_source'] === 'up_activite_WF13' && isset($decoded['code_produit'])) {
$lib = $firmeService->getLibWF13ByCode($decoded['code_produit']);
$decoded['lib_produit'] = $lib ?? '';
}
// ✅ Réordonner pour que lib_produit soit le premier
if (isset($decoded['lib_produit'])) {
$decoded = array_merge(
['lib_produit' => $decoded['lib_produit']],
array_diff_key($decoded, ['lib_produit' => ''])
);
}
$modif['ancienne_valeur_decoded'] = $decoded;
} else {
$modif['ancienne_valeur_decoded'] = $modif['ancienne_valeur'];
}
}
// dd( $modification);
return $this->render('admin/firme_up/index.html.twig', array_merge($data, [
'pageSubtitle' => 'Fiche client',
'modification' => $modification,
]));
}
/**
* @Route("/ajax/produits", name="ajax_produits")
*/
public function getProduits(Request $request): JsonResponse
{
$search = $request->query->get('q', '');
$items = $this->rubriqueprestationService->searchProduits($search);
return $this->json(['items' => $items]);
}
/**
* @Route("/ajax/marques", name="ajax_marques")
*/
public function getMarques(Request $request): JsonResponse
{
$search = $request->query->get('q', '');
$items = $this->rubriqueprestationService->searchMarques($search);
return $this->json(['items' => $items]);
}
/**
* @Route("/delete-multiple-fiches", name="delete_multiple_fiches", methods={"POST"})
*/
public function deleteMultiple(Request $request, FirmeService $firmeService)
{
$data = json_decode($request->getContent(), true);
$ids = $data['ids'] ?? [];
// dd($ids);
$firmeService->deleteMultipleFiches($ids);
return new JsonResponse(['success' => true]);
}
/**
* @Route("/synchroniser/{codeFirme}", name="synchroniser_firme")
*/
public function transfer(string $codeFirme): Response
{
try {
$this->firmeService->transferFirme($codeFirme);
return $this->redirectToRoute('fiches');
// return new Response("✅ Transfert terminé pour la firme $codeFirme");
} catch (\Exception $e) {
return new Response(
"❌ Erreur lors du transfert : " . $e->getMessage() . "<br>" .
"📌 Fichier : " . $e->getFile() . "<br>" .
"📌 Ligne : " . $e->getLine() . "<br>" .
"📌 Trace : <pre>" . $e->getTraceAsString() . "</pre>",
500
);
}
}
// Fonction utilitaire pour nettoyer les champs JSON
function filterJsonField(?array $values): ?string
{
if (!$values || !is_array($values)) return null;
// Enlève les valeurs nulles, vides ou composées uniquement d'espaces
$filtered = array_filter($values, fn($v) => trim($v) !== '');
return empty($filtered) ? null : json_encode(array_values($filtered));
}
function cleanValue($value) {
if (is_array($value)) {
$filtered = array_filter($value, fn($v) => trim((string)$v) !== '');
return empty($filtered) ? null : array_values($filtered);
}
$valueStr = trim((string)$value);
return $valueStr === '' ? null : $valueStr;
}
}