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

794 lines
41 KiB
PHP

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?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;
}
include_once(FWK_PATH.'common/chiffres.php');
include_once(FWK_PATH.'common/dates.php');
include_once(FWK_PATH.'common/ftp.php');
include_once(INCLUDE_PATH.'insee/classMInsee.php');
include_once(FWK_PATH.'mail/sendMail.php');
define('INSEE_FTP_URL', 'ftp.odissee.insee.fr');
define('INSEE_FTP_USER', '5358116');
define('INSEE_FTP_PASS', 'SC8$_21v');
//define('INSEE_FTP_REMOTE_DIR', 'odissee/MAP/*');
define('INSEE_FTP_REMOTE_DIR', 'odissee/5358116/*');
define('INSEE_LOCAL_DIR', '/home/data/insee/even/');
$strInfoScript='Usage : '.basename($argv[0]). " <option>
Chargement du/des flux quotidiens en provenance de Insee.
Options :
-d Mode debug (Verbosité au maximum)
-j Ne pas récupérer les derniers fichiers sur le FTP de l'Insee
-u Forcer la mise à jour la table identite de l'insee
-s=20080430 Réappliquer les évènements depuis cette date
-e=xxxxxxxx Réappliquer l'évènement xxxxxxxx
";
$iDb=new WDB('insee');
$iDbR=new WDB('insee');
$iDbW=new WDB('insee');
$iInsee=new MInsee();
$nbSiretInvalides=$nbErreurs=$nbInsert=$nbUpdate=0;
$modeDebug=$dateReprise=false;
$ftpStep=true;
$updateInsee=false;
$iReprise=0;
$tabFichier=array();
$nomFichierCharges=array();
$nbLignesCharges=$nbSiretInvalidesCharges=0;
//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);
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 'j': $ftpStep=false; break;
case 'u': $updateInsee=true; break;
case 's': $dateReprise=substr($argv[$i],3,8); break;
case 'e': $iReprise=substr($argv[$i],3); break;
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . " inconnue !\n");
}
} else $tabFichier[]=$argv[$i];
}
echo date ('Y/m/d - H:i:s') . " - Début du traitement de chargement des évènements INSEE".EOL;
$dateDeb=date('YmdHis');
$db_table='insee_even';
if ($ftpStep) {
/* Récupération des flux FTP */
echo date('Y/m/d - H:i:s') ." - DEBUT de la récupération des flux FTP de l'INSEE...".EOL;
$ret=ftp_mget(INSEE_FTP_URL, INSEE_FTP_USER, INSEE_FTP_PASS, INSEE_FTP_REMOTE_DIR, INSEE_LOCAL_DIR, true);
if ($ret===false)
die (date ('Y/m/d - H:i:s')." - ERREUR : Récupération des flux INSEE en FTP incorrecte !".EOL);
else
echo date ('Y/m/d - H:i:s')." - FIN de la récupération des flux INSEE en FTP ($ret fichiers récupérés).".EOL;
}
/** Liste des fichiers quotidiens de l'Insee
**/
$dh = opendir(INSEE_LOCAL_DIR.str_replace('*','', INSEE_FTP_REMOTE_DIR));
while (false !== ($filename = readdir($dh))) {
if ($filename<>'.' && $filename<>'..' && substr($filename, 0, 6)<>'EVE.NJ')
$tabFichier[] = $filename;
}
$tabToIdentite=array();
/** Chargement des fichiers si nécessaire
**/
for ($i=0; isset($tabFichier[$i]); $i++)
{
$nomFichier=$tabFichier[$i];
$idFlux=strtr(strtoupper(basename($nomFichier)),array('EVE.DJ'=>'20'));
$tabTailles[$idFlux]=filesize(INSEE_LOCAL_DIR.str_replace('*','', INSEE_FTP_REMOTE_DIR).$nomFichier);
$tabDateFic[$idFlux]=date('YmdHis', filemtime(INSEE_LOCAL_DIR.str_replace('*','', INSEE_FTP_REMOTE_DIR).$nomFichier));
$fp=fopen(INSEE_LOCAL_DIR.str_replace('*','', INSEE_FTP_REMOTE_DIR).$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];
while (!feof($fp))
{
$nbLignes++;
$a = trim(fgets($fp, 1024));
}
if ($nbLoaded>0) {
if (--$nbLignes<=$nbLoaded)
echo date ('Y/m/d - H:i:s')." - Le fichier n°$i, $nomFichier a déjà été chargé ($nbLoaded lignes) !".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 ($nbLignes lignes à traiter) !".EOL;
$tabToIdentite[]=$idFlux;
flush();
$finFichier=false;
$nbLignes=$nbErreurs=0;
rewind($fp);
while (!feof($fp))
{
$nbLignes++;
$a = trim(fgets($fp, 1024));
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();
} elseif ($a=='')
break;
//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
// DONNEES SUR L.EVENEMENT
$tabEve['insDATEMAJ'] =strtr(substr($a,14,19),array('-'=>'','T'=>'',':'=>''));//Date de traitement de la mise à jour
$tabEve['insEVE'] =substr($a,33,3);//Type d'événement
$tabEve['insDATEVE'] =substr($a,36,8);//Date de l'événement
$tabEve['insTYPETAB'] =substr($a,44,2);//Type d'établissement concerné par l'événement
// INFORMATIONS SUR L.ADRESSE D.IMPLANTATION ET LA LOCALISATION GEOGRAPHIQUE
$tabEve['insL1_NOMEN'] =trim(substr($a, 46,38));//Nom ou raison sociale de l'entreprise pour l'adressage
$tabEve['insL2_COMP'] =trim(substr($a, 84,38));//Complément de nom de l'entreprise pour l'adressage
$tabEve['insL3_CADR'] =trim(substr($a,122,38));//Complément d'adresse pour l.adressage
$tabEve['insL4_VOIE'] =trim(substr($a,160,38));//Numéro et libellé dans la voie
$tabEve['insL5_DISP'] =trim(substr($a,198,38));//Distribution spéciale
$tabEve['insL6_POST'] =trim(substr($a,236,38));//Ligne d.acheminement postal pour l.adressage
$tabEve['insL7_ETRG'] =trim(substr($a,274,38));//Libellé du pays pour les adresses à l'étranger
$tabEve['insTEL'] =trim(substr($a,312,14));//Téléphone
$tabEve['insRPET'] =substr($a,326,2);//Région de localisation de l'établissement
$tabEve['insDEPCOM'] =substr($a,328,5);//Département et commune d'implantation de l'établissement
$tabEve['insCODEVOIE'] =substr($a,333,5);//Code voie
$tabEve['insLIBCOM'] =trim(substr($a,338,32));//Libellé de la commune de localisation de l'établissement
$tabEve['insCODPOS'] =substr($a,370,5);//Code postal
$tabEve['insNUMVOIE'] =substr($a,375,4);//Numéro dans la voie
$tabEve['insINDREP'] =substr($a,379,1);//Indice de répétition
$tabEve['insTYPVOIE'] =trim(substr($a,380,4));//Type de la voie de localisation de l'établissement
$tabEve['insLIBVOIE'] =trim(substr($a,384,32));//Libellé de la voie de localisation de l'établissement
// DONNEES DE GESTION CONCERNANT L.ETABLISSEMENT
$tabEve['insENSEIGNE'] =trim(substr($a,416,40));//Enseigne ou nom de l.exploitation
$tabEve['insDCRET'] =substr($a,456,8);//Date de création de l'établissement (année, mois, jour)
$tabEve['insDREACTET'] =substr($a,464,8);//Date de réactivation de l'établissement (année, mois, jour)
$tabEve['insSIEGE'] =substr($a,472,1);//Qualité de siège ou non de l.établissement
$tabEve['insEXPLET'] =substr($a,473,1);//Etablissement exploitant tout ou partie des moyens de production
$tabEve['insORIGINE'] =substr($a,474,2);//Origine de la création de l'établissement
$tabEve['insDESTINAT'] =substr($a,476,2);//Destination de l'établissement
$tabEve['insAPET700'] =substr($a,478,5);//Activité principale de l'entreprise en 700 classes
$tabEve['insDAPET'] =substr($a,483,4);//Date de validité de l'activité principale de l'établissement
$tabEve['insAPRM'] =substr($a,487,6);//Activité principale au registre des métiers
$saisonat=trim(strtoupper(substr($a,493,2)));//Caractère saisonnier ou non de l'activité de l'établissement
if ($saisonat=='S') $tabEve['insSAISONAT'] =1;
else $tabEve['insSAISONAT'] =0;
$tabEve['insAUXILT'] =substr($a,495,1);//Caractère auxiliaire de l'activité de l'établissement
$tabEve['insACTIVNAT'] =substr($a,496,2);//Nature de l'activité de l'établissement
$tabEve['insLIEUACT'] =substr($a,498,2);//Lieu de l'activité de l'établissement
$tabEve['insACTISURF'] =substr($a,500,2);//Type de magasin
$tabEve['insTEFET'] =substr($a,502,2);//Tranche d'effectif salarié de l'établissement
$tabEve['insEFETCENT'] =substr($a,504,6);//Effectif salarié de l'établissement à la centaine près
$tabEve['insDEFET'] =substr($a,510,4);//Date de mise à jour de l'effectif salarié de l'établissement (année)
$tabEve['insPRODPART'] =substr($a,514,1);//Participation particulière à la production de l'établissement
$tabEve['insSIRETPS'] =trim(substr($a,515,14));//Siret du prédécesseur ou du successeur
$tabEve['insSIRETASS'] =trim(substr($a,529,14));//Siret associé
// DONNEES DE GESTION CONCERNANT L.ENTREPRISE A LAQUELLE APPARTIENT L.ETABLISSEMENTDESCRIPTION DES MISES A JOUR DE L.ETABLISSEMENT
$tabEve['insMENSEIGNE'] =substr($a,543,1);//Indicateur de mise à jour de l'enseigne de l'établissement
$tabEve['insMAPET'] =substr($a,544,1);//Indicateur de mise à jour de l'activité principale de l'établissement
$tabEve['insMADRESSE'] =substr($a,545,1);//Indicateur de mise à jour de l'adresse de localisation de l'établissement
$tabEve['insMEXPLET'] =substr($a,546,1);//Indicateur de mise à jour du caractère exploitant de l'établissement
$tabEve['insMAUXILT'] =substr($a,547,1);//Indicateur de mise à jour du caractère auxiliaire de l'activité de l'établissement
// DONNEES DE GESTION CONCERNANT L.ENTREPRISE A LAQUELLE APPARTIENT L.ETABLISSEMENT
$tabEve['insNOMEN'] =trim(substr($a,548,38));//Nom ou raison sociale de l'entreprise
$tabEve['insSIGLE'] =trim(substr($a,586,20));//Sigle de l'entreprise
$tabEve['insDCREN'] =substr($a,606,8);//Date de création de l'entreprise (année, mois, jour)
$tabEve['insDREACTEN'] =substr($a,614,8);//Date de réactivation de l'entreprise (année, mois, jour)
$tabEve['insCJ'] =substr($a,622,4);//Catégorie juridique ou professionnelle pour les entrepreneurs individuels
$tabEve['insCIVILITE'] =substr($a,626,1);//Civilité des entrepreneurs individuels
$tabEve['insEXPLEN'] =substr($a,627,1);//Entreprise exploitant tout ou partie des moyens de production
$tabEve['insFiller4'] =substr($a,628,1);//Zone réservée
$tabEve['insAPEN700'] =substr($a,629,5);//Activité principale de l'établissement en 700 classes
$tabEve['insDAPEN'] =substr($a,634,4);//Date de validité de l'activité principale de l'entreprise
$tabEve['insTEFEN'] =substr($a,638,2);//Tranche d'effectif salarié de l'entreprise
$tabEve['insEFENCENT'] =substr($a,640,6);//Effectif salarié de l'entreprise à la centaine près
$tabEve['insDEFEN'] =substr($a,646,4);//Date de mise à jour de l'effectif salarié de l.entreprise (année)
$tabEve['insNBETEXPL'] =substr($a,650,4);//Nombre d'établissements exploitants actifs de l'entreprise
$tabEve['insMONOREG'] =substr($a,654,1);//Indice de mono-régionalité de l'entreprise
$tabEve['insREGIMP'] =substr($a,655,2);//Principale région de localisation de l'entreprise
$tabEve['insMONOACT'] =substr($a,657,1);//Indice de monoactivité de l'entreprise
//DESCRIPTION DES MISES A JOUR DE L.ENTREPRISE A LAQUELLE APPARTIENT L.ETABLISSEMENT
$tabEve['insMNOMEN']=substr($a,658,1);//Indicateur de mise à jour du nom ou de la raison sociale
$tabEve['insMSIGLE']=substr($a,659,1);//Indicateur de mise à jour du sigle
$tabEve['insMCJ']=substr($a,660,1);//Indicateur de mise à jour de la catégorie juridique ou catégorie professionnelle
$tabEve['insMAPEN']=substr($a,661,1);//Indicateur de mise à jour de l'activité principale de l'entreprise
$tabEve['insMEXPLEN']=substr($a,662,1);//Indicateur de mise à jour du caractère exploitant de l'entreprise
$tabEve['insMNICSIEGE']=substr($a,663,1);//Indicateur de mise à jour du Nic du siège ou l'établissement principal
//INFORMATIONS SUR LE SIEGE DE L.ENTREPRISE A LAQUELLE APPARTIENT L.ETABLISSEMENT
$tabEve['insNICSIEGE']=substr($a,664,5);//Numéro interne de classement de l'établissement siège
$tabEve['insDEPCOMEN']=substr($a,669,5);//Département et commune de localisation du siège de l.entreprise
$tabEve['insRPEN']=substr($a,674,2);//Région de localisation du siège de l'entreprise
$insSIREN=$tabEve['insSIREN'];
$insNIC=$tabEve['insNIC'];
if (!$iInsee->valideSiren($insSIREN,$insNIC)) {
$tabEve['siretValide']=0;
$nbSiretInvalides++;
}
else
$tabEve['siretValide']=1;
/** Conversion de la saisonnalité **/
$insNOMEN=$tabEve['insNOMEN'];
$tabNoms=getNomPrenom($insNOMEN);
$tabEve['dirNom']=$tabNoms['Nom'];
$tabEve['dirNomUsage']=$tabNoms['NomUsage'];
$tabEve['dirPrenom']=$tabNoms['Prenom'];
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;
$nbErreurs++;
flush();
} else
$updateInsee=true;
} 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);
echo date ('Y/m/d - H:i:s')." - Le fichier n°$i, $nomFichier vient d'être chargé.".EOL;
echo date ('Y/m/d - H:i:s') . " - $nbLignes lignes traitées dont $nbSiretInvalides siret invalides !".EOL;
$nomFichierCharges[]=$nomFichier;
$nbLignesCharges=$nbLignes;
$nbSiretInvalidesCharges=$nbSiretInvalides;
}
echo date ('Y/m/d - H:i:s') . " - Au total : $nbLignes lignes traitées dont $nbSiretInvalides siret invalides !".EOL;
echo date ('Y/m/d - H:i:s') . " - Chargement des évènements terminé";
/**********************************************************************************************************************************
* MISE A JOUR DE LA TABLE IDENTITE
**********************************************************************************************************************************/
if ($updateInsee) {
echo ', début de mise à jour de la table identite.'.EOL;
$fieldsR='insSIREN, insNIC, insEVE, insDATEVE, insTYPETAB, insORIGINE, insDESTINAT, insTRAN, insNICTRAN, insL1_NOMEN, insNOMEN, insL2_COMP, insENSEIGNE, insSIGLE, insSIEGE, insNUMVOIE, insINDREP, insTYPVOIE, insLIBVOIE, insLIBCOM, insCODPOS, insL3_CADR, insL5_DISP, insAUXILT, insSAISONAT, insCJ, insCIVILITE, insDCRET, insDCREN, insAPEN700, insAPET700, insNBETEXPL, insTEFEN, insCODEVOIE, insDEPCOM, insTEL, insEFENCENT, insTEFET, insEFETCENT, insL7_ETRG, insAPRM, insACTIVNAT, insORIGINE, insMODET, insEXPLET, insDAPET, insLIEUACT, insACTISURF, insDEFET, insMODEN, insPRODPART, insEXPLEN, insDEFEN, insMONOREG, insREGIMP, insMONOACT, insDAPEN, dirNom, dirNomUsage, dirPrenom, insDATEMAJ, idFlux';
// on lit R pour mettre à jour W
$fieldsW='SIREN, NIC, IDENTITE_PRE, ACTIF, NOM, NOM2, ENSEIGNE, SIGLE, SIEGE, ADR_NUMVOIE, ADR_BTQ, ADR_TYPVOIE, ADR_LIBVOIE, ADR_LIBCOM, ADR_CP, ADR_COMP, ADR_DISTSP, AUXILT, SAISONAT, CJ, CIVILITE, DCRET, DCREN, APE_ENT, APE_ETAB, NBETAB, TEFF_ENT, TCA, CODEVOIE, ADR_DEP, ADR_COM, TEL, EFF_ENT, TEFF_ET, EFF_ET, PAYS, APRM, ACTIVNAT, ORIGINE, MODET, EXPLET, DAPET, LIEUACT, ACTISURF, DEFET, MODEN, PRODPART, EXPLEN, DEFEN, MONOREG, REGIMP, MONOACT, DAPEN, DIR_FCT, DIR_IDEN, DATE_MAJ';
if ($iReprise>0)
$tabToIdentite=array(0);
elseif (!$dateReprise)//$tabToIdentite
sort($tabToIdentite);
else
$tabToIdentite=array($dateReprise);
foreach ($tabToIdentite as $idFlux) {
//$idFlux='20080114';
if ($iReprise>0) {
echo date ('Y/m/d - H:i:s') . " - Chargement d'un seul évènement de flux quotidien...".EOL;
$ret=$iDbR->select('insee_even', $fieldsR, "id=$iReprise", true, MYSQL_ASSOC, true);
echo date ('Y/m/d - H:i:s') . " - $ret ligne à mettre à jour...".EOL;
} elseif (!$dateReprise) {
echo date ('Y/m/d - H:i:s') . " - Début du chargement du flux $idFlux...".EOL;
$ret=$iDbR->select('insee_even', $fieldsR, "idFlux=$idFlux ORDER BY idFlux ASC, insSIREN ASC, insDATEMAJ ASC", true, MYSQL_ASSOC, true);
echo date ('Y/m/d - H:i:s') . " - Chargement du flux $idFlux : $ret lignes à mettre à jour...".EOL;
} else {
echo date ('Y/m/d - H:i:s') . " - Chargement des flux quotidiens depuis $idFlux...".EOL;
$ret=$iDbR->select('insee_even', $fieldsR, "idFlux>=$idFlux ORDER BY idFlux ASC, insSIREN ASC, insDATEMAJ ASC", true, MYSQL_ASSOC, true);
// $ret=$iDbR->select('insee_even', $fieldsR, "idFlux>=$idFlux AND LENGTH(insL2_COMP)>30 ORDER BY idFlux ASC, insDATEMAJ ASC", true, MYSQL_ASSOC, true);
/* $ret=$iDbR->select('insee_even', $fieldsR, "insSIREN IN (100800002,987310505) AND idFlux IN (20040426, 20080114) ORDER BY idFlux ASC, insDATEMAJ ASC", true, MYSQL_ASSOC, true);*/
echo date ('Y/m/d - H:i:s') . " - $ret lignes à mettre à jour...".EOL;
}
$k=$nbInsert=$nbUpdate=$nbDBl=$nbSirenDeja=$nbInsertSiren=0;
while($ligne=$iDbR->fetch(MYSQL_ASSOC)) {
$k++;
$siren=$ligne['insSIREN'];
$nic =$ligne['insNIC'];
$ret2=$iDbW->select('identite', $fieldsW, "SIREN=$siren AND NIC=$nic");
$cpt=count($ret2);
if ($cpt>0) $etab=$ret2[0];
else {
$ret3=$iDbW->select('identite', $fieldsW, "SIREN=$siren AND SIEGE=1 ORDER BY NIC DESC");
$etab2=array();
if (count($ret3)>0) {
$etab2=$ret3[0];
$nbSirenDeja++;
} else
$nbInsertSiren++;
$etab=array('IDENTITE_PRE'=>@$etab2['IDENTITE_PRE'],
'NOM'=>@$etab2['NOM'],
'ENSEIGNE'=>'',
'SIGLE'=>@$etab2['SIGLE']);
}
$cj1=substr($ligne['insCJ'],0,1)*1;
if ($cj1==1) {
$arrDir=array( 'DIR_FCT'=>'PP',
'DIR_IDEN'=> strtoupper(trim($ligne['dirNom'])).' '.
ucwords(strtolower(trim($ligne['dirPrenom']))));
} else
$arrDir=array();
$even=trim($ligne['insEVE'])*1;
$typEtab=trim($ligne['insTYPETAB'])*1;
if ($even==0) {
switch(''.trim($ligne['insEVE'])) {
case 'MPF':
case 'MNP':
case 'MSA':
case 'MAS':
case 'MAC':
case 'M00':
case '00': $even=780; break;
case 'M0C':
case 'CC': $even=110; break; // Création d'une entreprise
case 'M0F':
case 'FF': $even=410; break; // Fermeture de l'entreprise
case 'OC': $even=130; break; // Création d'un établissement
case 'RC': $even=120; break; // Réactivation d'une entreprise par création d'un établissement
case 'M0R':
case 'RR': $even=120; break; // Réactivation d'une entreprise par réactivation d'un établissement
case 'OA': $even=145; break; // Activation économique d'un étab par adjonction de moyens de production
case 'OD': $even=430; break; // Désactivation économique d'un étab par suppression de moyens de prod.
case 'OF': $even=430; break; // Fermeture d'un établissement
case 'TC': $even=510; $typEtab=11; break; // Création de l'établissement d'arrivée et cessation de l'établissement de départ dans le cadre d'un transfert
case 'TR': $even=510; $typEtab=11; break;
case 'T0': $even=510; $typEtab=11; break;
case 'TA': $even=510; $typEtab=11; break;
case 'TF': $even=510; $typEtab=10; break; // Fermeture d'un établissement dans le cadre d'un transfert
case 'TD': $even=510; $typEtab=10; break; // Désactivation économique d'un établissement (ordinaire devient singulier) par suppression de moyens de production dans le cadre d'un transfert
default:
if (''.substr(trim($ligne['insEVE']),0,1).''==0 && substr(trim($ligne['insEVE']),1,1)=='C') $even=130;
elseif (''.substr(trim($ligne['insEVE']),0,1).''==0 && substr(trim($ligne['insEVE']),1,1)=='A') $even=145;
elseif (''.substr(trim($ligne['insEVE']),0,1).''==0 && substr(trim($ligne['insEVE']),1,1)=='D') $even=430;
elseif (''.substr(trim($ligne['insEVE']),0,1).''==0 && substr(trim($ligne['insEVE']),1,1)=='F') $even=430;
elseif (''.substr(trim($ligne['insEVE']),0,1).''==0 && substr(trim($ligne['insEVE']),1,1)=='R') $even=120;
else echo ("Erreur code sur Siren $siren $nic : code Even=\"".trim($ligne['insEVE']).'"'.EOL);
break;
}
}
//$even=780
$origine=trim($ligne['insORIGINE']);
$destinat=trim($ligne['insDESTINAT']);
$dateFerEN=$dateFerET=-1; // Rar défaut, on n'y touche pas
$sirenNonDiffusible=false;
switch ($even) {
case 110: // Création ou réactivation Création d'une entreprise
case 120: // Réactivation d'une entreprise
case 125: // Réactivation d'une entreprise suite à une mise à jour du répertoire
case 130: // Création d'un établissement
case 145: // Reprise d'activité dans un établissement suite à une mise à jour du répertoire
switch ($typEtab) {
case 15: // Siège modifié (hors transfert) : modification de l'activité principale avec désactivation économique
case 23: // Établissement fermé (hors transfert)
case 25: // Établissement modifié (hors transfert) : modification de l'activité principale avec désactivation économique
$dateFerET=$ligne['insDATEVE'];
$actif=0;
break;
default:
$dateFerET=$dateFerEN=0;
$actif=1;
break;
}
break;
case 400: // Suppression d'un double
//$dateFerET=$dateFerEN=0;
$actif=0;
continue; // On ignore les suppressions de doublons
break;
case 410: // Cessation juridique de l'entreprise
case 420: // Absence d'activité de l'entreprise (cessation économique de l.entreprise)
$dateFerET=$ligne['insDATEVE'];
$dateFerEN=$ligne['insDATEVE'];
$actif=0;
/** @todo, il faudrait fermer tous les étabs **/
break;
case 425: // Absence d'activité d'une entreprise suite à une mise à jour au répertoire
case 430: // Fermeture d'un établissement
case 435: // Fermeture d'un établissement suite à une mise à jour au répertoire
switch ($typEtab) {
case 13: // Siège fermé (hors transfert)
case 15: // Siège modifié (hors transfert) : modification de l'activité principale avec désactivation économique
case 23: // Établissement fermé (hors transfert)
case 25: // Établissement modifié (hors transfert) : modification de l'activité principale avec désactivation économique
$dateFerET=$ligne['insDATEVE'];
$actif=0;
break;
case 14: // Siège modifié (hors transfert) : modification de l'activité principale avec activation économique
case 16: // Siège modifié (hors transfert) : modification de l'APE de l'établissement
case 17: // Siège modifié (hors transfert) : modification de l'identification de l'établissement
case 19: // Siège modifié (hors transfert) : autre modification de l'établissement
case 24: // Établissement modifié (hors transfert) : modification de l'activité principale avec activation économique
$dateFerET=$dateFerEN=0;
$actif=1;
break;
default:
$actif=-1;
break;
}
break;
case 510: // Création de l'établissement d'arrivée et cessation de l'établissement de départ dans le cadre d'un transfert
case 520: // Création de l'établissement d'arrivée et modification de l'établissement de départ dans le cadre d'un transfert
case 530: // Modification de l'établissement d'arrivée et cessation de l'établissement de départ dans le cadre d'un transfert
case 540: // Modification de l'établissement d'arrivée et modification de l'établissement de départ dans le cadre d'un transfert
switch ($typEtab) {
case 9: // Siège après transfert non créé
case 8: // Siège avant transfert non fermé
case 11: // Siège après transfert créé
case 12: // Siège créé (hors transfert)
case 14: // Siège modifié (hors transfert) : modification de l'activité principale avec activation économique
case 21: // Établissement après transfert créé
case 22: // Établissement créé (hors transfert)
case 24: // Établissement modifié (hors transfert) : modification de l'activité principale avec activation économique
case 30: // Établissement avant transfert non fermé
case 31: // Établissement après transfert non créé
//echo "case even=$even, typeEtab=$typEtab\n";
$dateFerET=$dateFerEN=0;
$actif=1;
break;
case 10: // Siège avant transfert fermé
case 13: // Siège fermé (hors transfert)
case 15: // Siège modifié (hors transfert) : modification de l'activité principale avec désactivation économique
case 20: // Établissement avant transfert fermé
case 23: // Établissement fermé (hors transfert)
case 25: // Établissement modifié (hors transfert) : modification de l'activité principale avec désactivation économique
case 32: // Établissement supprimé
//echo "case even=$even, typeEtab=$typEtab\n";
$dateFerET=$ligne['insDATEVE'];
$actif=0;
break;
default:
$actif=-1;
break;
/*
Que fait on pour ces codes ?
16 Siège modifié (hors transfert) : modification de l'activité principale de l'établissement
17 Siège modifié (hors transfert) : modification de l'identification de l'établissement
19 Siège modifié (hors transfert) : autre modification de l'établissement
26 Établissement modifié (hors transfert) : autre modification de l'activité principale de l'établissement
27 Établissement modifié (hors transfert) : modification de l'identification de l'établissement
29 Établissement modifié (hors transfert) : modification d.une autre variable de l'établissement*/
}
break;
case 610: // Modification d'activité au niveau du SIREN associé à une activation économique par adjonction de moyens de production
case 640: // Modification d'activité au niveau de l'établissement associée à une activation économique par adjonction de moyens de production
$actif=1;
break;
case 620: // Modification d'activité au niveau du SIREN associé à une désactivation économique par suppression de moyens de production
case 621: // Modification d'activité du SIREN associé à une désactivation économique par suppression de moyens de production suite à une correction d'erreur
$dateFerET=$ligne['insDATEVE'];
$dateFerEN=$ligne['insDATEVE'];
$actif=0;
break;
case 650: // Modification d'activité au niveau de l'établissement associée à une désactivation économique par suppression de moyens de production
$dateFerET=$ligne['insDATEVE'];
$actif=0;
break;
//case 781:
case 795: // SIREN non diffusible
$actif=1;
$sirenNonDiffusible=true;
break;
default:
$actif=-1;
/*631 Autre modification d'activité du SIREN associé
661 Autre modification d'activité au niveau de l'établissement
710 Modification de l'identification du SIREN
711 Modification de l'identification du SIREN suite à correction d'erreur
720 Modification de l'adresse ou de l'identification de l'établissement
780 Autre modification entraînant la mise à jour d'au moins une variable du répertoire
781 Autre modification entraînant la mise à jour d'au moins une variable du répertoire suite à correction d'erreur*/
}
//echo "$k : [$siren $nic\t$even\t$destinat\t$typEtab\t$origine\t($actif)]".EOL;
/** Si on n'a pas pu déterminé l'état actif ou inactif, on test si la variable DESTINAT est renseignée !
**/
if ($actif==-1 && (trim($ligne['insEVE'])=='MPF' || trim($ligne['insEVE'])=='MNP')) {
// Etablisement présumé fermé mais on laisse actif juridiquement
$actif=-1;
}
elseif ($actif==-1 && ( $destinat*1==3 || // Vendu
$destinat=='B' || // Fermé
$destinat=='C' || // Supprimé
$destinat=='D' || // Mise en location-gérance de la totalité du fonds
$destinat=='F' || // Cessation d'activité (pour les liasses agricoles)
$destinat=='I' || // Transmission au conjoint (pour les liasses agricoles)
$destinat=='J' || // Cession (pour les liasses agricoles)
$destinat=='G' ) ) // Mise en location-gérance de la totalité des terres et des bâtiments agricoles (pour les liasses agricoles)
{
$dateFerET=$ligne['insDATEVE'];
$actif=0;
}
elseif ($actif==-1 && ( $destinat*1==7 || // Maintien d'activité, l'établissement devient siège
$destinat*1==8 || // Maintien d'activité, l'établissement devient principal
$destinat=='A' || // Maintien d'activité, l'établissement devient secondaire
$destinat=='E' || // Mise en location-gérance d'une partie du fonds
$destinat=='VP' || // suppression partielle d'activité par vente
$destinat=='DP' || // suppression partielle d'activité par disparition
$destinat=='RP' || // suppression partielle d'activité par reprise par le propriétaire
$destinat=='H') ) // Mise en location-gérance d'une partie des terres et des bâtiments agricoles (pour les liasses agricoles)
{
$actif=1;
}
else {
if ($modeDebug)
echo "$k : $siren $nic\t$even\t$destinat\t$typEtab\t$origine\t($actif)".EOL;
}
/*
9 Autre
NR Non renseigné
*/
if ($actif==-1) $arrActif=array();
else $arrActif=array('ACTIF'=>$actif);
if ($dateFerET<>-1) $arrActif=array_merge($arrActif, array('dateFerET'=>$dateFerET));
if ($dateFerEN<>-1) $arrActif=array_merge($arrActif, array('dateFerEN'=>$dateFerEN));
/** Zone Identité précédente
** contenant tous les anciens nom, sigle et/ou enseigne concaténés
** n'ai jamais affiché mais sert pour l'indexation au niveau de la recherche
** On ne se sert pas de $tabEve['insMENSEIGNE'] =substr($a,543,1);//Indicateur de mise à jour de l'enseigne de l'établissement
** $tabEve['insMNOMEN']=substr($a,658,1);//Indicateur de mise à jour du nom ou de la raison sociale
** $tabEve['insMSIGLE']=substr($a,659,1);//Indicateur de mise à jour du sigle
**/
$identite_pre=trim($etab['IDENTITE_PRE']);
$nomEntrep=trim(strtr($ligne['insNOMEN'],array('*'=>' ','/'=>' ',"\'"=>"'",chr(191)=>'°')));
$nomEntrepEnBase=substr(trim(strtr($etab['NOM'],array('*'=>' ','/'=>' ',"\'"=>"'",chr(191)=>'°'))),0,38);
if ($nomEntrepEnBase<>$nomEntrep && $nomEntrepEnBase<>'') {
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Ligne $nbLignes, établissement $siren $nic - NOM En base : / MAJ : $nomEntrepEnBase".EOL;
if (strlen($identite_pre)==0)
$identite_pre=$nomEntrepEnBase;
else
$identite_pre.=','.$nomEntrepEnBase;
}
$nomEtab=trim(strtr($ligne['insENSEIGNE'],array('*'=>' ','/'=>' ',"\'"=>"'",chr(191)=>'°')));
$nomEtabEnBase=trim(strtr($etab['ENSEIGNE'],array('*'=>' ','/'=>' ',"\'"=>"'",chr(191)=>'°')));
if ($nomEtabEnBase<>$nomEtab && $nomEtabEnBase<>'') {
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Ligne $nbLignes, établissement $siren $nic - ENSEIGNE En base : / MAJ : $nomEtabEnBase".EOL;
if (strlen($identite_pre)==0)
$identite_pre=$nomEtabEnBase;
else
$identite_pre.=','.$nomEtabEnBase;
}
$sigEntrep=trim(strtr($ligne['insSIGLE'],array('*'=>' ','/'=>' ',"\'"=>"'",chr(191)=>'°')));
$sigEntrepEnBase=trim(strtr($etab['SIGLE'],array('*'=>' ','/'=>' ',"\'"=>"'",chr(191)=>'°')));
if ($sigEntrepEnBase<>$sigEntrep && $sigEntrepEnBase<>'') {
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Ligne $nbLignes, établissement $siren $nic - SIGLE En base : / MAJ : $sigEntrepEnBase".EOL;
if (strlen($identite_pre)==0)
$identite_pre=$sigEntrepEnBase;
else
$identite_pre.=','.$sigEntrepEnBase;
}
$arrBase=array( 'NOM'=> trim($ligne['insNOMEN']), // Raison Sociale de l'entreprise
'NOM2'=> trim($ligne['insL2_COMP']), // Enseigne de l'établissement ou sigle de l'entreprise ou enfin, nom commercial (Intermarché)
'ENSEIGNE'=> trim($ligne['insENSEIGNE']), // Nom de l'établissement ou enseigne
'SIGLE'=> trim($ligne['insSIGLE']), // Sigle
'SIEGE'=> $ligne['insSIEGE'], // Siège
'IDENTITE_PRE'=>$identite_pre,
'ADR_NUMVOIE'=> trim($ligne['insNUMVOIE']), // N° dans la voie
'ADR_BTQ'=> trim($ligne['insINDREP']), // BTQ
'ADR_TYPVOIE'=> trim($ligne['insTYPVOIE']), // Type de voie
'ADR_LIBVOIE'=> trim($ligne['insLIBVOIE']), // Lib Voie
'ADR_CP'=> trim($ligne['insCODPOS']), // Code Postal
'ADR_LIBCOM'=> trim($ligne['insLIBCOM']), // Commune
'ADR_COMP'=> trim($ligne['insL3_CADR']), // Complément d'adresse
'ADR_DISTSP'=> trim($ligne['insL5_DISP']), // Distribution Spéciale
'AUXILT'=> trim($ligne['insAUXILT']), //
'SAISONAT'=> $ligne['insSAISONAT'], //
'CJ'=> trim($ligne['insCJ']),
'CIVILITE'=> trim($ligne['insCIVILITE']), // Sexe 0=Entrep, 1=Homme, 2=Femme
'DCRET'=> trim($ligne['insDCRET']), // Date de création de l'établissemennt
'DCREN'=> trim($ligne['insDCREN']), // Date de création de l'entreprise
'APE_ENT'=> trim($ligne['insAPEN700']), // Code NAF de l'entreprise (cf. table APE)
'APE_ETAB'=> trim($ligne['insAPET700']), // Code NAF de l'établissement (cf. table APE)
'NBETAB'=> trim($ligne['insNBETEXPL']), // Nombre d'établissement de l'entreprise
'TEFF_ENT'=> trim($ligne['insTEFEN']), // Tr Eff Entrep
// 'TCA'=> trim($ligne['insTCA']), // Tr CA
'CODEVOIE'=> trim($ligne['insCODEVOIE']), // Ce RIVOLI
'ADR_DEP'=> trim(substr($ligne['insDEPCOM'],0,2))*1,
'ADR_COM'=> trim(substr($ligne['insDEPCOM'],2,3))*1,
'EFF_ENT'=> trim($ligne['insEFENCENT']), // Eff Entrep
'TEFF_ET'=> trim($ligne['insTEFET']), // Tr Eff Etablissement
'EFF_ET'=> trim($ligne['insEFETCENT']), // Eff Etablissement
'PAYS'=> trim($ligne['insL7_ETRG']), // Pays si différent de france
'APRM'=> trim($ligne['insAPRM']), // Répertoire Métier
'ACTIVNAT'=> trim($ligne['insACTIVNAT']),
'ORIGINE'=> trim($ligne['insORIGINE']),
'MODET'=> trim($ligne['insMODET']),
'EXPLET'=> trim($ligne['insEXPLET']),
'DAPET'=> trim($ligne['insDAPET']),
'LIEUACT'=> trim($ligne['insLIEUACT']),
'ACTISURF'=> trim($ligne['insACTISURF']),
'DEFET'=> trim($ligne['insDEFET']),
'MODEN'=> trim($ligne['insMODEN']),
'PRODPART'=> trim($ligne['insPRODPART']),
'EXPLEN'=> trim($ligne['insEXPLEN']),
'DEFEN'=> trim($ligne['insDEFEN']),
'MONOREG'=> trim($ligne['insMONOREG']),
'REGIMP'=> trim($ligne['insREGIMP']),
'MONOACT'=> trim($ligne['insMONOACT']),
'DAPEN'=> trim($ligne['insDAPEN']),
'DATE_MAJ'=> substr(''.$ligne['insDATEMAJ'].'',0,8),
);
if ($cpt==0) {
/**
** On ajoute la fiche de l'établissement
**/
$arrTel=array( 'TEL'=> trim($ligne['insTEL'])); // Téléphone de l'établissement
$tabInsert=array( 'SIREN'=> $ligne['insSIREN'],
'NIC'=> $ligne['insNIC'],
);
$tabInsert=array_merge($tabInsert, $arrTel, $arrDir, $arrBase, $arrActif);
// echo date ('Y/m/d - H:i:s')." - Siret $siren $nic en cours d'ajout".EOL;
$retInsert=$iDbW->insert('identite', $tabInsert, true);
if (!$retInsert) die('Erreur Mysql n°'. mysql_errno() .' : '.mysql_error());
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Siret $siren $nic ajouté".EOL;
$nbInsert++;
} else {
/**
** On modifie la fiche de l'établissement
**/
$tel=trim($ret2[0]['TEL']);
if (trim($ligne['insTEL'])<>'' && $tel=='')
$arrTel=array( 'TEL'=> trim($ligne['insTEL'])); // Téléphone de l'établissement
else
$arrTel=array();
if (!$sirenNonDiffusible) {
$tabUpdate=array_merge($arrTel, $arrDir, $arrBase, $arrActif);
$retUpdate=$iDbW->update('identite', $tabUpdate, "SIREN=$siren AND NIC=$nic", false);
if (!$retUpdate) die('Erreur lors de MAJ Mysql n°'. mysql_errno() .' : '.mysql_error());
//if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Siret $siren $nic modifié".EOL;
$nbUpdate++;
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Siret $siren $nic : $cpt fiche(s) modifiée(s)".EOL;
} else {
$tabInsert=array('siren'=> $siren,
'nic'=> $nic,
'idFlux'=> $ligne['idFlux'],
'mois'=> substr(''.$ligne['insDATEMAJ'].'',0,6),
);
$retInsert=$iDbW->insert('insee_nondiff', $tabInsert, true);
if (!$retInsert) date ('Y/m/d - H:i:s')." - Siren $siren non diffusible, erreur Mysql n°". mysql_errno() .' : '.mysql_error().EOL;
if ($modeDebug) echo date ('Y/m/d - H:i:s')." - Siren $siren non diffusible !".EOL;
}
if ($cpt>1) {
//die(date ('Y/m/d - H:i:s')." - Siret $siren $nic : $cpt correspondances".EOL);
$tabSirenDoubles[]=$siren;// RAF
$fp=fopen('doublons.txt', 'a');
fwrite($fp, "$siren $nic : $cpt lignes\n");
fclose($fp);
//print_r($ret2);
echo date ('Y/m/d - H:i:s')." - Doublons sur $siren $nic : $cpt lignes".EOL;
$nbDBl++;
}
}
}
echo date ('Y/m/d - H:i:s') . " - Fin du chargement du flux $idFlux : $k lignes traités ($nbInsert ajouts, $nbUpdate maj et $nbDBl doublons).".EOL;
}
echo date ('Y/m/d - H:i:s') . " - Fin de la mise à jour de la table identité".EOL;
} else echo ', la table identite n\'est pas mise à jour !'.EOL;
echo date ('Y/m/d - H:i:s') . " - Fin du traitement de chargement des évènements INSEE".EOL;
$message="Fichier évènements '".implode(',', $nomFichierCharges)."' :
- $nbLignesCharges lignes traitées,
- $nbSiretInvalidesCharges siret invalides,
- $nbErreurs erreurs lors des insertions.
";
if ($updateInsee) {
$message.="
Table identité :
- $nbInsert créations,
- $nbUpdate mises à jour
";
}
$message.=EOL;
/** Ajout du fichier info de l'INSEE **/
foreach ($nomFichierCharges as $nomFichier) {
$strCtrl=file_get_contents(INSEE_LOCAL_DIR.str_replace('*','', INSEE_FTP_REMOTE_DIR).str_replace('EVE.DJ','EVE.NJ',$nomFichier));
$message.="Informations INSEE pour '$nomFichier' :".EOL;
$message.=$strCtrl.EOL;
$message.=EOL;
/** Mise à jours des informations de traitement **/
$typeDiffusion=$dateCreation=$nbRecords='';
if (preg_match('/DIFFUSION\s\((.*)\)/Uis', $strCtrl, $matches))
$typeDiffusion=$matches[1];
if (preg_match('/DATE DU TRAITEMENT\s+\:\s+(\d+)\s/Uis', $strCtrl, $matches))
$dateCreation=substr(trim($matches[1]),0,4).'20'.substr(trim($matches[1]),4,2);
if (preg_match('/NOMBRE ENREGISTREMENTS\s+\:\s+(\d+)\s/Uis', $strCtrl, $matches))
$nbRecords=trim($matches[1]);
$dateFin=date('YmdHis');
$tabInsert=array( 'nomFichier' => $nomFichier,
'dateCreation' => WDate::dateT('dmY', 'Y-m-d', $dateCreation),
'nbRecords' => $nbRecords,
'dateFlux' => $idFlux,
'dateDispo' => $tabDateFic[$idFlux],
'taille' => $tabTailles[$idFlux],
'dateChargementDeb' => $dateDeb,
'dateChargementFin' => $dateFin,
'stock' => 0,
'nbLignesLues' => $nbLignesCharges,
'nbErreurInsert' => $nbErreurs,
'nbSiretFaux' => $nbSiretInvalidesCharges,
'nbCreationsSiren' => $nbInsertSiren,
'nbCreationsSiret' => $nbInsert,
'nbUpdates' => $nbUpdate,
'typeDiffusion' => $typeDiffusion,
'dateInsert' => $dateFin,
);
print_r($tabInsert);
$iDbW->insert('insee_chargements', $tabInsert);
echo mysql_error().EOL;
}
/* if (bzip2(INSEE_LOCAL_DIR.$nomFichier)) {
//unlink(RNCS_IMR_FTP_LOCALDIR.$fichier);
$message.=date ('Y/m/d - H:i:s') . " - Le fichier n°$iFic, $fichier vient d'être historisé.".EOL;
}
*/
sendMail('webmaster@scores-decisions.com', 'ylenaour@scores-decisions.com', 'Fin du traitement de chargement INSEE', $message);
die();
?>