262 lines
12 KiB
PHP
262 lines
12 KiB
PHP
#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
|
|
<?php
|
|
|
|
/** Durée maximale du script **/
|
|
$dureeMaxi=300; // secondes (soit 5 minutes)
|
|
/** Interval entre chaque tentative de récupération des Kbis sur le FTP **/
|
|
$dureeInterval=5; // secondes
|
|
|
|
set_time_limit(($dureeMaxi+10));
|
|
|
|
error_reporting(E_ALL & ~E_NOTICE);
|
|
include_once(FWK_PATH.'common/chiffres.php');
|
|
include_once(FWK_PATH.'common/dates.php');
|
|
include_once(INCLUDE_PATH.'insee/classMInsee.php');
|
|
include_once(INCLUDE_PATH.'partenaires/classMGreffes.php');
|
|
include_once(FWK_PATH.'common/dates.php');
|
|
include_once(INCLUDE_PATH.'partenaires/classMBilans.php');
|
|
include_once(FWK_PATH.'mail/sendMail.php');
|
|
|
|
$strInfoScript='Usage : '.basename($argv[0]). " SIREN [PIECE='kbis'] [TYPE=''] [VISU=1] [COURRIER=0] [REF='']
|
|
Récupération d'une pièce (kbis par défaut) pour un SIREN.
|
|
|
|
[PIECE]
|
|
kbis Seul pièce possible pour l'instant
|
|
|
|
";/* -e:X Calculer pour les X derniers exercices (3 par défaut)
|
|
-f Calculer les scores financiers
|
|
*/
|
|
$siren=0;
|
|
$piece='kbis';
|
|
$type='';
|
|
$visu=1;
|
|
$courrier=0;
|
|
$ref='';
|
|
global $heureDemande;
|
|
$heureDemande=date('Hi');
|
|
|
|
$iInsee=new MInsee();
|
|
|
|
for ($i=1; isset($argv[$i]); $i++) {
|
|
if (substr($argv[$i],0,1)=='-') {
|
|
switch (strtolower(substr($argv[$i],1,1))) {
|
|
case '-':
|
|
case '?':
|
|
die($strInfoScript);
|
|
break;
|
|
default:
|
|
die('Option '. $argv[$i] . ' inconnue !'.EOL);
|
|
break;
|
|
}
|
|
}
|
|
elseif ($i==1) $siren=$argv[$i]*1;
|
|
elseif ($i==2) $piece=$argv[$i];
|
|
elseif ($i==3) $type=$argv[$i];
|
|
elseif ($i==4) $visu=$argv[$i];
|
|
elseif ($i==5) $courrier=$argv[$i];
|
|
elseif ($i==6) $ref=$argv[$i];
|
|
}
|
|
|
|
function kbisLog($siren,$piece,$message,$typeLog='DEBUG') {
|
|
global $heureDemande;
|
|
if ($typeLog=='DEBUG') {
|
|
$fp = fopen("./kbis.log", 'a');
|
|
fwrite($fp, date('Y-m-d H:i:s')." - $siren ($heureDemande) $piece $message".EOL);
|
|
fclose($fp);
|
|
} else {
|
|
$fp = fopen("./kbis-error.log", 'a');
|
|
fwrite($fp, date('Y-m-d H:i:s')." - $siren ($heureDemande) $piece $message".EOL);
|
|
fclose($fp);
|
|
}
|
|
}
|
|
|
|
if ($siren<100 || !$iInsee->valideSiren($siren)) {
|
|
kbisLog($siren, $piece, "IN : Siren $siren Invalide !");
|
|
} else {
|
|
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 ($piece<>'kbis') {
|
|
kbisLog($siren, $piece, "IN : Piece $piece inexistante !");
|
|
}
|
|
|
|
// Ouverture de quelques fichiers pour lecture
|
|
$fp = fopen("/tmp/$piece-$siren", 'w+');
|
|
fwrite($fp, "$siren;$piece;$type;$visu;$courrier;$ref");
|
|
rewind($fp);
|
|
// Mise en place d'une connexion basique
|
|
$conn_id = ftp_connect('192.168.3.4');
|
|
// Identification avec un nom d'utilisateur et un mot de passe
|
|
$login_result = ftp_login($conn_id, 'kbis', 'kbis');
|
|
|
|
$tabListInit=ftp_nlist($conn_id, 'pdf/');
|
|
$nbList=count($tabListInit);
|
|
$nbEssais=0; // Nombre de tentatives de récupération
|
|
|
|
// Tente de charger le fichier $file
|
|
if (!ftp_fput($conn_id, "in/$piece-$siren.txt", $fp, FTP_ASCII))
|
|
$erreur=true;
|
|
fclose($fp);
|
|
|
|
kbisLog($siren, $piece, "IN : Fichier déposé en commande sur le FTP");
|
|
|
|
while (true) {
|
|
$nbEssais++;
|
|
sleep($dureeInterval);
|
|
$tabList=ftp_nlist($conn_id, 'pdf/');
|
|
if (count($tabList)>$nbList) {
|
|
kbisLog($siren, $piece, "WAIT : Essai $nbEssais, des nouveaux fichiers sont disponibles sur le FTP !");
|
|
|
|
// On vérifie que le K-Bis récupéré est bien celui commandé !!!
|
|
sleep($dureeInterval); // Laisse le temps au serveur de K-Bis de finir le fichier PDF !!!
|
|
$tabNom=array_diff($tabList,$tabListInit);
|
|
ftp_chdir($conn_id, 'pdf');
|
|
$ficDist=str_replace('pdf/', '', reset($tabNom));
|
|
if (!ftp_get($conn_id,"/tmp/$piece-$siren.pdf", $ficDist, FTP_BINARY)) {
|
|
// Problème FTP --> STOP
|
|
kbisLog($siren, $piece, "OUT : Problème FTP");
|
|
$erreur=true;
|
|
die();
|
|
}
|
|
shell_exec("/var/www/cgi-bin/pdftotext /tmp/$piece-$siren.pdf /tmp/$piece-$siren.txt");
|
|
$str=file_get_contents("/tmp/$piece-$siren.txt");
|
|
//if (preg_match("/((?:[0-9]{9,9})|(?:[0-9]{3,3} [0-9]{3,3} [0-9]{3,3})|(?:[0-9]{3,3}\.[0-9]{3,3}\.[0-9]{3,3})|(?:[0-9]{3,3}-[0-9]{3,3}-[0-9]{3,3}))/", $str, $matches)) {
|
|
if (preg_match("/((?:\s[0-9]{9,9})|(?:\s[0-9]{3,3}\s[0-9]{3,3}\s[0-9]{3,3})|(?:\s[0-9]{3,3}\.[0-9]{3,3}\.[0-9]{3,3})|(?:\s[0-9]{3,3}-[0-9]{3,3}-[0-9]{3,3}))/U", $str, $matches)) {
|
|
$sirenLu=trim(str_replace(' ','', $matches[1]));
|
|
if ($sirenLu==$siren) {
|
|
kbisLog($siren, $piece, "OUT : Le nouveau fichier est celui attendu ($sirenLu=$siren)");
|
|
|
|
copy("/tmp/$piece-$siren.pdf", "/var/www/html/pdf/$piece-$siren.pdf");
|
|
ftp_chdir($conn_id, '/html');
|
|
$tabListHtml=ftp_nlist($conn_id, $siren.'*');
|
|
foreach ($tabListHtml as $fichierHtml) {
|
|
$ficDist2=str_replace('html/', '', $fichierHtml);
|
|
$buff = ftp_mdtm($conn_id, $ficDist2);
|
|
if ($buff!=-1 && date("Ymd", $buff)==date("Ymd")) {
|
|
ftp_get($conn_id,"/tmp/$piece-$siren.html", $ficDist2, FTP_ASCII);
|
|
$strKbis=file_get_contents("/tmp/$piece-$siren.html");
|
|
// Log provisoire
|
|
$fp = fopen("/tmp/$piece-commande.log", 'a+');
|
|
fwrite($fp, date('Y/m/d H:i:s')." - $siren - Nb fichier HTML : ".count($tabListHtml).print_r($tabListHtml));
|
|
fclose($fp);
|
|
/*
|
|
if (preg_match('/<TD align=left colSpan=2><B>IDENTIFICATION <\/B>(.*)<TD colSpan=2><B>RENSEIGNEMENTS RELATIFS A LA PERSONNE MORALE<\/B>/Uis', $strKbis, $matches))
|
|
{
|
|
$htmlId=$matches[1];
|
|
if (preg_match('/<TD (?:.*) vAlign=top align=left>Dénomination sociale \:<\/TD>(.*)<\/TD><\/TR>/Uis', $htmlId, $matches))
|
|
$rs=trim(strip_tags($matches[1]));
|
|
if (preg_match('/<TD (?:.*) italic" vAlign=top align=left>Numéro RCS \:<\/TD>(.*)<\/TD><\/TR>/Uis', $htmlId, $matches))
|
|
$rcs=trim(strip_tags($matches[1]));
|
|
//if (preg_match('/<TD style="FONT-STYLE\: italic" vAlign=top align=left>Date immatriculation \:<\/TD>(.*)<\/TD><\/TR>/Uis', $htmlId, $matches))
|
|
// $dateImmat=trim(strip_tags($matches[1]));
|
|
}
|
|
if (preg_match('/<TD align=left colSpan=2><B>ADMINISTRATION<\/B>(.*)<TD align=left colSpan=2><B>RENSEIGNEMENTS RELATIFS A L\'ACTIVITE COMMERCIALE<\/B>/Uis', $strKbis, $matches))
|
|
{
|
|
// Les dirigeants provenants de toute autre source sont marqués inactifs
|
|
$ret=$iDb->query("UPDATE rncs_dirigeants SET actif=0 WHERE source<>'gre' AND siren=$siren");
|
|
|
|
$tabDirs=array();
|
|
$htmlAd=$matches[1];
|
|
$tabTmp=explode('<HR SIZE=1>', $htmlAd);
|
|
foreach ($tabTmp as $i=>$htmlDir) {
|
|
if ($i==0) continue;
|
|
$tabDir=array();
|
|
if (preg_match('/<TD (?:.*) vAlign=top>(.*)<\/TD>/Uis', $htmlDir, $matches))
|
|
$tabDir['fonction']=trim(strip_tags($matches[1]));
|
|
if (preg_match('/<TBODY>(?:.*)<TR>(?:.*)<TD>(.*)<\/TD><\/TR>/Uis', $htmlDir, $matches))
|
|
$tabDir['nom']=trim(strip_tags($matches[1]));
|
|
if (preg_match('/<TD>\((.*)\)<\/TD><\/TR>/Uis', $htmlDir, $matches))
|
|
$tabDir['siren']=trim(strip_tags($matches[1]));
|
|
if (preg_match('/<TD>(.*)<\/TD><\/TR>(?:.*)<TR>(?:.*)<TD>représentée par <\/TD><\/TR>(?:.*)<TD>(.*)<\/TD><\/TR>/Uis', $htmlDir, $matches)) {
|
|
//$tabDir['rs']=trim(strip_tags($matches[1]));
|
|
$tabDir['rep']=trim(strip_tags($matches[2]));
|
|
}
|
|
if (preg_match('/<TD>né\(e\)(.*)<TR>/Uis', $htmlDir, $matches))
|
|
$tabDir['naiss']=trim(strip_tags($matches[1]));
|
|
if (preg_match('/<TD>de nationalité (.*)<\/TD><\/TR></Uis', $htmlDir, $matches))
|
|
$tabDir['natio']=trim(strip_tags($matches[1]));
|
|
if (preg_match('/<TD>demeurant (.*)<\/TD><\/TR></Uis', $htmlDir, $matches))
|
|
$tabDir['adresse']=trim(strip_tags($matches[1]));
|
|
//$tabDir['html']=$htmlDir;
|
|
$tabDirs[]=$tabDir;
|
|
$iDb=new WDB();
|
|
$nom=$tabDir['nom'];
|
|
$rs2=$prenom=$civ='';
|
|
if ($tabDir['rep']<>'') {
|
|
$nom=$tabDir['rep'];
|
|
$rs2=$tabDir['nom'];
|
|
}
|
|
if (preg_match('/( MONSIEUR | MADAME | MADEMOISELLE )/i', ' '.$nom,$matches2)) {
|
|
switch (trim($matches2[1])) {
|
|
case 'MONSIEUR ': $civ='M'; break;
|
|
case 'MADAME ': $civ='MME'; break;
|
|
case 'MADEMOISELLE ': $civ='MLLE'; break;
|
|
}
|
|
$nom=preg_replace('/( MONSIEUR | MADAME | MADEMOISELLE )/i','',' '.$nom);
|
|
}
|
|
$tabTmp=explode(' ', $nom);
|
|
$nom=trim(strtr($tabTmp[0],array('&'=>'&')));
|
|
$prenom=trim($tabTmp[1]);
|
|
|
|
if (preg_match('/(\d\d) (janvier|f.vrier|mars|avril|mai|juin|juillet|ao.t|septembre|octobre|novembre|d.cembre) (\d\d\d\d) (.*)/i', $tabDir['naiss'],$matches2))
|
|
{
|
|
$j=trim($matches2[1]);
|
|
$m=trim($matches2[2]);
|
|
$a=trim($matches2[3]);
|
|
$dateNaiss=Wdate::dateT('dMY', 'Y-m-d', $j.$m.$a);
|
|
$lieuNaiss=preg_replace('/^à /','', trim(strtr($matches2[4],array(' '=>' ', '&'=>'&'))));
|
|
}
|
|
$iDb->insert('rncs_dirigeants',
|
|
array( 'siren' => $siren,
|
|
'raisonSociale' => $rs,
|
|
'civilite' => $civ,
|
|
'dirSiren' => substr(trim(str_replace(' ','', $tabDir['siren'])),0,9),
|
|
'dirRS' => $rs2,
|
|
'nom' => $nom,
|
|
'prenom' => $prenom,
|
|
'naissance_nom' => '',
|
|
'naissance_date'=> $dateNaiss,
|
|
'naissance_lieu'=> $lieuNaiss,
|
|
'fonction_code' => 0000,
|
|
'fonction_lib' => $tabDir['fonction'],
|
|
'nat' => preg_replace('/^de nationalité /','', trim(strtr($tabDir['natio'],array(' '=>' ', '&'=>'&')))),
|
|
'adresse' => preg_replace('/^demeurant /','', trim(strtr($tabDir['adresse'],array(' '=>' ', '&'=>'&')))),
|
|
'actif' => 1,
|
|
'dateInsert' => date('YmdHis'),
|
|
'source' => 'gre',
|
|
), true);
|
|
}
|
|
}
|
|
//debugLog('I',"Liste des dirigeants du kbis :".print_r($tabDirs),__LINE__,__FILE__, __FUNCTION__, __CLASS__);*/
|
|
}
|
|
}
|
|
break;
|
|
} else
|
|
kbisLog($siren, $piece, "OUT : Le nouveau fichier n'est pas celui attendu ($sirenLu<>$siren)");
|
|
}
|
|
} else {
|
|
kbisLog($siren, $piece, "WAIT : Essai $nbEssais, aucun nouveau fichier disponible sur le FTP !");
|
|
if (($nbEssais*$dureeInterval)>$dureeMaxi) {
|
|
kbisLog($siren, $piece, "OUT : Essai $nbEssais, ERREUR aucun kbis trouvé en $dureeMaxi secondes sur le FTP !");
|
|
kbisLog($siren, $piece, "OUT : Essai $nbEssais, ERREUR aucun kbis trouvé en $dureeMaxi secondes sur le FTP !", 'ERROR');
|
|
$message="ERREUR lors de la récupération du '$piece' pour le siren $siren (aucun PDF sur le serveur FTP au bout de $nbEssais essais en $dureeMaxi secondes)".EOL;
|
|
$message.=EOL."Si vous obtenez régulièrement ce message avec des siren différents, il faut probablement relancer la passerelle de commandes de pièces officielles.".EOL;
|
|
sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com,mricois@scores-decisions.com', 'ERREUR KBIS entre la passerelle et le WebService', $message);
|
|
die();
|
|
}
|
|
}
|
|
}
|
|
// Fermeture de la connexion et du pointeur de fichier
|
|
ftp_close($conn_id);
|
|
kbisLog($siren, $piece, "OUT : Fin normale de la récupération du kbis".EOL);
|
|
|
|
die();
|
|
?>
|