974 lines
44 KiB
PHP
974 lines
44 KiB
PHP
#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
|
|
<?php
|
|
include_once(FWK_PATH.'common/chiffres.php');
|
|
include_once(FWK_PATH.'common/dates.php');
|
|
include_once(INCLUDE_PATH.'bodacc/classMBodacc.php');
|
|
include_once(INCLUDE_PATH.'insee/classMInsee.php');
|
|
include_once(INCLUDE_PATH.'partenaires/classMGreffes.php');
|
|
include_once(INCLUDE_PATH.'partenaires/classMFedaso.php');
|
|
include_once(FWK_PATH.'mail/sendMail.php');
|
|
|
|
function getNextDate($dateCour, $nbJours=7) {
|
|
$nextDate=date('Ymd', mktime(0, 0, 0, WDate::dateT('Ymd','m', $dateCour), WDate::dateT('Ymd','d', $dateCour)+$nbJours, WDate::dateT('Ymd','Y', $dateCour)));
|
|
return $nextDate;
|
|
}
|
|
|
|
$iDb=new WDB();
|
|
$iDb2=new WDB('sdv1');
|
|
$iInsee=new MInsee();
|
|
$fedaso=new MFedaso();
|
|
|
|
$tabInfosGlobal=array();
|
|
$repPdfInfogreffe='/home/data/ftp/fedaso/statuts/recv';
|
|
$repCsvFedaso='/home/data/ftp/fedaso/statuts/send/';
|
|
|
|
// 1: A supprimer quand Fedaso est nickel... d'ici
|
|
switch (''.date('d-m')) {
|
|
case '01-01':
|
|
case '01-05':
|
|
case '25-12':
|
|
die();
|
|
break;
|
|
default:
|
|
if (date('N')>5) // Nombre ISO-8601 du jour de la semaine (ajout PHP 5.1.0) de 1 à 7 : Lundi à Dimanche
|
|
die();
|
|
break;
|
|
}
|
|
$nbEnvois=200;
|
|
$verFedasoFic='v0,6';
|
|
$verFedasoRef='v0,11';
|
|
|
|
$sep=',';
|
|
$eol=EOL;
|
|
|
|
$genereDepot=false; // Génération du lot de traitement pour envoi vers FEDASO
|
|
$chargerRetour=true; // Charger le/les retours Fedaso
|
|
$initReferentiel=false; // Mettre à jour le référentiel des tables associées
|
|
$tabFichierIn=$tabFichLigneCmd=array();
|
|
|
|
$strInfoScript='Usage : '.basename($argv[0]). " [OPTION]
|
|
Gestion des échanges avec Fedaso.
|
|
|
|
Options :
|
|
-d Mettre à disposition les documents à traiter par Fedaso.
|
|
-t Forcer la mise à jour hebdomadaire des tables associées.
|
|
-c Charger les documents traités et retournés par Fedaso (*)
|
|
|
|
(*) Option par défaut si aucun argument n'est passé.
|
|
";/* -e:X Calculer pour les X derniers exercices (3 par défaut)
|
|
-f Calculer les scores financiers
|
|
*/
|
|
for ($i=1; isset($argv[$i]); $i++) {
|
|
if (substr($argv[$i],0,1)=='-') {
|
|
switch (substr($argv[$i],1,1)) {
|
|
case 'd':
|
|
$genereDepot=true;
|
|
if (date('N')==5) $initReferentiel=true;
|
|
break;
|
|
case 'r':
|
|
$chargerRetour=true;
|
|
break;
|
|
case 't':
|
|
$initReferentiel=true;
|
|
break;
|
|
case '-':
|
|
case '?':
|
|
die($strInfoScript);
|
|
break;
|
|
default:
|
|
die('Option '. $argv[$i] . ' inconnue !'.EOL);
|
|
break;
|
|
}
|
|
} else $tabFichLigneCmd[]=$argv[$i];
|
|
}
|
|
|
|
if (count($tabFichLigneCmd)==0) {
|
|
$dh = opendir($repCsvFedaso);
|
|
while (false !== ($filename = readdir($dh))) {
|
|
if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.txt')
|
|
$tabFichierIn[] = $filename;
|
|
}
|
|
sort($tabFichierIn);
|
|
} else $tabFichierIn=$tabFichLigneCmd;
|
|
|
|
if ($initReferentiel) {
|
|
if (date('N')==5) echo date('Y/m/d - H:i:s') ." - Génération hebdomadaire du référentiel OK...". EOL;
|
|
else echo date('Y/m/d - H:i:s') ." - Génération forcée du référentiel OK...". EOL;
|
|
$nb=file_put_contents($repPdfInfogreffe."/tableCodesRetours_$verFedasoRef.csv", $fedaso->getRefCodeRetour($sep,$eol));
|
|
echo date('Y/m/d - H:i:s') ." - Référentiel 'Codes Retours' : $nb lignes.". EOL;
|
|
$nb=file_put_contents($repPdfInfogreffe."/tableCodesVoies_$verFedasoRef.csv", $fedaso->getRefCodeVoie($sep,$eol));
|
|
echo date('Y/m/d - H:i:s') ." - Référentiel 'Codes Voies' : $nb lignes.". EOL;
|
|
$nb=$iDb->exportCSV('SELECT devIso, devNom FROM sdv1.devise_liste;', $repPdfInfogreffe."/tableCodesDevises_$verFedasoRef.csv",$sep,$eol);
|
|
echo date('Y/m/d - H:i:s') ." - Référentiel 'Devises' : $nb lignes.". EOL;
|
|
$nb=$iDb->exportCSV('SELECT codActe, libActe FROM jo.tabActes;', $repPdfInfogreffe."/tableCodesActes_$verFedasoRef.csv",$sep,$eol);
|
|
echo date('Y/m/d - H:i:s') ." - Référentiel 'Actes' : $nb lignes.". EOL;
|
|
$nb=$iDb->exportCSV('SELECT codeFct AS codFonction, libelle AS libFonction FROM jo.bodacc_fonctions;', $repPdfInfogreffe."/tableCodesFonctions_$verFedasoRef.csv",$sep,$eol);
|
|
echo date('Y/m/d - H:i:s') ." - Référentiel 'Fonctions' : $nb lignes.". EOL;
|
|
$nb=$iDb->exportCSV('SELECT g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville
|
|
FROM insee.BDF_Etabs b, insee.BDF_Guichets g
|
|
WHERE b.bdfFibCodeEtab = g.bdfFibCodeEtab
|
|
ORDER BY banque, guichet;', $repPdfInfogreffe."/tableCodesGuichets_$verFedasoRef.csv",$sep,$eol);
|
|
echo date('Y/m/d - H:i:s') ." - Référentiel 'Guichets' : $nb lignes.". EOL;
|
|
$nb=$iDb->exportCSV('SELECT codPays3 AS codPays, libPays FROM jo.tabPays;', $repPdfInfogreffe."/tableCodesPays_$verFedasoRef.csv",$sep,$eol);
|
|
echo date('Y/m/d - H:i:s') ." - Référentiel 'Pays' : $nb lignes.". EOL;
|
|
$zip = new ZipArchive;
|
|
$res=$zip->open($repPdfInfogreffe."/tableReferentiel_$verFedasoRef.zip", ZipArchive::OVERWRITE);
|
|
if ($res === TRUE) {
|
|
$zip->addFile($repPdfInfogreffe."/tableCodesRetours_$verFedasoRef.csv", "tableCodesRetours_$verFedasoRef.csv");
|
|
$zip->addFile($repPdfInfogreffe."/tableCodesVoies_$verFedasoRef.csv", "tableCodesVoies_$verFedasoRef.csv");
|
|
$zip->addFile($repPdfInfogreffe."/tableCodesDevises_$verFedasoRef.csv", "tableCodesDevises_$verFedasoRef.csv");
|
|
$zip->addFile($repPdfInfogreffe."/tableCodesActes_$verFedasoRef.csv", "tableCodesActes_$verFedasoRef.csv");
|
|
$zip->addFile($repPdfInfogreffe."/tableCodesFonctions_$verFedasoRef.csv", "tableCodesFonctions_$verFedasoRef.csv");
|
|
$zip->addFile($repPdfInfogreffe."/tableCodesGuichets_$verFedasoRef.csv", "tableCodesGuichets_$verFedasoRef.csv");
|
|
$zip->addFile($repPdfInfogreffe."/tableCodesPays_$verFedasoRef.csv", "tableCodesPays_$verFedasoRef.csv");
|
|
$zip->close();
|
|
unlink($repPdfInfogreffe."/tableCodesRetours_$verFedasoRef.csv");
|
|
unlink($repPdfInfogreffe."/tableCodesVoies_$verFedasoRef.csv");
|
|
unlink($repPdfInfogreffe."/tableCodesDevises_$verFedasoRef.csv");
|
|
unlink($repPdfInfogreffe."/tableCodesActes_$verFedasoRef.csv");
|
|
unlink($repPdfInfogreffe."/tableCodesFonctions_$verFedasoRef.csv");
|
|
unlink($repPdfInfogreffe."/tableCodesGuichets_$verFedasoRef.csv");
|
|
unlink($repPdfInfogreffe."/tableCodesPays_$verFedasoRef.csv");
|
|
echo date('Y/m/d - H:i:s') ." - Compression ZIP du référentiel OK...". EOL;
|
|
} else {
|
|
echo date('Y/m/d - H:i:s') ." - ERREUR ZIP n°$res : Compression ZIP du référentiel impossible !". EOL;
|
|
}
|
|
|
|
}
|
|
|
|
/*
|
|
$nbLignes=$iDb->exportCSV(file_get_contents($sql), $csv.'.tmp');
|
|
$fp = fopen("./csv2sql.log", 'a');
|
|
fwrite($fp, date('Y-m-d H:i:s')." - $base $sql $csv : $nbLignes lignes extraites".EOL);
|
|
*/
|
|
|
|
|
|
|
|
|
|
$tabTmp=$iDb2->select('fedaso', 'count(*) AS nb', "DATE(dateEnvoi)=DATE(NOW())", false, MYSQL_ASSOC);
|
|
$nbEncours=$tabTmp[0]['nb'];
|
|
|
|
if ($genereDepot && $nbEncours==0) {
|
|
$nbEncours=0;
|
|
|
|
$tabActesASaisir=$tabFichierOut=array();
|
|
$tabTmp=$iDb->select('jo.tabActes', 'codActe', 'prioriteSaisie BETWEEN 1 AND 10', false, MYSQL_ASSOC);
|
|
foreach ($tabTmp as $actes)
|
|
$tabActesASaisir[]=$actes['codActe'];
|
|
$nbTypesSaisie=count($tabActesASaisir);
|
|
echo date('Y/m/d - H:i:s') ." - Il y a $nbTypesSaisie types d'actes en saisie.". EOL;
|
|
|
|
while($nbEncours<=$nbEnvois) {
|
|
// $tabTmp=$iDb->select('sdv1.logs', 'siren, page, params, dateHeure', "page LIKE 'greffe_%' AND params<>'' AND params NOT LIKE 'Erreur%' GROUP BY siren, page, params ORDER BY dateHeure DESC", false, MYSQL_ASSOC);
|
|
$tabTmp=$iDb->select('sdv1.logs', 'siren, page, params, dateHeure', "page LIKE 'greffe_%' AND params<>'' AND siren=0 AND params NOT LIKE 'Erreur%' AND dateHeure>='2010-01-22 00:00:00' ORDER BY dateHeure ASC", false, MYSQL_ASSOC);
|
|
foreach ($tabTmp as $actes) {
|
|
$siren =$actes['siren'];
|
|
$params=$actes['params'];
|
|
$pageAc=$actes['page'];
|
|
if ($pageAc=='greffe_bilans') {
|
|
//http://extranet.scores-decisions.com/datafile.php?q=acte-552144503-PF-20010606-7501-55-B-14450-110812-01.pdf&type=pdf
|
|
//$url="http://extranet.scores-decisions.com/pdf/bilan-$siren-$params.pdf";
|
|
$url="http://extranet.scores-decisions.com/datafile.php?q=bilan-$siren-$params.pdf&type=pdf";
|
|
$racine='bilan';
|
|
} elseif ($pageAc=='greffe_actes') {
|
|
$url="http://extranet.scores-decisions.com/datafile.php?q=acte-$siren-$params.pdf&type=pdf";
|
|
$racine='acte';
|
|
//pdf/acte-$siren-$params.pdf";
|
|
$tmp=explode('-', $params);
|
|
if (!in_array(''.$tmp[0], $tabActesASaisir)) {
|
|
echo date('Y/m/d - H:i:s') ." - ___\t$url (exclu)".EOL;
|
|
continue;
|
|
}
|
|
}
|
|
if ($siren==0 && !preg_match('/\|/', $params)) {
|
|
$dir = "/home/buzuk/";//
|
|
// Ouvre un dossier bien connu, et liste tous les fichiers
|
|
if ($dh = opendir($dir)) {
|
|
while (($file = readdir($dh)) !== false) {
|
|
if (preg_match('/^'.$racine.'-(.*)-'.$params.'\.pdf$/', $file, $matches)) {
|
|
//echo "fichier : $file : type : " . filetype($dir . $file) . "\n";
|
|
print_r($matches);
|
|
$newSiren=$matches[1];
|
|
$iDb2->update( 'logs',
|
|
array('siren'=>$newSiren),
|
|
"page='$pageAc' AND params='$params' AND siren=0 AND dateHeure>='2010-01-22 00:00:00' ORDER BY dateHeure DESC", false);
|
|
echo "fichier : $file : siren=$newSiren mis à jour !".EOL;
|
|
//die();
|
|
}
|
|
}
|
|
closedir($dh);
|
|
}
|
|
//die();
|
|
}
|
|
continue;
|
|
|
|
|
|
|
|
// On vérifie si cette acte n'est pas déjà saisie ou en saisie !
|
|
$tabTmp2=$iDb2->select('fedaso', 'count(*) AS nb', "siren=$siren AND page='$pageAc' AND params='$params'", false, MYSQL_ASSOC);
|
|
if ($tabTmp2[0]['nb']>0) {
|
|
echo date('Y/m/d - H:i:s') ." - ___\t$url (en cours)".EOL;
|
|
// On efface ce fichier déjà mis à disposition
|
|
// unlink($repPdfInfogreffe.'/'.basename($url));
|
|
continue;
|
|
}
|
|
|
|
$tabPdf=getPdfInfo($repPdfInfogreffe.'/'.basename($url));
|
|
if (!$tabPdf) {
|
|
$page=getUrl($url, '', '', '', false);
|
|
if ($page['code']<>200 || !isset($page['header']['Content-disposition']) || $page['header']['Content-disposition']=='') {
|
|
echo date('Y/m/d - H:i:s') ." - ___\t$url (inexistant)".EOL;
|
|
continue;
|
|
}
|
|
@mkdir($repPdfInfogreffe);
|
|
$fp=@fopen($repPdfInfogreffe.'/'.basename($url), 'w');
|
|
if (!$fp || !fwrite($fp, $page['body']))
|
|
echo date('Y/m/d - H:i:s') ." - ___\t$url (erreur fichier local)".EOL;
|
|
@fclose($fp);
|
|
$tabPdf=getPdfInfo($repPdfInfogreffe.'/'.basename($url));
|
|
// randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
}
|
|
if (!$tabPdf) {
|
|
echo date('Y/m/d - H:i:s') ." - ___\t$url (vide)".EOL;
|
|
continue;
|
|
}
|
|
|
|
$pdfSize= $tabPdf['pdfSize'];
|
|
$pdfVer = $tabPdf['version'];
|
|
$pdfPage= $tabPdf['nbPages'];
|
|
|
|
$nbEncours++;
|
|
$tabFichierOut[]=basename($url);
|
|
|
|
if(!$iDb2->insert('fedaso', array( 'siren' => $siren,
|
|
'params' => $params,
|
|
'page' => $pageAc,
|
|
'dateEnvoi' => date('YmdHis'),
|
|
))) {
|
|
echo date('Y/m/d - H:i:s') ." - ERREUR lors de l'insertion de $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
|
|
} else
|
|
echo date('Y/m/d - H:i:s') ." - $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
|
|
if ($nbEncours>=$nbEnvois) {
|
|
// On efface le dernier fichier car il est de trop !
|
|
//unlink($repPdfInfogreffe.'/'.basename($url));
|
|
break(2);
|
|
}
|
|
}
|
|
}
|
|
|
|
$fichierIndex='lotliensn-'.date('Y-m-d-Hi').'.txt';
|
|
$nbActes=count($tabFichierOut);
|
|
|
|
if (file_put_contents($repPdfInfogreffe.'/'.$fichierIndex, $verFedasoFic.EOL.implode(EOL, $tabFichierOut).EOL.$nbActes))
|
|
echo date('Y/m/d - H:i:s') ." - Le fichier index $fichierIndex a été crée pour les $nbActes.". EOL;
|
|
else
|
|
echo date('Y/m/d - H:i:s') ." - Erreur : Création impossible du fichier index $fichierIndex pour les $nbActes !". EOL;
|
|
} elseif ($genereDepot && $nbEncours==$nbEnvois) {
|
|
echo date('Y/m/d - H:i:s') ." - Les $nbEncours actes quotidiens ont déjà été déposés.". EOL;
|
|
} elseif ($genereDepot && $nbEncours<$nbEnvois) {
|
|
echo date('Y/m/d - H:i:s') ." - Erreur : Il n'y a que $nbEncours actes / $nbActes déposés pour Fedaso !". EOL;
|
|
}
|
|
|
|
|
|
if (count($tabFichierIn)>0 || count($tabFichLigneCmd)>0) {
|
|
|
|
echo date ('Y/m/d - H:i:s') . " - Début du traitement de chargement du retour Fedaso.".EOL;
|
|
$mailReferentiel=array();
|
|
for ($i=0; isset($tabFichierIn[$i]); $i++)
|
|
{
|
|
$nomFichier =$tabFichierIn[$i];
|
|
$dateFichier=date('YmdHis', filectime($repCsvFedaso.$nomFichier));
|
|
$fp=fopen($repCsvFedaso.$nomFichier, 'r');
|
|
if (!$fp) {
|
|
echo date ('Y/m/d - H:i:s') ." - Erreur : Impossible d'ouvrir le fichier n°$i à traiter (".$nomFichier.")".EOL;
|
|
echo date ('Y/m/d - H:i:s') . " - Fin du traitement".EOL;
|
|
die();
|
|
}
|
|
|
|
$nbLignes=0; // Nombre de ligne du fichier
|
|
while (!feof($fp))
|
|
{
|
|
$nbLignes++;
|
|
$a = trim(fgets($fp, 1024));
|
|
}
|
|
|
|
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier n°$i, $nomFichier ($nbLignes lignes à traiter) !".EOL;
|
|
|
|
$ligne=1;
|
|
rewind($fp);
|
|
|
|
/** Traitement de la 1ère ligne **/
|
|
$a = utf8_decode(fgets($fp, 2048));
|
|
|
|
while (!feof($fp))
|
|
{
|
|
$ajoutMailRef=false;
|
|
/*
|
|
$siren = trim($a[0]);
|
|
$typeData = strtoupper(trim($a[1]));
|
|
$codeRetour = trim($a[2]);
|
|
$typeActe = trim($a[3]);
|
|
$refDoc = trim($a[4]);
|
|
*/
|
|
$siren = trim(substr($a,0,9))*1;
|
|
$typeData = strtoupper(trim(substr($a,9,1)));
|
|
$codeRetour = trim(substr($a,10,3))*1;
|
|
$typeActe = trim(substr($a,13,3));
|
|
$refDoc = trim(substr($a,16,80));
|
|
if ($siren==0) {
|
|
$tmp=explode('-', $refDoc);
|
|
$siren=$tmp[1];
|
|
/*
|
|
if (substr($refDoc,4,1)=='_') $pageAc='greffe_bilans';
|
|
elseif (substr($refDoc,2,1)=='-') $pageAc='greffe_actes';
|
|
$tabTmp=$iDb2->select('fedaso', 'siren', "page='$pageAc' AND params='$refDoc'", false, MYSQL_ASSOC);
|
|
if ($tabTmp[0]['siren']>0) $siren=$tabTmp[0]['siren'];
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : Siren vide dans $refDoc remplacé par $siren !".EOL;*/
|
|
if ($siren==0 || !$iInsee->valideSiren($siren))
|
|
die(date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : Siren $siren invalide dans $refDoc !".EOL);
|
|
}
|
|
$typePresta = strtoupper(trim(substr($a,96,1)));
|
|
|
|
/** @todo Tester les codes retour **/
|
|
switch ($codeRetour) {
|
|
case 100: // Document illisible
|
|
case 101: // Document partiellement lisible
|
|
case 102: // Document inattendu
|
|
case 103: // Page blanche
|
|
case 104: // Fichier absent
|
|
case 105: // Page partiellement scannée
|
|
case 106: // Document complémentaire concernant une autre société
|
|
case 107: // Page(s) manquante(s)
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : Code retour n°$codeRetour sur $siren ($typeData) !".EOL;
|
|
continue;
|
|
break;
|
|
case 200: // Aucune information dirigeants
|
|
case 210: // Aucune information actionnaire
|
|
case 211: // Aucune information capitalistique
|
|
case 220: // Aucune information RIB
|
|
echo date ('Y/m/d - H:i:s')." - ATTENTION fichier $nomFichier, ligne $ligne à priori vide (Vérifier si fedaso gère bien ces codes) !".EOL;
|
|
break;
|
|
case 201: // Code fonction inexistant
|
|
case 221: // Code guichet inconnu
|
|
case 250: // Raison Sociale absente
|
|
case 300: // Code pays absent du réferentiel
|
|
case 301: // Code devise absent du référentiel
|
|
$ajoutMailRef=true;
|
|
break;
|
|
case 0:
|
|
break;
|
|
default:
|
|
$message="ERREUR fichier $nomFichier, ligne $ligne : Code retour Fedaso inconnu '$codeRetour' pour le document $refDoc dans le fichier $nomFichier";
|
|
sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Erreur code retour '$codeRetour' inconnu", $message);
|
|
echo date ('Y/m/d - H:i:s')." - $message".EOL;
|
|
die();
|
|
break;
|
|
}
|
|
// Récupération de la date du document
|
|
$tmp=@explode('-', $refDoc);
|
|
$dateDoc=@$tmp[3]*1;
|
|
// Transformation de la référence en réf. stockée en base (suppression siren, acte/bilan et .pdf)
|
|
$refBase=str_replace('.pdf','',preg_replace('/^(bilan|acte)-\d\d\d\d\d\d\d\d\d-/Ui','', $refDoc));
|
|
|
|
$tabTypeActes[$refDoc][]=$typeActe;
|
|
$tabInsert=array();
|
|
$table='';
|
|
|
|
//echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (deb)".EOL;
|
|
|
|
switch ($typeData) {
|
|
case 'R': // ligne de RIB
|
|
$rib=array();
|
|
$rib['codeBanque'] = trim(substr($a, 97, 5))*1;
|
|
$rib['codeGuichet'] = trim(substr($a,102, 5))*1;
|
|
$rib['numCompte'] = trim(substr($a,107,11));
|
|
$rib['clefRib'] = trim(substr($a,118, 2))*1;
|
|
$rib['libBanque'] = strtoupper(trim(substr($a,120,40)));
|
|
$rib['libGuichet'] = strtoupper(trim(substr($a,160,40)));
|
|
$rib['dateInfo'] = trim(substr($a,200, 8))*1;
|
|
$rib['dateDispo'] = trim(substr($a,208,14))*1;
|
|
$rib['dateSaisie'] = trim(substr($a,222,14))*1;
|
|
$rib['refDoc'] = $refBase;
|
|
|
|
if ($rib['codeBanque']<>0 || $rib['codeGuichet']<>0 || $rib['numCompte']<>'' || $rib['clefRib']<>0 ||
|
|
$rib['libBanque']<>'' || $rib['libGuichet']<>'' ) {
|
|
$table='fedRib';
|
|
$rib['siren'] = $siren;
|
|
$rib['source'] = 1500;
|
|
$rib['codeRetour']=$codeRetour;
|
|
$tabInsert=$rib;
|
|
@$tabTypeData[$refDoc][$typeData]++;
|
|
|
|
if ($ajoutMailRef) {
|
|
$mailReferentiel[]="Document $refDoc : Code Banque ou Guichet inconnu ". $rib['libBanque'].' ('.$rib['codeBanque'].') - '.$rib['libGuichet'].' ('.$rib['codeGuichet'].')';
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case 'D': // Ligne de Dirigeants
|
|
|
|
$dir=array();
|
|
$dir['siren'] = $siren;
|
|
$dir['raisonSociale']= strtoupper( trim(substr($a, 100,255)));
|
|
$dir['dateInfo'] = strtoupper( trim(substr($a,1019, 8)))*1;
|
|
$dir['source'] = 1500;
|
|
$dir['refDoc'] = $refBase;
|
|
if ($dir['dateInfo']==0) {
|
|
$dir['dateInfo']=$dateDoc;
|
|
}
|
|
if ($dir['raisonSociale']<>'')
|
|
if (!$iDb2->insert('capitalActions', $dir))
|
|
if (!$iDb2->update('capitalActions', $dir, "siren=$siren AND (dateInfo='".$dir['dateInfo']."' OR refDoc='$refBase')"))
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'capitalAction' : ". mysql_error().EOL;
|
|
|
|
$dir['actif'] = trim(substr($a, 97, 1));
|
|
if ($dir['actif']=='')
|
|
$dir['actif']='NULL';
|
|
$dir['typeDir'] = strtoupper( trim(substr($a, 98, 2)));
|
|
$dir['dirSiren']=$siren2= trim(substr($a, 355, 9));
|
|
$dir['dirSirenValide']=0;
|
|
if ($dir['typeDir']=='PM') {
|
|
if ($siren2<>0 && $iInsee->valideSiren($siren2))
|
|
$dir['dirSirenValide']=1;
|
|
else
|
|
echo date ('Y/m/d - H:i:s')." - Fichier $nomFichier, ligne $ligne : Prévoir le sirenage des dirigeants $codeRetour sur $siren/$siren2 ($typeData) !".EOL;
|
|
}
|
|
|
|
$dir['dirRS'] = strtoupper( trim(substr($a, 364,255)));
|
|
$dir['civilite'] = strtoupper( trim(substr($a, 619, 3)));
|
|
$dir['nom'] = strtoupper( trim(substr($a, 622, 60)));
|
|
$dir['prenom'] = strtoupper( trim(substr($a, 682, 40)));
|
|
$dir['naissance_nom']= strtoupper( trim(substr($a, 722, 60)));
|
|
$dir['naissance_date']= trim(substr($a, 782, 8))*1;
|
|
$dir['naissance_dept_pays']=strtoupper(trim(substr($a,790,3)));
|
|
$dir['naissance_lieu']= strtoupper( trim(substr($a, 793, 40)));
|
|
$dir['nat'] = strtoupper( trim(substr($a, 833, 3)));
|
|
$dir['adresse_num'] = trim(substr($a, 836, 4))*1;
|
|
$dir['adresse_btq'] = strtoupper( trim(substr($a, 840, 1)));
|
|
$dir['adresse_codvoie']=strtoupper( trim(substr($a, 841, 4)));
|
|
$dir['adresse_libvoie']=strtoupper( trim(substr($a, 845, 32)));
|
|
$dir['adresse_comp']= strtoupper( trim(substr($a, 877, 40)));
|
|
$dir['adresse_cp'] = strtoupper( trim(substr($a, 917, 5)));
|
|
$dir['adresse_ville']= strtoupper( trim(substr($a, 922, 40)));
|
|
$dir['adresse_pays']= strtoupper( trim(substr($a, 962, 3)));
|
|
if ($ajoutMailRef && $codeRetour==300)
|
|
$mailReferentiel[]="Document $refDoc : Code pays '".$dir['adresse_pays']."' ou nationalité '".$dir['nat']."'inconnu !";
|
|
|
|
$dir['fonction_code']= strtoupper( trim(substr($a, 965, 4)))*1;
|
|
$dir['fonction_lib']= strtoupper( trim(substr($a, 969, 50)));
|
|
if ($dir['fonction_code']==0 && $dir['fonction_lib']<>'')
|
|
$mailReferentiel[]="Document $refDoc : Code Fonction dirigeant inexistant '". $dir['fonction_lib']."'";
|
|
$dir['dateDispo'] = strtoupper( trim(substr($a,1027, 14)))*1;
|
|
$dir['dateSaisie'] = strtoupper( trim(substr($a,1041, 14)))*1;
|
|
$dir['codeRetour'] = $codeRetour;
|
|
|
|
if ($codeRetour==200) {
|
|
$table='';
|
|
} else {
|
|
@$tabTypeData[$refDoc][$typeData]++;
|
|
$tabInsert=$dir;
|
|
$table='fedDirigeants';
|
|
}
|
|
|
|
break;
|
|
case 'L': // lien
|
|
case 'A': // lien Actionnaires
|
|
case 'P': // lien Participations
|
|
case 'F': // lien Fusion Absorbant
|
|
case 'E': // ligne de lien Fusion Absorbée
|
|
case 'S': // ligne de lien Scission
|
|
$lien=array();
|
|
$pct=0;
|
|
$lien['capital'] = trim(substr($a, 97, 15))*1;
|
|
$lien['deviseCapital'] = strtoupper( trim(substr($a, 112, 3)));
|
|
$lien['nbActions'] = trim(substr($a, 115, 15))*1;
|
|
if ($ajoutMailRef && $codeRetour==301)
|
|
$mailReferentiel[]="Document $refDoc : Code devise inconnu ". $lien['deviseCapital'];
|
|
|
|
if ($lien['nbActions']<>0 && $lien['capital']<>0)
|
|
$lien['actionNominale'] = $lien['capital']/$lien['nbActions'];
|
|
|
|
if ($lien['capital']<>0 || $lien['deviseCapital']<>'' || $lien['nbActions']<>0) {
|
|
$lien['siren'] = $siren;
|
|
$lien['source'] = 1500;
|
|
$lien['refDoc'] = $refBase;
|
|
$lien['dateInfo'] = trim(substr($a, 631, 8))*1; // A voir mais la date du doc n'est pas la date de signature
|
|
$lien['dateSaisie'] = trim(substr($a, 782, 14))*1;
|
|
|
|
if ($lien['dateInfo']==0) {
|
|
$lien['dateInfo']=$dateDoc;
|
|
}
|
|
|
|
if (!$iDb2->insert('capitalActions', $lien))
|
|
if (!$iDb2->update('capitalActions', $lien, "siren=$siren AND (dateInfo='".$lien['dateInfo']."' OR refDoc='$refBase')"))
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'capitalAction' : ". mysql_error().EOL;
|
|
|
|
}
|
|
//echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (capital)".EOL;
|
|
|
|
$lien['actif'] = trim(substr($a, 130, 1));
|
|
if ($lien['actif']=='')
|
|
$lien['actif']='NULL';
|
|
$lien['lienPct'] = trim(substr($a, 131, 6))*1;
|
|
$lien['lienNbActions'] = trim(substr($a, 137, 15))*1;
|
|
$lien['lienMontant'] = trim(substr($a, 152, 15))*1;
|
|
if ($lien['capital']>0) {
|
|
if ($lien['lienPct']>0)
|
|
$pct=$lien['lienPct'];
|
|
elseif ($lien['lienMontant']>0) {
|
|
$pct=($lien['lienMontant']/$lien['capital'])*100;
|
|
$lien['lienPct']=$pct;
|
|
}
|
|
} elseif($lien['lienNbActions']>0 && $lien['nbActions']) {
|
|
$pct=($lien['lienNbActions']/$lien['nbActions'])*100;
|
|
$lien['lienPct']=$pct;
|
|
}
|
|
$lien['MajMin'] = strtoupper( trim(substr($a, 167, 1)));
|
|
if ($pct>50 && $lien['MajMin']<>'+')
|
|
$lien['MajMin']='+';
|
|
$lien['PpPm'] = strtoupper( trim(substr($a, 168, 2)));
|
|
$lien['siren2']=$siren2 = trim(substr($a, 170, 9))*1;
|
|
$lien['RS'] = strtoupper( trim(substr($a, 179,255)));
|
|
$lien['nom'] = strtoupper( trim(substr($a, 434, 40)));
|
|
$lien['prenom'] = strtoupper( trim(substr($a, 474, 40)));
|
|
$lien['siren2Valide']=0;
|
|
//echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (".$lien['PpPm']." 1)".EOL;
|
|
|
|
if ($lien['PpPm']=='PM') {
|
|
if ($siren2<>0 && $iInsee->valideSiren($siren2))
|
|
$lien['siren2Valide']=1;
|
|
else
|
|
echo date ('Y/m/d - H:i:s')." - Fichier $nomFichier, ligne $ligne : Prévoir le sirenage des actionnaires/participations $codeRetour sur $siren/$siren2 ($typeData) !".EOL;
|
|
}
|
|
//echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (".$lien['PpPm']." 2)".EOL;
|
|
$lien['civilite'] = strtoupper( trim(substr($a, 514, 3)));
|
|
$lien['naissance_nom'] = strtoupper( trim(substr($a, 517, 60)));
|
|
$lien['naissance_date'] = strtoupper( trim(substr($a, 577, 8)));
|
|
$lien['naissance_dept_pays']= strtoupper( trim(substr($a, 585, 3)));
|
|
$lien['naissance_lieu'] = strtoupper( trim(substr($a, 588, 40)));
|
|
$lien['nat'] = strtoupper( trim(substr($a, 628, 3)));
|
|
$lien['adresse_num'] = strtoupper( trim(substr($a, 639, 4)));
|
|
$lien['adresse_btq'] = strtoupper( trim(substr($a, 643, 1)));
|
|
$lien['adresse_codvoie'] = strtoupper( trim(substr($a, 644, 4)));
|
|
$lien['adresse_libvoie'] = strtoupper( trim(substr($a, 648, 32)));
|
|
$lien['adresse_comp'] = strtoupper( trim(substr($a, 680, 40)));
|
|
$lien['adresse_cp'] = strtoupper( trim(substr($a, 720, 5)));
|
|
$lien['adresse_ville'] = strtoupper( trim(substr($a, 725, 40)));
|
|
$lien['adresse_pays'] = strtoupper( trim(substr($a, 765, 3)));
|
|
//$lien['dateDepot'] = strtoupper( trim(substr($a, 768, 1)));
|
|
$lien['typeLien']=$typeData;
|
|
$lien['codeRetour'] = $codeRetour;
|
|
|
|
if ($siren>0 && $siren2>0 && ($typeData=='P' || $typeData=='A')) {
|
|
if ($typeData=='A') {
|
|
$actionPart1=2;
|
|
$actionPart2=1;
|
|
} elseif ($typeData=='P') {
|
|
$actionPart1=1;
|
|
$actionPart2=2;
|
|
}
|
|
$ret=$iDb->select('liens', 'count(*) AS nb', "(Siren1 IN ($siren,$siren2) OR Siren2 IN ($siren,$siren2)) AND source>1500", false, MYSQL_ASSOC);
|
|
if ($ret[0]['nb']==0) {
|
|
if ($lien['adresse_pays']<>'' && $lien['adresse_pays']<>'FRA')
|
|
$pays=$lien['adresse_pays'];
|
|
else $pays='';
|
|
$tabInsertLiens1=array( 'Siren1' => $siren,
|
|
'actif' => $lien['actif']*1,
|
|
'source' => 1500,
|
|
'ActionPart'=> $actionPart1,
|
|
'Pmin' => $pct,
|
|
'Pmax' => $pct,
|
|
'MajMin' => $lien['MajMin'],
|
|
'PpPm' => substr($lien['PpPm'],1,1), // P ou M
|
|
'Siren2' => $siren2,
|
|
'RaisonSociale'=>trim(preg_replace('/ +/', ' ', $lien['RS']/*.' '.$lien['civilite'].' '.$lien['nom'].' '.$lien['prenom']*/)),
|
|
'Pays' => $pays,
|
|
'dateLien' => $lien['dateInfo'],
|
|
'dateInsert'=> date('YmdHis'),
|
|
);
|
|
//echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (id AV)".EOL;
|
|
$entrep=@$iInsee->getIdentiteEntreprise($siren);
|
|
//echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (id AP)".EOL;
|
|
if (substr($entrep['FJ'],0,1)*1<>1) $pppm2='M';
|
|
else $pppm2='P';
|
|
$rs2=$entrep['Nom'];
|
|
$pays2=trim($entrep['Pays']);
|
|
$tabInsertLiens2=array( 'Siren1' => $siren2,
|
|
'actif' => $lien['actif']*1,
|
|
'source' => 1500,
|
|
'ActionPart'=> $actionPart2,
|
|
'Pmin' => $pct,
|
|
'Pmax' => $pct,
|
|
'MajMin' => $lien['MajMin'],
|
|
'PpPm' => $pppm2, // P ou M
|
|
'Siren2' => $siren,
|
|
'RaisonSociale'=>$rs2,
|
|
'Pays' => $pays2,
|
|
'dateLien' => $lien['dateInfo'],
|
|
'dateInsert'=> date('YmdHis'),
|
|
);
|
|
if (!$iDb->insert('liens', $tabInsertLiens1)) {
|
|
print_r($tabInsertLiens1);
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'jo.liens' 1 : ". mysql_error().EOL;
|
|
}
|
|
if (!$iDb->insert('liens', $tabInsertLiens2)) {
|
|
print_r($tabInsertLiens2);
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'jo.liens' 2 : ". mysql_error().EOL;
|
|
}
|
|
$lien['lienPublie']=1;
|
|
}
|
|
}
|
|
|
|
if ($codeRetour==210) {
|
|
$table='';
|
|
} else {
|
|
@$tabTypeData[$refDoc][$typeData]++;
|
|
$tabInsert=$lien;
|
|
$table='fedLiens';
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : TypeData '$typeData' inconnu !".EOL;
|
|
break;
|
|
}
|
|
//echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (FIN)".EOL;
|
|
|
|
if ($table<>'') {
|
|
if (!$iDb2->insert($table, $tabInsert) && mysql_errno()<>1062)
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur '$table' : ". mysql_error().EOL;
|
|
}
|
|
|
|
$ligne++;
|
|
$a = utf8_decode(fgets($fp, 2048));
|
|
}
|
|
|
|
}
|
|
|
|
if (count($mailReferentiel)>0) {
|
|
sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Penser à modifier le référentiel", implode(EOL, $mailReferentiel));
|
|
}
|
|
|
|
/** Enlever ce die() quand on est prêt à valider les fichiers charger **/
|
|
//die();
|
|
|
|
/** Mise à jour des informations globales de retour : Dates, Types d'actes et structures lues
|
|
**/
|
|
foreach ($tabTypeActes as $refDoc=>$typeActes) {
|
|
|
|
// Transformation de la référence en réf. stockée en base (suppression siren, acte/bilan et .pdf)
|
|
$params=str_replace('.pdf','',preg_replace('/^(bilan|acte)-\d\d\d\d\d\d\d\d\d-/Ui','', $refDoc));
|
|
$tmp=explode('-', $refDoc);
|
|
$siren=$tmp[1];
|
|
|
|
$tabTypeData2=array();
|
|
if (isset($tabTypeData[$refDoc]))
|
|
foreach ($tabTypeData[$refDoc] as $typeD=>$nbD)
|
|
$tabTypeData2=array_merge($tabTypeData2, array('nbData'.$typeD=>$nbD));
|
|
|
|
echo date ('Y/m/d - H:i:s') . " - Mise à jour des infos retournées pour $refDoc...".EOL;
|
|
$typeActes=array_unique($typeActes);
|
|
if (!$iDb2->update('fedaso', array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes),
|
|
'dateRetour'=>$dateFichier)),"siren=$siren AND params='$params'"))
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - MAJ impossible sur 'fedaso' : ". mysql_error().EOL;
|
|
}
|
|
|
|
echo date ('Y/m/d - H:i:s') . " - Fin du traitement de chargement du retour Fedaso.".EOL;
|
|
|
|
} else {
|
|
//$message.="Aucun fichier CSF à traiter !\r\n";
|
|
echo date ('Y/m/d - H:i:s') . " - Aucun fichier Fedaso à traiter !".EOL;
|
|
//if (count($argv)==1) die($strInfoScript);
|
|
}
|
|
|
|
die();
|
|
|
|
$referer='http://www.journal-officiel.gouv.fr/association/';
|
|
|
|
if ($verif) {
|
|
echo date('Y/m/d - H:i:s') ." - Comptage du nombre d'annonce présentes en base par date de parution...". EOL;
|
|
$AnnDb=$iDb->select('asso', 'Date_Parution, count(*) as nb', '1 GROUP BY Date_Parution');
|
|
foreach ($AnnDb as $i=>$tabDates) {
|
|
if ($tabDates[0]<>'0000-00-00') {
|
|
$parDate=$tabDates[0];
|
|
$parNb =$tabDates[1];
|
|
$dateFmt=str_replace('/', '%2F', WDate::dateT('Y-m-d', 'd/m/Y',$parDate));
|
|
$url="http://www.journal-officiel.gouv.fr/association/index.php?ACTION=Rechercher&HI_PAGE=1&HI_COMPTEUR=0&original_method=get&WHAT=&JTH_ID=&JAN_BD_CP=&JRE_ID=&JAN_LIEU_DECL=&JTY_ID=&JTY_WALDEC=&JPA_D_D=$dateFmt&JPA_D_F=".$dateFmt.'&rechercher.x='.rand(1,68).'&rechercher.y='.rand(1,16).'&rechercher=Rechercher';
|
|
|
|
$page=getUrl($url, '', '', $referer, false, 'www.journal-officiel.gouv.fr');
|
|
$body=$page['body'];
|
|
$ctx=@getTextInHtml($body, '<A href="index.php?ctx=', 'ctx=', '&'); // Clé de contexte entre chaque page
|
|
$nbAnnonces=@getTextInHtml($body, '<p>Résultat de la recherche : <strong>', '<strong>', 'annonce(s)</strong>');
|
|
if ($nbAnnonces<>$parNb && $nbAnnonces<>0)
|
|
echo date('Y/m/d - H:i:s') ." - Parution du $parDate : $parNb annonces en base / $nbAnnonces annonces parues !". EOL;
|
|
elseif ($nbAnnonces==0)
|
|
echo date('Y/m/d - H:i:s') ." - Parution du $parDate : $parNb annonces en base / Plus d'annonces sur le site JO.". EOL;
|
|
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
//die();
|
|
}
|
|
}
|
|
|
|
die();
|
|
}
|
|
|
|
if ($lastJO==true) {
|
|
$strLast=' dernier';
|
|
$strDates='';
|
|
}
|
|
else {
|
|
$strLast='';
|
|
if ($depotComptes) {
|
|
if ($dateDebut==false) {
|
|
$dateDeb= getNextDate(date('Ymd'),-5);
|
|
$dateDebut= WDate::dateT('Ymd', 'd/m/Y',$dateDeb);
|
|
}
|
|
if ($dateFin==false) {
|
|
$dateF= getNextDate(date('Ymd'),0);
|
|
$dateFin= WDate::dateT('Ymd', 'd/m/Y',$dateF);
|
|
}
|
|
$dateCour= $dateDeb;
|
|
}
|
|
if ($dateDebut==false || $dateFin==false)
|
|
die($strInfoProg);
|
|
else
|
|
$strDates=" du $dateDebut au $dateFin";
|
|
$dateCour=$dateDeb;
|
|
}
|
|
echo date('Y/m/d - H:i:s') ." - DEBUT du la récupération du$strLast JO Association$strDates".EOL;
|
|
echo date('Y/m/d - H:i:s') .' - La durée maximum entre chaque requête est de '. $tempsMaxEntreRequetes .' secondes.'. EOL;
|
|
flush();
|
|
|
|
while ($dateCour<=$dateF || $lastJO) { // Boucle sur les dates
|
|
//echo date ('Y/m/d - H:i:s') ." - dateCour($dateCour) <= dateF($dateF) OU lastJO($lastJO)=true". $eol;
|
|
for ($i_reg=0; isset($tabReg[$i_reg]) || $lastJO; $i_reg++) { // Boucle sur les régions
|
|
|
|
if ($lastJO==true) { // Cas récup dernier JO
|
|
$region='';
|
|
$url='http://www.journal-officiel.gouv.fr/association/index.php?ACTION=showLast';
|
|
} else { // On est pas dans la récupération du JO Assoc Jiur
|
|
$region=$tabReg[$i_reg];
|
|
$reg5=substr($region,0,5);
|
|
$dateFmt=str_replace('/', '%2F', WDate::dateT('Ymd', 'd/m/Y',$dateCour));
|
|
if ($depotComptes)
|
|
$dateFmt2=str_replace('/', '%2F', WDate::dateT('Ymd', 'd/m/Y',getNextDate($dateCour,0)));
|
|
else
|
|
$dateFmt2=str_replace('/', '%2F', WDate::dateT('Ymd', 'd/m/Y',getNextDate($dateCour)));
|
|
//$url='http://www.journal-officiel.gouv.fr/association/index.php?ACTION=Rechercher&HI_PAGE=1&HI_COMPTEUR=0&original_method=get&WHAT=&JTH_ID=&JAN_BD_CP=&JRE_ID='.urlencode($tabReg[$i_reg]).'&JAN_LIEU_DECL=&JTY_ID=&JTY_WALDEC=&JPA_D_D='. $dateFmt .'&JPA_D_F='. $dateFmt2;//&rechercher.x=44&rechercher.y=6&rechercher=Rechercher
|
|
$url='http://www.journal-officiel.gouv.fr/association/index.php?ACTION=Rechercher&HI_PAGE=1&HI_COMPTEUR=0&original_method=get&WHAT=&JTH_ID=&JAN_BD_CP=&JRE_ID=&JAN_LIEU_DECL=&JTY_ID='.$region.'&JTY_WALDEC=&JTY_SIREN=&JPA_D_D='. $dateFmt .'&JPA_D_F='. $dateFmt2.'&rechercher.x='.rand(1,68).'&rechercher.y='.rand(1,16).'&rechercher=Rechercher';
|
|
// http://www.journal-officiel.gouv.fr/association/index.php?ACTION=Rechercher&HI_PAGE=1&HI_COMPTEUR=0&original_method=get&WHAT=&JTH_ID=&JAN_BD_CP=&JRE_ID=&JAN_LIEU_DECL=&JTY_ID=ASSOCIATION%2FCOMPT&JTY_WALDEC=&JTY_SIREN=&JPA_D_D=01%2F01%2F1990&JPA_D_F=31%2F12%2F2009&rechercher.x=40&rechercher.y=9&rechercher=Rechercher
|
|
$strLast='';
|
|
}
|
|
$page=getUrl($url, '', '', $referer, false, 'www.journal-officiel.gouv.fr');
|
|
$body=$page['body'];
|
|
//die(print_r($body));
|
|
$ctx=@getTextInHtml($body, '<A href="index.php?ctx=', 'ctx=', '&'); // Clé de contexte entre chaque page
|
|
$nbAnnonces=@getTextInHtml($body, '<p>Résultat de la recherche : <strong>', '<strong>', 'annonce(s)</strong>');
|
|
$dateDerParution=@getTextInHtml($body, 'Paru le : <b>', '<b>', '</b>'); // Date au format JJ/MM/AAAA
|
|
$nbPages=ceil($nbAnnonces/25);
|
|
if ($nbPages>100) {
|
|
echo date('Y/m/d - H:i:s') .' - ERREUR : Il y a plus de 100 pages d\'annonces !'. EOL;
|
|
die();
|
|
}
|
|
echo date('Y/m/d - H:i:s') ." - Clé de contexte = $ctx".EOL;
|
|
unset($AnnDb);
|
|
$nbAnnDb=0;
|
|
if ($lastJO==true) {
|
|
echo date('Y/m/d - H:i:s') .' - Derniere parution ASSO le '. $dateDerParution .' de '. $nbAnnonces .' annonces ('. $nbPages .' pages)'. EOL;
|
|
// On recherche si nous n'avons pas déjà toutes ces annonces en base !
|
|
$dateDb=substr($dateDerParution,6,4).'-'.substr($dateDerParution,3,2).'-'.substr($dateDerParution,0,2);
|
|
$AnnDb=$iDb->select('asso', 'count(*) AS nb', "Date_Parution='$dateDb'", false, MYSQL_ASSOC);
|
|
$nbAnnDb=$AnnDb[0]['nb'];
|
|
if ($nbAnnDb==$nbAnnonces) {
|
|
echo date('Y/m/d - H:i:s') .' - Toutes les annonces du '. $dateDerParution .' sont en base !'. EOL;
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
|
|
die();
|
|
}
|
|
elseif ($nbAnnDb>0 && $nbAnnDb<$nbAnnonces) {
|
|
$message=date('Y/m/d - H:i:s') .' - ATTENTION : Il n\'y a que '. $nbAnnDb .' annonces en base sur les '. $nbAnnonces .' annonces présentes au JO Association du '. $dateDerParution .' !'. EOL;
|
|
echo $message;
|
|
mail('buzuk@free.fr', 'JO Association', $message);
|
|
mail('ylenaour@scores-decisions.com', 'JO Association', $message);
|
|
mail('lenaoury@gmail.com', 'JO Association', $message);
|
|
echo date('Y/m/d - H:i:s') .' - Tentative de récupération des annonces...'. EOL;
|
|
}
|
|
} else {
|
|
// On recherche si nous n'avons pas déjà toutes ces annonces en base !
|
|
$dateDb=substr($dateCour,0,4).'-'.substr($dateCour,4,2).'-'.substr($dateCour,6,2);
|
|
$dateDerParution=WDate::dateT('Y-m-d', 'd/m/Y',$dateDb);
|
|
if ($depotComptes) {
|
|
switch ($region) {
|
|
case 'ASSOCIATION%2FCOMPTE': $strRegSql=" AND typeAsso='ASS' "; break;
|
|
case 'FONDATION%2FCOMPTE': $strRegSql=" AND typeAsso='FON' "; break;
|
|
case 'FONDS+DE+DOTATION%2FCOMPTE': $strRegSql=" AND typeAsso='FOD' "; break;
|
|
case 'AUTRE%2FCOMPTE': $strRegSql=" AND typeAsso='DIV' "; break;
|
|
}
|
|
$AnnDb=$iDb->select('asso_bilans', 'count(*) AS nb', "Assoc_Date_Declaration='$dateDb' $strRegSql", false, MYSQL_ASSOC);
|
|
$strJO='depôts des comptes associations';
|
|
} else {
|
|
$AnnDb=$iDb->select('asso', 'count(*) AS nb', "Date_Parution='$dateDb'", false, MYSQL_ASSOC);
|
|
$strJO='associations';
|
|
}
|
|
$nbAnnDb=$AnnDb[0]['nb'];
|
|
if ($nbAnnDb>=$nbAnnonces) {
|
|
echo date('Y/m/d - H:i:s') ." - Les $nbAnnonces annonces $strJO $reg5 du $dateDerParution ($dateDb) sont en base ($nbAnnDb) !". EOL;
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
continue;
|
|
}
|
|
elseif ($nbAnnDb>0 && $nbAnnDb<$nbAnnonces) {
|
|
$message=date('Y/m/d - H:i:s') ." - ATTENTION : Il n'y a que $nbAnnDb annonce(s) $strJO en base sur les $nbAnnonces annonces présentes au JO du $dateDerParution !". EOL;
|
|
echo $message;
|
|
mail('ylenaour@scores-decisions.com', 'JO Association', $message);
|
|
mail('lenaoury@gmail.com', 'JO Association', $message);
|
|
echo date('Y/m/d - H:i:s') .' - Tentative de récupération des annonces...'. EOL;
|
|
}
|
|
else
|
|
echo date('Y/m/d - H:i:s') ." - Il y a $nbAnnDb annonce(s) $strJO $reg5 en base sur les $nbAnnonces annonces présentes au JO du $dateDerParution !". EOL;
|
|
}
|
|
$tabAnnonces=explode('<div class="hr"><hr/></div>', $page['body']);
|
|
for ($j=1; $j<26 && isset($tabAnnonces[$j]); $j++)
|
|
$tabAnn[$j-1]=$tabAnnonces[$j];
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
$referer=$url;
|
|
for ($i=2; $i<=$nbPages; $i++)
|
|
{
|
|
if (!$lastJO) {
|
|
$data='';
|
|
$date1=str_replace('/', '%2F', WDate::dateT('Ymd', 'd/m/Y',$dateCour));
|
|
if ($depotComptes)
|
|
$date2=str_replace('/', '%2F', WDate::dateT('Ymd', 'd/m/Y',getNextDate($dateCour,0)));
|
|
else
|
|
$date2=str_replace('/', '%2F', WDate::dateT('Ymd', 'd/m/Y',getNextDate($dateCour)));
|
|
$url='http://www.journal-officiel.gouv.fr/association/index.php?ctx='.$ctx.'&page='.$i.'&JRE_ID='.urlencode($region).'&JPA_D_D='.$date1.'&JPA_D_F='.$date2;
|
|
|
|
} else {
|
|
$date1='';$date2='';$data='1';
|
|
$url='http://www.journal-officiel.gouv.fr/association/index.php?ctx='.$ctx.'&page='.$i;
|
|
}
|
|
|
|
$page=getUrl($url, '', '', $referer, false, 'www.journal-officiel.gouv.fr');
|
|
$tabAnnonces=explode('<div class="hr"><hr/></div>', $page['body']);
|
|
for ($j=1; $j<26; $j++) {
|
|
$k=$j+(25*($i-1))-1;
|
|
if ($k<$nbAnnonces)
|
|
$tabAnn[$k]=$tabAnnonces[$j];
|
|
}
|
|
flush();
|
|
if ($i==2)
|
|
echo date('Y/m/d - H:i:s') ." - Page $i/$nbPages";
|
|
else
|
|
echo ", $i/$nbPages";
|
|
if ($i==$nbPages)
|
|
echo '.'.EOL;
|
|
else
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
}
|
|
|
|
$tabActivites=array();
|
|
for ($i=0; $i<$nbAnnonces; $i++) {
|
|
$infoAnnBalo=getInfosAnnonceAsso($tabAnn[$i], $depotComptes);
|
|
|
|
$tabInfos=array();
|
|
preg_match_all("|<i>(.*)</i>|U", $infoAnnBalo['Annonce_Html'], $tabInfos);
|
|
$tabInfosGlobal=array_unique(array_merge($tabInfosGlobal, $tabInfos[1]));
|
|
// On recherche si nous n'avons pas déjà cette annonce en base !
|
|
if ($depotComptes) {
|
|
$AnnDb=$iDb->select('asso_bilans', 'count(*) AS nb', "Siren=".$infoAnnBalo['Siren']." AND Waldec='".$infoAnnBalo['Waldec']."' AND dateCloture='".$infoAnnBalo['dateCloture']."'", false, MYSQL_ASSOC);
|
|
// $AnnDb[0][0]=0;
|
|
} else {
|
|
$AnnDb=$iDb->select('asso', 'count(*) AS nb', "Num_Annonce='".$infoAnnBalo['Num_Annonce']."' AND Date_Parution='".$infoAnnBalo['Date_Parution']."' AND Num_Parution='".$infoAnnBalo['Num_Parution']."'", false, MYSQL_ASSOC);
|
|
$dateAff=$infoAnnBalo['Date_Parution'];
|
|
}
|
|
$nbAnnDb=$AnnDb[0]['nb'];
|
|
$i2=$i+1;
|
|
$strRegion=', '. $region;
|
|
|
|
if ($depotComptes) {
|
|
$table='asso_bilans';
|
|
// Si le bilan PDF n'est pas déjà sur le disk, on va le chercher !
|
|
switch ($region) {
|
|
case 'ASSOCIATION%2FCOMPTE': $infoAnnBalo['typeAsso']='ASS'; break;
|
|
case 'FONDATION%2FCOMPTE': $infoAnnBalo['typeAsso']='FON'; break;
|
|
case 'FONDS+DE+DOTATION%2FCOMPTE': $infoAnnBalo['typeAsso']='FOD'; break;
|
|
case 'AUTRE%2FCOMPTE':
|
|
default: $infoAnnBalo['typeAsso']='DIV'; break;
|
|
}
|
|
$dateAff=$dateCour.' ('.$infoAnnBalo['dateCloture'].')';
|
|
$infoAnnBalo['Assoc_Date_Declaration']=$dateCour;
|
|
$tabPdf=getPdfInfo($repPdfAssoCpt.'/'.basename($infoAnnBalo['pdfLink']));
|
|
if (!$tabPdf) {
|
|
$page=getUrl('http://www.journal-officiel.gouv.fr/'.$infoAnnBalo['pdfLink'], '', '', '', false);
|
|
@mkdir($repPdfAssoCpt);
|
|
$fp=@fopen($repPdfAssoCpt.'/'.basename($infoAnnBalo['pdfLink']), 'w');
|
|
if (!fwrite($fp, $page['body']) || !$fp)
|
|
echo date('Y/m/d - H:i:s') .' - ERREUR : Problème de création du PDF '. basename($infoAnnBalo['pdfLink']) ." pour la parution du $dateAff $strRegion, Annonce $i2/$nbAnnonces, Association \"". $infoAnnBalo['Assoc_Nom'] .'" !'.EOL;
|
|
@fclose($fp);
|
|
$tabPdf=getPdfInfo($repPdfAssoCpt.'/'.basename($infoAnnBalo['pdfLink']));
|
|
randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
|
|
}
|
|
$infoAnnBalo['pdfSize'] = $tabPdf['pdfSize'];
|
|
$infoAnnBalo['pdfVer'] = $tabPdf['version'];
|
|
$infoAnnBalo['pdfPage'] = $tabPdf['nbPages'];
|
|
} else {
|
|
$table='asso';
|
|
$tabTmp=explode('/',$infoAnnBalo['Activite']);
|
|
$tabActivites=array_merge($tabActivites, $tabTmp);
|
|
}
|
|
if ($nbAnnDb==1) {
|
|
echo date('Y/m/d - H:i:s') ." - Parution du $dateAff $strRegion, Annonce $i2/$nbAnnonces, Association \"". $infoAnnBalo['Assoc_Nom'] .'" déjà en base !'.EOL;
|
|
// L'annonce est déjà en base !
|
|
continue;
|
|
} else
|
|
echo date('Y/m/d - H:i:s') ." - Parution du $dateAff $strRegion, Annonce $i2/$nbAnnonces, Association \"". $infoAnnBalo['Assoc_Nom'] .'"... enregistrement'.EOL;
|
|
|
|
if (!$iDb->insert($table, $infoAnnBalo))
|
|
echo date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .') : '. mysql_error() . EOL;
|
|
}
|
|
|
|
if ($lastJO) {
|
|
print_r($tabInfosGlobal);
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script'. EOL;
|
|
die();
|
|
}
|
|
unset($tabAnn);
|
|
} // Fin boucle région
|
|
if ($depotComptes)
|
|
$dateCour=getNextDate($dateCour,1);
|
|
else
|
|
$dateCour=getNextDate($dateCour);
|
|
|
|
} // Fin boucle Data
|
|
|
|
if ($depotComptes) {
|
|
//
|
|
$AnnDb=$iDb->select('annonces', 'MAX(dateSource) AS dateMAJ', "typeEven=3200", false, MYSQL_ASSOC);
|
|
$dateMaj=$AnnDb[0]['dateMAJ'];
|
|
// echo date('Y/m/d - H:i:s') ." - Dernière mise à jour des annonces dépots en collecte en date du $dateMaj.".EOL;
|
|
|
|
$AnnDb=$iDb->select('asso_bilans',
|
|
"Assoc_Nom AS raisonSociale, siren, sirenValide, dateCloture AS dateEffetFinP, Assoc_Date_Declaration AS dateJugement, dateInsert AS dateSource,
|
|
'3200' AS typeEven, 'DJOFFJ' AS tribunal, 'JS' AS source, Waldec",
|
|
"dateInsert>'$dateMaj' ORDER BY dateEffetFinP DESC", false, MYSQL_ASSOC);
|
|
$nbAnnonces=count($AnnDb);
|
|
echo date('Y/m/d - H:i:s') ." - Il y a $nbAnnonces annonces dépots à mettre en collecte en date du $dateMaj.".EOL;
|
|
|
|
foreach ($AnnDb as $i=>$tabInsert) {
|
|
$tabTmp=$iInsee->getIdentiteLight($tabInsert['siren']);
|
|
$tabInsert['adresse'] = $tabTmp['Adresse'];
|
|
$tabInsert['codePostal']= $tabTmp['CP'];
|
|
$tabInsert['ville'] = $tabTmp['Ville'];
|
|
if (trim($tabInsert['Waldec'])<>'')
|
|
$tabInsert['complement']= 'Identifiant Waldec : '.$tabInsert['Waldec'];
|
|
unset($tabInsert['Waldec']);
|
|
//print_r($tabInsert);
|
|
//die();
|
|
if (!$iDb->insert('annonces', $tabInsert))
|
|
echo '';//date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .') : '. mysql_error() . EOL;
|
|
}
|
|
}
|
|
|
|
echo date('Y/m/d - H:i:s') .' - FIN du script.'. EOL;
|
|
|
|
?>
|