#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini 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, '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('

', $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('

', $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("|(.*)|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; ?>