<?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); 
        $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; 
        } 
 
 
}