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

377 lines
17 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
include_once(INCLUDE_PATH.'insee/classMInsee.php');
function getNomPrenom($strRaisonSociale) {
$tabRet=array();
$tabRet['Nom']=$tabRet['NomUsage']=$tabRet['Prenom']='';
if (preg_match("/(.*)\*(.*)\/(.*)/",$strRaisonSociale,$matches))
{
$tabRet['Nom']=$matches[1];
$tmp=explode('/', $matches[2]);
if (isset($tmp[1]) && trim($tmp[1])<>'') {
$tabRet['NomUsage']=$tmp[0];
$tabRet['Prenom']=$tmp[1];
} else
$tabRet['Prenom']=$matches[2];
}
return $tabRet;
}
$strInfoScript='Usage : '.basename($argv[0]). " <option> <fichier>
Chargement d'un fichier évènement Insee (ancien ou nouveau format).
Options :
-d Mode debug (Verbosité au maximum)
";/*
// -n:XXX Numéro du Bodacc
// -d:JJ/MM/AAAA Rechargement des annonces BODACC depuis cette date
// -f:JJ/MM/AAAA Rechargement des annonces BODACC jusqu'à cette date
" -l Derniers BODACC non intégrés uniquement (*)
-m Force la date d'insertion à celle de la récupération des fichiers Bodacc (cas d'un rechargement complet)
-r (inopérant) Rechargement des annonces déjà en base
-e EFFACEMENT DE TOUTES LES ANNONCES correspondantes déjà en base (et non mise à jour)
(*) Option par défaut si aucun argument n'est passé.
";*/
echo date ('Y/m/d - H:i:s') . " - Début du traitement de chargement des évènements INSEE\r\n";
flush();
$tabFichier=array();
$iDb=new WDB('insee');
$iInsee=new MInsee();
$nbSiretInvalides=0;
$modeDebug=false;
//Initialistation des variables
$argv=$_SERVER['argv'];
if ($_SERVER['argc']==1) die("Non géré pour l'instant : chargera les derniers fichiers EVEN non chargés !".EOL);
/*die('Usage : '.basename($argv[0]). " [OPTION]... FICHIER(S)
Charger un fichier au format Notice80 dans une base de données avec création de la table qui aura le nom du fichier chargé..
Options disponibles:
-d=nom_bdd Nom de la base de données
-t=nom_table Nom de la table
(*): Valeurs par défaut !
");*/
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 't': $db_table=substr($argv[$i],3); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
}
} else $tabFichier[]=$argv[$i];
}
$db_table='insee_even';
//print_r($tabFichier);die();
for ($i=0; isset($tabFichier[$i]); $i++)
{
$nomFichier =$tabFichier[$i];
$idFlux=strtr(strtoupper(basename($nomFichier)),array('I_'=>'20','.DAT'=>''));
$fp=fopen($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
$ret=$iDb->select($db_table, 'count(idFlux) as nb', "idFlux='$idFlux'");
$nbLoaded=$ret[0][0];
if ($nbLoaded>0) {
while (!feof($fp))
{
$nbLignes++;
$a = trim(fgets($fp, 437));
}
if (--$nbLignes==$nbLoaded)
echo date ('Y/m/d - H:i:s')." - Le fichier n°$i, $nomFichier a déjà été chargé !".EOL;
else
die (date ('Y/m/d - H:i:s')." - ERREUR : le fichier n°$i, $nomFichier a été chargé partiellement $nbLignes<>$nbLoaded !".EOL);
continue;
}
echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier n°$i, $nomFichier !".EOL;
flush();
$finFichier=false;
while (!feof($fp))
{
$nbLignes++;
$a = trim(fgets($fp, 437));
if ($finFichier) {
echo date ('Y/m/d - H:i:s') . " - Attention la fin de fichier a été trouvée à la ligne précédente !".EOL;//Nouveau format du fichier évènement (de Mai 2007) non géré !
die();
}
//unset($tabErreur); $nbErr=0;
$tabEve=array();
$tabEve['idFlux'] =$idFlux;
$tabEve['insSIREN'] =substr($a, 0, 9 ); // N° Siren de l'entreprise concernée par la mise à jour
$tabEve['insNIC'] =substr($a, 9, 5 ); // Identifiant de l'établissement
$tabEve['insLIBCOM'] =substr($a, 14, 26 ); // Libellé de la commune
$insAACRET =substr($a, 40, 4 ); // Année de création de l'établissement
$insMMCRET =substr($a, 44, 2 ); // Mois de création de l'établissement
$insJJCRET =substr($a, 46, 2 ); // Jour de création de l'établissement
$tabEve['insMMINTRET'] =substr($a, 48, 2 ); // Mois d'immatriculation (si dans l'année en cours)
$tabEve['insSIEGE'] =substr($a, 50, 1 ); // SIEGE (ancienne partie 1 de la variable STATUT)
$tabEve['insAUXILT'] =substr($a, 51, 1 ); // AUXILIARITE (ancienne partie 2 de la variable STATUT)
$tabEve['insORIGINE'] =substr($a, 52, 1 ); // Origine
$tabEve['insTEFET'] =substr($a, 53, 2 ); // Tranche d'effectif salarié
$tabEve['insAPET700'] =substr($a, 55, 4 ); // Activité de l'établissement
$tabEve['insAPRM'] =substr($a, 59, 5 ); // Activité artisanale principale
$tabEve['insMODET'] =substr($a, 64, 1 ); // Modalité de l'activité principale exercée
$tabEve['insMARCHET'] =substr($a, 65, 1 ); // Caractère marchand ou non
$tabEve['insSAISONAT'] =substr($a, 66, 1 ); // Saisonnalité
$tabEve['insACTIVNAT'] =substr($a, 67, 2 ); // Nature
$tabEve['insENSEIGNE'] =substr($a, 69, 40 ); // Nom de l'établissement
$tabEve['insL3_CADR'] =substr($a, 109, 26 ); // Complément d'adresse
$tabEve['insNUMVOIE'] =substr($a, 135, 4 ); // Numéro dans la voie
$tabEve['insINDREP'] =substr($a, 139, 1 ); // Indice de répétition
$tabEve['insTYPVOIE'] =substr($a, 140, 3 ); // Type de voie
$tabEve['insLIBVOIE'] =substr($a, 143, 26 ); // Libellé de voie
$tabEve['insL5_DISP'] =substr($a, 169, 26 ); // Distribution spéciale pour l'établissement
$tabEve['insL6_POSTE'] =substr($a, 195, 35 ); // Ligne d'acheminement postal pour l'établissement
$tabEve['insCODPOS'] =substr($a, 195, 5 ); // Code postal de la ligne d'acheminement postal
$tabEve['insTEL'] =substr($a, 230, 11 ); // Téléphone de l'établissement
$tabEve['insCJ'] =substr($a, 241, 4 ); // Catégorie juridique
$tabEve['insCIVILITE'] =substr($a, 245, 1 ); // Sexe pour une personne physique
$tabEve['insTEFEN'] =substr($a, 246, 2 ); // Tranche d'effectif de l'entreprise
$tabEve['insAPEN700'] =substr($a, 248, 4 ); // Activité principale exercée
$tabEve['insMODEN'] =substr($a, 252, 1 ); // Modalité de l'activité principale exercée
$tabEve['insMARCHEN'] =substr($a, 253, 1 ); // Caractère marchand ou non
$tabEve['insNOMEN'] =substr($a, 254, 40 ); // Nom ou raison sociale de l'entreprise
$tabEve['insTCA'] =substr($a, 294, 2 ); // Tranche de CA
$tabEve['insTYPCREH'] =substr($a, 296, 2 ); // Nature de la mise à jour ou type de création hebdo TYPCREH
$tabEve['insFiller1'] =substr($a, 298, 8 ); //
$tabEve['insEVE'] =substr($a, 306, 2 ); // Type d'événement dans la vie de l'entreprise
$tabEve['insDATEVE'] =substr($a, 308, 8 ); // Date de l'événement déclaré
$tabEve['insTRAN'] =substr($a, 316, 1 ); // En cas de transfert, situation de l'établissement (Départ ou Arrivée)
$tabEve['insNICTRAN'] =substr($a, 317, 5 ); // NIC de l'établissement lié par le transfert : Arrivée ANIC ou Départ DNIC
$tabEve['insMNICSIEGE'] =substr($a, 322, 1 ); // Indicateur de Transfert de siège
$tabEve['insMNOMEN'] =substr($a, 323, 1 ); // MAJ du nom de l'entreprise
$tabEve['insMCJ'] =substr($a, 324, 1 ); // MAJ de la CJ
$tabEve['insMAPEN'] =substr($a, 325, 1 ); // MAJ de l'activité SIREN
$tabEve['insFiller2'] =substr($a, 326, 1 ); //
$tabEve['insFiller3'] =substr($a, 327, 1 ); //
$tabEve['insMMARCHEN'] =substr($a, 328, 1 ); // MAJ du caractère marchand SIREN
$tabEve['insMORDIN'] =substr($a, 329, 1 ); // MAJ ordin
$tabEve['insEFENCENT'] =substr($a, 330, 6 ); // Effectif approché de l'entreprise
$tabEve['insSIGLE'] =substr($a, 336, 20 ); // Sigle
$tabEve['insNBETEXPL'] =substr($a, 356, 4 ); // Nombre d'établissements ordianaires actifs
$tabEve['insNICSIEGE'] =substr($a, 360, 5 ); // NIC de l'établissement siège
$tabEve['insDEPCOMEN'] =substr($a, 365, 5 ); // Localisation géographique du siège
$insAACREN =substr($a, 370, 4 ); // Année de création de l'entreprise
$insMMCREN =substr($a, 374, 2 ); // Mois de création de l'entreprise
$insJJCREN =substr($a, 376, 2 ); // Jour de création de l'entreprise
$tabEve['insFiller4'] =substr($a, 378, 1 ); //
$tabEve['insMENSEIGNE'] =substr($a, 379, 1 ); // MAJ du nom de l'établissement
$tabEve['insMAPET'] =substr($a, 380, 1 ); // MAJ de l'activité SIRET
$tabEve['insMNATURE'] =substr($a, 381, 1 ); // MAJ code Nature SIRET
$tabEve['insMADRESSE'] =substr($a, 382, 1 ); // MAJ adresse SIRET
$tabEve['insMEFET'] =substr($a, 383, 1 ); // MAJ effectif SIRET
$tabEve['insMSINGT'] =substr($a, 384, 1 ); // MAJ singularité SIRET
$tabEve['insMTELT'] =substr($a, 385, 1 ); // MAJ Tél SIRET
$tabEve['insMMARCHET'] =substr($a, 386, 1 ); // MAJ caractère marchand SIRET
$tabEve['insMAUXILT'] =substr($a, 387, 1 ); // MAJ code auxiliarité SIRET
$tabEve['insSINGT'] =substr($a, 388, 2 ); // Singularité
$tabEve['insEFETCENT'] =substr($a, 390, 6 ); // Effectif approché de l'établissement
$tabEve['insSIRETPS'] =substr($a, 396, 14 ); // Siret du précédent exploitant
$tabEve['insDEPCOM'] =substr($a, 410, 5 ); // TOPO : Département commune de l'étab
$tabEve['insCODEVOIE'] =substr($a, 415, 5 ); // TOPO : Implantation code voie topographique de l'établissement
$tabEve['insDESTINAT'] =substr($a, 420, 2 ); // Destination
$tabEve['insDATEMAJ'] =substr($a, 422, 13 ); // Identifiant informatique = Date de MAJ
if ($insAACRET*1>0)
$dateCrea=$insAACRET; // Année de création de l'établissement
else $dateCrea='0000';
if ($insMMCRET*1>0)
$dateCreaET=$dateCrea.$insMMCRET; // Année de création de l'établissement
else $dateCreaET=$dateCrea.'01';
if ($insJJCRET*1>0)
$dateCreaET.=$insJJCRET; // Année de création de l'établissement
else $dateCreaET.='01';
if (($tabEve['insMMINTRET']*1)>0)
$dateImmatET=$dateCrea.$tabEve['insMMINTRET'].'01';
else
$dateImmatET='00000000';
if ($insAACREN*1>0)
$dateCreaEN=$insAACREN; // Année de création de l'établissement
else $dateCreaEN='0000';
if ($insMMCREN*1>0)
$dateCreaEN.=$insMMCREN; // Année de création de l'établissement
else $dateCreaEN.='01';
if ($insJJCREN*1>0)
$dateCreaEN.=$insJJCREN; // Année de création de l'établissement
else $dateCreaEN.='01';
/*
echo "Siret=$insSIREN $insNIC, Création Etab : $insJJCRET/$insMMCRET/$insAACRET / Entrep : $insJJCREN/$insMMCREN/$insAACREN. Eve le $insDATE=$insEVE".EOL;
if ($insMNOMEN) echo " ---> MAJ du nom de l'entreprise".EOL;
if ($insMCJ) echo " ---> MAJ de la CJ".EOL;
if ($insMAPEN) echo " ---> MAJ de l'activité SIREN".EOL;
if ($insMMARCHEN) echo " ---> MAJ du caractère marchand SIREN".EOL;
if ($insMORDIN) echo " ---> MAJ ordin".EOL;
if ($insMNOMET) echo " ---> MAJ du nom de l'établissement".EOL;
if ($insMAPET) echo " ---> MAJ de l'activité SIRET".EOL;
if ($insMNATURE) echo " ---> MAJ code Nature SIRET".EOL;
if ($insMADRESSE) echo " ---> MAJ adresse SIRET".EOL;
if ($insMEFET) echo " ---> MAJ effectif SIRET".EOL;
if ($insMSINGT) echo " ---> MAJ singularité SIRET".EOL;
if ($insMTELT) echo " ---> MAJ Tél SIRET".EOL;
if ($insMMARCHET) echo " ---> MAJ caractère marchand SIRET".EOL;
if ($insMAUXILIAR) echo " ---> MAJ code auxiliarité SIRET".EOL;
*/
$insSIREN=$tabEve['insSIREN'];
$insNIC=$tabEve['insNIC'];
if (!$iInsee->valideSiren($insSIREN,$insNIC)) {
$tabEve['siretValide']=0;
$nbSiretInvalides++;
}
else
$tabEve['siretValide']=1;
$insNOMEN=$tabEve['insNOMEN'];
$tabNoms=getNomPrenom($insNOMEN);
$tabEve['dirNom']=$tabNoms['Nom'];
$tabEve['dirNomUsage']=$tabNoms['NomUsage'];
$tabEve['dirPrenom']=$tabNoms['Prenom'];
$tabEve['insDCRET']=$dateCreaET;
$tabEve['insDCREN']=$dateCreaEN;
if ($modeDebug)
echo "Siret=$insSIREN $insNIC : $insNOMEN. Eve le ".$tabEve['insDATE'].'='.$tabEve['insEVE'].EOL;
if (trim($insSIREN)<>'' && trim($insNIC)<>'') {
$finFichier=false;
$ret=$iDb->insert($db_table, $tabEve);
if ($ret===false) {
echo date ('Y/m/d - H:i:s') . " - ERREUR n°". mysql_errno()." à l'insertion du siret $insSIREN $insNIC : ".mysql_error().'!'.EOL;
flush();
}
} else $finFichier=true;
/* if ($tabErreur) {
echo date ('Y/m/d - H:i:s') . " - ATTENTION, ligne $nbLignes, problèmes pour le siret $insSIREN $insNIC !!!\r\n";
print_array($tabErreur,0,"txt");
flush();
}
*/
//unset($tabDataToInsert);
}
fclose ($fp);
/*
$strUpdate='';
for ($j=$nbFichiers+1; isset($tabFichDate[$j]); $j++)
$strUpdate.=$tabFichDate[$j].';';
$tabDataToUpdate=array( 'VALEUR'=>$strUpdate,
'CLE'=>'INSEE_FICHIERS_MAJ');
// $iparam->setParamValeur($tabDataToUpdate);
$totI=$vmajS+$vmajC+$vmajF;
$totS=$vmajE+$vmajI;
$messageInsertion.="Résumé du traitement du fichier n°$nbFichiers=$nomFichier du mois de $moisFichier !\r\n\r\n";
$messageInsertion.="Nombre de nouvelles insertion: ".$totI."\r\n";
$messageInsertion.=" - dont Changement de siège: ".$vmajS."\r\n";
$messageInsertion.=" - dont Entrée d'un SIRET - Immatriculation d'un nouvel établissement: ".$vmajC."\r\n";
$messageInsertion.=" - dont Etat final d'un SIRET modifié (après mise à jour): ".$vmajF."\r\n";
$messageSuppression.="Nombre de suppression: ".$totS."\r\n";
$messageSuppression.=" - dont Suppression d'un SIRET - Cessation d'activité d'un établissement: ".$vmajE."\r\n";
$messageSuppression.=" - dont Etat initial d'un SIRET modifié (avant mise à jour): ".$vmajI."\r\n\r\n";
echo date ('Y/m/d - H:i:s') ." - Nombre de nouvelles insertion: ".$totI."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Changement de siège: ".$vmajS."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Entrée d'un SIRET ou Immatriculation d'un nouvel établissement: ".$vmajC."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Etat final d'un SIRET modifié (après mise à jour): ".$vmajF."\r\n";
echo date ('Y/m/d - H:i:s') ." - Nombre de suppression: ".$totS."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Suppression d'un SIRET ou Cessation d'activité d'un établissement: ".$vmajE."\r\n";
echo date ('Y/m/d - H:i:s') ." - | dont Etat initial d'un SIRET modifié (avant mise à jour): ".$vmajI."\r\n";
echo date ('Y/m/d - H:i:s') ." - Fin du traitement du fichier n°$nbFichiers=$nomFichier du mois de $moisFichier !\r\n\r\n";
flush();
*/
}
echo date ('Y/m/d - H:i:s') . " - $nbLignes lignes traitées dont $nbSiretInvalides siret invalides !".EOL;
echo date ('Y/m/d - H:i:s') . " - Fin correcte du traitement.".EOL;
die();
/*
echo date ('Y/m/d - H:i:s')." - Création des index de recherche...\n";
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX idxSiret(insSIREN, insNIC);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insSIEGE);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPET700);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPET31);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insCJ);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPEN700);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (insAPEN31);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SPEACT);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SORLJ_N);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SOEVT);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SOETEL);");
$ret=$iDb->query("ALTER TABLE $db_table ADD INDEX (SOEFAX);");
echo date ('Y/m/d - H:i:s')." - Création des index de recherche terminée !\n";
*/
// Mise à jour de la table PARAM
// -----------------------------
// 3 - pour la fin d'exécution du traitement en cours
/* $tabDataToUpdate=array('VALEUR'=>0,
'CLE'=>'INSEE_MAJ_ENCOURS');
// $iparam->setParamValeur($tabDataToUpdate);
$heureFin=date('H:i:s');
$tabDataToUpdateTraitement=array('NUM'=>$numScript,
'DATE_JOUR'=>$dateJour,
'HEURE_DEBUT'=>$heureDebut,
'HEURE_FIN'=>$heureFin,
'CODE_RETOUR'=>1,
'NB_MAIL'=>1,
'RESUME_EXEC'=>"traitement achevé correctement");
// $itraitement->setTraitement($tabDataToUpdateTraitement);
$tabDataMail= array('MAIL_OBJET'=>$sujetMail,
'MAIL_CORPS'=>"Traitement correct: \r\n".$messageInsertion."\r\n ".$messageSuppression."\r\n");
// $emailBatch=new EMailBatch($tabDataMail);
// $emailBatch->mailBatica($numScript);
echo date ('Y/m/d - H:i:s') . " - Fin correcte du traitement.\r\n";
exit();
function ecrireFichier($fichier,$texte){
$fp = fopen($fichier, "a");
fwrite($fp, $texte."\r\n");
fclose ($fp);
}
function valideSiret($SIRET) {
if (!is_numeric($SIRET))
return false;
$somme=0;
for ($i=0; $i<=12; $i+=2) { // Traitement PAIR
$var_tmp=(string)(2*((integer)substr($SIRET,$i,1)));
$som_tmp=0;
for($j=0;$j<strlen($var_tmp);$j++)
$som_tmp+=(integer)substr($var_tmp,$j,1);
$somme+=$som_tmp;
}
for ($i=1; $i<=13; $i+=2) // Traitement IMPAIR
$somme+=(integer)substr($SIRET,$i,1);
if ((integer)($somme/10)!=($somme/10))
return false;
return true;
}
*/
?>