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

776 lines
35 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
<?php
function wsLog($service, $siret='', $ref='') {}
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/classMRncs.php');
include_once(FWK_PATH.'mail/sendMail.php');
define('RNCS_IMR_FTP_DIR', '/home/data/ftp/rncs/');
define('RNCS_IMR_BACKUP_DIR', '/home/data/rncs/imr/');
$strInfoScript='Usage : '.basename($argv[0]). " <option> [FICHIERS]
Chargement du/des flux en provenance de l'INPI (license RNCS IMR).
Options :
-d Mode debug (Verbosité au maximum)
-l:XXXX Reprendre à partir de la ligne XXXX
-s:AAAAMMJJ Jour de l'extraction du stock de tous les établissements actifs
";/*
-p Chargement d'une ancienne notice (pas de modification de la zone ACTIF chargement des zones différentes)
-u Ne pas mettre à jour la table identite de l'insee
-h Ne pas charger la notice dans la base des 'historiques'
";*/
$iDb=new WDB();
$iInsee=new MInsee();
$iRncs=new MRncs();
//$iWs=new WsEntreprise();
$nbSiretInvalides=0;
$modeDebug=false;
$stock=0; // Stock IMR complet = 1 !
$actifIni=1; // L'état actif est 1 sinon 11 si stock !
$jourStock=0; // Jour du stock SSAMMJJ
$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 'l': $numReprise=substr($argv[$i],3,strlen($argv[$i])-3); break;
case 's': $stock=1; $actifIni=11; $jourStock=substr($argv[$i],3,8); break;
case '-':
case '?': die($strInfoScript); break;
default: die('Option '. $argv[$i] . ' inconnue !'.EOL);
}
} else $tabFichLigneCmd[]=$argv[$i];
}
//die($iRncs->getDeviseInpi(300));
//die(print_r($iRncs->getIdentiteEtab(7020068)));
//die(print_r($iRncs->getListeDepots(7020068)));
//die(print_r($iRncs->getListeJugements(393087705)));
if (count($tabFichLigneCmd)==0) {
$dh = opendir(RNCS_IMR_FTP_DIR);
while (false !== ($filename = readdir($dh))) {
if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.dat')
$tabFichier[] = RNCS_IMR_FTP_DIR.$filename;
}
sort($tabFichier);
}
if (count($tabFichier)==0)
$tabFichier=$tabFichLigneCmd;
if (count($tabFichier)==0 && count($tabFichLigneCmd)==0)
die(date ('Y/m/d - H:i:s') . " - Aucun fichier RNCS IMR de l'INPI à traiter (--help pour plus d'options).".EOL);
echo date ('Y/m/d - H:i:s') . " - Début du traitement de chargement du flux INPI".EOL;
/*
// Test du matching de tous les mandataires INPI
$tabTmp=$iDb->select('rncs_jugements', "adm1nom, adm1adrNum, adm1adrInd, adm1adrVoie, adm1adrCP, adm1adrVille, count(*) AS nb", "1 GROUP BY adm1nom ORDER BY nb DESC", true, MYSQL_ASSOC);
foreach ($tabTmp as $nbMand=>$mand) {
$idMand=$iRncs->getIdMandataireInpi($mand['adm1nom']);
if ($idMand==false) echo $mand['adm1nom']."\t".$mand['nb']."\t".$mand['adm1adrNum']."\t".$mand['adm1adrInd']."\t".$mand['adm1adrVoie']."\t".$mand['adm1adrCP']."\t".$mand['adm1adrVille']."\t".$idMand.EOL;
}
die();
*/
foreach ($tabFichier as $iFic=>$fichier)
{
$fichierAvecRep=$fichier;
$fichier=basename($fichier);
$dateInsert=date('YmdHis');
echo date('Y/m/d - H:i:s'). " - Début du traitement du fichier $fichier...".EOL;
$dateDispo=date('YmdHis', filemtime($fichierAvecRep));
$dateFichierMod=substr(''.$dateDispo,0,8)*1;
if(preg_match('/_([0-9]{8,8})\.dat/Ui', $fichierAvecRep, $matches))
$dateFichierNom=$matches[1];
else
$dateFichierNom=0;
if ($dateFichierMod==$dateFichierNom) $dateFlux=$dateFichierMod;
elseif ($dateFichierMod<>0 && $dateFichierNom==0) $dateFlux=$dateFichierMod;
else {
echo date ('Y/m/d - H:i:s') . " - La date du fichier ($dateFichierMod) ne correspond pas avec le nom '$fichier' !".EOL;
$dateFlux=$dateFichierNom;
if (($dateFlux*1)<20080101 || ($dateFlux*1)>(date('Ymd')*1))
die();
}
$fp=fopen($fichierAvecRep, 'r');
if ($fp) {
$nbLignes=$nbLignes01=$nbLignes02=$nbLignes02p=$nbLignes03=$nbLignes04=$nbLignes05=0;
for($i=0; $i<6; $i++) $nbUpdate[$i]=$nbInsert[$i]=0;
$nbCreations=$nbModifI=$nbModifF=$nbModifS=$nbFermetures=$nbModifErr=0;
$a = fgets($fp, 4096);
if (strlen($a)>351) {
echo date('Y/m/d - H:i:s') ." - Le fichier RNCS à charger $fichier n'est pas au format IMR Coface/Ort !".EOL;
die();
}
$nbLignesTot=0;
while (!feof($fp)) {
$a = fgets($fp, 4096);
$nbLignesTot++;
}
echo date('Y/m/d - H:i:s') ." - Le fichier à charger $fichier contient $nbLignesTot lignes.".EOL;
if ($iFic==0 && $nbLignesTot>2000000 && !$stock) {
// C'est le 1er fichier, il comporte plus de 2M de lignes et il n'est pas déclaré comme stock !
echo date('Y/m/d - H:i:s') ." - Ce fichier est-il un stock annuel ? Merci de confirmer (O/N) ";
while (1) {
$saisie = trim(strtoupper(fgets(STDIN)));
if ($saisie=='O' || $saisie=='o') {
$stock=1;
$actifIni=11;
break;
} elseif ($saisie=='N' || $saisie=='n') {
break;
}
}
}
if ($stock && $iFic==0) {
$stockD=substr($jourStock,6,2)*1;
$stockM=substr($jourStock,4,2)*1;
$stockY=substr($jourStock,0,4)*1;
if (!$jourStock || $stockY<2009 || $stockY>date('Y') || $stockM==0 || $stockM>12 ||
$stockD==0 || $stockD>31 || $jourStock>date('Ymd')) {
while (1) {
echo date('Y/m/d - H:i:s') ." - Entrez-le jour du stock au format AAAAMMJJ (ex: $dateFlux) ... ";
$saisie = trim(strtoupper(fgets(STDIN)));
if (strlen($saisie)==8) {
$stockD=substr($saisie,6,2)*1;
$stockM=substr($saisie,4,2)*1;
$stockY=substr($saisie,0,4)*1;
if ($stockY>=2009 && $stockY<=date('Y')*1) {
if ($stockM>0 && $stockM<13) {
if ($stockD>0 && $stockD<13 && ($saisie*1)<=(date('Ymd')*1))
break;
else echo "ERREUR : Jour incorrect ou date de notice dans le futur !".EOL;
} else echo "ERREUR : Mois incorrecte !".EOL;
} else echo "ERREUR : Année incorrect ou dans le futur !".EOL;
} else echo "ERREUR : Saisie incorrecte !".EOL;
}
}
if ($stockM<10) $stockM='0'.$stockM;
else $stockM='' .$stockM;
if ($stockD<10) $stockD='0'.$stockD;
else $stockD='' .$stockD;
$jourStock=''.$stockY.$stockM.$stockD;
$message=date('Y/m/d - H:i:s'). " - Début de traitement du fichier stock n°$iFic, $fichier...".EOL;
}
elseif ($stock)
$message=date('Y/m/d - H:i:s'). " - Début de traitement du fichier stock n°$iFic, $fichier...".EOL;
else
$message=date('Y/m/d - H:i:s'). " - Début de traitement du fichier n°$iFic, $fichier...".EOL;
echo $message;
rewind($fp);
$a = fgets($fp, 4096);
$sirenPre=0; // Valeur du Siren précédent
$siren=0;
while (!feof($fp)) {
$nbLignes++;
$siren = trim( substr($a, 0, 9)); // SIREN
$codeEnr = ''.trim( substr($a, 9, 2));
/** A supprimer deb
if ($nbLignes%100000==0) {
echo date('Y/m/d - H:i:s'). " - Fichier n°$iFic, $fichier : $nbLignes lignes, $siren $codeEnr : $nbLignes01 entrep, $nbLignes02 étab, $nbLignes03 dir, $nbLignes04 jug, $nbLignes05 actes".EOL;
}
if ($codeEnr=='03' || $codeEnr=='04' || $codeEnr=='05') {
$a = fgets($fp, 4096);
$sirenPre=$siren;
continue;
}
// A supprimer fin **/
switch ($codeEnr) {
// Code enregistrement = 01 Alpha. 01=Enregistrement ENTREPRISE
case '01':
$nbLignes01++;
if ($sirenPre>0) {
/** Passage à Actif/Inactif des établissements précédents **/
$ret=$iDb->select('rncs_etab', 'actif, COUNT(*) AS nb', "siren=$sirenPre GROUP BY actif ORDER BY actif ASC", false, MYSQL_ASSOC);
if (isset($ret[0])) {
$nbEtab=array();
foreach ($ret as $iEtab=>$etab)
$nbEtab[$etab['actif']]=$etab['nb'];
$ret=$iDb->update('rncs_etab', array('actif'=>0,'dateFermeture'=>$dateFlux), "actif>9 AND siren=$sirenPre");
if ($modeDebug) {
echo date ('Y/m/d - H:i:s') . " - Les établissements du siren $sirenPre non transmis ont été passés à inactifs (".$nbEtab[10]." déjà inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun établissement pour le siren $sirenPre en base précédement !".EOL;
/** Passage à inactif des dirigeants **/
if ($modifDir) {
$ret=$iDb->select('rncs_dirigeants', 'actif, count(*) as nb', "siren=$sirenPre GROUP BY actif ORDER BY actif ASC", false, MYSQL_ASSOC);
if (isset($ret[0])) {
$nbEtab=array();
foreach ($ret as $iEtab=>$etab)
$nbEtab[$etab['actif']]=$etab['nb'];
$ret=$iDb->update('rncs_dirigeants', array('actif'=>0,'dateFin'=>$dateFlux), "actif>9 AND siren=$sirenPre");
if ($modeDebug) {
echo date ('Y/m/d - H:i:s') . " - Les dirigeants du siren $sirenPre non transmis ont été passés à inactifs (".$nbEtab[10]." déjà inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun dirigeants pour le siren $sirenPre en base précédement !".EOL;
}
/** Suppressions des jugements non transmis **/
if ($modifJug) {
$ret=$iDb->select('rncs_jugements', 'actif, count(*) as nb', "siren=$sirenPre GROUP BY actif ORDER BY actif ASC", false, MYSQL_ASSOC);
if (isset($ret[0])) {
$nbEtab=array();
foreach ($ret as $iEtab=>$etab)
$nbEtab[$etab['actif']]=$etab['nb'];
if ($actif<>0)
// Si le siren est encore actif et que le jugement n'est pas transmit, il doit s'agir d'une correction de jugement
$ret=$iDb->update('rncs_jugements', array('actif'=>0,'dateSuppr'=>$dateFlux), "actif>9 AND siren=$sirenPre");
else
$ret=$iDb->update('rncs_jugements', array('actif'=>1), "actif>9 AND siren=$sirenPre");
if ($modeDebug) {
echo date ('Y/m/d - H:i:s') . " - Les jugements du siren $sirenPre non transmis ont été passés à inactifs (".$nbEtab[10]." déjà inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun jugements pour le siren $sirenPre en base précédement !".EOL;
}
}
$modifEtab=$modifDir=$modifJug=false;
$table='rncs_entrep';
if (trim( substr($a, 11, 2))=='00') $actif=$actifIni;
elseif (trim( substr($a, 11, 2))=='99') $actif=0;
else die(date('Y/m/d - H:i:s') ." - ERREUR : Code ACTIF inconnu '".substr($a,11,2)."' dans le flux $fichier !".EOL);
$raisonSociale = trim( substr($a, 26, 90));
$numRC = trim( substr($a, 17, 9));
if ($numRC<>'' && substr($numRC,0,2)*1>=30)
$numRC2='19'.$numRC;
elseif ($numRC<>'' && substr($numRC,0,2)*1<30)
$numRC2='20'.$numRC;
else
$numRC2='';
$sexe = trim( substr($a, 189, 1));
$cj = trim( substr($a, 198, 4));
/** L'entreprise est elle une personne physique **/
$nomUsage=$nom=$prenom='';
if ($sexe=='M' || $sexe=='F' || substr($cj,0,1)*1==1) {
if (preg_match('/^(.*) n(?:é|e|è)e (.*)$/Uis', $raisonSociale, $matches)) {
$rs=trim($matches[1]);
$nomUsage=trim($matches[2]);
} else
$rs=$raisonSociale;
$tabNom=explode(' ', $rs);
for($i=0; isset($tabNom[$i]); $i++)
if ($tabNom[$i]==strtoupper($tabNom[$i]))
$nom.=$tabNom[$i].' ';
else
$prenom.=$tabNom[$i].' ';
}
$numGreffe=trim( substr($a, 13, 4))*1;
$tabUpdate=array(
'actif' => $actif,
'numGreffe' => $numGreffe, // Numéro de gestion (code greffe)
'triCode' => $iRncs->getCodeBodaccTribunal($numGreffe), // Numéro de gestion (code greffe)
'triId' => $iRncs->getIdTribunal($numGreffe), // Numéro de gestion (code greffe)
'numRC' => $numRC, // Ancien numéro de gestion (numéro RC, année sur 2)
'numRC2' => $numRC2, // Nouveau numéro de gestion (numéro RC, année sur 4)
'raisonSociale'=>$raisonSociale, // Nom 90 c
'nom' => $nom, // Nom 90 c
'prenom' => $prenom,
'nomUsage' => $nomUsage,
'sigle' => trim( substr($a, 116, 30)), // Sigle
'dateNaiss' => trim( substr($a, 146, 8))*1, // Date de naissance (SSAAMMJJ)
'lieuNaiss' => trim( substr($a, 154, 35)), // Lieu de naissance
'sexe' => $sexe, // Sexe (M/F)
'nationalite'=> trim( substr($a, 190, 3)), // Code nationalité
'pays'=>$iRncs->getPaysInpi(trim( substr($a, 190, 3))*1), // Code nationalité
'naf' => trim( substr($a, 193, 5)), // Code APE de l'entreprise
'cj' => $cj, // Code catégorie juridique
'capitalMontant'=>trim(substr($a, 202, 13))*1, // Capital (en unité)
'capitalDevise'=>trim(substr($a, 215, 3)), // Code devise du capital
'capitalDevIso'=>$iRncs->getDeviseInpi(trim(substr($a, 215, 3))*1), // Code devise du capital
'dateImma' => trim( substr($a, 218, 8))*1, // Date dimmatriculation SSAAMMJJ
'dateRad' => trim( substr($a, 226, 8))*1, // Date de radiation SSAAMMJJ
'capitalType'=> trim( substr($a, 234, 3)), // Code type de capital SOC ou VAR SOC = Capital social VAR = Capital variable
'capitalCent'=> trim( substr($a, 237, 2)), // Capital (centimes)
'provisoires'=> trim( substr($a, 239, 1)), // Données provisoires P ou blanc = P si données provisoires
);
$ret=$iDb->select('rncs_entrep', 'actif,numGreffe,numRC2,raisonSociale,nom,prenom,nomUsage,sigle,dateNaiss*1 AS dateNaiss,lieuNaiss,sexe,nationalite,naf,cj,capitalMontant,capitalDevIso,dateImma*1 AS dateImma,dateRad*1 AS dateRad,capitalType,capitalCent,provisoires', "siren=$siren", false, MYSQL_ASSOC);
if (is_array($ret) && count($ret)>0) {
$tabSelect=$ret[0];
$tabDiff=array_diff($tabSelect,$tabUpdate);
if (!$stock && count($tabDiff)>0) {
foreach ($tabDiff as $field=>$value)
$iDb->insert('rncs_modifs', array( 'siren'=>$siren,
'table'=>$table,
'champs'=>$field,
'valeur'=>$value,
'flux'=>$dateFlux));
}
}
$tabInsert=array_merge($tabUpdate, array( 'siren' => $siren,
'sirenValide'=> $iInsee->valideSiren($siren),
'flux' => $dateFlux,
'dateInsert'=> $dateInsert,
)
);
break;
case '02':
$nbLignes02++;
$table='rncs_etab';
/** Marquage des établissements à actif provisoire **/
if (!$modifEtab) {
$ret=$iDb->query("UPDATE $table SET actif=actif+10 WHERE siren=$siren");
if ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Les établissements du siren $siren sont OK pour la mise à jour ($ret).".EOL;
}
$modifEtab=true;
$nic=trim(substr($a, 11, 5));
if ($nic>=99990) {
$nbLignes02p++;
$table='rncs_etab_prov';
}
$tabAdresse=@$iInsee->structureVoie(trim( substr($a, 77, 4)).' '.
trim( substr($a, 81, 1)).' '.
trim( substr($a, 82, 30)));
$libVoie=@trim($tabAdresse['libVoie']);
if ($libVoie=='') $libVoie=@trim($tabAdresse['libVoie']);
if ($libVoie=='') $libVoie=@trim($tabAdresse['adrComp0'].' '.$tabAdresse['adrComp1']);
$tabUpdate=array(
'siege' => (trim( substr($a, 16, 1))*1)-8, // Code statut de létablissement 8=Etab. secondaire, 9=Siège
'enseigne' => trim( substr($a, 17, 60)), // Enseigne Alpha.
'adrNumVoie'=> trim( substr($a, 77, 4)), // N° dans la voie Num.
'adrIndRep' => trim( substr($a, 81, 1)), // BTQ Alpha.
'adrLibVoie'=> trim( substr($a, 82, 30)), // Type et libellé de voie Alpha.
'cp' => trim( substr($a, 112, 5)), // Code Postal Alpha.
'commune' => trim( substr($a, 117, 30)), // Commune Alpha.
'adrComp' => trim( substr($a, 147, 30)), // Complément d'adresse Alpha.
'naf' => trim( substr($a, 177, 5)), // APE de l'établissement Alpha.
);
if ($nic<99990) {
$ret=$iDb->select($table, 'siege,enseigne,adrNumVoie,adrIndRep,adrLibVoie,cp,commune,adrComp,naf', "siren=$siren AND nic=$nic", false, MYSQL_ASSOC);
if (is_array($ret) && count($ret)>0) {
$tabSelect=$ret[0];
/*if ($tabSelect['siege']==1 && ( // Si c'est un établissement siège...
($tabSelect['adrNumVoie']<>$tabUpdate['adrNumVoie'] && $tabSelect['adrNumVoie']>0) ||
($tabSelect['adrLibVoie']<>$tabUpdate['adrLibVoie'] && $tabSelect['adrLibVoie']<>'' ) ||
substr(''.$tabSelect['cp'],0,2)<>substr(''.$tabUpdate['cp'],0,2) ||
$tabSelect['commune']<>$tabUpdate['commune']) ) { // ... et que son adresse change
$table='rncs_etab_prov';
$iDb->update('rncs_etab', array('actif'=>1), "siren=$siren AND nic=$nic");
} else {*/
$tabDiff=array_diff($tabSelect,$tabUpdate);
if (!$stock && count($tabDiff)>0) {
foreach ($tabDiff as $field=>$value)
$iDb->insert('rncs_modifs', array( 'siren'=>$siren,
'nic'=>$nic,
'table'=>$table,
'champs'=>$field,
'valeur'=>$value,
'flux'=>$dateFlux));
}
//}
}
}
$tabUpdate['adrTypeVoie']=@$tabAdresse['typeVoie'];
$tabUpdate['adrVoie']=strtoupper($libVoie);
$tabUpdate['actif']=1;
$tabInsert=array_merge($tabUpdate, array( 'siren' => $siren,
'nic' => $nic,
'flux' => $dateFlux,
'dateInsert'=> $dateInsert,
)
);
break;
case '03':
$nbLignes03++;
$table='rncs_dirigeants';
if (!$modifDir) {
$ret=$iDb->query("UPDATE $table SET actif=actif+10 WHERE siren=$siren");
//if ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Les dirigeants du siren $siren sont OK pour la mise à jour ($ret).".EOL;
}
$modifDir=true;
// Type de dirigeant
$rsDir='';
$sirenDir=0;
$typeDir = trim( substr($a, 242, 2)); // PP = Personne physique, PM = Personne morale
$nomDir = trim( substr($a, 15, 60)); // Nom dusage ou raison sociale
$civilite=strtoupper(trim(substr($a, 238, 4))); // Code Civilité du dirigeant
if ($civilite<>'M' && $civilite<>'MME' && $civilite<>'MLLE' && $civilite<>'')
die(date('Y/m/d - H:i:s') ." - ERREUR : Civilité '$civilite' inconnue !".EOL);
$prenomDir=trim( substr($a, 75, 60));
$dateNaiss=trim(substr($a, 135, 8));
$lieuNaiss=trim(substr($a, 143, 35));
$codeFonction = trim(substr($a, 11, 4))*1;
if ($typeDir=='PM'){
$sirenDir = 0; // Chercher le siren du dirigeant
$rsDir = $nomDir;
$nomDir = trim( substr($a, 178, 60)); // Nom Représ. du dirigeant
/*if (strlen($rsDir)>2 && $civilite<>'' && $nomDir<>'' && $prenomDir<>'') {
$tabRet=@$iWs->searchNomAdr($rsDir,'','','',1,1,0,10,10,false,true);
$nbReps=$tabRet['results']['nbReponses'];
if ($nbReps>0) {
$tabSirenProbable=array();
foreach ($tabRet['results']['reponses'] as $iRep=>$entrep) {
//$sirenProbable=$entrep['Siren'];
$tabRet2=@$iWs->getDirigeants($entrep['Siren']);
foreach ($tabRet2['result'] as $iRep=>$dirig) {
//echo $entrep['Siren']." RECHERCHE : $civilite $nomDir $prenomDir".EOL;
//echo $entrep['Siren'].' on trouve : '.$dirig['Civilite'].' '.$dirig['Nom'].' '.$dirig['Prenom'].EOL;
if (strtoupper($civilite) == strtoupper($dirig['Civilite']) &&
strtoupper($nomDir) == strtoupper($dirig['Nom']) &&
strtoupper($prenomDir)== strtoupper($dirig['Prenom']))
$tabSirenProbable[]=$entrep['Siren'];
}
}
$tabSirenProbable=array_unique($tabSirenProbable);
if (count($tabSirenProbable)==1) {
$sirenDir=end($tabSirenProbable);
echo date('Y/m/d - H:i:s') ." - Ligne $nbLignes / $nbLignesTot - Siren $siren dirigé par $sirenDir...".EOL;
}
}
}*/
}
$depSte=floor($numGreffe/100);
if ($depSte>96) $depSte=floor($numGreffe/10);
$tabUpdate=array(
'actif' => 1,
'raisonSociale'=>$raisonSociale,
'typeDir' => $typeDir,
'dirRS' => $rsDir,
'dirSiren' => $sirenDir,
'adr_dep' => $depSte,
'nom' => $nomDir,
'fonction_code'=>$iRncs->getCodFctBodaccFctDir($codeFonction), // Code fonction du dirigeant
'fonction_lib'=>$iRncs->getLibFctDir($codeFonction),
'source' => 'imr',
'prenom' => $prenomDir, // Prénom du Dirigeant
'naissance_date'=>$dateNaiss, // Date de Naissance du dirigeant Alpha. SSAAMMJJ
'naissance_lieu'=>$lieuNaiss, // Lieu de Naissance
'civilite' => $civilite,
'naissance_nom'=>trim(substr($a, 244, 60)), // Nom de naissance du dirigeant
);
$ret=$iDb->select($table, 'count(*) as nb', "siren=$siren AND ".
"civilite='". $tabUpdate['civilite'] ."' AND ".
"nom='". addslashes($tabUpdate['nom']) ."' AND ".
"prenom='". addslashes($tabUpdate['prenom']) ."' AND ".
"naissance_nom='". addslashes($tabUpdate['naissance_nom']) ."' AND ".
"naissance_date='". $tabUpdate['naissance_date'] ."' AND ".
"fonction_code=". $iRncs->getCodFctBodaccFctDir($codeFonction), false, MYSQL_ASSOC);
/* if (is_array($ret) && count($ret)>0) {
$tabSelect=$ret[0];
$tabDiff=array_diff($tabSelect,$tabUpdate);
if (count($tabDiff)>0) {
foreach ($tabDiff as $field=>$value)
$iDb->insert('rncs_modifs', array( 'siren'=>$siren,
'table'=>$table,
'champs'=>$field,
'valeur'=>$value));
}
}
*/
$tabInsert=array_merge($tabUpdate, array( 'siren' => $siren,
'flux' => $dateFlux,
'dateInsert'=> $dateInsert,
)
);
if ($ret[0]['nb']==0) {
$iDb->insert($table, $tabInsert);
$nbInsert[3]++;
//if ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Insertion du dirigeant ". $tabUpdate['nom']." ".$tabUpdate['prenom'].", siren=$siren !".EOL;
} else {
$iDb->update($table, $tabUpdate, "siren=$siren AND ".
"civilite='". $tabUpdate['civilite'] ."' AND ".
"nom='". addslashes($tabUpdate['nom']) ."' AND ".
"prenom='". addslashes($tabUpdate['prenom']) ."' AND ".
"naissance_nom='". addslashes($tabUpdate['naissance_nom']) ."' AND ".
"naissance_date='". $tabUpdate['naissance_date'] ."' AND ".
"fonction_code=". $iRncs->getCodFctBodaccFctDir($codeFonction));
$nbUpdate[3]++;
//if ($modeDebug) echo date ('Y/m/d - H:i:s') . " - MAJ du dirigeant ". $tabUpdate['nom']." ".$tabUpdate['prenom'].", siren=$siren !".EOL;
}
break;
case '04':
$nbLignes04++;
$table='rncs_jugements';
/** Marquage des jugements à actif provisoire **/
if (!$modifJug) {
$ret=$iDb->query("UPDATE $table SET actif=actif+10 WHERE siren=$siren");
if ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Les jugements du siren $siren sont OK pour la mise à jour ($ret).".EOL;
}
$modifJug=true;
$type1=$type2='';
$adm1nom= trim( substr($a, 25, 60));
$adm2nom= trim( substr($a, 189, 60));
$codeJugement= trim( substr($a, 19, 2));
$codeFonction1= trim( substr($a, 21, 4));
$codeFonction2= trim( substr($a, 185, 4));
$type1=@$iRncs->getCodFctBodaccFctDir($codeFonction1);
if ($type1*1==1900) $type1='L';
$type2=@$iRncs->getCodFctBodaccFctDir($codeFonction2);
if ($type2*1==1900) $type2='L';
// Adresse 1
$adm1adr= trim ( preg_replace('/ +/', ' ',
substr($a, 85, 4).' '.
substr($a, 89, 1).' '.
substr($a, 90, 60))
);
$tabAdr1=@$iInsee->structureVoie($adm1adr);
$libVoie1=@trim($tabAdr1['libVoie']);
if ($libVoie1=='') $libVoie1=@trim($tabAdr1['libVoie']);
if ($libVoie1=='') $libVoie1=@trim($tabAdr1['adrComp0'].' '.$tabAdr1['adrComp1']);
// Adresse 2
$adm2adr= trim ( preg_replace('/ +/', ' ',
substr($a, 249, 4).' '.
substr($a, 253, 1).' '.
substr($a, 254, 60))
);
$tabAdr2=@$iInsee->structureVoie($adm2adr);
$libVoie2=@trim($tabAdr2['libVoie']);
if ($libVoie2=='') $libVoie2=@trim($tabAdr2['libVoie']);
if ($libVoie2=='') $libVoie2=@trim($tabAdr2['adrComp0'].' '.$tabAdr2['adrComp1']);
$dateEffet = trim( substr($a, 11, 8));
$tabUpdate=array(
'siren' => $siren,
'dateEffet' => $dateEffet, // Date d'effet
'codeJugement'=> $codeJugement, // Code Jugement
'actif' => 1,
'codeEven' => $iRncs->getCodeEvenJugementInpi($codeJugement),
'adm1codeFct' => $codeFonction1, // Admin. 1 : Code Fonction
'adm1type' => $type1, // Code type Mandataire
'adm1id' => $iRncs->getIdMandataireInpi($adm1nom),
'adm1nom' => $adm1nom, // Admin. 1 : NOM
'adm1adrNum' => trim( substr($a, 85, 4)), // Admin. 1 : N° dans la voie
'adm1adrInd' => trim( substr($a, 89, 1)), // Admin. 1 : BTQ
'adm1adrType' => @$tabAdr1['typeVoie'],
'adm1adrLibVoie'=> @$tabAdr1['libVoie'],
'adm1adrVoie' => trim( substr($a, 90, 60)), // Admin. 1 : Type et libellé de voie
'adm1adr1' => $adm1adr,
'adm1adrCP' => trim( substr($a, 150, 5)), // Admin. 1 : Code Postal
'adm1adrVille'=> trim( substr($a, 155, 30)), // Admin. 1 : Commune
'adm2codeFct' => $codeFonction2, // Admin. 2 : Code Fonction
'adm2type' => $type2,
'adm2id' => $iRncs->getIdMandataireInpi($adm2nom),
'adm2nom' => $adm2nom, // Admin. 2 : NOM
'adm2adrNum' => trim( substr($a, 249, 4)), // Admin. 2 : N° dans la voie
'adm2adrInd' => trim( substr($a, 253, 1)), // Admin. 2 : BTQ
'adm2adrType' => @$tabAdr2['typeVoie'],
'adm2adrLibVoie'=> @$tabAdr2['libVoie'],
'adm2adrVoie' => trim( substr($a, 254, 60)), // Admin. 2 : Type et libellé de voie
'adm2adr1' => $adm2adr,
'adm2adrCP' => trim( substr($a, 314, 5)), // Admin. 2 : Code Postal
'adm2adrVille'=> trim( substr($a, 319, 30)), // Admin. 2 : Commune
'flux' => $dateFlux,
);
$tabInsert=$tabUpdate;
break;
case '05': // Inchangé Coface => Infogreffe
$nbLignes05++;
$table='rncs_even';
$tabInsert=array(
'siren' => $siren,
'codeInterne'=> trim( substr($a, 11, 16)), // Code Interne
'dateDepot' => trim( substr($a, 27, 8)), // Date du dépôt
'codeEven' => trim( substr($a, 35, 10)), // Code évènement
'flux' => $dateFlux,
);
break;
default:
die(date('Y/m/d - H:i:s') ." - ERREUR : Code Enregistrement '$codeEnr' inconnu !".EOL);
break;
}
if ($table<>'rncs_dirigeants') {
if (!$iDb->insert($table, $tabInsert)) {
if (mysql_errno()==1062 && ($table=='rncs_entrep' || $table=='rncs_etab' || $table=='rncs_jugements')) {
$where="siren=$siren";
if ($table=='rncs_etab') $where.=" AND nic=$nic";
elseif ($table=='rncs_jugements') $where.=" AND dateEffet=$dateEffet
AND codeJugement=$codeJugement";
if (!$iDb->update($table, $tabUpdate, $where)) {
echo date('Y/m/d - H:i:s') ." - ERREUR : $where, Erreur mysql sur la table '$table' ". mysql_errno() .' - '. mysql_error().EOL;
print_r($tabInsert);
die();
} else $nbUpdate[$codeEnr*1]++;
} elseif (!(mysql_errno()==1062 && ($table=='rncs_jugements' || $table=='rncs_even' || $table=='rncs_etab_prov'))) {
echo date('Y/m/d - H:i:s') ." - ERREUR : Siren=$siren, Erreur mysql sur la table '$table' ". mysql_errno() .' - '. mysql_error().EOL;
print_r($tabInsert);
die();
} elseif (mysql_errno()==1062 && ($table=='rncs_jugements' || $table=='rncs_even' || $table=='rncs_etab_prov')) {
$nbUpdate[$codeEnr*1]++;
}
} else $nbInsert[$codeEnr*1]++;
}
if ($nbLignes%100000==0) {
echo date('Y/m/d - H:i:s'). " - Fichier n°$iFic, $fichier : $nbLignes lignes, $siren $codeEnr : $nbLignes01 entrep, $nbLignes02 étab, $nbLignes03 dir, $nbLignes04 jug, $nbLignes05 actes".EOL;
}
if ($nbLignes==0 || $nbLignes%10000==0) {
$fpT=fopen('/tmp/'.basename($argv[0]), 'w');
fwrite($fpT, ''.$fichier.';'.$jourStock.';'.$nbLignes);
fclose($fpT);
}
$a = fgets($fp, 4096);
$sirenPre=$siren;
}
fclose($fp);
/** Passage à Actif/Inactif des établissements précédents **/
$ret=$iDb->select('rncs_etab', 'actif, COUNT(*) AS nb', "siren=$sirenPre GROUP BY actif ORDER BY actif ASC", false, MYSQL_ASSOC);
if (isset($ret[0])) {
$nbEtab=array();
foreach ($ret as $iEtab=>$etab)
$nbEtab[$etab['actif']]=$etab['nb'];
$ret=$iDb->update('rncs_etab', array('actif'=>0,'dateFermeture'=>$dateFlux), "actif>9 AND siren=$sirenPre");
if ($modeDebug) {
echo date ('Y/m/d - H:i:s') . " - Les établissements du siren $sirenPre non transmis ont été passés à inactifs (".$nbEtab[10]." déjà inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun établissement pour le siren $sirenPre en base précédement !".EOL;
/** Passage à Actif/Inactif des dirigeants précédents **/
if ($modifDir) {
$ret=$iDb->select('rncs_dirigeants', 'actif, count(*) as nb', "siren=$sirenPre GROUP BY actif ORDER BY actif ASC", false, MYSQL_ASSOC);
if (isset($ret[0])) {
$nbEtab=array();
foreach ($ret as $iEtab=>$etab)
$nbEtab[$etab['actif']]=$etab['nb'];
$ret=$iDb->update('rncs_dirigeants', array('actif'=>0,'dateFin'=>$dateFlux), "actif>9 AND siren=$sirenPre");
if ($modeDebug) {
echo date ('Y/m/d - H:i:s') . " - Les dirigeants du siren $sirenPre non transmis ont été passés à inactifs (".$nbEtab[10]." déjà inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun dirigeants pour le siren $sirenPre en base précédement !".EOL;
}
/** Suppressions des jugements non transmis **/
if ($modifJug) {
$ret=$iDb->select('rncs_jugements', 'actif, count(*) as nb', "siren=$sirenPre GROUP BY actif ORDER BY actif ASC", false, MYSQL_ASSOC);
if (isset($ret[0])) {
$nbEtab=array();
foreach ($ret as $iEtab=>$etab)
$nbEtab[$etab['actif']]=$etab['nb'];
if ($actif<>0)
// Si le siren est encore actif et que le jugement n'est pas transmit, il doit s'agir d'une correction de jugement
$ret=$iDb->update('rncs_jugements', array('actif'=>0,'dateSuppr'=>$dateFlux), "actif>9 AND siren=$sirenPre");
else
$ret=$iDb->update('rncs_jugements', array('actif'=>1), "actif>9 AND siren=$sirenPre");
if ($modeDebug) {
echo date ('Y/m/d - H:i:s') . " - Les jugements du siren $sirenPre non transmis ont été passés à inactifs (".$nbEtab[10]." déjà inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun jugements pour le siren $sirenPre en base précédement !".EOL;
}
}
$message.=date('Y/m/d - H:i:s'). " - Récapitulatif du chargement n°$iFic, $fichier de $nbLignesTot lignes :".EOL;
$message.=date('Y/m/d - H:i:s'). " - Lignes 01 : $nbLignes01 entreprises (".$nbInsert[1]." ajouts et ".$nbUpdate[1]." modifs)".EOL;
$message.=date('Y/m/d - H:i:s'). " - Lignes 02 : $nbLignes02 établissements actifs dont $nbLignes02p provisoires (".$nbInsert[2]." ajouts et ".$nbUpdate[2]." modifs)".EOL;
$message.=date('Y/m/d - H:i:s'). " - Lignes 03 : $nbLignes03 dirigeants actifs (".$nbInsert[3]." ajouts et ".$nbUpdate[3]." modifs)".EOL;
$message.=date('Y/m/d - H:i:s'). " - Lignes 04 : $nbLignes04 jugements (".$nbInsert[4]." ajouts et ".$nbUpdate[4]." déjà en base)".EOL;
$message.=date('Y/m/d - H:i:s'). " - Lignes 05 : $nbLignes05 actes/évènements (".$nbInsert[5]." ajouts et ".$nbUpdate[5]." déjà en base)".EOL;
$message.=date('Y/m/d - H:i:s'). " - Fin de traitement du fichier $fichier.".EOL;
$tabInsert=array( 'nomFichier' => $fichier,
'dateFlux' => $dateFlux,
'dateDispo' => $dateDispo,
'taille' => filesize($fichierAvecRep),
'dateChargementDeb' => $dateInsert,
'dateChargementFin' => date('YmdHis'),
'stock' => $stock,
'nbLignesTot' => $nbLignesTot,
'nbLignes1' => $nbLignes01,
'nbLignes1a' => $nbInsert[1],
'nbLignes2' => $nbLignes02,
'nbLignes2a' => $nbInsert[2],
'nbLignes2p' => $nbLignes02p,
'nbLignes3' => $nbLignes03,
'nbLignes3a' => $nbInsert[3],
'nbLignes4' => $nbLignes04,
'nbLignes4a' => $nbInsert[4],
'nbLignes5' => $nbLignes05,
'nbLignes5a' => $nbInsert[5],
'dateInsert' => date('YmdHis'),
);
if (!$stock && count($tabFichLigneCmd)==0) {
if (bzip2(RNCS_IMR_FTP_DIR.$fichier, RNCS_IMR_BACKUP_DIR.$fichier)) {
unlink(RNCS_IMR_FTP_DIR.$fichier);
$message.=date ('Y/m/d - H:i:s') . " - Le fichier n°$iFic, $fichier vient d'être historisé.".EOL;
}
}
echo $message;
$iDb->insert('rncs_chargements', $tabInsert);
echo mysql_errno();
echo mysql_error();
sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', 'Chargement INPI IMR', $message);
//die();
}
if ($stock) {
/**
** Fermeture des entreprises non communiquées si stock
**/
// Supprimer ces 2 lignes quand tout sera OK pour le chargement d'un stock !
echo date('Y/m/d - H:i:s') ." - Faire une sauvegarde des tables avant toute autre opération !";
$saisie = trim(strtoupper(fgets(STDIN)));
/** Passage des établissements encore actifs à inactif pour les sociétés non transmisses dans le stock
**/
$ret=$iDb->select('rncs_entrep e, rncs_etab t', 't.id, e.siren, t.nic, t.siege', 'e.siren=t.siren AND e.actif=1 AND t.actif=1', false, MYSQL_ASSOC);
$nb=count($ret);
echo date ('Y/m/d - H:i:s')." - Il y a $nb établissements à passer inactifs...".EOL;
foreach ($ret as $tabEtab)
$iDb->update('rncs_etab', array('actif'=>0, 'dateFermeture'=>$dateFlux), 'id='.$tabEtab['id']);
/** Passage à inactif des sociétés non transmisses dans le stock
**/
$ret=$iDb->select('rncs_entrep', 'count(*) AS nb', 'actif=1', false, MYSQL_ASSOC);
$nb=$ret[0]['nb'];
echo date ('Y/m/d - H:i:s')." - Passage à l'état inactif des $nb entreprises non livrées dans le stock...".EOL;
$sql="UPDATE rncs_entrep SET actif=0, dateFer=$dateFlux WHERE actif=1;";
$iDb->query($sql, true);
/** Confirmation à actif des sociétés du stock
**/
$ret=$iDb->select('rncs_entrep', 'count(*) as nb', 'actif=11', false, MYSQL_ASSOC);
$nb=$ret[0]['nb'];
echo date ('Y/m/d - H:i:s')." - Confirmation à l'état actif des $nb entreprises chargées...".EOL;
$sql="UPDATE rncs_entrep SET actif=1 WHERE actif=11;";
$iDb->query($sql, true);
}
echo date ('Y/m/d - H:i:s') . " - Fin du traitement de chargement des flux RNCS IMR de l'INPI.".EOL;
die();
?>