From f6d5f8232cbe7177d2101d4112ed364a26ca9dbe Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Mon, 11 Jul 2011 09:54:09 +0000 Subject: [PATCH] Recherche Actionnaire --- html/ws2/WsEntreprise.php | 91 +++++----- includes/partenaires/classMLiens.php | 44 ++--- includes/sphinx/rechercheFonc.php | 257 ++++++++++++--------------- 3 files changed, 171 insertions(+), 221 deletions(-) diff --git a/html/ws2/WsEntreprise.php b/html/ws2/WsEntreprise.php index 95774cc3..a0d0b553 100644 --- a/html/ws2/WsEntreprise.php +++ b/html/ws2/WsEntreprise.php @@ -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) { diff --git a/includes/partenaires/classMLiens.php b/includes/partenaires/classMLiens.php index fff21086..0ad9461a 100644 --- a/includes/partenaires/classMLiens.php +++ b/includes/partenaires/classMLiens.php @@ -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); } } diff --git a/includes/sphinx/rechercheFonc.php b/includes/sphinx/rechercheFonc.php index 4778fedc..d20f6ea1 100644 --- a/includes/sphinx/rechercheFonc.php +++ b/includes/sphinx/rechercheFonc.php @@ -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é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'); } } - ?> \ No newline at end of file +?> \ No newline at end of file