batch/1.1/old/loadSurveillances.php
2013-06-19 08:24:49 +00:00

370 lines
17 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.'insee/classMInsee.php');
include_once(INCLUDE_PATH.'scores/classMSolvabilite.php');
include_once(INCLUDE_PATH.'partenaires/classMBourse.php');
include_once(FWK_PATH.'mail/sendMail.php');
$strInfoScript='Usage : '.basename($argv[0]). " <option> <fichier>
Chargement d'un fichier de mise sous surveillance d'un fichier Client (pour l'instant uniquement en annule/remplace).
";
$argv=$_SERVER['argv'];
if ($_SERVER['argc']>1)
{
for ($i=1; isset($argv[$i]); $i++) {
if (substr($argv[$i],0,1)=='-') {
switch (substr($argv[$i],1,1)) {
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . " inconnue !".EOL);
break;
}
}
}
}
$iDb=new WDB('insee');
$iDbSurv=new WDB('jo');
$iInsee=new MInsee();
echo date ('Y/m/d - H:i:s') . " - Début du traitement".EOL;
flush();
$ftpDir='/home/data/ftp/';
$tabDir=array();
$dh = opendir($ftpDir);
while (false !== ($filename = readdir($dh))) {
/** On scan chaque répertoire FTP client à la recherche d'un fichier send.fmt
**/
if ($filename<>'.' && $filename<>'..' && is_dir($ftpDir.$filename) && file_exists($ftpDir.$filename."/send.fmt"))
$tabDir[] = $filename;
}
sort($tabDir);
echo date ('Y/m/d - H:i:s')." - Liste des répertoires avec un fichier send.fmt : ".implode(', ',$tabDir).EOL;
foreach ($tabDir as $nbDir=>$dirToCheck) /** On scan chaque répertoire send des FTP clients à la recherche de nouveaux fichiers **/
{
$tabFichier=array();
$dh = opendir($ftpDir.$dirToCheck.'/send/');
while (false !== ($filename = readdir($dh))) {
if ($filename<>'.' && $filename<>'..') {
$tabFichier[] = $filename;
echo date ('Y/m/d - H:i:s')." - Le fichier $filename du client $dirToCheck est en cours de chargement !".EOL;
}
}
if (count($tabFichier)>0) {
/** On lit le fichier send.fmt afin de savoir le traitement courant
**/
$tabFmt=parse_ini_file($ftpDir.$dirToCheck."/send.fmt", true);
print_r($tabFmt);
if (!isset($tabFmt['Infos']) || !is_array($tabFmt['Infos']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La section [Infos] est incorrecte pour le client $dirToCheck !".EOL);
$tabInfos=$tabFmt['Infos'];
$idClientDef='';
if (isset($tabInfos['idClient']))
//die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'idClient' n'est pas définie pour le client $dirToCheck !".EOL);
$idClientDef=$tabInfos['idClient'];
if (!isset($tabInfos['format']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'format' n'est pas définie pour le client $dirToCheck !".EOL);
$format=$tabInfos['format'];
if (strtolower($format)=='csv')
$format='csv';
elseif (strtolower($format)=='plat')
$format='plat';
elseif (strtolower($format)=='sdin')
$format='sdin';
else
die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'format' doit être 'csv', 'plat' ou 'stdin' et non '$format' pour le client $dirToCheck !".EOL);
if (!isset($tabInfos['chargement']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'chargement' n'est pas définie pour le client $dirToCheck !".EOL);
$chargement=$tabInfos['chargement'];
if (strtoupper($chargement)=='AR')
$chargement='AR';
elseif (strtoupper($chargement)=='MAJ')
$chargement='MAJ';
elseif (strtoupper($chargement)=='AJOUT')
$chargement='AJOUT';
else
die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'chargement' doit être 'AR', 'MAJ' ou 'AJOUT' et non '$chargement' pour le client $dirToCheck !".EOL);
if (!isset($tabInfos['frequence']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'frequence' n'est pas définie pour le client $dirToCheck !".EOL);
$frequence=$tabInfos['frequence'];
if (strtoupper($frequence)=='Q')
$frequence='Q';
elseif (strtoupper($frequence)=='H')
$frequence='H';
elseif (strtoupper($frequence)=='M')
$frequence='M';
else
die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'frequence' doit être 'Q', 'H' ou 'M' et non '$frequence' pour le client $dirToCheck !".EOL);
$retro=@$tabInfos['retro'].'';
if ($retro=='' || $retro==0) {
echo (date ('Y/m/d - H:i:s')." - Pas de rétroactivité pour le client $dirToCheck !".EOL);
$retro=NULL;
}
$dateFluxDef=@$tabInfos['dateFlux'];
if (isset($tabInfos['dateFlux']) && @$tabInfos['dateFmt']<>'Ymd')
die(date ('Y/m/d - H:i:s')." - ERREUR : Le format de 'dateFlux' doit être 'Ymd' pour le client $dirToCheck !".EOL);
$mailClient=false;
if (isset($tabInfos['mailClient']) && $tabInfos['mailClient']<>'')
$mailClient=$tabInfos['mailClient'];
$concatenerRef=false;
if (isset($tabInfos['concatenerRef']) && ($tabInfos['concatenerRef']==true || $tabInfos['concatenerRef']*1==1))
$concatenerRef=true;
// Liste des zones
$tabZones=$tabFmt['Zones'];
foreach ($tabFichier as $numFic=>$fichier_csv) {
$fp=fopen($ftpDir.$dirToCheck."/send/$fichier_csv", 'r');
if (!$fp) {
echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible d'ouvrir le fichier : ".$fichier_csv." !".EOL;
die();
}
$dateFlux='';
if ($dateFluxDef<>'' && preg_match('/^n(\d*),(\d*)$/', trim($dateFluxDef), $z))
$dateFlux=trim(substr($fichier_csv, ($z[1])-1, $z[2]));
elseif ($dateFluxDef<>'' && preg_match('/^dateDepot$/i', trim($dateFluxDef), $z))
$dateFlux=date('Ymd', filemtime ($ftpDir.$dirToCheck."/send/$fichier_csv"));
if ($dateFlux*1<20071231) $dateFlux=date('Ymd');
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier ". $fichier_csv ."...".EOL;
$numLigne=$nbConfs=$nbAjouts=0;
$nbSirenValide=$nbSirenErreur=0;
$tabIdClients=$erreurSiren=array();
while(!feof($fp)) {
$line=fgets($fp, 4096);
if (trim($line)=='') break;
$numLigne++;
//$ligne, $format='sdin', $tabZones=array(), $idClientDef='') {
$data=@getLigneFormat($line, $format, $tabZones, $idClientDef, $dateFlux);
if (!isset($tabInfos['idClient']) && $idClientDef=='')
die(date ('Y/m/d - H:i:s')." - ERREUR : La variable 'idClient' n'est pas définie pour le client $dirToCheck !".EOL);
$data['indTrt'] = 1;
$idClient=$data['idClient'];
$dateFichier=$data['dateFlux'];
$dateDerEnvoi=WDate::period2Days($dateFichier, $retro, true);
if ($dateDerEnvoi==NULL) $dateDerEnvoi=WDate::period2Days($dateFichier, '5 jours', true);
//die($dateFichier.EOL.$dateDerEnvoi.EOL);
unset($data['dateFlux']);
if ($chargement<>'AJOUT' && ($numLigne==1 || !in_array($idClient, $tabIdClients))) {
/** Passage à 0 de l'indicateur ligne traitée **/
$res=$iDbSurv->update('surveillances_listes', array('indTrt'=>0), "idClient='$idClient'");
if ($res) echo date ('Y/m/d - H:i:s')." - Toutes les lignes du client $idClient ont été positionnées à non traitées !".EOL;
else die (date ('Y/m/d - H:i:s')." - ERREUR : Impossible de positionner les lignes du client $idClient à non traitées !!!".EOL);
$tabIdClients[]=$idClient;
}
/** Contrôle de la validité du siren **/
if ($iInsee->valideSiren($data['siren'])) {
$data['sirenValide']=1;
$nbSirenValide++;
} else {
$data['sirenValide']=0;
$nbSirenErreur++;
if (trim($data['siren'])=='') @$erreurSiren['vide']++;
elseif (trim($data['siren'])*1==0) @$erreurSiren['zero']++;
}
if ($concatenerRef) $data['ref']=$data['ref'].'-'.$data['refInfos'];
/** Ajout ou mise à jour de la référence **/
$res=$iDbSurv->select('surveillances_listes', 'count(*)', "idClient='$idClient' AND ref='".$data['ref']."'");
if (@$res[0][0] > 0) {
/** Cette référence est déjà sous surveillance pour ce client **/
$dataUpdate=array_merge($data, array('dateConf'=>$dateFichier));
$res=$iDbSurv->update('surveillances_listes', $dataUpdate, "idClient='$idClient' AND ref='".$data['ref']."'");
if (!$res) die (date ('Y/m/d - H:i:s')." - ERREUR : Ligne $idClient, ".$data['siren'].", ".$data['ref']." mise à jour IMPOSSIBLE !!!".EOL);
else $nbConfs++;
} else {
$dataInsert=array_merge($data, array('dateAjout'=>$dateFichier,'dateDerEnvoi'=>$dateDerEnvoi));
$res=$iDbSurv->insert('surveillances_listes', $dataInsert);
if (!$res) {
echo date ('Y/m/d - H:i:s')." - Lignes $idClient, ".$data['siren'].", ".$data['ref']." ERREUR LORS DE L'AJOUT !!!".EOL;
die(mysql_error());
}
else $nbAjouts++;
}
}
echo date ('Y/m/d - H:i:s')." - Nombre de lignes à surveiller ajoutées pour $idClient = $nbAjouts.".EOL;
$mailInfo =" - Nombre de lignes à surveiller ajoutées : $nbAjouts".EOL;
if ($chargement<>'AJOUT') {
$res=$iDbSurv->select('surveillances_listes', 'count(*)', "idClient='$idClient' AND indTrt=0 AND dateSuppr=0");
$nbSuppr=$res[0][0];
$nbConfs=$nbConfs-$nbSuppr;
echo date ('Y/m/d - H:i:s')." - Nombre de lignes à surveiller confirmées pour $idClient = $nbConfs.".EOL;
$mailInfo.=" - Nombre de lignes à surveiller confirmées : $nbConfs".EOL;
echo date ('Y/m/d - H:i:s')." - Nombre de lignes à surveiller supprimées pour $idClient = $nbSuppr.".EOL;
$mailInfo.=" - Nombre de lignes à surveiller supprimées : $nbSuppr".EOL;
$res=$iDbSurv->update('surveillances_listes', array('dateSuppr'=>$dateFichier), "idClient='$idClient' AND indTrt=0 AND dateSuppr=0",true);
if (!$res) die (date ('Y/m/d - H:i:s')." - ERREUR : Impossible de supprimer les surveillances obsolètes du client $idClient !!!".EOL);
$res=$iDbSurv->update('surveillances_listes', array('dateSuppr'=>0), "idClient='$idClient' AND dateConf>dateSuppr AND dateSuppr<>0");
$nbReact=$res[0][0];
if ($nbReact>0) {
echo date ('Y/m/d - H:i:s')." - Attention, $nbReact ligne(s) ont été réactivées !".EOL;
$mailInfo.="Attention, $nbReact ligne(s) ont été réactivées !".EOL;
}
}
if ($mailClient) {
$mailInfo.="$nbSirenValide SIREN sont valides et $nbSirenErreur invalides dont :".EOL;
$mailInfo.=print_r($erreurSiren,true).EOL;
sendMail('production@scores-decisions.com', $mailClient, "Scores & Décisions - Chargement du stock en surveillance", "Résumé du traitement de chargement du stock pour $idClient,".EOL.EOL."Fichier de type $chargement ($frequence) horodatage $dateFlux contenant $numLigne ligne(s) :".EOL.$mailInfo);
sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Scores & Décisions - Chargement du stock en surveillance", "Résumé du traitement de chargement du stock pour $idClient,".EOL.EOL."Fichier de type $chargement ($frequence) horodatage $dateFlux contenant $numLigne ligne(s) :".EOL.$mailInfo);
}
if (!move($ftpDir.$dirToCheck."/send/$fichier_csv", "/home/data/clients/$dirToCheck/$fichier_csv"))
echo date ('Y/m/d - H:i:s')." - ERREUR : Déplacement du fichier $fichier_csv dans client/$dirToCheck/ impossible !".EOL;
}
} else
echo date ('Y/m/d - H:i:s')." - Aucun fichier a intégrer pour le client $dirToCheck.".EOL;
}
echo date ('Y/m/d - H:i:s') . " - Fin du traitement.".EOL;
function getLigneFormat($line, $format='sdin', $tabZones=array(), $idClientDef='', $dateFluxDef='') {
$data=array();
global $idClientDef;
if ($format=='sdin') {
$data['idClient'] = trim(substr($line, 27, 36)); // Identifiant Client
if ($data['idClient']=='' && $idClientDef<>'')
$data['idClient']=$idClientDef;
$data['siren'] = trim(substr($line, 98, 9)); // SIREN
$data['nic'] = trim(substr($line, 107, 5)); // NIC
$data['rs'] = trim(substr($line, 112, 60)); // RS
$data['cp'] = trim(substr($line, 332, 5)); // CP
$data['ville'] = trim(substr($line, 337, 40)); // Ville
$data['ref'] = trim(substr($line, 417, 18)); // Référence Client
$data['dateFlux'] = trim(substr($line, 3, 8)); // Date du fichier
if ($data['idClient']=='SURBODPRDFTSMEDERIC') {
$data['ref'] = substr($data['ref'], 0, 9); // Référence Client Fixe
$data['refInfos']= substr($data['ref'], 9, 9); // Référence Client à titre d'information
}
} elseif ($format=='plat') {
$data['idClient']=trim($idClientDef);
// Zone idClient
if (isset($tabZones['idClient']) && preg_match('/^c(\d*),(\d*)$/', trim($tabZones['idClient']), $z))
$data['idClient'].=trim(substr($line, ($z[1])-1, $z[2]));
elseif (!isset($tabZones['idClient']) && $idClientDef=='')
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'idClient' est incorrecte !".EOL);
// Zone siren
if (preg_match('/^c(\d*),(\d*)$/', trim($tabZones['siren']), $z))
$data['siren'] = trim(substr($line, ($z[1])-1, $z[2]));
else
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'siren' est incorrecte !".EOL);
// Zone ref
if (preg_match('/^c(\d*),(\d*)$/', trim($tabZones['ref']), $z))
$data['ref'] = trim(substr($line, ($z[1])-1, $z[2]));
else
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'ref' est incorrecte !".EOL);
// Zone refInfos
if (isset($tabZones['refInfos']) && preg_match('/^c(\d*),(\d*)$/', trim($tabZones['refInfos']), $z))
$data['refInfos'] = trim(substr($line, ($z[1])-1, $z[2]));
elseif (isset($tabZones['refInfos']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'refInfos' est incorrecte !".EOL);
// Zone rs
if (isset($tabZones['rs']) && preg_match('/^c(\d*),(\d*)$/', trim($tabZones['rs']), $z))
$data['rs'] = trim(substr($line, ($z[1])-1, $z[2]));
elseif (isset($tabZones['rs']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'rs' est incorrecte !".EOL);
// Zone cp
if (isset($tabZones['cp']) && preg_match('/^c(\d*),(\d*)$/', trim($tabZones['cp']), $z))
$data['cp'] = trim(substr($line, ($z[1])-1, $z[2]));
elseif (isset($tabZones['cp']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'cp' est incorrecte !".EOL);
// Zone ville
if (isset($tabZones['ville']) && preg_match('/^c(\d*),(\d*)$/', trim($tabZones['ville']), $z))
$data['ville'] = trim(substr($line, ($z[1])-1, $z[2]));
elseif (isset($tabZones['ville']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'ville' est incorrecte !".EOL);
// Zone dateFlux
if ($dateFluxDef=='' && preg_match('/^c(\d*),(\d*)$/', trim($tabZones['dateFlux']), $z))
$data['dateFlux']= trim(substr($line, ($z[1])-1, $z[2]));
elseif ($dateFluxDef=='')
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'dateFlux' est incorrecte !".EOL);
else $data['dateFlux']=$dateFluxDef;
} elseif ($format=='csv') {
$data['idClient']=trim($idClientDef);
$tabLine=explode(',', $line);
// Zone idClient
if (isset($tabZones['idClient']) && preg_match('/^z(\d*)$/', trim($tabZones['idClient']), $z))
$idClientDef=$data['idClient']=trim($tabLine[$z[1]-1]);
// elseif (!isset($tabZones['idClient']) && $idClientDef=='')
// die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'idClient' est incorrecte !".EOL);
// Zone siren
if (preg_match('/^z(\d*)$/', trim($tabZones['siren']), $z))
$data['siren'] = trim($tabLine[$z[1]-1]);
else
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'siren' est incorrecte !".EOL);
// Zone ref
if (preg_match('/^z(\d*)$/', trim($tabZones['ref']), $z))
$data['ref'] = trim($tabLine[$z[1]-1]);
else
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'ref' est incorrecte !".EOL);
// Zone refInfos
if (isset($tabZones['refInfos']) && preg_match('/^z(\d*)$/', trim($tabZones['refInfos']), $z))
$data['refInfos'] = trim($tabLine[$z[1]-1]);
elseif (isset($tabZones['refInfos']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'refInfos' est incorrecte !".EOL);
// Zone rs
if (isset($tabZones['rs']) && preg_match('/^z(\d*)$/', trim($tabZones['rs']), $z))
$data['rs'] = trim($tabLine[$z[1]-1]);
elseif (isset($tabZones['rs']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'rs' est incorrecte !".EOL);
// Zone cp
if (isset($tabZones['cp']) && preg_match('/^z(\d*)$/', trim($tabZones['cp']), $z))
$data['cp'] = trim($tabLine[$z[1]-1]);
elseif (isset($tabZones['cp']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'cp' est incorrecte !".EOL);
// Zone ville
if (isset($tabZones['ville']) && preg_match('/^z(\d*)$/', trim($tabZones['ville']), $z))
$data['ville'] = trim($tabLine[$z[1]-1]);
elseif (isset($tabZones['ville']))
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'ville' est incorrecte !".EOL);
// Zone dateFlux
if ($dateFluxDef=='' && preg_match('/^z(\d*)$/', trim($tabZones['dateFlux']), $z))
$data['dateFlux']= trim($tabLine[$z[1]-1]);
elseif ($dateFluxDef=='')
die(date ('Y/m/d - H:i:s')." - ERREUR : La zone 'dateFlux' est incorrecte !".EOL);
else $data['dateFlux']=$dateFluxDef;
}
return $data;
}
?>