Mise à jour de la classe RNVP

This commit is contained in:
Michael RICOIS 2015-07-21 09:32:31 +00:00
parent 03c6a7f37f
commit a73f9c7b05

View File

@ -7,8 +7,27 @@ class MRnvp
public $tabDevises=array();
public $nomTronque=0;
function __construct()
{
protected $tabAdrCQ=array(
10=>'Adresse correcte',
20=>'Adresse correcte (Voie non reconue dans un CEDEX ou BP)',
21=>'Adresse correcte mais numéro de facade hors borne (petite ville)',
22=>'Adresse correcte mais numéro de facade absent (petite ville)',
23=>'Adresse correcte mais numéro de facade hors borne (grande ville)',
24=>'Adresse correcte mais numéro de facade absent (grande ville)',
30=>'Voie non reconnue (petite ville)',
31=>'Voie non reconnue (petite ville, quartier reconnu)',
40=>'Voie absente (petite ville, quartier reconnu)',
41=>'Voie absente (petite ville)',
50=>'Voie non reconnue (grande ville)',
51=>'Voie non reconnue (grande ville, quartier reconnu)',
60=>'Voie absente (grande ville, quartier reconnu)',
61=>'Voie absente (grande ville)',
70=>'Voie présente mais Cp/Ville non corrigeable',
80=>'Voie absente et Cp/Ville non corrigeable',
90=>'Adresse à l\'étranger',
);
function __construct() {
$this->iDb = new WDB();
$this->iInsee = new MInsee($this->iDb);
}
@ -92,10 +111,17 @@ class MRnvp
$idAdr56=false;
$tabAdr56k=$tabAdr56L=array();
$cp=substr(trim($adrL6),0,5);
if ($cp*1>0) {
$cp2=substr($cp,0,2);
$ville=trim(strtr(substr($adrL6,5),array(' SAINT '=>' ST ',' SAINTE '=>' STE ')));
} else {
$cp=$cp2='';
$ville=trim(strtr($adrL6,array(' SAINT '=>' ST ',' SAINTE '=>' STE ')));
}
$ville=preg_replace('/ CEDEX\s?.*$/ui','',$ville);
$tabRetI=array(
'operateurRnvp'=>'SED',
'in_cp'=>$cp,
'in_dep'=>$cp2,
'in_ville'=>$ville,
@ -117,8 +143,7 @@ class MRnvp
$tabRetE=array(
'dureeV'=> round(microtime(1)-$tD,3),
'errRNVPcode'=>'V0',
'errRNVPlib'=>'Aucune correspondance CP VILLE'
);
'errRNVPlib'=> "Aucune correspondance CP VILLE (cp=$cp, ville=$ville)");
$erreur=true;
} else {
foreach($ret as $i=>$iRet) {
@ -382,7 +407,7 @@ class MRnvp
**/
function normaliseRS($nomLong, $taille=38, $debug=false)
{
$nomCourt=preg_replace('/[^A-Z0-9%\'\"\-&\*\/\s]/','',trim(strtoupper($nomLong)));
$nomCourt=preg_replace('/[^A-Z0-9%@&\'\(\)\"\-\*\/\s\+]/','',trim(strtoupper($nomLong)));
$tabMots=split("[^[:alpha:]]+", $nomCourt);
$passage=0;
$this->nomTronque=0;
@ -496,6 +521,16 @@ class MRnvp
else return $ret[0]['libCom38'];
}
function getCPCommune($codeInsee)
{
$ret=$this->iDb->select('villes.hexaviaVilles',
"codePostal",
"codeInseeCom='$codeInsee' GROUP BY codePostal",false, MYSQL_ASSOC);
$nbRet=count($ret);
if ($nbRet==1) return $ret[0]['codePostal'];
return false;
}
function getCodCommune($libelleCommune, $depOuCp='', $debug=false)
{
$norme=38;
@ -530,9 +565,31 @@ class MRnvp
return $codeCommune;
}
function normaliseAdresse76310($L1,$L2,$L3,$L4,$L5,$L6,$L7='') {
//ini_set('soap.wsdl_cache_enabled', 0);
$client = new SoapClient('http://www.rnvp-en-ligne.com/service.asmx?wsdl');
function normaliseAdresse76310($L1,$L2,$L3,$L4,$L5,$L6,$L7='')
{
$tDeb=microtime(1);
$tabRetR=$tabRetE=array();
$cp=substr(trim($L6),0,5);
$cp2=substr($cp,0,2);
$ville=trim(strtr(substr($L6,5),array(' SAINT '=>' ST ',' SAINTE '=>' STE ')));
$ville=preg_replace('/ CEDEX\s?.*$/ui','',$ville);
$tabRetI=array( 'operateurRnvp'=>'76310WEB',
'in_cp'=>$cp,
'in_dep'=>$cp2,
'in_ville'=>$ville,
'in_L1'=>trim($L1),
'in_L2'=>trim($L2),
'in_L3'=>trim($L3),
'in_L4'=>trim($L4),
'in_L5'=>trim($L5),
'in_L6'=>trim($L6),
'in_L7'=>trim($L7));
//$client = new SoapClient('http://www.rnvp-en-ligne.com/service.asmx?wsdl');
$client = new SoapClient('http://www.rnvp-en-ligne.com/service_v5.asmx?wsdl');
$nbEssais=1;
$array = array (
'pi_session' => '-1',
'pi_user' => 'SDPROD',
@ -562,9 +619,97 @@ class MRnvp
'po_rejet' => '',
'po_etranger' => ''*/
);
$result = $client->Elfyweb_RNVP_Standard($array);
return ($result);
while(1) {
try {
//$result = $client->Elfyweb_RNVP_Standard($array);
$result = $client->Elfyweb_RNVP_Expert_V50($array);
//print_r($result);
$tabRetR=array( 'L1'=>$L1,
'L2'=>$L2,
'L3'=>strtoupper(utf8_decode($result->pio_cadrs)),
'L4'=>strtoupper(utf8_decode($result->pio_adresse)),
'L5'=>strtoupper(utf8_decode($result->pio_lieudit)),
'L6'=>strtoupper(utf8_decode($result->pio_cpville)),
/* [po_risquerestru] => 0
[po_poidsmodif] => 0
[po_rejet] =>
[po_etranger] =>*/
'Cp'=>$result->po_cp,
'Ville'=>$result->po_ville,
'Insee'=>$result->po_insee,
/*'CQadrs'=>$result->po_cqadrs,
'CQadrsLib'=>$this->tabAdrCQ[$result->po_cqadrs],
'CQAdrRnvp'=>$this->getLibQualiteAdresse76310($result->po_cqadrs, $result->rejet),*/
'dureeRnvp'=>round(microtime(1)-$tDeb,3),
);
if (@$result->pio_pays<>'FRA') $tabRet['L7']=$result->pio_pays;
break;
} catch (SoapFault $fault) {
$nbEssais++;
if ($nbEssai<5) continue;
$tabRetE=array( 'dureeRnvp'=>round(microtime(1)-$tDeb,3),
'errRNVPcode'=>'S0',
'errRNVPlib'=>"Erreur SOAP : ".print_r($fault,1));
}
}
$tabRet=array_merge($tabRetI,$tabRetR,$tabRetE);
return $tabRet;
}
function getLibQualiteAdresse76310($cqadrs, $correctionDouteuse)
{
switch ($cqadrs*1) {
case 10: // Adresse correcte
case 20: // Adresse correcte (Voie non reconue dans un CEDEX ou BP)
case 21: // Adresse correcte mais numéro de facade hors borne (petite ville)
case 22: // Adresse correcte mais numéro de facade absent (petite ville)
case 23: // Adresse correcte mais numéro de facade hors borne (grande ville)
case 24: // Adresse correcte mais numéro de facade absent (grande ville)
$cqRnvpSed=1;
break;
case 31: // Voie non reconnue (petite ville, quartier reconnu)
case 51: // Voie non reconnue (grande ville, quartier reconnu)
$cqRnvpSed=2;
break;
case 30: // Voie non reconnue (petite ville)
case 50: // Voie non reconnue (grande ville)
$cqRnvpSed=3;
break;
case 40: // Voie absente (petite ville, quartier reconnu)
case 41: // Voie absente (petite ville)
case 60: // Voie absente (grande ville, quartier reconnu)
case 61: // Voie absente (grande ville)
$cqRnvpSed=4;
break;
case 70: // Voie présente mais Cp/Ville non corrigeable
case 80: // Voie absente et Cp/Ville non corrigeable
$cqRnvpSed=5;
break;
default:
$cqRnvpSed=0;
break;
}
if ($correctionDouteuse=='D') $cqRnvpSed=0;
return $cqRnvpSed;
}
function getAdresseRnvpSource($source, $source_id, $num=0)
{
$ret=$this->iDb->select(
'villes.rnvpSources',
'id, source, source_id, num, L1rnvp, L2rnvp, L3rnvp, L4rnvp, L5rnvp, L6rnvp, L7rnvp, Pays, dateInsert,
operateurRnvp, dateEnvoiRnvp, dateRetourRnvp, codeRetour, NumVoie, BisTer, TypeVoieCourt, TypeVoieLong, LibVoie,
Cp, Ville, Insee, CQadrs, CorrectionImportante, CorrectionDouteuse, HexaCle, CQL3, InseeGlobal, OldInsee,
IsInseeReconstitue, NumDept, IdHexavia, IdHexaposte, Iris_Rivoli, Iris_Ilot99, Iris_CodeIris, Iris_Canton,
Iris_Zus, Iris_Zfu, CqIris, dateUpdate',
"source=$source AND source_id=$source_id AND num=$num LIMIT 0,1",false, MYSQL_ASSOC);
$tabRet=$ret[0];
$tabRet['CQadrsLib']=$this->tabAdrCQ[$tabRet['CQadrs']];
$tabRet['CQAdrRnvp']=$this->getLibQualiteAdresse76310($tabRet['CQadrs'], $tabRet['CorrectionDouteuse']);
return $tabRet;
}
}
?>