batch/1.1/old/boamp/getBoamp.php
2012-10-16 07:44:31 +00:00

207 lines
7.1 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
define('BOAMP_LOCAL_DIR', '/home/data/boamp/Klekoon/1_FORMAT_ANCIEN/Fichiers/');
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');
$strInfoScript='Usage : '.basename($argv[0]). " [OPTION]
Calcul des ratios de toute la base entreprise S&D.
Options :
-t Calculer tous les ratios (*)
-i:XXX Reprendre à la ligne XXX
-c Mettre à jour le cache
(*) 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
*/
$iDb=new WDB('boamp');
$iInsee=new MInsee();
$iBodacc=new MBodacc();
$modeDebug=false; // Mode débug
$questions=true; // Questions interactives autorisées
$tabFichier=$tabFichLigneCmd=array();
$argv=$_SERVER['argv'];
for ($i=1,$j=0; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case 'd': $modeDebug=true; break;
case 'i': $questions=false; break;
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
}
} else $tabFichLigneCmd[]=$argv[$i];
}
if (count($tabFichLigneCmd)==0) {
$dh = opendir(BOAMP_LOCAL_DIR);
while (false !== ($filename = readdir($dh))) {
if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.PUB')
$tabFichier[] = $filename;
}
sort($tabFichier);
}
if (count($tabFichier)==0 && count($tabFichLigneCmd)==0) die(date ('Y/m/d - H:i:s') . " - Aucun fichier d'annonces BOAMP à traiter !".EOL);
echo date ('Y/m/d - H:i:s') . " - Début du traitement de chargement des annonces BOAMP...".EOL;
for ($iFic=0; isset($tabFichier[$iFic]); $iFic++)
{
$nomFichier=$tabFichier[$iFic];
echo date ('Y/m/d - H:i:s') . " - Lecture du fichier $nomFichier...".EOL;
$tabLignes=file(BOAMP_LOCAL_DIR.$nomFichier);
$tabAnnonces=array();
$iAnn=0;
$nextBalise='';
foreach ($tabLignes as $i=>$ligne) {
$nextBaliseLu=false;
$code=''.substr($ligne,0,2);
$texte=strtr(substr($ligne,2), '`„Œ$~', 'èéà@ç');
switch ($code) {
case '01':
$iAnn++;
$tabAnnonces[$iAnn]['annee']='20'.substr($texte,0,2);
$tabAnnonces[$iAnn]['numParution']=substr($texte,2,3);
if (substr($texte,5,1)=='1') $edition='A';
elseif (substr($texte,5,1)=='2') $edition='B';
elseif (substr($texte,5,1)=='3') $edition='C';
else die("Edition '$edition' inconnue !");
$tabAnnonces[$iAnn]['edition']=$edition;
$tabAnnonces[$iAnn]['dateParution']='20'.substr($texte,10,2).substr($texte,8,2).substr($texte,6,2);
$tabAnnonces[$iAnn]['numAnnonce']=substr($texte,12,4);
$tabAnnonces[$iAnn]['r2']=trim(substr($texte,16,3));
$tabAnnonces[$iAnn]['dept']=trim(substr($texte,19,3));
$tabAnnonces[$iAnn]['rubrique']=substr($texte,22,3);
$tabAnnonces[$iAnn]['nojo']=substr($texte,25,10);
$tabAnnonces[$iAnn]['numAnnB']=substr($texte,35,4);
$tabAnnonces[$iAnn]['texte']=$tabAnnonces[$iAnn]['balises']='';
break;
case '05':
switch (trim($texte)) {
case 'Nom et adresse officiels du pouvoir':
case 'adjudicateur:':
$nextBalise='infoOrgNom';
break;
case "à l'attention de":
$nextBalise='infoOrgDest';
break;
case 'Mode de passation:':
case 'Procédure de passation:':
$nextBalise='infoPassation';
break;
case "Critères d'attribution:":
$nextBalise='infoAttribution';
break;
case "Référence d'identification du marché":
case "qui figure dans l'appel d'offres:":
$nextBalise='infoIdenMarche';
break;
case "Annonce no":
case "B.O.A.M.P.":
$nextBalise='infoAnnonceNo';
break;
case "Date d'envoi de l'avis à la":
case 'publication:':
$nextBalise='infoPublication';
break;
default:
$nextBalise='';
break;
}
break;
case '15':
switch (trim($texte)) {
case 'Objet :':
case 'Objet du marché:':
$nextBalise='objet';
break;
}
break;
case '16':
$tabAnnonces[$iAnn]['objetMarche'].=trim($texte).' ';
break;
case '10':
if ($nextBalise<>'') {
$nextBaliseLu=true;
$tabAnnonces[$iAnn]['_'.$nextBalise].=trim($texte).' ';
}
else
$tabAnnonces[$iAnn]['code'.$code].=trim($texte).' ';
break;
case '17':
case '30':
case '35':
break;
case '28':
$tabAnnonces[$iAnn]['code28'].=trim($texte).' ';
break;
case '44':
$tabAnnonces[$iAnn]['naf'].=trim($texte).' ';
break;
case '20':
$tabAnnonces[$iAnn]['classes'].=preg_replace('/00$/','', trim($texte)).' ';
break;
case '25':
$tabAnnonces[$iAnn]['motDesc'].=trim($texte).' ';
break;
case '41':
$tabAnnonces[$iAnn]['numAnnonce41']=trim($texte);
break;
case '42':
$tabAnnonces[$iAnn]['dateParution42']=trim($texte);
break;
default:
die("Code '$code' inconnu : ".$texte);
}
if ($code<>'01') $tabAnnonces[$iAnn]['texte'].=$texte;
$tabAnnonces[$iAnn]['balises'].="<b$code>".trim($texte)."</b$code>".EOL;
if ($code<>'05' && !$nextBaliseLu) $nextBalise='';
}
echo date ('Y/m/d - H:i:s') . " - Chargement des $iAnn annonces du fichier $nomFichier...".EOL;
/** Insertion de l'annonce en base
**/
foreach ($tabAnnonces as $i=>$tabAnnonce) {
if (preg_match('/(.*)((?:[0-9]{1,4},? | rue | place | boulevard | avenue )(?:.*)(?:[0-9]{5,5} )(?:.*))/Ui', $tabAnnonce['_infoOrgNom'], $matches)) {
$tabAnnonce['nom']=trim($matches[1]);
$tabAnnonce['adresse']=trim($matches[2]);
} else {
$tabAnnonce['nom']=trim($tabAnnonce['_infoOrgNom']);
$tabAnnonce['adresse']=trim($tabAnnonce['_infoOrgDest']);
}
$ret=$iDb->insert('avis', $tabAnnonce);
//$ret=$iDb->insert('bodacc_detail', $tabAnnC);
if (!$ret && mysql_errno()<>1062) {
echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno().
" : Insertion des informations 'autres' du BODACC sur le siren ".$sirenParticipation." en base impossible (annonce $idAnnRet) !".EOL;
echo date ('Y/m/d - H:i:s'). mysql_error();
//print_r($tabAnnC);
//print_r($tabData);
die();
}
}
echo date ('Y/m/d - H:i:s') . " - Les $i annonces du fichier $nomFichier ont été chargées.".EOL;
}
echo date ('Y/m/d - H:i:s') . " - Fin du traitement de chargement des annonces BOAMP...".EOL;
?>