Recherche Actionnaire

This commit is contained in:
Michael RICOIS 2011-07-11 09:54:09 +00:00
parent 8ac334561e
commit f6d5f8232c
3 changed files with 171 additions and 221 deletions

View File

@ -493,10 +493,8 @@ class WsEntreprise {
/** Recherche d'entreprise par leur actionnaire
**
** @param string $nom Nom de l'actionnaire (obligatoire)
** @param string $prenom Prénom de l'actionnaire
** @param date $dateNaiss Date de naissance de la SSAA-MM-JJ, SSAA-MM ou SSAA
** @param string $lieuNaiss Lieu de naissance (CP, Ville ou Pays)
** @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 $pctMin Niveau de détention Minimam de l'actionnaire
@ -507,49 +505,56 @@ class WsEntreprise {
** @param bool $pertinence Recherche orthographique stricte sur les noms et prénoms (si true)
** @return Liste des entreprises trouvées
**/
function searchAct($nom, $prenom='', $dateNaiss='', $lieuNaiss='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) {
debugLog('I',"Recherche Actionnaire de $nom, $prenom, $dateNaiss, $lieuNaiss (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
$mLiens=new MLiens();
$etabs=$mLiens->rechercheActionnaire($nom, $prenom, $dateNaiss, $lieuNaiss, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence);
function searchAct($nom, $cpVille='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) {
debugLog('I',"Recherche Actionnaire de $nom, $cpVille (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
//$etabs=$this->iInsee->rechercheDir($nom, $prenom, /*$fonction=*/'', $dateNaiss, $lieuNaiss, $deb, $nbRep, $maxRep, $pertinence);
if (!empty($pays)){
$wdb = new WDB('jo');
$result = $wdb->select('tabPays', 'codPays3', "libPays LIKE '".$pays);
if (count($result>0)){
$pays = $result[0]['codPays3'];
} else {
$pays = '';
}
}
$mLiens = new MLiens('');
$etabs = $mLiens->rechercheActionnaire($nom, $cpVille, $siren, $pays, $pctMin, $pctMax, $deb, $nbRep, $maxRep, $pertinence);
$tabRet2=array();
foreach ($etabs['reponses'] as $etab)
$tabRet2[]=array( 'id'=>$etab['id'],
'Pertinence'=>$etab['Pertinence'],
'Siret'=>$etab['Siret'],
'Siege'=>$etab['Siege'],
'Nom'=>prepareString(strtr($etab['Nom'],'/*',' ')),
'Nom2'=>prepareString($etab['Nom2']),
'Sigle'=>prepareString($etab['Sigle']),
'Enseigne'=>prepareString($etab['Enseigne']),
'Adresse'=>prepareString($etab['Adresse']),
'Adresse2'=>prepareString($etab['Adresse2']),
'CP'=>$etab['CP'],
'Ville'=>prepareString($etab['Ville']),
'Tel'=>$etab['Tel'],
'Fax'=>$etab['Fax'],
'FJ'=>$etab['FJ'],
'FJLib'=>prepareString($this->iInsee->getLibelleFJ($etab['FJ'])),
'Siren'=>$etab['Siren'],
'Nic'=>$etab['Nic'],
'Actif'=>$etab['Actif'],
'NafEtab'=>$etab['NafEtab'], // Etablissement
'NafEtabLib'=>prepareString($this->iInsee->getLibelleNaf($etab['NafEtab'])), // Etablissement
'NafEnt'=>$etab['NafEnt'], // Entreprise
'NafEntLib'=>prepareString($this->iInsee->getLibelleNaf($etab['NafEnt'])),
// Dirigeant
'DirRs'=>prepareString($etab['DirRs']),
'DirNom'=>prepareString($etab['DirNom']),
'DirPrenom'=>prepareString($etab['DirPrenom']),
'DirNomUsage'=>prepareString($etab['DirNomUsage']),
'DirDateEffet'=>$etab['DirDateEffet'],
'DirFonction'=>prepareString($etab['DirFonction']),
'DirDepart'=>$etab['DirDepart'],
);
$tabRet=$etabs;
$tabRet2[]=array(
'id'=>$etab['id'],
'Pertinence'=>$etab['Pertinence'],
'Siret'=>$etab['Siret'],
'Siege'=>$etab['Siege'],
'Nom'=>prepareString(strtr($etab['Nom'],'/*',' ')),
'Nom2'=>prepareString($etab['Nom2']),
'Sigle'=>prepareString($etab['Sigle']),
'Enseigne'=>prepareString($etab['Enseigne']),
'Adresse'=>prepareString($etab['Adresse']),
'Adresse2'=>prepareString($etab['Adresse2']),
'CP'=>$etab['CP'],
'Ville'=>prepareString($etab['Ville']),
'Tel'=>$etab['Tel'],
'Fax'=>$etab['Fax'],
'FJ'=>$etab['FJ'],
'FJLib'=>prepareString($this->iInsee->getLibelleFJ($etab['FJ'])),
'Siren'=>$etab['Siren'],
'Nic'=>$etab['Nic'],
'Actif'=>$etab['Actif'],
'NafEtab'=>$etab['NafEtab'], // Etablissement
'NafEtabLib'=>prepareString($this->iInsee->getLibelleNaf($etab['NafEtab'])), // Etablissement
'NafEnt'=>$etab['NafEnt'], // Entreprise
'NafEntLib'=>prepareString($this->iInsee->getLibelleNaf($etab['NafEnt'])),
'ActNomRs' => $etab['ActNomRs'],
'ActPays' => $etab['ActPays'],
'ActDateLien' => $etab['ActDateLien'],
'ActActif' => $etab['ActActif'],
'ActPmin' => $etab['ActPmin'],
);
$tabRet = $etabs;
$tabRet['reponses']=$tabRet2;
if ($tabRet['nbReponses']==0) {

View File

@ -706,10 +706,8 @@ class MLiens {
/** Recherche d'entreprise par leur actionnaire
**
** @param string $nom Nom de l'actionnaire (obligatoire)
** @param string $prenom Prénom de l'actionnaire
** @param date $dateNaiss Date de naissance de la SSAA-MM-JJ, SSAA-MM ou SSAA
** @param string $lieuNaiss Lieu de naissance (CP, Ville ou Pays)
** @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
@ -719,32 +717,18 @@ class MLiens {
** @param bool $pertinence Recherche orthographique stricte sur les noms et prénoms (si true)
** @return Liste des entreprises trouvées
**/
public function rechercheActionnaire($nom, $prenom='', $dateNaiss='', $villeNaiss='', $siren=0, $pays='', $pctMin=0, $pctMax=100, $deb=0, $nbRep=20, $maxRep=200, $pertinence=false) {
debugLog('I',"rechercheActionnaire de $nom, $prenom, $fonction, $dateNaiss, $villeNaiss, $pays, $siren entre $pctMin et $pctMax% (Max Rep=$nbRep)",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
$jour=$mois=$annee='';
if ($dateNaiss<>'' && $dateNaiss<>'//' && $dateNaiss<>'0/0/0') {
$tabDateNaiss=explode('/', $dateNaiss);
$jour=$tabDateNaiss[0]*1;
if ($jour<1 || $$jour>31) $jour='';
$mois =$tabDateNaiss[1]*1;
if ($mois<1 || $mois>12) $mois='';
$annee=$tabDateNaiss[2]*1;
if ($annee>0 && $annee<100) $annee=('19'.$annee)*1;
if ($annee<1800 || $annee>date('Y')*1) $annee='';
}
$formR=array('type' => 'act',
'nom' => $nom,
'prenom' => $prenom,
'dirDateNaissAAAA' => $annee,
'dirDateNaissMM' => $mois,
'dirDateNaissJJ' => $jour,
// 'departement' => 'D',
'cpVille' => $villeNaiss,
);
return rechercheDir($formR, $deb, $nbRep, $maxRep);
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,
);
return rechercheAct($formR, $deb, $nbRep, $maxRep);
}
}

View File

@ -529,7 +529,7 @@ function initSphinx(&$sphinx, $mode, $pass, $deb, $nbRep, $max)
debugln();
$sphinx->SetMatchMode($mode);
$sphinx->resetFilters();
$sphinx->SetLimits(intval($deb), $nbRep, $max);
$sphinx->SetLimits(intval($deb), intval($nbRep), intval($max));
}
// --------------------------------------------------------------------------- //
@ -764,6 +764,14 @@ function reponse(&$resSphinx, &$resDB, $criteres, $time, $formR, $form2crit,
$ret['reponses'][$i]['DirDateEffet'] = '';
$ret['reponses'][$i]['DirFonction'] = $ligneDir[$i]['fonction_lib'];
$ret['reponses'][$i]['DirDepart'] = '';
}
if ($formR['type'] == 'act') {
// Actionnaire
$ret['reponses'][$i]['ActNomRs'] = $ligneDir[$i]['ActNomRs'];
$ret['reponses'][$i]['ActPays'] = $ligneDir[$i]['ActPays'];
$ret['reponses'][$i]['ActDateLien'] = $ligneDir[$i]['ActDateLien'];
$ret['reponses'][$i]['ActActif'] = $ligneDir[$i]['ActActif'];
$ret['reponses'][$i]['ActPmin'] = $ligneDir[$i]['ActPmin'];
}
}
if ($formR['type'] == 'dir') {
@ -791,6 +799,25 @@ function reponse(&$resSphinx, &$resDB, $criteres, $time, $formR, $form2crit,
debugln('erreur '.$ligneDir[$i]['id'].' non trouve');
}
}
}
if ($formR['type'] == 'act') {
for (; $i < count($ligneDir); ++$i) {
debugln($ligneDir[$i]['id'].' ==> '.$i);
for ($j = $i - 1; $j >= 0; --$j) {
if ($ret['reponses'][$j]['id'] == $ligneDir[$i]['id']) {
$ret['reponses'][$i] = $ret['reponses'][$j];
$ret['reponses'][$i]['ActNomRs'] = $ligneDir[$i]['ActNomRs'];
$ret['reponses'][$i]['ActPays'] = $ligneDir[$i]['ActPays'];
$ret['reponses'][$i]['ActDateLien'] = $ligneDir[$i]['ActDateLien'];
$ret['reponses'][$i]['ActActif'] = $ligneDir[$i]['ActActif'];
$ret['reponses'][$i]['ActPmin'] = $ligneDir[$i]['ActPmin'];
break;
}
}
if ($j < 0) {
debugln('erreur '.$ligneDir[$i]['id'].' non trouve');
}
}
}
if ($formR['type'] == 'ent') {
$ret['pass'] = $resSphinx['pass'];
@ -959,158 +986,92 @@ function rechercheDir(&$formR, $deb, $nbRep, $max)
// --------------------------------------------------------------------------- //
// Recherche par actionnaire
// --------------------------------------------------------------------------- //
function rechercheAct(&$formR, $deb, $nbRep, $max)
function constructRequete($formR, $sphinxCriteres)
{
foreach($sphinxCriteres as $name => $critere) {
if ($name == 'Req') {
$requete .= $formR[$critere];
}
if ($name[0] == '@') {
if(!empty($formR[$critere]))
$parametres .= ' '.$name.' '.$formR[$critere];
}
}
echo $sphinxRequete = '"'.$requete.'" '.$parametres;
return ($sphinxRequete);
}
function rechercheAct($formR, $deb, $nbRep, $max)
{
global $gDatabaseJO;
// Duree totale
$total_time = 0;
$sphinx = clientSphinx($formR);
if ($sphinx == false) {
return array('nbReponses' => 0,
'nbReponsesTotal' => 0,
'duree' => $total_time,
'erreur' => 'Formulaire vide');
}
/*
id, Siren1, RaisonSociale, Siren2,
actif, dateLien, as dateMaj,
source, PminNum, MajMin, PpPm, Pays
*/
$criteresSphinx = array('nom' => '@nom',
//'prenom' => '@prenom',
//'ville' => '@naissance_lieu'
);
$form2crit = array('nom' => 'N',
'prenom' => 'P',
'dirDateNaissAAAA' => 'A',
'dirDateNaissMM' => 'M',
'dirDateNaissJJ' => 'J',
'departement' => 'D',
'ville' => 'V');
$index = 'dir';
$mode = SPH_MATCH_EXTENDED2;
$sphinx->SetSortMode(SPH_SORT_EXTENDED, 'actif DESC');
$index = 'act';
$mode = 'SPH_MATCH_EXTENDED2';
$pass = 0;
$criteres = 'NPAMJDV';
initSphinx($sphinx, $mode, $pass, $deb, $nbRep, $max);
$Criteres = array('Siren2' => 'siren',
'Req' => 'actNomRS',
'@Pays' => 'pays',
'PminNum' => 'pctMax'
);
$form2crit = array('actNomRS' => 'N',
'pays' => 'P',
'pctMax' => 'M'
);
$Requete = constructRequete($formR, $Criteres);
if(!empty($formR['pctMin']))
$sphinx->SetFilterRange('PminNum', $formR['pctMin'], 99);
if(!empty($formR['pctMax']))
$sphinx->SetFilterRange('PminNum', $formR['pctMin'], 99);
if(!empty($formR['pctMin']) and !empty($formR['pctMax']))
$sphinx->SetFilterRange('PminNum', $formR['pctMix'], $formR['pctMax']);
while (empty($criteres) == false) {
debugln("criteres: $criteres");
filtreDateNaiss($formR, $criteres, $sphinx);
filtreAdresse($formR, $criteres, $sphinx);
$requete_sphinx = '';
foreach ($formR as $label => $valeur) {
if (empty($valeur) == false &&
isset($criteresSphinx[$label]) == true &&
strstr($criteres, $form2crit[$label]) != false) {
if ($label == 'prenom') {
$requete_sphinx .= $criteresSphinx[$label].
' "'.$valeur.'"/1 ';
} else {
$requete_sphinx .= $criteresSphinx[$label].' '.$valeur.' ';
}
}
}
debugln("requete='$requete_sphinx'");
$sphinx->SetSortMode(SPH_SORT_EXTENDED, 'actif DESC');
$resSphinx = $sphinx->Query($requete_sphinx, $index);
if ($resSphinx != false) {
$total_time += $resSphinx['time'];
}
if ($resSphinx != false && $resSphinx['total'] > 0) {
break;
}
$criteres = criteresDir($criteres, $index);
$sphinx->resetFilters();
}
afficheStatusSphinx($sphinx, $resSphinx);
if ($resSphinx == false) {
return array('nbReponses' => 0,
'nbReponsesTotal' => 0,
'duree' => $total_time,
'erreur' => $sphinx->GetLastError(),
'criteres' => $criteres);
}
if ($resSphinx['total'] == 0) {
return array('nbReponses' => 0,
'nbReponsesTotal' => 0,
'duree' => $total_time,
'criteres' => $criteres);
}
if (DEBUG) {
$base2form = array('adr_dep' => 'departement',
'nom' => 'nom',
'prenom' => 'prenom',
'naissance_nom' => 'nom',
'naissance_date' => 'dirDateNaissAAAA',
'naissance_lieu' => 'ville');
afficheDB($resSphinx, $formR, $form2crit, 'dirigeants', $base2form,
$deb, $nbRep);
}
// Recherche des sieges
if ($gDatabaseJO == false) {
return array('nbReponses' => 0,
'nbReponsesTotal' => $resSphinx['total'],
'duree' => $total_time,
'erreur' => 'Base inaccessible');
}
if (isset($resSphinx['matches']) == false) {
return array('nbReponses' => 0,
'nbReponsesTotal' => $resSphinx['total'],
'duree' => $total_time,
'erreur' => 'Aucun r&eacute;sultat');
}
$requeteDB =
'select e.id, d.nom, d.prenom, l.libelle AS fonction_lib '.
// d.rs, d.nomUsage, d.naissance_date, d.naissance_lieu,
' from dirigeants d, etablissements e, bodacc_fonctions l'.
' where d.siren=e.siren and d.fonction_code=l.codeFct AND e.siege=1 and (d.id='.
$resSphinx['matches'][0]['id'];
for ($i = 1; $i + $deb < $resSphinx['total'] && $i < $nbRep; ++$i) {
$requeteDB .= ' or d.id='.$resSphinx['matches'][$i]['id'];
}
$requeteDB .= ')';
$requeteDB .= ' GROUP BY d.siren, d.id';
$requeteDB .= ' ORDER BY e.rang DESC, e.actif DESC, e.siege DESC, e.id ASC';
debugln();
debugln("requeteDB='$requeteDB'");
$resDB = $gDatabaseJO->query($requeteDB);
// Reponse
$ligneDir = array();
$ligne = $resDB->fetch_assoc();
$requeteDB = 'select id, CONCAT(siren,nic) AS siret, siren, nic, siege, '.
'raisonSociale, sigle, enseigne, adr_num, adr_typeVoie, adr_libVoie, '.
'adr_comp, adr_cp, adr_ville, tel, fax, cj, actif, ape_etab, '.
'ape_entrep from etablissements where id='.$ligne['id'];
$ligneDir[0] = array('id' => $ligne['id'],
'nom' => $ligne['nom'],
'prenom' => $ligne['prenom'],
'fonction_lib' => $ligne['fonction_lib']);
for ($i = 1; $i < $resDB->num_rows; ++$i) {
$ligne = $resDB->fetch_assoc();
$requeteDB .= ' or id='.$ligne['id'];
$ligneDir[$i] = array('id' => $ligne['id'],
'nom' => $ligne['nom'],
'prenom' => $ligne['prenom'],
'fonction_lib' => $ligne['fonction_lib']);
}
$requeteDB .= ' ORDER BY rang DESC, actif DESC, siege DESC, id ASC';
debugln();
debugln("requeteDB='$requeteDB'");
$resDB = $gDatabaseJO->query($requeteDB);
return reponse($resSphinx, $resDB, $criteres, $total_time, $formR,
$form2crit, $deb, $ligneDir);
$sphinxreturn = $sphinx->Query($Requete, $index);
$criteres = 'NPM';
$requette = 'SELECT l.id AS lienId, l.actif AS lienActif, l.source, l.Pmin, l.PpPm, l.id2, l.Siren2, l.RaisonSociale, l.Pays, l.dateLien, e.id, CONCAT( siren, nic ) AS siret, siren, nic, siege, e.raisonSociale, sigle, enseigne, adr_num, adr_typeVoie, adr_libVoie, adr_comp, adr_cp, adr_ville, tel, fax, cj, e.actif, ape_etab, ape_entrep FROM liens l, etablissements e WHERE l.Siren1 = e.siren AND e.siege = 1 AND (';
$i = 0;
foreach($sphinxreturn['matches'] as $id => $element) {
if($i == 0)
$requette.= ' l.id='.$element['id'];
else
$requette.= ' OR l.id='.$element['id'];
$i++;
}
$requette.= ') GROUP BY l.Siren1, l.id ORDER BY e.rang DESC, e.actif DESC, e.siege DESC, e.id ASC';
$req = $gDatabaseJO->query($requette);
//$requette2 = 'SELECT * FROM etablissements WHERE';
$requette2 = 'select id, CONCAT(siren,nic) AS siret, siren, nic, siege, '.
'raisonSociale, sigle, enseigne, adr_num, adr_typeVoie, adr_libVoie, '.
'adr_comp, adr_cp, adr_ville, tel, fax, cj, actif, ape_etab, '.
'ape_entrep from etablissements where';
for($i = 0; $i < $req->num_rows; $i++) {
$ligne = $req->fetch_assoc();
$ligneAct[$i] = array(
'ActNomRs' => $ligne['RaisonSociale'],
'ActPays' => $ligne['Pays'],
'ActDateLien' => $ligne['dateLien'],
'ActActif' => $ligne['actif'],
'ActPmin' => $ligne['Pmin'],
);
if($i == 0){
$requette2.= ' id='.$ligne['id'];
} else {
$requette2.= ' OR id='.$ligne['id'];
}
}
$requette2 .= ' ORDER BY rang DESC, actif DESC, siege DESC, id ASC';
$req = $gDatabaseJO->query($requette2);
return reponse($sphinxreturn, $req, $criteres, $sphinxreturn['time'], $formR, $form2crit, $deb, $ligneAct);
}
// --------------------------------------------------------------------------- //
@ -1577,4 +1538,4 @@ function recherche(&$formR, $deb = 0, $nbRep = 20, $max = 1000)
'erreur' => 'Type de recherche inconnu');
}
}
?>
?>