'é', 'ç'=>'ç','è'=>'è','à '=>'à'); 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; } /** 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; $iInsee=new MInsee(); $iDb=new WDB(); $tabIdentite=$iInsee->getIdentiteLight($siren); $nic=$tabIdentite['Nic']; $tab=$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; $tabRet=array(); foreach ($tab as $i=>$lien) { if ($lien['source']>=1700 && $lien['source']<=1800) $source=1700; //if ($lien['source']>=1700 && $lien['source']<=1720) $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=$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']; if ($lien['dateInsert']>$dateMaj) $dateMaj=$lien['dateInsert']; if ($lien['dateUpdate']>$dateMaj) $dateMaj=$lien['dateUpdate']; $tabRet[]=array( 'Pmin' => number_format($lien['Pmin']*1,2,',',''), 'PminNum' => $lien['Pmin']*1, '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=$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=$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=$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 ($iInsee->valideSiren($sirenCom)) { if ($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=$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=$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']; } /* 'Nom'=>prepareString(strtr($etab['Nom'],'/*',' ')), 'Nom2'=>prepareString($etab['Nom2']), 'Sigle'=>prepareString($etab['Sigle']), 'Enseigne'=>prepareString($etab['Enseigne']), 'Adresse'=>prepareString($etab['Adresse']), 'CP'=>$etab['CP'], 'Ville'=>prepareString($etab['Ville']), 'Tel'=>$etab['Tel'], 'Fax'=>$etab['Fax'], 'Nic'=>$etab['Nic'], 'Actif'=>$etab['Actif'], 'NafEtab'=>$etab['NafEtab'], // Etablissement 'NafEtabLib'=>prepareString($etab['NafEtabLib']), 'NafEnt'=>$etab['NafEnt'], // Entreprise 'NafEntLib'=>prepareString($etab['NafEntLib']),*/ $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=$iInsee->getIdentiteLight($siren); $nom2=$entrep2['Nom']; $pays2='FRA'; if (substr($entrep2['FJ'],0,1)*1<>1) $ppPm='M'; $entrep=$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=$iDb->select('liens', 'count(*)', "Siren1=$siren AND (Siren2=$siren2 OR (RaisonSociale='".addslashes($nom)."' AND Pays='$pays'))"); if ($res[0][0]>0) { if (!$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 (!$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=$iDb->select('liens', 'count(*)', "Siren1=$siren2 AND (Siren2=$siren OR (RaisonSociale='$nom2' AND Pays='$pays2'))"); if ($res[0][0]>0) { if (!$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 (!$iDb->insert('liens', $tabInsert2, true)) $errMaj=1016169; } /** Insertion du dirigeant pour l'actionnaire en base **/ $dirs=$iDb->select('rncs_dirigeants','siren', "siren=$siren2", true, MYSQL_ASSOC); if (count($dirs)==0) { $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=$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; $iDb=new WDB(); $tab=$iDb->select('liens LEFT JOIN tabPays ON codPays3=Pays', 'Siren1, ActionPart, Pmin, Pmax, MajMin, PpPm, Siren2, RaisonSociale, Pays, libPays, actif, source', "Siren1='$siren' AND ActionPart=2 ORDER BY source DESC, actif DESC, Pmin DESC", true, MYSQL_ASSOC); // OR Siren2='$siren // $tabPartDB=mysql_select('dbo_liens_fi', 'SirenEntite, NomAdresse, PourcentageDetenu, Ville, Lien, MAJLien, MAJImport', "Siren='$siren' AND CodeLien='PA' ORDER BY PourcentageDetenu DESC"); $tabRet=array(); $sourcePre=false; foreach ($tab as $i=>$lien) { if ($lien['source']>=1700 && $lien['source']<=1800) $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 $tabRet[]=array('Pmin' => number_format($lien['Pmin']*1,2,',',''), 'PminNum' => $lien['Pmin']*1, 'MajMin' => $lien['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) { $iInsee=new MInsee(); $tabTmp=$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=$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=$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 ($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=$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 ($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; } // } return $tabRet; } public function getLiens($siren=false) { $tabA=$this->getActionnaires($siren); $tabP=$this->getParticipations($siren); return array( 'actionnaires'=>$tabA, 'participations'=>$tabP); } private function getLiensPartenaires($siren=false) { if (!$siren) $siren=$this->siren; /** Le partenaire pour les liens Actionnaires/Participations est infobilan.decideur.com **/ $urlRacine='http://infobilan.decideur.com/'; $tabPost=array( 'choix'=>'1', 'pagePrecedente'=>'recherche_entreprise.html', 'nomsocRech'=>'', 'cpRech'=>'', 'villeRech'=>'', 'nomdirRech'=>'', 'predirRech'=>'', 'sirenRech'=>$this->siren, 'telRech'=>'', 'Rechercher.x'=>round(79), 'Rechercher.y'=>round(19),); $url=$urlRacine.'liste_result.html'; $referer=$urlRacine.'recherche_entreprise.html'; $page=getUrl($url,'', $tabPost, $referer, false, 'infobilan.decideur.com'); $this->body=$page['body']; $strCookie=$page['header']['Set-Cookie']; $refererInfoD=$url; if(preg_match_all('/(.*)<\/a><\/span>
/i', $page['body'], $matches)) { $urlInfoD=$urlRacine.'choix_pdt.html?'.$matches[1][0]; $page=getUrl($urlInfoD,$strCookie,'', $refererInfoD, false, 'infobilan.decideur.com'); $referer=$urlInfoD; if ($this->nscrl==0) $this->nscrl=@getTextInHtml($url, 'nscrlP=', '=','&'); $url=$urlRacine.'fiche_ident.html'; $page=getUrl($url,$strCookie,'', $referer, false, 'infobilan.decideur.com'); $this->body=$page['body']; if ($this->raisonSociale=='') $this->raisonSociale=trim(@getTextInHtml($this->body, 'Société', ' :', '')); if ($this->adresse=='') $this->adresse=trim(@getTextInHtml($this->body, 'Adresse :', '', '')); if ($this->tel=='') $this->tel=trim(@getTextInHtml($this->body, 'Tél', '', '
')); if ($this->fax=='') $this->fax=trim(@getTextInHtml($this->body, 'Fax', ' :', '
')); if ($this->web=='') $this->web=trim(@getTextInHtml($this->body, 'Site Web', '
')); if ($this->mail=='') $this->mail=trim(@getTextInHtml($this->body, 'E-mail', '')); if ($this->naf=='') $this->naf=trim(@getTextInHtml($this->body, 'Code NAF', ' :', '')); if(preg_match('/Capital social<\/span> : (\d*)(.*)
/isU', $this->body, $matches) && ($this->capitalMontant=='' || $this->capitalDevise=='')) { $this->capitalMontant=trim($matches[1]); $this->capitalDevise=trim($matches[2]); } if ($this->fj=='') $this->fj=trim(@getTextInHtml($this->body, 'Forme juridique', ' :', '
')); if ($this->nationalite=='') $this->nationalite=trim(@getTextInHtml($this->body, 'Nationalité', ' :', '')); if ($this->effectif=='') $this->effectif=trim(@getTextInHtml($this->body, 'Effectif', ' :', '
')); if ($this->activite=='') $this->activite=trim(@getTextInHtml($this->body, 'Activité', ' :', '
')); /** Actionnaires **/ $strTmp=trim(@getTextInHtml($this->body, 'ACTIONNAIRES
', '', '

')); if(preg_match_all('/

(.*)<\/span> - Participation<\/span> : (.*) %
(.*)<\/p>/isU', $strTmp, $matches)) { foreach ($matches[1] as $i=>$nom) { $this->tabAct[$i]['nom']=trim($nom); $this->tabAct[$i]['pct']=trim($matches[2][$i]); $this->tabAct[$i]['rcs']=trim(str_replace('RCS : ','',strip_tags($matches[3][$i]))); } } /** Filiales **/ $strTmp=trim(@getTextInHtml($this->body, 'FILIALES
', '

', '

')); if(preg_match_all('/

(.*)<\/span> - Participation<\/span> :(.*)%
(.*)<\/p>/isU', $strTmp, $matches)) { foreach ($matches[1] as $i=>$nom) { $this->tabFil[$i]['nom']=trim($nom); $this->tabFil[$i]['pct']=trim($matches[2][$i]); $this->tabFil[$i]['rcs']=trim(str_replace('RCS :','',strip_tags($matches[3][$i]))); } } /** CA et Résultat **/ $strTmp=trim(@getTextInHtml($this->body, '

PRINCIPAUX ELEMENTS FINANCIERS
', '

', '

')); if(preg_match('/

CA (.*)<\/span>(.*)
/isU', $strTmp, $matches)) { $this->derExerciceAnnee=trim($matches[1]); $this->derExerciceCA=trim(str_replace(':',' ', $matches[2])); } if(preg_match('/Résultat(.*)<\/span>(.*)$/isU', $strTmp, $matches)) { $this->derExerciceResultat=trim(str_replace(':',' ', $matches[2])); } /* $infoBilan=print_r($page, true); $fp=fopen('./infobilan.html', 'w'); fwrite($fp, $infoBilan); fclose($fp); */ } $tabA=$this->getActionnaires($siren); $tabP=$this->getParticipations($siren); return array( 'actionnaires'=>$tabA, 'participations'=>$tabP); } public function getMaisonMereFr($siren, $debug=false) { $tabA=$this->getActionnaires($siren, true); $majTrouve=false; $iInsee=new MInsee(); foreach ($tabA as $i=>$lien) { $sirenMere=$lien['Siren']; $tabIdentiteA=$iInsee->getIdentiteLight($sirenMere); 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); } 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); } 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) { $appel++; //echo "0, $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren DEBUT".EOL; $tabP=$this->getParticipations($siren, false); $iInsee=new MInsee(); foreach ($tabP as $i=>$lien) { $sirenFille=$lien['Siren']; $tabIdentiteP=$iInsee->getIdentiteLight($sirenFille); 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) : ".$tabIdentiteP['Nom']; /* echo "$sirenFille>100".EOL; echo $lien['PminNum'].">=".$pctMin.EOL; echo $lien['MajMin']."==+".EOL; echo "$niveauCour<=$nbNiveau"; */ if ($siren*1==$sirenFille*1) { echo "[D]".EOL;//, $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren détient à ".$lien['Pmin']." (".$lien['MajMin'].") : ".$tabIdentiteP['Nom']." ($sirenFille)".EOL; $tabSiren[]=$siren; } elseif($sirenFille>100 && ($lien['PminNum']>=$pctMin || $lien['MajMin']=='+') && $niveauCour<=$nbNiveaux) { $tabSiren[]=$siren; $niveauCour++; if (in_array($sirenFille,$tabSiren)) echo "[Adeja]".EOL;//echo ", $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren détient à ".$lien['Pmin']." (".$lien['MajMin'].") : ".$tabIdentiteP['Nom']." ($sirenFille)".EOL; else { echo "[A]".EOL;//, $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren détient à ".$lien['Pmin']." (".$lien['MajMin'].") : ".$tabIdentiteP['Nom']." ($sirenFille)".EOL; $tabSiren=$this->getAllParticipations($sirenFille, $pctMin, $nbNiveaux, $niveauCour, $tabSiren, $sirenIni, $sirenMere, $appel); } } elseif($sirenFille>100 && ($lien['PminNum']<$pctMin || $lien['MajMin']=='-')) { echo "[B]".EOL;//, $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren détient à ".$lien['Pmin']." (".$lien['MajMin'].") : ".$tabIdentiteP['Nom']." ($sirenFille)".EOL; $tabSiren[]=$siren; //$tabSiren=$this->getAllParticipations($sirenFille, $pctMin, $tabSiren); } elseif ($sirenFille<100) { echo "[C]".EOL;//, $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren détient à ".$lien['Pmin']." (".$lien['MajMin'].") : ".$tabIdentiteP['Nom']." ($sirenFille)".EOL; $tabSiren[]=$siren; //return $tabSiren; } else { echo "[E]".EOL;//, $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren détient à ".$lien['Pmin']." (".$lien['MajMin'].") : ".$tabIdentiteP['Nom']." ($sirenFille)".EOL; //$tabSiren=array_merge(array($siren), $tabSiren); $tabSiren[]=$siren; //return $tabSiren; //die("Cas pas prévue $siren, $sirenFille, ".$lien['Pmin'].', '.$lien['MajMin'].EOL); } } /* foreach ($tabP as $i=>$lien) { $sirenFille=$lien['Siren']; // $tabIdentiteP=$iInsee->getIdentiteLight($sirenFille); //for($j=1;$j<=$niveauCour; $j++) echo "|\t"; // echo "+ $sirenFille (". $lien['PminNum']."%) : ".$tabIdentiteP['Nom']; /* echo "$sirenFille>100".EOL; echo $lien['PminNum'].">=".$pctMin.EOL; echo $lien['MajMin']."==+".EOL; echo "$niveauCour<=$nbNiveau"; * if($sirenFille>100 && ($lien['PminNum']>=$pctMin || $lien['MajMin']=='+') && $niveauCour<=$nbNiveaux) { $tabSiren[]=$siren; $niveauCour++; if (!in_array($sirenFille,$tabSiren)) { //echo "[A]".EOL;//, $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren détient à ".$lien['Pmin']." (".$lien['MajMin'].") : ".$tabIdentiteP['Nom']." ($sirenFille)".EOL; $tabSiren=$this->getAllParticipations($sirenFille, $pctMin, $nbNiveaux, $niveauCour, $tabSiren, $sirenIni, $sirenMere, $appel); } } }*/ //echo 'Fin Normale'.EOL; //echo "[F], $sirenIni, $sirenMere, $appel, $niveauCour/$nbNiveaux, $siren FIN".EOL; return array_unique($tabSiren); } } ?>