'é', 'ç'=>'ç','è'=>'è','à '=>'à'); private static $tabFct=array( 'ADM'=>'Administrateur', 'ASS'=>'Associé', 'COG'=>'Co-gérant', 'CON'=>'Contrôleur de gestion', 'DID'=>'Directeur Général Délégué', 'DIR'=>'Directeur', 'GER'=>'Gérant', 'PCS'=>'Président du Conseil de Surveillance', 'PDG'=>'Président Directeur Général', 'PP'=>'Personne Physique', 'PRD'=>'Président du directoire', 'PRE'=>'Président du Conseil d\'Administration', 'VIC'=>'Vice président du CA ou Surv.', ); private $tabSources=array( 0=>'Presse', // Old liens 1000=>'Presse', // 4 ? 1500=>'Actes', // Fedaso 1600=>'Actes', // S&D : 69642, Associé-Gérant 1700=>'SED', 1800=>'Collecte', // Infolégales 1900=>'Collecte'); public function __construct($siren) { $this->siren=$siren; $this->iDb=new WDB(); $this->iInsee=new MInsee(); } /** Retourne les actionnaires du siren ** @param int Siren de l'entreprise ** @return array Tableau d'actionnaires **/ public function getActionnaires($siren=false, $actifsUniquement=true) { if (!$siren) $siren=$this->siren; $tabIdentite=$this->iInsee->getIdentiteLight($siren); //echo $siren; //print_r($tabIdentite); $nic=$tabIdentite['Nic']; $tab=$this->iDb->select('liens', 'Siren1, ActionPart, Pmin, Pmax, MajMin, PpPm, Siren2, RaisonSociale, Pays, actif, source, dateLien*1 AS dateLien, DATE(dateInsert)*1 AS dateInsert, DATE(dateUpdate)*1 AS dateUpdate', "Siren1='$siren' AND ActionPart=1 ORDER BY source DESC, actif DESC, Pmin DESC", true, MYSQL_ASSOC); //$tabActiDB=mysql_select('dbo_liens_fi', 'SirenEntite, NomAdresse, PourcentageDetenu, Ville, Lien, MAJLien, MAJImport', "Siren='$siren' AND CodeLien='AC' ORDER BY PourcentageDetenu DESC"); //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug $siren ($actifsUniquement)", print_r($tab,true)) ; $sourcePre=$unique=false; $pctTot=0; $tabRet=array(); foreach ($tab as $i=>$lien) { if ($lien['source']>=1700) $source=1700; else $source=$lien['source']*1; if ($i>0 && $sourcePre<>$source) break; /*if ($actifsUniquement && $lien['actif']==0) continue; else $tabRet[]=array('Pmin' => number_format($lien['Pmin']*1,2,',',''), 'MajMin' => $lien['MajMin'], 'RaisonSociale' => strtr($lien['RaisonSociale'],$this->tabChars), 'Pays' => $lien['libPays'], 'Siren' => $lien['Siren2'], 'Actif' => $lien['actif']);*/ if ($actifsUniquement && $lien['actif']==0) continue; else { $codPays=strtoupper($lien['Pays']); $libPays=''; if ($codPays<>'' && $codPays<>'FRA') { $tmp=$this->iDb->select('tabPays', 'libPays', "codPays3='$codPays'", true, MYSQL_ASSOC); $libPays=$tmp[0]['libPays']; } if ($lien['MajMin']=='F') $majMin='A'; else $majMin=$lien['MajMin']; switch ($tabIdentite['FJ']*1) { case 5488: // Entreprise Unipersonnelle à Responsabilité Limitée case 5498: // SARL unipersonnelle case 5720: // Société par actions simplifiée à associé unique $lien['Pmin']=100; $unique=true; break; default: break; } $dateMaj=$lien['dateLien']; $pctLien=$lien['Pmin']*1; $pctTot+=$pctLien; // On évite d'afficher des totaux de détention > à 100% if($pctTot>100) $pctLien=0; if ($lien['dateInsert']>$dateMaj) $dateMaj=$lien['dateInsert']; if ($lien['dateUpdate']>$dateMaj) $dateMaj=$lien['dateUpdate']; $tabRet[]=array( 'Pmin' => number_format($pctLien,2,',',''), 'PminNum' => $pctLien, 'MajMin' => $majMin, 'RaisonSociale' => strtr($lien['RaisonSociale'],$this->tabChars), 'Pays' => $libPays, 'Siren' => $lien['Siren2'], 'Actif' => $lien['actif'], 'Source' => $this->tabSources[$source], 'DateLien' => Wdate::dateT('Ymd','Y-m-d', $lien['dateLien']), 'DateMaj' => Wdate::dateT('Ymd','Y-m-d', $dateMaj)); if ($unique) break; } $sourcePre=$source; } if (count($tabRet)==0) { switch ($tabIdentite['FJ']*1) { case 7112: // Autorité administrative indépendante case 7160: // Service déconcentré à compétence nation. D'un ministère (hors Défense) case 7171: // Service déconcentré de l'État à compétence (inter) régionale case 7172: // Service déconcentré de l'État à compétence (inter) départementale case 7179: // (Autre) Service déconcentré de l'État à compétence territoriale case 7381: // Organisme consulaire /** Ces établissements sont dans le fichier des tribunaux **/ $tmp=$this->iDb->select('tribunaux', 'triSiret, triNom, dateUpdate', "triId=(SELECT triIdSup FROM tribunaux WHERE triSiret LIKE '$siren%' LIMIT 1)", true, MYSQL_ASSOC); $tabCC=$tmp[0]; //$sirenCC=substr(,0,9); //if ($siren*1<>$sirenCC*1) if ($tabCC['triSiret']*1<>0) //$siren*1<>$sirenCC*1) $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => $tabCC['triNom'], 'Pays' => '', 'Siren' => $tabCC['triSiret'], 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => Wdate::dateT('Ymd','Y-m-d', $tabCC['dateUpdate']), 'DateMaj' => Wdate::dateT('Ymd','Y-m-d', $tabCC['dateUpdate']), ); case 7111: // Autorité constitutionnelle case 7113: // Ministère case 7120: // Service central d'un ministère case 7150: // Service du ministère de la Défense case 7190: // Ecole nationale non dotée de la personnalité morale // case 7210: // COMMUNE (traité après) // case 7220: // DEPARTEMENT (traité après) case 7225: // Territoire d'Outre-mer case 7229: // (Autre) Collectivité territoriale // case 7312: // Commune associée // case 7313: // Section de commune // case 7314: // Ensemble urbain case 7230: // Région case 7321: // Association syndicale autorisée case 7322: // Association foncière urbaine case 7323: // Association foncière de remembrement case 7331: // Établissement public local d'enseignement // case 7341: // Secteur de commune // case 7342: // District urbain // case 7343: // Communauté urbaine // case 7345: // Syndicat intercommunal à vocation multiple (SIVOM) // case 7346: // Communauté de communes // case 7347: // Communauté de villes // case 7348: // Communauté d'agglomération case 7349: // Autre établissement public local de coopération non spécialisé ou entente case 7351: // Institution interdépartemental ou entente case 7352: // Institution interrégionale ou entente // case 7353: // Syndicat intercommunal à vocation unique (SIVU) // case 7354: // Syndicat mixte communal // case 7355: // Autre syndicat mixte case 7356: // Commission syndicale pour la gestion des biens indivis des communes // case 7361: // Centre communal d'action sociale // case 7362: // Caisse des écoles // case 7363: // Caisse de crédit municipal case 7364: // Établissement d'hospitalisation case 7365: // Syndicat inter hospitalier case 7366: // Établissement public local social et médico-social case 7371: // Office public d'habitation à loyer modéré (OPHLM) case 7372: // Service départemental d'incendie case 7373: // Établissement public local culturel case 7378: // Régie d'une collectivité locale à caractère administratif case 7379: // (Autre) Établissement public administratif local case 7382: // Établissement public national ayant fonction d'administration centrale case 7383: // Établissement public national à caractère scientifique culturel et professionnel case 7384: // Autre établissement public national d'enseignement case 7385: // Autre établissement public national administratif à compétence territoriale limitée case 7389: // Établissement public national à caractère administratif case 7410: // Groupement d'intérêt public (GIP) case 7430: // Établissement public des cultes d'Alsace-Lorraine case 7450: // Cercle et foyer dans les armées case 7490: // Autre personne morale de droit administratif if (count($tabRet)==0) $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => 'ETAT FRANCAIS', 'Pays' => '', 'Siren' => 0, 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => date('Y-m-').'01', 'DateMaj' => date('Y-m-').'01', ); break; case 7210: // Communes // Siren Commune du Lamentin : 219 722 139 // ~~~ ~~~~ $dept=substr($siren,2,2); $comm=substr($siren,5,3); $codeInsee=$dept.$comm; if ($dept<>'20') // Corse $strCodeInsee="codeInsee='$codeInsee'"; else $strCodeInsee="codeInsee IN ('2A$comm','2B$comm','20$comm') "; $tmp=$this->iDb->select('insee.insee_tabVillesEpci', 'typEPCI, codEPCI, libEPCI, libCommune', $strCodeInsee, true, MYSQL_ASSOC); $tabCC=$tmp[0]; switch($tabCC['typEPCI']) { case 'CA': $typeCC="Communauté d'agglomérations"; break; // CJ=7348 case 'CC': $typeCC="Communauté de communes"; break; // CJ=7346 case 'CU': $typeCC="Communauté urbaine"; break; // CJ=73 case 'SAN': $typeCC="Syndicat d'agglomérations nouvelles"; break; // CJ=73 default: $typeCC=''; } $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => strtoupper($typeCC.' '.preg_replace('/^(CA|CC|CU|SAN) /Uis', '',$tabCC['libEPCI'])), 'Pays' => '', 'Siren' => $tabCC['codEPCI'], 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => date('Y-m-').'01', 'DateMaj' => date('Y-m-').'01', ); break; case 7220: // Département // Siren du 29 22 290001 1 => Région 233 500 016 // Siren du 28 22 280001 3 => Région 234 500 023 // Siren du 75 22 750001 => Région 237 500 079 // Siren du 972 22 972001 6 => Région 239 720 014 $dept=substr($siren,2,2); if ($dept*1>95) $dept=substr($siren,2,3); $tmp=$this->iDb->select('insee.departements d, insee.insee_tabRegions r', 'd.codeRegionInsee, r.REGION, r.CHEFLIEU, r.NC', "numdep='$dept' AND d.codeRegionInsee=r.REGION", true, MYSQL_ASSOC); $tabCC=$tmp[0]; $dept3=substr($tabCC['CHEFLIEU'],0,2).'0'; if ($dept3*1>960) $dept3=substr($tabCC['CHEFLIEU'],0,3); for ($iSir=0; $iSir<100; $iSir++) { if ($iSir<10) $iSir2='0'.$iSir; else $iSir2=$iSir; // 23 350 00 16 => Bon // 23 350 00 00 => Mauvais $sirenCom='23'.$dept3.'00'.$iSir2; if ($this->iInsee->valideSiren($sirenCom)) { if ($this->iInsee->sirenExiste($sirenCom)) { // @sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug Fin $siren ($actifsUniquement) $sirenCom existe !", '') ; break; } } } $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => 'REGION '.strtoupper($tabCC['NC']), 'Pays' => '', 'Siren' => $sirenCom, 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => date('Y-m-').'01', 'DateMaj' => date('Y-m-').'01', ); break; } } if (count($tabRet)==0) { $fj=$tabIdentite['FJ']*1; if ($fj==5498) $strFonctions=",'Gérant'"; else $strFonctions=''; $adresse=end(explode(' ', $tabIdentite['AdresseVoie'])); $codePostal=$tabIdentite['CP']; $tab=$this->iDb->select('rncs_dirigeants', 'typeDir, raisonSociale, dirSiren, dirRS, civilite, nom, prenom, actif, naissance_nom, naissance_date, naissance_lieu, nat, adresse, fonction_code, fonction_lib, source, cinf, dateInsert, dateUpdate', "siren='$siren' AND fonction_lib IN ('Associé-gérant' $strFonctions)", true, MYSQL_ASSOC); $majMin='+'; if (count($tab)>1) $majMin='-'; foreach ($tab as $i=>$lien) { if ($actifsUniquement && $lien['actif']==0) continue; else { $ville=$siege=$actif=''; $deb=$siren2=0; $nbRep=$maxRep=200; $pertinence=$avecSiren=true; $etabs=$this->iInsee->rechercheEtab($lien['nom'].' '.$lien['prenom'], $adresse, $codePostal, $ville, $siege, $actif, $deb, $nbRep, $maxRep, $pertinence, $avecSiren); $tabSiren=array(); foreach ($etabs['reponses'] as $etab) { $tabTmp=preg_split('/( +|\/|\*)/', $etab['Nom']); $rsEtab=$tabTmp[0]; $tabTmp=preg_split('/( +|\/|\*)/', $lien['nom']); $rsLien=$tabTmp[0]; if ($etab['FJ']==1800 && $rsEtab==$rsLien) $tabSiren[]=$etab['Siren']; } $tabSiren2=array_unique($tabSiren); if (count($tabSiren2==1)) $siren2=end($tabSiren2); else $siren2=$lien['dirSiren']; if ($lien['civilite']=='MME') $genre='Madame'; elseif ($lien['civilite']=='M') $genre='Monsieur'; else $genre=''; $dateMaj=$lien['dateInsert']; if ($lien['dateUpdate']>$dateMaj) $dateMaj=$lien['dateUpdate']; $tabRet[]=array( 'Pmin' => 0, 'PminNum' => 0, 'MajMin' => $majMin, 'RaisonSociale' => trim(preg_replace('/ +/', ' ', $lien['dirRS'].' '.$genre.' '.$lien['nom'].' '.$lien['prenom'])), 'Pays' => '', 'Siren' => $siren2, 'Actif' => $lien['actif'], 'Source' => $this->tabSources[1600], 'DateLien' => Wdate::dateT('Y-m-d','Y-m-d', $dateMaj), 'DateMaj' => Wdate::dateT('Y-m-d','Y-m-d', $dateMaj), ); if ($unique) break; /**/ if ($siren2*1>0) { /** Insertion du lien en base **/ $nom=$pays=$dateMAJ=''; $ppPm='P'; $pct=0; $entrep2=$this->iInsee->getIdentiteLight($siren); $nom2=$entrep2['Nom']; $pays2='FRA'; if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; $entrep=$this->iInsee->getIdentiteLight($siren2); $nom=strtr($entrep['Nom'],'/*',' '); $pays='FRA'; $tabUpdate=array( 'Pmin'=> $pct, 'Pmax'=> $pct, 'MajMin'=> $majMin, 'PpPm'=> $ppPm, 'dateLien'=> $dateMAJ, ); /* Insertion de l'actionnaire */ $tabInsert1=array_merge($tabUpdate, array( 'ActionPart'=>1), array( 'Siren1'=> $siren, 'Siren2'=> $siren2, 'RaisonSociale'=> $nom, 'Pays'=> $pays, 'actif'=> 1, 'source'=> 1600, 'dateInsert'=> date('YmdHis'))); $res=$this->iDb->select('liens', 'count(*)', "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='".addslashes($nom)."' AND Pays='$pays'))"); if ($res[0][0]>0) { if (!$this->iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>1)), "siren=$siren AND (Siren2=$siren2 OR (RaisonSociale='".addslashes($nom)."' AND Pays='$pays'))", true)) $errMaj=1016166; } else { if (!$this->iDb->insert('liens', $tabInsert1, true)) $errMaj=1016167; } /* Insertion de la participation pour l'actionnaire précédent */ $tabInsert2=array_merge($tabUpdate, array( 'ActionPart'=>2), array( 'Siren1'=> $siren2, 'Siren2'=> $siren, 'RaisonSociale'=> $nom2, 'Pays'=> $pays2, 'actif'=> 1, 'source'=> 1600, 'dateInsert'=> date('YmdHis'))); $res=$this->iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); if ($res[0][0]>0) { if (!$this->iDb->update('liens', array_merge($tabUpdate,array('ActionPart'=>2)), "siren=$siren2 AND (Siren2=$siren OR (RaisonSociale='".addslashes($nom2)."' AND Pays='$pays2'))", true)) $errMaj=1016168; } else { if (!$this->iDb->insert('liens', $tabInsert2, true)) $errMaj=1016169; } /** Insertion du dirigeant pour l'actionnaire en base **/ $dirs=$this->iDb->select('rncs_dirigeants','siren', "siren=$siren2", true, MYSQL_ASSOC); if (count($dirs)==0) { $this->iDb->insert('rncs_dirigeants', array( 'siren' => $siren2, 'raisonSociale' => $nom, 'civilite' => $lien['civilite'], 'typeDir' => $lien['typeDir'], 'dirRS' => $siren2, 'nom' => $lien['nom'], 'prenom' => $lien['prenom'], 'naissance_nom' => $lien['naissance_nom'], 'naissance_date'=> $lien['naissance_date'], 'naissance_lieu'=> $lien['naissance_lieu'], 'nat' => $lien['nat'], 'fonction_code' => 0, 'fonction_lib' => 'Personne Physique', 'actif' => 1, 'dateInsert' => date('YmdHis'), 'source' => 'lag', // Lien Associé Gérant 'cinf' => $lien['cinf'], ), true); } } } } } if (count($tabRet)==0) { $tabNotice=$this->iInsee->getInfosNotice($siren, $nic); if ($tabNotice['insRECME']*1>0) { $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => 'ETAT FRANCAIS', 'Pays' => '', 'Siren' => 0, 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => date('Y-m-').'01', 'DateMaj' => date('Y-m-').'01', ); } } //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug Fin $siren ($actifsUniquement)", print_r($tabRet,true)) ; return $tabRet; } /** Retourne les participations du siren ** @param int Siren de l'entreprise ** @return array Tableau de participations **/ public function getParticipations($siren=false, $actifsUniquement=true) { if (!$siren) $siren=$this->siren; $tab=$this->iDb->select( 'liens l LEFT JOIN tabPays ON codPays3=Pays', 'Siren1, ActionPart, Pmin, Pmax, MajMin, PpPm, Siren2, RaisonSociale, Pays, libPays, actif, source, dateLien*1 AS dateLien, DATE(l.dateInsert)*1 AS dateInsert, DATE(l.dateUpdate)*1 AS dateUpdate', "Siren1='$siren' AND ActionPart=2 ORDER BY source DESC, actif DESC, Pmin DESC", true, MYSQL_ASSOC); // OR Siren2='$siren $tabRet=array(); $sourcePre=false; foreach ($tab as $i=>$lien) { if ($lien['source']>=1700) $source=1700; //if ($lien['source']>=1700 && $lien['source']<=1720) $source=1700; else $source=$lien['source']*1; $dateMaj=$lien['dateLien']; if ($lien['dateInsert']>$dateMaj) $dateMaj=$lien['dateInsert']; if ($lien['dateUpdate']>$dateMaj) $dateMaj=$lien['dateUpdate']; if ($i>0 && $sourcePre<>$source) break; if ($actifsUniquement && $lien['actif']==0) continue; else { if ($lien['MajMin']=='F') $majMin='A'; else $majMin=$lien['MajMin']; $tabRet[]=array('Pmin' => number_format($lien['Pmin']*1,2,',',''), 'PminNum' => $lien['Pmin']*1, 'MajMin' => $majMin, 'RaisonSociale' => strtr($lien['RaisonSociale'],$this->tabChars), 'Pays' => $lien['libPays'], 'Siren' => $lien['Siren2'], 'Actif' => $lien['actif'], 'Source' => $this->tabSources[$source], 'DateLien' => Wdate::dateT('Ymd','Y-m-d', $lien['dateLien']), 'DateMaj' => Wdate::dateT('Ymd','Y-m-d', $dateMaj), ); } $sourcePre=$source; } // if (count($tabRet)==0) { $tabTmp=$this->iInsee->getIdentiteLight($siren); switch ($tabTmp['FJ']*1) { case 7112: // Autorité administrative indépendante case 7160: // Service déconcentré à compétence nation. D'un ministère (hors Défense) case 7171: // Service déconcentré de l'État à compétence (inter) régionale case 7172: // Service déconcentré de l'État à compétence (inter) départementale case 7179: // (Autre) Service déconcentré de l'État à compétence territoriale case 7381: // Organisme consulaire /** Ces établissements sont dans le fichier des tribunaux **/ $tmp=$this->iDb->select('tribunaux t1', 't1.triSiret, t1.triNom', "t1.triIdSup=(SELECT t2.triId FROM tribunaux t2 WHERE t2.triSiret LIKE '$siren%' AND t2.triId<>t1.triId LIMIT 1)", true, MYSQL_ASSOC); foreach ($tmp as $tabCC) { // $sirenCC=substr($tabCC['triSiret'],0,9); if ($tabCC['triSiret']*1<>0) //$siren*1<>$sirenCC*1) $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => $tabCC['triNom'], 'Pays' => '', 'Siren' => $tabCC['triSiret'], 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => Wdate::dateT('Ymd','Y-m-d', $tabCC['dateUpdate']), 'DateMaj' => Wdate::dateT('Ymd','Y-m-d', $tabCC['dateUpdate']), ); } break; case 7346: // Communaute de communes case 7348: // Communaute d'agglomeration //case 'CC': $typeCC="Communauté de communes"; break; // CJ=73 //case 'CU': $typeCC="Communauté urbaine"; break; // CJ=73 //case 'SAN': $typeCC="Syndicat d'agglomérations nouvelles"; break; // CJ=73 $tmp=$this->iDb->select('insee.insee_tabVillesEpci', 'typEPCI, libEPCI, codeInsee, libCommune', "codEPCI='$siren'", true, MYSQL_ASSOC); foreach ($tmp as $tabCom) { $dept=substr($tabCom['codeInsee'],0,2); if ($dept=='2A' || $dept=='2B' || $dept=='20') $dept='200'; elseif ($dept*1>95) $dept=substr($tabCom['codeInsee'],0,3); else $dept=$dept.'0'; $comm=substr($tabCom['codeInsee'],2,3); for ($iSir=0; $iSir<10; $iSir++) { $sirenCom='21'.$dept.$comm.$iSir; if ($this->iInsee->valideSiren($sirenCom)) break; } $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => 'COMMUNE DE '.strtoupper($tabCom['libCommune']), 'Pays' => '', 'Siren' => $sirenCom, 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => date('Y-m-').'01', 'DateMaj' => date('Y-m-').'01', ); } break; case 7230: // Région // Siren du 29 22 290001 1 => Région 233 500 016 // Siren du 28 22 280001 3 => Région 234 500 023 // Siren du 75 22 750001 => Région 237 500 079 // Siren du 972 22 972001 6 => Région 239 720 014 $dept=substr($siren,2,2); $deptD=$dept.'000'; $deptF=$dept.'999'; if ($dept*1>95) { $dept=substr($siren,2,3); $deptD=$dept.'00'; $deptF=$dept.'99'; } $tmp=$this->iDb->select('insee.departements d, insee.insee_tabRegions r', 'd.numDep, d.libdep, d.codeRegionInsee, r.REGION, r.CHEFLIEU, r.NC', "r.CHEFLIEU BETWEEN '$deptD' AND '$deptF' AND d.codeRegionInsee=r.REGION", true, MYSQL_ASSOC); foreach ($tmp as $tabCom) { $dept=$tabCom['numDep']; if ($dept>960) $dept3=$dept; else $dept3=$dept.'0'; for ($iSir=0; $iSir<10; $iSir++) { $sirenCom='22'.$dept3.'001'.$iSir; if ($this->iInsee->valideSiren($sirenCom)) break; } $tabRet[]=array('Pmin' => 0, 'PminNum' => 0, 'MajMin' => '+', 'RaisonSociale' => 'DEPARTEMENT '.strtoupper($tabCom['libdep']), 'Pays' => '', 'Siren' => $sirenCom, 'Actif' => 1, 'Source' => $this->tabSources[1800], 'DateLien' => date('Y-m-').'01', 'DateMaj' => date('Y-m-').'01', ); } break; } // } //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug Liens $siren", print_r($tabRet,true)) ; return $tabRet; } public function getLiens($siren=false) { $tabA=$this->getActionnaires($siren); $tabP=$this->getParticipations($siren); return array( 'actionnaires'=>$tabA, 'participations'=>$tabP); } public function getMaisonMereFr($siren, $debug=false, $tabSirenVisites=array()) { $this->tabSirenVisites=$tabSirenVisites; $this->tabSirenVisites[]=$siren; $tabA=$this->getActionnaires($siren, true); $majTrouve=false; foreach ($tabA as $i=>$lien) { $sirenMere=$lien['Siren']; // Afin de ne pas boucler à l'infini si le siren est déjà dans la sructure ! //echo "je cherche $sirenMere dans "; //print_r($tabSirenVisites); if (in_array($sirenMere, $this->tabSirenVisites)) { //echo "TROUVE !!!".EOL; continue; }// else //echo "inconnu".EOL; if ($debug && $sirenMere>1000) $tabIdentiteA=$this->iInsee->getIdentiteLight($sirenMere); else $tabIdentiteA['Nom']=''; if ($siren*1==$sirenMere*1) { if ($debug) echo "D. $siren détenu à ".$lien['Pmin']." (".$lien['MajMin'].") par ".$tabIdentiteA['Nom']." ($sirenMere)".EOL; return $siren; } elseif($sirenMere>100 && $lien['PminNum']>50) { if ($debug) echo "A. $siren détenu à ".$lien['Pmin']." (".$lien['MajMin'].") par ".$tabIdentiteA['Nom']." ($sirenMere)".EOL; $majTrouve=true; return $this->getMaisonMereFr($sirenMere, $debug, $this->tabSirenVisites); } elseif($sirenMere>100 && $lien['MajMin']=='+' && !$majTrouve) { if ($debug) echo "B. $siren détenu à ".$lien['Pmin']." (".$lien['MajMin'].") par ".$tabIdentiteA['Nom']." ($sirenMere)".EOL; $majTrouve=true; return $this->getMaisonMereFr($sirenMere, $debug, $this->tabSirenVisites); } elseif ($sirenMere<100) { if ($debug) echo "C. $siren détenu à ".$lien['Pmin']." (".$lien['MajMin'].") par ".$tabIdentiteA['Nom']." ($sirenMere)".EOL; return $siren; } else { if ($debug) echo "E. $siren détenu à ".$lien['Pmin']." (".$lien['MajMin'].") par ".$tabIdentiteA['Nom']." ($sirenMere)".EOL; //die("Cas pas prévue $siren, $sirenMere, ".$lien['Pmin'].', '.$lien['MajMin'].EOL); return $siren; } } if ($i==0) return $siren; } public function getAllParticipations($siren, $pctMin=33, $nbNiveaux=15, $niveauCour=1, $tabSiren=array(), $sirenIni=0, $sirenMere=0, $appel=0, $actifsUniquement=true) { $appel++; $tabP=$this->getParticipations($siren, $actifsUniquement); foreach ($tabP as $i=>$lien) { $sirenFille=$lien['Siren']*1; if ($sirenFille>1000) { $tabIdentiteP=$this->iInsee->getIdentiteLight($sirenFille); $nomP=$tabIdentiteP['Nom']; } else { $nomP=$lien['RaisonSociale']; } $codPays=$lien['Pays']; $libPays=''; if ($codPays<>'' && $codPays<>'France') $libPays=" ($codPays)"; for($j=0;$j<$appel; $j++) echo "|\t"; if ($lien['PminNum']>0) $pct=$lien['PminNum'].'%'; elseif ($lien['MajMin']=='+') $pct='major'; elseif ($lien['MajMin']=='-') $pct='minor'; else $pct=$lien['MajMin']; echo "+ $sirenFille ($pct) : ".$nomP.$libPays; if ($siren*1==$sirenFille*1) { echo "[D]".EOL; $tabSiren[]=$siren; } elseif($sirenFille>100 && ($lien['PminNum']>=$pctMin || $lien['MajMin']=='+') && $niveauCour<=$nbNiveaux) { $tabSiren[]=$siren; $niveauCour++; if (in_array($sirenFille,$tabSiren)) echo "[Adeja]".EOL; else { echo "[A]".EOL; $tabSiren=$this->getAllParticipations($sirenFille, $pctMin, $nbNiveaux, $niveauCour, $tabSiren, $sirenIni, $sirenMere, $appel, $actifsUniquement, $format); } } elseif($sirenFille>100 && ($lien['PminNum']<$pctMin || $lien['MajMin']=='-')) { echo "[B]".EOL; $tabSiren[]=$siren; } elseif ($sirenFille<100) { echo "[C]".EOL; $tabSiren[]=$siren; } else { echo "[E]".EOL; $tabSiren[]=$siren; } } return array_unique($tabSiren); } /** Recherche d'entreprise par leur actionnaire ** ** @param string $nom Raison sociale / Nom de l'actionnaire (obligatoire) ** @param string $cpVille CP, Ville ** @param integer $siren Siren de l'actionnaire ** @param string $pays Pays de l'actionnaire ** @param string $detention Niveau de détention de l'actionnaire ** @param integer $deb Position du curseur dans la liste des réponses (0 par défaut) ** @param integer $nbRep Nombre de réponses retournées au maximum par cette requete (20 par défaut) ** @param integer $maxRep Nombre de réponses recherchées au maximum (200 par défaut) ** @param bool $pertinence Recherche orthographique stricte sur les noms et prénoms (si true) ** @return Liste des entreprises trouvées **/ public function rechercheActionnaire($nom, $cpVille='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) { debugLog('I',"rechercheActionnaire de $nom, $cpVille, $pays, $siren entre $pctMin et $pctMax% (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__); $formR = array( 'type' => 'act', 'siren' => $siren, 'actNomRS' => join(' ', array($nom, $cpVille)), 'pays' => $pays, 'pctMin' => $pctMin, 'pctMax' => $pctMax, ); $version = 1; switch($version) { case 1: require_once 'Metier/sphinx/rechercheFonc.php'; $result = rechercheAct($formR, $deb, $nbRep, $maxRep); break; case 2: require_once 'Metier/sphinx2/rechercheFonc.php'; $recherche = new rechercheFonc(); $result = $recherche->rechercheAct($formR, $deb, $nbRep, $maxRep); break; } return $result; } /** Retourne les informations relatives au groupe du siren donné ** @param string $siren Siren de l'entreprise **/ public function getInfoGroupe($siren) { if ($siren<1000) return false; $tmp=$this->iDb->select('etablissements_act', 'raisonSociale, enseigne, sigle, identite_pre, adr_num, adr_btq, adr_typeVoie, adr_libVoie, adr_comp, adr_cp, adr_ville, adr_dep, adr_com, tel, fax, siren, sirenGrp', "siren=(SELECT sirenGrp FROM etablissements_act WHERE siren=$siren AND siege=1) LIMIT 0,1", false, MYSQL_ASSOC); $tabEnt=$tmp[0]; $sirenGrp=$tabEnt['siren']; //print_r($tabEnt); if ($sirenGrp<1000) return false; /** Table des Nafs5 => Secteurs **/ $tmp=$this->iDb->select('tabNaf5', 'codNaf2, codNaf1', '1 GROUP BY codNAf2', false, MYSQL_ASSOC); $tabNAf2=array(); foreach ($tmp as $tmp2) { $tabNAf2[$tmp2['codNaf2']]=$tmp2['codNaf1']; } $tabNaf2Lib=array( 'A'=>'Agriculture, sylviculture et pêche', 'B'=>'Industries extractives', 'C'=>'Industrie manufacturière', 'D'=>'Production et distribution d\'électricité, de gaz, de vapeur et d\'air conditionné', 'E'=>'Production et distribution d\'eau ; assainissement, gestion des déchets et dépollution', 'F'=>'Construction', 'G'=>'Commerce ; réparation d\'automobiles et de motocycles', 'H'=>'Transports et entreposage', 'I'=>'Hébergement et restauration', 'J'=>'Information et communication', 'K'=>'Activités financières et d\'assurance', 'L'=>'Activités immobilières', 'M'=>'Activités spécialisées, scientifiques et techniques', 'N'=>'Activités de services administratifs et de soutien', 'O'=>'Administration publique', 'P'=>'Enseignement', 'Q'=>'Santé humaine et action sociale', 'R'=>'Arts, spectacles et activités récréatives', 'S'=>'Autres activités de services', 'T'=>'Activités des ménages en tant qu\'employeurs ; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre', 'U'=>'Activités extra-territoriales', ); $tabRet=array( 'grpNom' => $tabEnt['raisonSociale'], 'grpEnseigne' => $tabEnt['enseigne'], 'grpSigle' => $tabEnt['sigle'], //'grpEnseigne' => $tabEnt['identite_pre'], 'grpAdrNum' => $tabEnt['adr_num'], 'grpAdrBtq' => $tabEnt['adr_btq'], 'grpAdrTypeVoie'=> $tabEnt['adr_typeVoie'], 'grpadrLibVoie' => $tabEnt['adr_libVoie'], 'grpAdrComp' => $tabEnt['adr_comp'], 'grpAdrCP' => $tabEnt['adr_cp'], 'grpAdrVille' => $tabEnt['adr_ville'], 'grpAdrDep' => $tabEnt['adr_dep'], 'grpAdrCom' => $tabEnt['adr_com'], 'grpTel' => $tabEnt['tel'], 'grpFax' => $tabEnt['fax'], 'grpSiren' => $tabEnt['siren'], //'grpSirenGrp' => $tabEnt['sirenGrp'], ); $tmp=$this->iDb->select('etablissements_act', 'eff_entrep, dateCrea_ent AS dateCrea, dateImmat*1 AS dateImmat, bilFK, bilFL, ape_entrep, avisCs', "sirenGrp=$sirenGrp AND siege=1", false, MYSQL_ASSOC); $grpNbEnt=$grpEffectif=$grpCAExp=$grpCA=0; $grpDateCrea=$grpDateImmat=date('Ymd'); foreach ($tmp as $tabEnt) { $grpNbEnt++; $grpEffectif+=$tabEnt['eff_entrep']; if ($grpDateCrea>$tabEnt['dateCrea'] && $tabEnt['dateCrea']>=19000101) $grpDateCrea=$tabEnt['dateCrea']; if ($grpDateImmat>$tabEnt['dateImmat'] && $tabEnt['dateImmat']>=19000101) $grpDateImmat=$tabEnt['dateImmat']; $grpCAExp+=$tabEnt['bilFK']; $grpCA+=$tabEnt['bilFL']; /* @$tabApe5[''.$tabEnt['ape_entrep']]['nb']++; @$tabApe5[''.$tabEnt['ape_entrep']]['ca']+=$tabEnt['bilFL']; @$tabApe5[''.$tabEnt['ape_entrep']]['eff']+=$tabEnt['eff_entrep'];*/ @$tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['nb']++; @$tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['ca']+=$tabEnt['bilFL']; @$tabSecteur[$tabNAf2[''.substr($tabEnt['ape_entrep'],0,2)]]['eff']+=$tabEnt['eff_entrep']; @$tabAvis[$tabEnt['avisCs']]++; } foreach ($tabSecteur as $secteur=>$tmp) { $tabSecteur2[$secteur]['activite']=$tabNaf2Lib[$secteur]; $tabSecteur2[$secteur]['nb']=$tmp['nb']; $tabSecteur2[$secteur]['nb_tx']=round($tmp['nb']*100/$grpNbEnt,2); $tabSecteur2[$secteur]['ca']=$tmp['ca']; $tabSecteur2[$secteur]['ca_tx']=round($tmp['ca']*100/$grpCA,2); $tabSecteur2[$secteur]['eff']=$tmp['eff']; $tabSecteur2[$secteur]['eff_tx']=round($tmp['eff']*100/$grpEffectif,2); } $tabRet['grpNbEntrep']=$grpNbEnt; $tabRet['grpEffectif']=$grpEffectif; if ($grpDateCrea<$grpDateImmat) $tabRet['grpAnneCreation']=substr($grpDateCrea,0,4); else $tabRet['grpAnneCreation']=substr($grpDateImmat,0,4); $tabRet['grpCAExport']=$grpCAExp; $tabRet['grpCA']=$grpCA; if ($grpCA>=500000000) $tabRet['grpGrandGroupeFr']=1; else $tabRet['grpGrandGroupeFr']=0; // $tabRet['ape5']=$tabApe5; $tabRet['secteur']=$tabSecteur2; //$tabRet['avisCs']=$tabAvis; return $tabRet; } } ?>