From 74788d6979ceb5631bfe502e9a1e692934616d56 Mon Sep 17 00:00:00 2001 From: Michael RICOIS Date: Mon, 8 Dec 2014 13:42:09 +0000 Subject: [PATCH] Update librairies --- library/Metier/insee/classMInsee.php | 174 +++++++++----- library/Metier/partenaires/classMAmabis.php | 242 +++++++++++++++++--- 2 files changed, 324 insertions(+), 92 deletions(-) diff --git a/library/Metier/insee/classMInsee.php b/library/Metier/insee/classMInsee.php index cb8715a0..d1fcd742 100644 --- a/library/Metier/insee/classMInsee.php +++ b/library/Metier/insee/classMInsee.php @@ -460,6 +460,32 @@ class MInsee 'i720'=>'Modification de l\'adresse ou de l\'identification de l\'établissement', 'i780'=>'Autre modification entraînant la mise à jour d\'au moins une variable du répertoire', 'i781'=>'Autre modification entraînant la mise à jour d\'au moins une variable du répertoire suite à correction d\'erreur', + 'i795'=>'Personne radiée à sa demande de de la base SIRENE diffusion', + // Nouveaux évènements Sirene4 de la quotidienne Insee (Syracuse) + 'iCE' =>'Création établissement', + 'iCS' =>'Création siège', + 'iCTE' =>'Création établissement (transfert)', + 'iCTS' =>'Création siège (transfert)', + 'iSU' =>'Cessation juridique', + 'iME' =>'Modification établissement', + 'iMS' =>'Modification siège', + 'iMTDE' =>'Modification établissement départ (transfert)', + 'iMTAE' =>'Modification établissement arrivée (transfert)', + 'iMTDS' =>'Modification siège départ (transfert)', + 'iMTAS' =>'Modification siège arrivée (transfert)', + 'iMU' =>'Modification entreprise', + 'iRE' =>'Réactivation établissement', + 'iRS' =>'Réactivation siège', + 'iSE' =>'Fermeture (ou désactivation) établissement', + 'iSS' =>'Fermeture (ou désactivation) siège', + 'iSTE' =>'Fermeture établissement (transfert)', + 'iSTS' =>'Fermeture siège (transfert)', + 'iRI' =>'Refus d\'immatriculation au RCS', + 'iCC' =>'Création par le calage', + 'iMC' =>'Modification par le calage', + 'iSC' =>'Suppression par le calage', + 'iI' =>'Entrée dans le champ de la diffusion commerciale', + 'iO' =>'Sortie du champ de la diffusion commerciale', ); private $tabEvenInsee = array( @@ -2618,9 +2644,9 @@ class MInsee } } - if ($tabInsee['CIVILITE']==1) $dir1Genre='M'; - elseif ($tabInsee['CIVILITE']==2) $dir1Genre='F'; - else $dir1Genre=''; + if ($tabInsee['CIVILITE']==1) $dir1Genre='M'; + elseif ($tabInsee['CIVILITE']==2) $dir1Genre='F'; + elseif ($tabRet['dir1Genre']<>'M' && $tabRet['dir1Genre']<>'F') $dir1Genre=''; $tabRet = array( 'id'=>$etab['id'], @@ -2737,40 +2763,40 @@ class MInsee 'AutreSiret'=>$tabAssoc, 'L1_NOMEN'=>$tabInsee['insL1_NOMEN'], // Nom ou raison sociale de l'entreprise pour l'adressage - 'L2_COMP'=> $tabInsee['insL2_COMP'], // Complément de nom de l'entreprise pour l'adressage - 'L3_CADR'=> $tabInsee['insL3_CADR'], // Complément d'adresse pour l.adressage - 'L4_VOIE'=> $tabInsee['insL4_VOIE'], // Numéro et libellé dans la voie - 'L5_DISP'=> $tabInsee['insL5_DISP'], // Distribution spéciale - 'L6_POST'=> $tabInsee['insL6_POST'], // Ligne d'acheminement postal pour l'adressage - 'L7_ETRG'=> $tabInsee['insL7_ETRG'], // Libellé du pays pour les adresses à l'étranger - 'IND_PUBLIPO'=> $tabInsee['insIND_PUBLIPO'], // Indicateur du champ de publipostage - 'dateMajRNVP'=>$tabInsee['dateMajRNVP'], - 'RNVP_Niveau'=>0, + 'L2_COMP'=> $tabInsee['insL2_COMP'], // Complément de nom de l'entreprise pour l'adressage + 'L3_CADR'=> $tabInsee['insL3_CADR'], // Complément d'adresse pour l.adressage + 'L4_VOIE'=> $tabInsee['insL4_VOIE'], // Numéro et libellé dans la voie + 'L5_DISP'=> $tabInsee['insL5_DISP'], // Distribution spéciale + 'L6_POST'=> $tabInsee['insL6_POST'], // Ligne d'acheminement postal pour l'adressage + 'L7_ETRG'=> $tabInsee['insL7_ETRG'], // Libellé du pays pour les adresses à l'étranger + 'IND_PUBLIPO'=> $tabInsee['insIND_PUBLIPO'], // Indicateur du champ de publipostage + 'dateMajRNVP'=>$tabInsee['dateMajRNVP'], + 'RNVP_Niveau'=>0, - 'RPET'=> $tabInsee['RPET'], // - 'ARRONET'=> $tabInsee['ARRONET'], // - 'CTONET'=> $tabInsee['CTONET'], // - 'DU'=> $tabInsee['DU'], // - 'TU'=> $tabInsee['TU'], // - 'UU'=> $tabInsee['UU'], // - 'TCD'=> $tabInsee['TCD'], // - 'ZEMET'=> $tabInsee['ZEMET'], // - 'ESAANN'=> $tabInsee['ESAANN'], // - 'ESAAPEN'=> $tabInsee['ESAAPEN'], // + 'RPET'=> $tabInsee['RPET'], // + 'ARRONET'=> $tabInsee['ARRONET'], // + 'CTONET'=> $tabInsee['CTONET'], // + 'DU'=> $tabInsee['DU'], // + 'TU'=> $tabInsee['TU'], // + 'UU'=> $tabInsee['UU'], // + 'TCD'=> $tabInsee['TCD'], // + 'ZEMET'=> $tabInsee['ZEMET'], // + 'ESAANN'=> $tabInsee['ESAANN'], // + 'ESAAPEN'=> $tabInsee['ESAAPEN'], // - 'DREACTET'=> $tabInsee['DREACTET'], // - 'AMINTRET'=> $tabInsee['AMINTRET'], // - 'DREACTEN'=> $tabInsee['DREACTEN'], // - 'AMINTREN'=> $tabInsee['AMINTREN'], // + 'DREACTET'=> $tabInsee['DREACTET'], // + 'AMINTRET'=> $tabInsee['AMINTRET'], // + 'DREACTEN'=> $tabInsee['DREACTEN'], // + 'AMINTREN'=> $tabInsee['AMINTREN'], // - 'CATEGORIE'=> $tabInsee['insCATEGORIE'], // Catégorie d'entreprise - 'NOMEN_LONG'=> $tabInsee['NOMEN_LONG'], // Nom ou raison sociale de l'entreprise - 'PRODET'=> $tabInsee['PRODET'], - 'PRODEN'=> $tabInsee['PRODEN'], - 'NATETAB'=> $tabInsee['NATETAB'], - 'CEDEX'=> $tabInsee['CEDEX'], - 'EPCI'=> $tabInsee['EPCI'], - // MODET, + 'CATEGORIE'=> $tabInsee['insCATEGORIE'], // Catégorie d'entreprise + 'NOMEN_LONG'=> $tabInsee['NOMEN_LONG'], // Nom ou raison sociale de l'entreprise + 'PRODET'=> $tabInsee['PRODET'], + 'PRODEN'=> $tabInsee['PRODEN'], + 'NATETAB'=> $tabInsee['NATETAB'], + 'CEDEX'=> $tabInsee['CEDEX'], + 'EPCI'=> $tabInsee['EPCI'], + // MODET, ); /** Estimation du Chiffre d'affaires **/ @@ -2903,6 +2929,11 @@ class MInsee //Situation Juridique if ($siren>100) { $tabProcol = $this->getAnnoncesLegales($siren, 0, 'P', false); + $tabDates=array(); + foreach ($tabProcol as $iProcol=>$procol) + $tabDates[]=$procol['dateJugement']; + rsort($tabDates); + $dateProcol=str_replace('-','',$tabDates[0])*1; if ( count($tabProcol)>0 ) { if ($this->dureePlan>0 && date('Ymd')<$this->finPlan) { @@ -2920,7 +2951,7 @@ class MInsee else { $tabRet['SituationJuridique']='P'; } -//file_put_contents('test.log', $this->dureePlan."-".$this->finPlan." Situtation Juridique : ".$tabRet['SituationJuridique']); + //file_put_contents('test.log', $this->dureePlan."-".$this->finPlan." Situtation Juridique : ".$tabRet['SituationJuridique']); $tabTmp = $this->iDb->select('scores_cutoff', 'encours, scoreSolv, scoreDir, scoreConf, DATE(dateInsert)*1 AS dateInsert, DATE(dateUpdate)*1 AS dateUpdate', "siren=$siren", false, MYSQL_ASSOC); if( count($tabTmp) > 0 ) { if ($tabTmp[0]['scoreSolv']>0) { @@ -2968,7 +2999,7 @@ class MInsee if ($tabInsee['CIVILITE']>0 && $tabRet['dir1NomPrenom']=='') { if ($tabInsee['CIVILITE']==1) { $tabRet['dir1NomPrenom']='M. '; $tabRet['dir1Genre']='M'; } elseif ($tabInsee['CIVILITE']==2) { $tabRet['dir1NomPrenom']='Mme '; $tabRet['dir1Genre']='F'; } - else $tabRet['dir1Genre']=''; + elseif ($tabRet['dir1Genre']<>'M' && $tabRet['dir1Genre']<>'F') $tabRet['dir1Genre']=''; $tabRet['dir1NomPrenom'].=$tabInsee['NOM']; } @@ -2977,9 +3008,9 @@ class MInsee $tabRet['dir1Nom']=@strtoupper($tmp[0]['dirNom']); $tabRet['dir1Prenom']=@ucwords(strtolower(@$tmp[0]['dirPrenom'])); $tabRet['dir1NomUsage']=@strtoupper($tmp[0]['dirNomUsage']); - if ($tmp[0]['insCIVILITE']==1) $tabRet['dir1Genre']='M'; - elseif ($tmp[0]['insCIVILITE']==2) $tabRet['dir1Genre']='F'; - else $tabRet['dir1Genre']=''; + if ($tmp[0]['insCIVILITE']==1) $tabRet['dir1Genre']='M'; + elseif ($tmp[0]['insCIVILITE']==2) $tabRet['dir1Genre']='F'; + elseif ($tabRet['dir1Genre']<>'M' && $tabRet['dir1Genre']<>'F') $tabRet['dir1Genre']=''; $entrep['sexe']=$tabRet['dir1Genre']; unset($tmp); @@ -3165,9 +3196,9 @@ class MInsee $tabRet['dir'.$k.'Nom']=$ann['nom']; $tabRet['dir'.$k.'Prenom']=$ann['prenom']; if ($ann['civilite']=='M') - $tabRet['dir'.$k.'Genre']='M'; + $tabRet['dir'.$k.'Genre']='M'; elseif ($ann['civilite']=='MME' || $ann['civilite']=='MLLE') - $tabRet['dir'.$k.'Genre']='F'; + $tabRet['dir'.$k.'Genre']='F'; } $tabRet['dir'.$k.'DateFct']=$ann['dateEffet']; $tabRet['dir'.$k.'DateNaiss']=$ann['dateNaiss']; @@ -3191,6 +3222,7 @@ class MInsee $tabRet['dir'.$k.'Nom']=$ann['nom']; $tabRet['dir'.$k.'Prenom']=$ann['prenom']; $tabRet['dir'.$k.'DateFct']=$ann['dateEffet']; + $tabRet['dir'.$k.'Genre']=''; if ($k==2) break; $k++; } @@ -3306,7 +3338,7 @@ class MInsee $tabRet['FJ2_Lib'] = $tabRet['FJ_lib']; } if ($fjInpi>=1000 && $fjInpi<2000) { - $tabRet['dir1Titre']='Personne physique'; + $tabRet['dir1Code']='1050'; $tabRet['dir1NomPrenom']=strtoupper($entrep['nom']).' '.ucwords(strtolower($entrep['prenom'])); $tabRet['dir1Nom']=strtoupper($entrep['nom']); $tabRet['dir1Prenom']=ucwords(strtolower($entrep['prenom'])); @@ -3447,6 +3479,11 @@ class MInsee } } + if ($tabRet['dir1Genre']=='M' || $tabRet['dir1Genre']=='F') { + $tabRet['dir1Titre']='Personne physique'; + $tabRet['dir1Code']='1050'; + } + if ( $accesDist && // Département couvert par Infogreffe $tabRet['Dept']<>57 && $tabRet['Dept']<>67 && $tabRet['Dept']<>68 && $tabRet['Dept']<>97 && $tabRet['Dept']<>98 && $tabRet['Dept']<>99 && @@ -5207,7 +5244,8 @@ class MInsee // On ne rafraichie que si demandé et // que la requête en base est trop ancienne et nscrl est vide ou tel ou web - if (false && $refresh && $dateUpdate<$lastYear && ($idComp['nscrl']==0 || $idComp['tel']=='') ) { + $refresh=false; + if ($refresh && $refresh && $dateUpdate<$lastYear && ($idComp['nscrl']==0 || $idComp['tel']=='') ) { $timeout=20; // La mise à jour ne se fera pas si lastMAJ<365 /*$strUpdate='AND (DATEDIFF(NOW(),dateUpdate)<365 OR (nscrl<>0 AND DATEDIFF(NOW(),dateUpdate)>0))'; @@ -5481,11 +5519,11 @@ class MInsee if ($ann['typeEven']==2102 || $ann['typeEven']==2100) $capital=true; else $capital=false; - if (trim($ann['strEven'])<>'') { + if (trim($ann['strEven'])<>'') { foreach ($tabEven as $even) { $tabRetEven[]=array( 'CodeEven'=>$even, - 'LibEven'=>$this->iBodacc->getEvenement($even) + 'LibEven'=>$this->iBodacc->getEvenement($even) ); if ($even>=1000 && $even<2000) $rubriqueRet='procol'; elseif ($even>=2000 && $even<3000) $rubriqueRet='mmd'; @@ -6183,8 +6221,21 @@ class MInsee return $tabRet; } - public function getIdOPS($naf5, $codeCommune, $fj, $dateCreation, $activiteReelle='') - { + /** Retourne l'identifiant de l'Organisme de protection sociale compétent + ** + ** @param string $naf5 Code Naf de l'entreprise + ** @param integer $codeCommune Code commune de l'entreprise + ** @param integer $fj Forme juridique de l'entreprise + ** @param date $dateCreation Date de création de l'entreprise + ** @param integer $activiteReelle Activité réelle de l'entreprise + ** @return + */ + public function getOPS($naf5, $codeCommune, $fj, $dateCreation, $activiteReelle='') { + /* + * 1. Vérifier si le NAF est dans la table sdv1.retraiteNaf (répertoire professionnel) + * 1.1. Si présent, + * + */ $tabRet=array(); $naf4=substr($naf5,0,4); $dep=substr($codeCommune,0,2); @@ -6195,20 +6246,26 @@ class MInsee $ret=$this->iDb->select('sdv1.retraiteNaf', 'codeOPS, libInstitution, codeAnnexe, Limitations', "naf5='$naf5' or naf5='$naf4'", false, MYSQL_ASSOC); + //print_r($ret); + //die(); if (count($ret)>0) { + $tabRet=array('competenceType'=>'professionnel'); foreach ($ret as $iRet=>$tabCaisses) { if (count($ret)==1) { $limite=$tabCaisses['Limitations']; if ($tabCaisses['codeOPS']<>null) { - echo "Cas 1 : NAF $naf5 unique".EOL; + //echo "Cas 1 : NAF $naf5 unique, annexe ".$tabCaisses['codeAnnexe']." - ".$tabCaisses['libInstitution']." (".$tabCaisses['Limitations'].")".EOL; + //print_r($this->getInfoOPS($tabCaisses['codeOPS'])); return $tabCaisses['codeOPS']; } elseif ($tabCaisses['Annexe']<>'') { $annexe=$tabCaisses['Annexe']; - echo "Cas 2 : NAF $naf5, Annexe $annexe".EOL; + //echo "Cas 2 : NAF $naf5, Annexe $annexe".EOL; + //print_r($this->getInfoOPS($idOPS)); break; } } else { echo "Cas 3.1 : Non géré $naf5 !".EOL; + //print_r($this->getInfoOPS($idOPS)); print_r($tabCaisses); } } @@ -6219,21 +6276,24 @@ class MInsee 'codeOPS, libInstitution', "codeDep=$dep AND codeAnnexe IN ('$annexe','A','B') GROUP BY codeAnnexe ASC", false, MYSQL_ASSOC); if (count($ret)>0) { + $tabRet=array('competenceType'=>'interprofessionnel'); foreach ($ret as $iRet=>$tabCaisses) { - if (count($ret)==1) { + //if (count($ret)==1) { if ($tabCaisses['codeOPS']<>'') { - echo "Cas 2.1 : NAF $naf5, Annexe $annexe".EOL; +// echo "Cas 2.1 : NAF $naf5, Annexe $annexe".EOL; + //echo "Cas 2.1 : NAF $naf5, annexe ".$tabCaisses['codeAnnexe']." - ".$tabCaisses['libInstitution']." (".$tabCaisses['Limitations'].")".EOL; + //print_r($this->getInfoOPS($tabCaisses['codeOPS'])); return $tabCaisses['codeOPS']; } else { - echo "Cas 2.2 : Non géré $naf5".EOL; - print_r($tabCaisses); + //echo "Cas 2.2 : Non géré $naf5".EOL; + //print_r($tabCaisses); } - } else { - echo "Cas 3.2 : Non géré $naf5".EOL; - print_r($tabCaisses); + /*} else { + echo "Cas 3.2 : Non géré $naf5".EOL; + print_r($tabCaisses); + }*/ } } - } //die(); //@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "classMInsee::listeProduits sur $naf", print_r($tabRet, true)); diff --git a/library/Metier/partenaires/classMAmabis.php b/library/Metier/partenaires/classMAmabis.php index 3280bb70..748ee797 100644 --- a/library/Metier/partenaires/classMAmabis.php +++ b/library/Metier/partenaires/classMAmabis.php @@ -85,10 +85,7 @@ class MAmabis $tabRep['NCUCS']=$zones['cucs']; } - } else { - - /** Autres Informations de la RNVP - **/ + /** Autres Informations de la RNVP **/ if ($rnvp) { //$tabRep['ADR1']=@trim($tabZones['ADR1']); //$tabRep['ADR2']=@trim($tabZones['ADR2']); @@ -161,7 +158,7 @@ class MAmabis 'cucs'=>@$tabRep['NCUCS'], ); $tabUpdate=array( - 'adrNum'=>$adrNum, + 'adrNum'=>$adrNum, 'adrIndRep'=>$adrIndRep, 'adrTypeVoie'=>$adrTypeVoie, 'adrLibVoie'=>$adrLibVoie, @@ -230,7 +227,7 @@ class MAmabis 'source' => 'Amabis', 'dateInsert'=> date('YmdHis'), ); - $iDb->insert('villesCP', $tabInsert); + $iDb->insert('villesCP', $tabInsert, false); //echo mysql_error().EOL; } @@ -297,7 +294,7 @@ class MAmabis * @todo Corriger les adresses présentes dans CEDEXA (toutes les lignes) * @todo Ligne 3, acheter HEXALIGNE3 */ - function normaliseAdresse($adrL1, $adrL2, $adrL3, $adrL4, $adrL5, $adrL6, $adrL7='', $norme=38) { + function normaliseAdresse($adrL1, $adrL2, $adrL3, $adrL4, $adrL5, $adrL6, $adrL7='', $norme=38, $debug=false) { if ($norme<>32 && $norme<>38) { return 'La norme doit être 32 ou 38 caractères (38 par défaut)'.EOL; } @@ -313,22 +310,6 @@ class MAmabis $adrL[6]=$adrL6=trim(preg_replace('/\s+/',' ',preg_replace('/[^a-z\d ]/i', ' ', strtoupper(trimAccent($adrL6))))); $adrL[7]=$adrL7=trim(preg_replace('/\s+/',' ',preg_replace('/[^a-z\d ]/i', ' ', strtoupper(trimAccent($adrL7))))); if ($adrL7<>'' || $adrL7<>'FRANCE' || $adrL7<>'MONACO') - $tabLen=$tabMaxLen=array(); - $tabLen[1]=strlen($adrL1); if ($tabLen[1]>$norme) $tabMaxLen[]=1; - $tabLen[2]=strlen($adrL2); if ($tabLen[2]>$norme) $tabMaxLen[]=2; - $tabLen[3]=strlen($adrL3); if ($tabLen[3]>$norme) $tabMaxLen[]=3; - $tabLen[4]=strlen($adrL4); if ($tabLen[4]>$norme) $tabMaxLen[]=4; - $tabLen[5]=strlen($adrL5); if ($tabLen[5]>$norme) $tabMaxLen[]=5; - $tabLen[6]=strlen($adrL6); if ($tabLen[6]>$norme) $tabMaxLen[]=6; - $tabLen[7]=strlen($adrL7); if ($tabLen[7]>$norme) $tabMaxLen[]=7; - if (count($tabMaxLen)>0) { - //print_r($tabLen); - foreach($tabMaxLen as $j) { - echo "La ligne n°$j fait ".$tabLen[$j]." caractères : '".$adrL[$j]."'".EOL; - } - if ($j>1) die("Une des lignes fait plus de $norme caractères !".EOL); - return "Une des lignes fait plus de $norme caractères !".EOL; - } $L1=$adrL1; $L2=$adrL2; @@ -348,12 +329,12 @@ class MAmabis $ville=trim(strtr(substr($adrL6,5),array(' SAINT '=>' ST ',' SAINTE '=>' STE '))); $ret=$iDb->select( 'hexaviaVilles', "idAdr56, codeInseeCom, libCom$norme, codeInseeGlobal, indPluridis, libLigne5n$norme, indRoudis, codePostal, libLigne6n$norme, codeInseePre, codeMaj$norme, dateMaj$norme, MATCH (codePostal, libCom38) AGAINST ('$cp $ville' IN NATURAL LANGUAGE MODE) AS score", - "(MATCH (codePostal, libCom38) AGAINST ('$cp $ville' IN NATURAL LANGUAGE MODE) OR MATCH (codePostal, libCom38) AGAINST ('$cp2 $ville' IN NATURAL LANGUAGE MODE)) /*OR codePostal='$cp' AND libCom$norme='$ville'*/",false, MYSQL_ASSOC); + "(MATCH (codePostal, libCom38) AGAINST ('$cp $ville' IN NATURAL LANGUAGE MODE) OR MATCH (codePostal, libCom38) AGAINST ('$cp2 $ville' IN NATURAL LANGUAGE MODE)) ORDER BY score DESC /*OR codePostal='$cp' AND libCom$norme='$ville'*/",false, MYSQL_ASSOC); $nbRet=count($ret); if ($nbRet==0) return 'Aucune correspondance CP VILLE'.EOL; else { foreach($ret as $i=>$iRet) { - //echo "je compare '$cp' avec '".$iRet['codePostal']."' et '$ville' avec '".$iRet["libCom$norme"]."' (".$iRet['idAdr56'].")".EOL; + if ($debug) echo "je compare '$cp' avec '".$iRet['codePostal']."' et '$ville' avec '".$iRet["libCom$norme"]."' (".$iRet['idAdr56'].")".EOL; if (($iRet['codePostal']==$cp || substr($iRet['codePostal'],0,2)==$cp2) && ($iRet["libCom$norme"]==$ville || preg_replace('/ 0/', ' ',$iRet["libCom$norme"])==$ville) || (strpos($iRet["libCom$norme"],$ville)>0 && $nbRet==1)) { $idAdr56=$iRet['idAdr56']; $dateMajHexavia=$iRet["dateMaj$norme"]; @@ -369,11 +350,27 @@ class MAmabis } } if (!$idAdr56) { - //print_r($ret); - //die('Plusieurs correspondances CP VILLE'.EOL); - return 'Plusieurs correspondances CP VILLE'.EOL; - } - } + $iRet=$ret[0]; + if ($debug) echo "On prend le score le + élevé s'il est > à 15 : je compare '$cp' avec '".$iRet['codePostal']."' et '$ville' avec '".$iRet["libCom$norme"]."' (".$iRet['idAdr56'].")".EOL; + if ($debug) echo '['.trim(preg_replace('/ (1ER|2EME|3EME|\d+)/', ' ',$iRet["libCom$norme"])) .'-v/s-'.trim(preg_replace('/ (1ER|2EME|3EME|\d+)/', ' ',$ville)).']'.EOL; + if (($iRet['codePostal']==$cp || substr($iRet['codePostal'],0,2)==$cp2) && ($iRet["libCom$norme"]==$ville || (substr(trim(preg_replace('/ (1ER|2EME|3EME|\d+)/', ' ',$iRet["libCom$norme"])),0,26)==trim(preg_replace('/ (1ER|2EME|3EME|\d+)/', ' ',$ville)) && $iRet['score']>17) || (strpos($iRet["libCom$norme"],$ville)>0 && $nbRet==1))) { + $idAdr56=$iRet['idAdr56']; + $dateMajHexavia=$iRet["dateMaj$norme"]; + $hexaViaComCod=$iRet['codeInseeCom']; + $hexaViaComLib=$iRet["libCom$norme"]; + $hexaViaCP=$iRet['codePostal']; + $L5=$iRet["libLigne5n$norme"]; + $L6=$iRet['codePostal'].' '.$iRet["libLigne6n$norme"]; + $L7=''; + $tabAdr56k[]=$idAdr56; + $tabAdr56L['_'.$idAdr56]=array('L5'=>$L5,'L6'=>$L6,'L7'=>$L7,); + } else { + //print_r($ret); + //die('Plusieurs correspondances CP VILLE'.EOL); + return 'Plusieurs correspondances CP VILLE'.EOL; + } + } + } /*if (count($ret)>1) { print_r($ret); @@ -471,8 +468,38 @@ class MAmabis } */ - $tabAdr=array( - 'L1'=>$L1, + if (!$matriculeHexavia && @strlen($L4)==0) $L4=$adrL4; + + + $tabLen=$tabMaxLen=array(); + $tabLen[1]=strlen($L1); + if ($tabLen[1]>$norme) { + $L1=$this->normaliseRS($L1, $norme); + $tabLen[1]=strlen($L1); if ($tabLen[1]>$norme) $tabMaxLen[]=1; + } + $tabLen[2]=strlen($L2); + if ($tabLen[2]>$norme) { + $L2=$this->normaliseRS($L2, $norme); + $tabLen[2]=strlen($L2); if ($tabLen[2]>$norme) $tabMaxLen[]=2; + } + $tabLen[3]=strlen($L3); + if ($tabLen[3]>$norme) { + $L3=$this->normaliseRS($L3, $norme); + $tabLen[3]=strlen($L3); if ($tabLen[3]>$norme) $tabMaxLen[]=3; + } + $tabLen[4]=strlen($L4); if ($tabLen[4]>$norme) $tabMaxLen[]=4; + $tabLen[5]=strlen($L5); if ($tabLen[5]>$norme) $tabMaxLen[]=5; + $tabLen[6]=strlen($L6); if ($tabLen[6]>$norme) $tabMaxLen[]=6; + $tabLen[7]=strlen($L7); if ($tabLen[7]>$norme) $tabMaxLen[]=7; + if (count($tabMaxLen)>0) { + foreach($tabMaxLen as $j) { + //echo "La ligne n°$j fait ".$tabLen[$j]." caractères : '".$adrL[$j]."'".EOL; + } + //if ($j>1) die("Une des lignes fait plus de $norme caractères !".EOL); + return "Une des lignes fait plus de $norme caractères !".EOL; + } + + $tabAdr=array( 'L1'=>$L1, 'L2'=>$L2, 'L3'=>$L3, 'L4'=>$L4, @@ -486,8 +513,10 @@ class MAmabis 'HexaVia56'=>$idAdr56, 'HexaViaVoie'=>$hexaViaVoie, 'HexaViaMat'=>$matriculeHexavia, - 'RoudisId'=>$codeRoudis); - return $tabAdr; + 'RoudisId'=>$codeRoudis + ); + + return $tabAdr; /* if ($adresseNum=='' && $adresseBtq=='' && $adresseVoie=='' && $adresseRue=='' && $cp=='' && $ville=='') return false; @@ -510,7 +539,150 @@ class MAmabis return $tabTmp; } */ - return false; + //return false; + } + + /** Retourne le tableau des abbréviations existantes par type d'abréviation + */ + function getAbreviations($typeAbrev) { + $iDb=new WDB('villes'); + $tabRet=array(); + if ($typeAbrev=='P') { + $ret=$iDb->select( 'tabPrenoms', + "prenom", + "LENGTH(prenom)>3 AND nbTot>0 ORDER BY LENGTH(prenom) DESC",false, MYSQL_ASSOC); + foreach($ret as $iRet) { + $tabTmp=explode('-',$iRet['prenom']); + $tabTmp2=array(); + foreach($tabTmp as $subPrenom) + $tabTmp2[]=substr($subPrenom,0,1); + $tabRet[$iRet['prenom']]=implode('-', $tabTmp2); + } + } else { + $ret=$iDb->select( 'tabAbreviations', + "abrCode, abrLib", + "abrType='$typeAbrev' AND dateSuppr=0 AND idSuppr=0 ORDER BY LENGTH(abrLib) DESC, LENGTH(abrCode) ASC",false, MYSQL_ASSOC); + foreach($ret as $iRet) { + $tabTmp=explode('/', $iRet['abrLib']); + foreach($tabTmp as $abrLib) { + if ($typeAbrev=='A') + $tabRet[$abrLib]=''; + else + $tabRet[$abrLib]=$iRet['abrCode']; + } + } + } + //print_r($tabRet);die(); + return $tabRet; + } + + /** Normalise une raison sociale ou un nom + **/ + function normaliseRS($nomLong, $taille=38) { + $nomCourt=preg_replace('/[^A-Z0-9%\'\"\-&\*\/\s]/','',trim(strtoupper($nomLong))); + $tabMots=split("[^[:alpha:]]+", $nomCourt); + $passage=0; + echo $nomCourt.EOL; + while (strlen($nomCourt)>$taille) { + // 1. Remplacement des Libellés de Voies par leurs code Voie + $tabTmp=$this->getAbreviations('V'); + foreach ($tabTmp as $lib=>$abr) { + $nomCourt=trim(str_replace(" $lib".'ES ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib".'E ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib".'S ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib ", ' '.$abr.' ', " $nomCourt ")); + if (strlen($nomCourt)<=$taille) break; + } + echo "1-Voies=$nomCourt".EOL; + if (strlen($nomCourt)<=$taille) break; + + //print_r($tabMots); + // 2. Remplacement des Titres par leurs abréviation + $tabTmp=$this->getAbreviations('T'); + foreach ($tabTmp as $lib=>$abr) { + $nomCourt=trim(str_replace(" $lib".'ES ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib".'E ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib".'S ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib ", ' '.$abr.' ', " $nomCourt ")); + if (strlen($nomCourt)<=$taille) break; + } + echo "2a-Titres=$nomCourt".EOL; + if (strlen($nomCourt)<=$taille) break; + + // 2. Remplacement des Formes Juridiques + $tabTmp=$this->getAbreviations('J'); + foreach ($tabTmp as $lib=>$abr) + $nomCourt=trim(str_replace(" $lib ", ' '.$abr.' ', " $nomCourt ")); + echo "2b-FJ=$nomCourt".EOL; + if (strlen($nomCourt)<=$taille) break; + + // 4. Suppression des articles + $tabTmp=$this->getAbreviations('A'); + foreach ($tabTmp as $lib=>$abr) { + if (strpos($lib,"'")>0) + $nomCourt=trim(str_replace(' '.$lib, ' ', " $nomCourt ")); + else + $nomCourt=trim(str_replace(" $lib ", ' ', " $nomCourt ")); + if (strlen($nomCourt)<=$taille) break; + } + echo "4-Articles=$nomCourt".EOL; + if (strlen($nomCourt)<=$taille) break; + + // 3. Remplacement des Prénoms par leurs initiales + $tabTmp=$this->getAbreviations('P'); + foreach ($tabTmp as $lib=>$abr) { + $nomCourt=trim(str_replace(" $lib ", ' '.$abr.' ', " $nomCourt ")); + if (strlen($nomCourt)<=$taille) break; + } + echo "3-Prenoms=$nomCourt".EOL; + if (strlen($nomCourt)<=$taille) break; + + $tabTmp=$this->getAbreviations('N'); + foreach ($tabTmp as $lib=>$abr) { + $nomCourt=trim(str_replace(" $lib".'ES ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib".'E ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib".'S ', ' '.$abr.' ', " $nomCourt ")); + $nomCourt=trim(str_replace(" $lib ", ' '.$abr.' ', " $nomCourt ")); + if (strlen($nomCourt)<=$taille) break; + } + echo "5-Autres Noms=$nomCourt".EOL; + if (strlen($nomCourt)<=$taille) break; + + $nomCourt=substr($nomCourt,0,$taille); + //die($nomCourt); +/** @todo A finir +Tronquer ou abréger dans cette ordre +- type de voie +- titres +- initiale du prénom +- supprimez les articles (mais pas les particules dans un nom propre) +- tronquer à 4 caractères les types de voie non normalisés +- tronquer les extensions de voie +- réduire le nom de la voie en supprimant les mots de la gauche vers la droite + +Gérer les pluriels pour les voies, nom, titres, et formes juridiques +**/ + $passage++; + } + return $nomCourt; + } + + + // Code Insee de la commune libCom32 Libellé de la commune (Ancienne norme 32) libCom38 Libellé + function getLibCommune($codeInsee, $norme=38) { + if ($norme<>32 && $norme<>38) { + return 'La norme doit être 32 ou 38 caractères (38 par défaut)'.EOL; + } + + $iDb=new WDB('villes'); + $ret=$iDb->select( 'hexaviaVilles', + "libCom32 , libCom38", + "codeInseeCom='$codeInsee' LIMIT 0,1",false, MYSQL_ASSOC); + $nbRet=count($ret); + if ($nbRet==0) return 'Aucune correspondance VILLE'.EOL; + + if ($norme==32) return $ret[0]['libCom32']; + return $ret[0]['libCom38']; } }