class MLiens {
public $siren=0;
private $tabChars=array('é'=>'é', 'ç'=>'ç','è'=>'è','à '=>'à');
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.',
);
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;
$iDb=new WDB();
$tab=$iDb->select('liens', 'Siren1, ActionPart, Pmin, Pmax, MajMin, PpPm, Siren2, RaisonSociale, Pays, actif, source', "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=false;
$tabRet=array();
foreach ($tab as $i=>$lien) {
if ($lien['source']>=1700 && $lien['source']<=1720) $source=1700;
else $source=$lien['source'];
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'];
$tabRet[]=array( 'Pmin' => number_format($lien['Pmin']*1,2,',',''),
'MajMin' => $majMin,
'RaisonSociale' => strtr($lien['RaisonSociale'],$this->tabChars),
'Pays' => $libPays,
'Siren' => $lien['Siren2'],
'Actif' => $lien['actif']);
}
$sourcePre=$source;
}
if (count($tabRet)==0) {
$iInsee=new MInsee();
$tabTmp=$iInsee->getIdentiteLight($siren);
switch ($tabTmp['FJ']*1) {
case 7111:
case 7113:
case 7120:
case 7150:
case 7160:
case 7171:
case 7172:
case 7179:
case 7190:
case 7229:
case 7331:
case 7349:
case 7351:
case 7352:
case 7364:
case 7365:
case 7366:
case 7371:
case 7372:
case 7373:
case 7379:
case 7381:
case 7382:
case 7383:
case 7384:
case 7385:
case 7389:
case 7410:
case 7430:
case 7450:
case 7490:
$tabRet[]=array('Pmin' => 0,
'MajMin' => '+',
'RaisonSociale' => 'ETAT FRANCAIS',
'Pays' => '',
'Siren' => 0,
'Actif' => 1);
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,
'MajMin' => '+',
'RaisonSociale' => strtoupper($typeCC.' '.preg_replace('/^(CA|CC|CU|SAN) /Uis', '',$tabCC['libEPCI'])),
'Pays' => '',
'Siren' => $tabCC['codEPCI'],
'Actif' => 1);
break;
}
}
if (count($tabRet)==0) {
$iInsee=new MInsee();
$tabTmp=$iInsee->getIdentiteLight($siren);
$fj=$tabTmp['FJ']*1;
if ($fj==5498) $strFonctions=",'Gérant'";
else $strFonctions='';
$adresse=end(explode(' ', $tabTmp['AdresseVoie']));
$codePostal=$tabTmp['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',
"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='';
$tabRet[]=array( 'Pmin' => 0,
'MajMin' => $majMin,
'RaisonSociale' => trim(preg_replace('/ +/', ' ', $lien['dirRS'].' '.$genre.' '.$lien['nom'].' '.$lien['prenom'])),
'Pays' => '',
'Siren' => $siren2,
'Actif' => $lien['actif']);
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);
}
}
}
}
}
//@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']>=500 && $lien['source']<=520) $source=500;
else $source=$lien['source'];
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']);
$sourcePre=$source;
}
if (count($tabRet)==0) {
$iInsee=new MInsee();
$tabTmp=$iInsee->getIdentiteLight($siren);
switch ($tabTmp['FJ']*1) {
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);
@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug Fin $siren ($actifsUniquement)", print_r($tmp, true)) ;
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,
'MajMin' => '+',
'RaisonSociale' => 'COMMUNE DE '.strtoupper($tabCom['libCommune']),
'Pays' => '',
'Siren' => $sirenCom,
'Actif' => 1);
}
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, '
(.*)<\/span> - Participation<\/span> : (.*) % (.*)<\/span> - Participation<\/span> :(.*)% CA (.*)<\/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('/
(.*)<\/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
', '
', '
/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);
}
}
?>