batch/includes/partenaires/classMTva.php

330 lines
12 KiB
PHP
Raw Normal View History

<?
//ini_set('soap.wsdl_cache_enabled', 1); // 0 en d<>v
class MTvaOld {
public $vatNumber=''; // Num<75>ro de TVA retourn<72>
public $vatDefined=false; // Le num<75>ro de TVA est il valid<69> ?
public $errnum=0; // Num<75>ro de l'erreur en cas d'erreur
public $errmsg=''; // Message de l'erreur en cas d'erreur
private $siren;
function __construct($siren, $accesDist=true) {
//$accesDist=false;
if ($accesDist==true) {
/*$fp=fopen('/var/www/log/infoVat.log', 'a');
fwrite($fp, "MTva->__construct pour $siren $accesDist\n");
fclose($fp);
*/
$this->siren=$siren;
$client = new SoapClient('http://ws1.scores-decisions.com/entreprise/vat.wsdl',
array( 'trace' => 1, 'soap_version' => SOAP_1_1,
'login' => 'TESTTVA', 'password' => 'TVATESTPW'));
try {
$O = $client->getCompanyVat($this->siren);
if ($O->error->errnum) {
//echo 'Erreur : '. $O->error->errmsg .' ('. $O->error->errnum .")\n";
//echo $client->__getLastResponse()."\n";
$this->errnum=$O->error->errnum;
$this->errmsg=$O->error->errmsg;
return false;
} else {
$val=$O->result;
$this->vatNumber=$val->vatNumber;
$this->vatDefined=$val->vatDefined;
}
} catch (SoapFault $fault) {
//echo $client->__getLastResponse()."\n";
//echo 'ERREUR SOAP :'.EOL;
//print_r($fault);
return false;
}
}
else {
$this->errnum=999;
$this->errmsg="Pas d'acc<63>s <20> la base TVA";
$this->vatNumber='';
$this->vatDefined=false;
return false;
}
}
}
class MTva {
public $vatNumber=''; // Num<75>ro de TVA retourn<72>
public $vatDefined=false; // Le num<75>ro de TVA est il valid<69> ?
public $errnum=0; // Num<75>ro de l'erreur en cas d'erreur
public $errmsg=''; // Message de l'erreur en cas d'erreur
private $siren;
function __construct($siren, $accesDist=true) {
$sirenIn=$siren*1;
if ($sirenIn<000001000) {
/* $this->errnum=0;
$this->errmsg=$O->error->errmsg;
return false;
} else {
$val=$O->result;
$this->vatNumber=$val->vatNumber;
$this->vatDefined=$val->vatDefined;*/
$this->vatNumber='FR00000000000';
$this->vatDefined=false;
return false;
}elseif($sirenIn<000010000) $siren='00000'.$sirenIn;
elseif ($sirenIn<000100000) $siren='0000'.$sirenIn;
elseif ($sirenIn<001000000) $siren='000'.$sirenIn;
elseif ($sirenIn<010000000) $siren='00'.$sirenIn;
elseif ($sirenIn<100000000) $siren='0'.$sirenIn;
else $siren=''.$sirenIn;
$this->siren=$siren;
$cleAlgo=$this->genereCleFr();
if ($cleAlgo<10) $cleAlgo='0'.$cleAlgo;
else $cleAlgo=''.$cleAlgo;
$tabRep=array();
if (!$this->valideSiren($siren) && substr($siren,0,4)<>'0000') {
$this->errnum=102;
$this->errmsg='Siren invalide';
return false;
}
$iDb=new WDB('sdv1');
$info=$iDb->select('siren_tva', "cle, DATE_FORMAT(dateMod,'%Y%m%d') as DateMAJ", "siren=$siren", false, MYSQL_ASSOC);
$tab=$info[0];
if (count($tab)>0) {
//sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "classMTva sur $siren en cache", print_r($tab, true));
if ( $tab['cle']<>NULL || ( $tab['cle']==NULL && $tab['DateMAJ']>=date('Ymd',mktime(0,0,0,date('m')-6,date('d'),date('Y'))) )) {
$cle=$tab['cle'];
if ($cle==NULL) { $attribue=false; $cle=$cleAlgo; }
else $attribue=true;
$this->vatNumber="FR$cle$siren";
$this->vatDefined=$attribue;
return true;
}
//sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "classMTva sur $siren REVALIDATION", print_r($tab, true));
}
$cle=$cleAlgo;
$nbIndispo=0;
if ($accesDist) {
while(true) {
$postData=array( //'Lang'=>'FR',
'ms'=>'FR',
'iso'=>'FR',
'vat'=>$cle.$siren,
'BtnSubmitVat'=>'Verify');
/* $postData=array( 'Lang'=>'FR',
'VAT'=>$cle.$siren,
'ISO'=>'FR',
'MS'=>'FR');*/
$tdeb = microtime_float();
// $url='http://ec.europa.eu/taxation_customs/vies/cgi-bin/viesquer';
// $referer='http://ec.europa.eu/taxation_customs/vies/fr/vieshome.htm';
$url='http://ec.europa.eu/taxation_customs/vies/viesquer.do';
$referer='http://ec.europa.eu/taxation_customs/vies/';
$page=getUrl($url, '', $postData, $referer, false, 'ec.europa.eu', '', 15);
$duree = round(microtime_float()-$tdeb, 3);
//sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "classMTva sur $siren en $duree", print_r($page, true));
if ($page['err_num']<>0) {
debugLog('W', 'TVA Erreur CURL n<>'. $page['err_num'] .', '. $page['err_msg'] ." sur le Siren $siren, num<75>ro de TVA = FR $cle $siren. Dur<75>e = $duree s !", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
$this->vatNumber="FR$cle$siren";
$this->vatDefined=false;
return true;
}
$code=$page['code'];// Code r<>ponse Serveur
$body=$page['body'];
$header=$page['header'];
if (preg_match('/Yes, valid VAT number/i', $body)) {
$tabInsert=array('siren'=>$siren,'cle'=>$cle, 'duree'=>$duree);
$tabUpdate=array('cle'=>$cle, 'duree'=>$duree);
if (!$iDb->insert('siren_tva', $tabInsert))
if (!$iDb->update('siren_tva', $tabUpdate, "siren=$siren"))
debugLog('W', "Siren $siren, num<75>ro de TVA = FR $cle $siren, impossible de MAJ la clef ($duree s) - ERREUR MySql n<>". mysql_errno() .' : '. mysql_error(), __LINE__, __FILE__, __FUNCTION__, __CLASS__);
//echo date ('Y/m/d - H:i:s') ." - Ligne $k/$nbk, N<>TVA FR $cle $siren valid<69> .".$eol;
debugLog('I', "Siren $siren, num<75>ro de TVA = FR $cle $siren ($duree s)", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
$this->vatNumber="FR$cle$siren";
$this->vatDefined=true;
return true;
//return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'result'=>array('siren'=>$siren, 'vatNumber'=>"FR$cle$siren", 'vatDefined'=>true));
} elseif (strpos($body, 'Service non disponible')>0 ||
strpos($body, 'ponse trop long.')>0) {
$nbIndispo++;
if ($nbIndispo<3) {
//echo date ('Y/m/d - H:i:s') .' - '.$eol;
debugLog('I', "TVA Siren $siren, Service de l'<27>tat membre indisponible. Mise en sommeil...", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
randsleep(1,2);
$nbIndispo=0;
//echo date ('Y/m/d - H:i:s') .' - Reprise du Siren = '. $siren . $eol;
} else {
$tabInsert=array('siren'=>$siren,'cle'=>'NULL', 'duree'=>$duree);
$tabUpdate=array('cle'=>'NULL', 'duree'=>$duree);
if (!$iDb->insert('siren_tva', $tabInsert))
if (!$iDb->update('siren_tva', $tabUpdate, "siren=$siren"))
debugLog('W', "Siren $siren, num<75>ro de TVA = FR $cle $siren, impossible de MAJ la clef ($duree s) - ERREUR MySql n<>". mysql_errno() .' : '. mysql_error(), __LINE__, __FILE__, __FUNCTION__, __CLASS__);
debugLog('I', "Siren $siren, num<75>ro de TVA = FR $cle $siren v<>rification non disponible ($duree s)", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
$this->vatNumber="FR$cle$siren";
$this->vatDefined=false;
return true;
}
//echo date ('Y/m/d - H:i:s') .' - Temporisation n<>'.$nbIndispo . $eol;
} else {
$tabInsert=array('siren'=>$siren,'cle'=>'NULL', 'duree'=>$duree);
$tabUpdate=array('cle'=>'NULL', 'duree'=>$duree);
if (!$iDb->insert('siren_tva', $tabInsert))
if (!$iDb->update('siren_tva', $tabUpdate, "siren=$siren"))
debugLog('W', "Siren $siren, num<75>ro de TVA = FR $cle $siren, impossible de MAJ la clef ($duree s) - ERREUR MySql n<>". mysql_errno() .' : '. mysql_error(), __LINE__, __FILE__, __FUNCTION__, __CLASS__);
debugLog('I', "Siren $siren, num<75>ro de TVA = FR $cle $siren non attribu<62> ($duree s)", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
$this->vatNumber="FR$cle$siren";
$this->vatDefined=false;
return true;
}
}
} else {
$this->errnum=999;
$this->errmsg="Pas d'acc<63>s <20> la base TVA";
$this->vatNumber="FR$cle$siren";
$this->vatDefined=false;
return true;
}
debugLog('W', "Erreur impossible (car l'algo ne devrait pas passer par ici) sur le Siren $siren, num<75>ro de TVA = FR $cle $siren. Dur<75>e = $duree s. Cas impossible !", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
return true;//array('error'=>array('errnum'=>800, 'errmsg'=>'Erreur SGBDR'), 'result'=>$tabRet);
}
/**
** G<EFBFBD>n<EFBFBD>re la cl<EFBFBD> du num<EFBFBD>ro de TVA pour le siren fournit
** (la validit<EFBFBD> du num<EFBFBD>ro de siren et son existance n'est pas effectu<EFBFBD> par cette m<EFBFBD>thode)
**
** @param integer $siren Siren dont il faut g<EFBFBD>n<EFBFBD>rer la cl<EFBFBD>
** @return La cl<EFBFBD> du num<EFBFBD>ro de TVA
**/
private function genereCleFr() {
$siren=$this->siren;
// Position du chiffre SIREN (1 <20> 9)
$tabFirst=array();
$tabFirst[0]=array( 0, 0, 0, 0, 0, 0, 0, 0, 0);
$tabFirst[1]=array(62,47,94,89,40,06,22,43,16);
$tabFirst[2]=array(14,81,78,68,67,96,31,73,19);
$tabFirst[3]=array(63,18,62,47,94,89,40,06,22);
$tabFirst[4]=array(15,52,46,26,24,82,49,36,25);
$tabFirst[5]=array(64,86,30,05,51,75,58,66,28);
$tabFirst[6]=array(16,23,14,81,78,68,67,96,31);
$tabFirst[7]=array(65,57,95,60,08,61,76,29,34);
$tabFirst[8]=array(17,91,79,39,35,54,85,59,37);
$tabFirst[9]=array(66,28,63,18,62,47,94,89,40);
// Chiffre 0 <20> 9
$tabPoids=array(1,34,-16,-21,27,-7,9,30,3);
$cle=$first=0;
for($pos=0; $pos<9; $pos++) {
$chiffre=$siren[$pos];
if ($first==0) {
$first=$cle=$tabFirst[$chiffre][$pos];
} else {
$cle+=$tabPoids[$pos]*$chiffre;
}
}
while(true) {
if ($cle>96) $cle=$cle-97;
elseif ($cle<0) $cle=$cle+97;
else break;
}
if ($cle==0) return 96;
return ($cle-1);
}
/** Test de la validit<EFBFBD> du siren demand<EFBFBD>
** @param int SIREN <EFBFBD> tester
** @param int NIC (facultatif)
** @param mixed Message textuel d'erreur <20> afficher en cas d'erreur ou false
** @return mixed true, false ou Message d'erreur pass<EFBFBD> en param<EFBFBD>tre
**/
private function valideSiren($siren, $nic='', $erreur=false) {
/** Si le siren est de taille < <20> 9, on ajoute des 0 significatifs **/
switch (strlen($siren)) {
case 1: $siren='00000000'.$siren; break;
case 2: $siren='0000000'.$siren; break;
case 3: $siren='000000'.$siren; break;
case 4: $siren='00000'.$siren; break;
case 5: $siren='0000'.$siren; break;
case 6: $siren='000'.$siren; break;
case 7: $siren='00'.$siren; break;
case 8: $siren='0'.$siren; break;
}
if (strlen($nic)>0) {
switch (strlen($nic)) {
case 1: $nic='0000'.$nic; break;
case 2: $nic='000'.$nic; break;
case 3: $nic='00'.$nic; break;
case 4: $nic='0'.$nic; break;
}
}
if (!valideData($siren, 9, 9,'N')) //Siren non pr<70>cis<69> ou incorrect.
return $erreur;
elseif ($siren*1==0) // Siren vide
return $erreur;
else
{
if (!isset($nic) || trim($nic)=='')
{
$somme=0;
for ($i=0; $i<=8; $i+=2) // Traitement IMPAIR
$somme+=(integer)substr($siren,$i,1);
for ($i=1; $i<=7; $i+=2)
{ // Traitement PAIR
$var_tmp=(string)(2*((integer)substr($siren,$i,1)));
$som_tmp=0;
for($j=0;$j<strlen($var_tmp);$j++)
$som_tmp+=(integer)substr($var_tmp,$j,1);
$somme+=$som_tmp;
}
if ((integer)($somme/10)!=($somme/10))
{ // Le Siren est faux
if (substr($siren,0,3)!='200') // Les siren d<>butant par 200 sont toujours valides (sirens provisoires de la BDF?!)
return $erreur;
}
} else {
if (!valideData($nic,1,5,'N')) // Nic de format incorrect.
return $erreur;
$SIRET=$siren.$nic;
$somme=0;
for ($i=0; $i<=12; $i+=2)
{ // Traitement PAIR
$var_tmp=(string)(2*((integer)substr($SIRET,$i,1)));
$som_tmp=0;
for($j=0;$j<strlen($var_tmp);$j++)
$som_tmp+=(integer)substr($var_tmp,$j,1);
$somme+=$som_tmp;
}
for ($i=1; $i<=13; $i+=2) // Traitement IMPAIR
$somme+=(integer)substr($SIRET,$i,1);
if ((integer)($somme/10)!=($somme/10))// Le Siret est faux
return $erreur;
}
}
return true;
}
}
?>