207 lines
7.1 KiB
PHP
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;
|
|
|
|
?>
|