batch/1.1/old/getInpi.php

776 lines
35 KiB
PHP
Raw Normal View History

#!/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<EFBFBD> au maximum)
-l:XXXX Reprendre <EFBFBD> partir de la ligne XXXX
-s:AAAAMMJJ Jour de l'extraction du stock de tous les <EFBFBD>tablissements actifs
";/*
-p Chargement d'une ancienne notice (pas de modification de la zone ACTIF chargement des zones diff<EFBFBD>rentes)
-u Ne pas mettre <EFBFBD> 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'<27>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 <20> 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 <20> 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 <20> 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<61> 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<6E>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<70>c<EFBFBD>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 <20>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 <20> Actif/Inactif des <20>tablissements pr<70>c<EFBFBD>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 <20>tablissements du siren $sirenPre non transmis ont <20>t<EFBFBD> pass<73>s <20> inactifs (".$nbEtab[10]." d<>j<EFBFBD> inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun <20>tablissement pour le siren $sirenPre en base pr<70>c<EFBFBD>dement !".EOL;
/** Passage <20> 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 <20>t<EFBFBD> pass<73>s <20> inactifs (".$nbEtab[10]." d<>j<EFBFBD> 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<70>c<EFBFBD>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 <20>t<EFBFBD> pass<73>s <20> inactifs (".$nbEtab[10]." d<>j<EFBFBD> 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<70>c<EFBFBD>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(?:<3A>|e|<7C>)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<75>ro de gestion (code greffe)
'triCode' => $iRncs->getCodeBodaccTribunal($numGreffe), // Num<75>ro de gestion (code greffe)
'triId' => $iRncs->getIdTribunal($numGreffe), // Num<75>ro de gestion (code greffe)
'numRC' => $numRC, // Ancien num<75>ro de gestion (num<75>ro RC, ann<6E>e sur 2)
'numRC2' => $numRC2, // Nouveau num<75>ro de gestion (num<75>ro RC, ann<6E>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<69>
'pays'=>$iRncs->getPaysInpi(trim( substr($a, 190, 3))*1), // Code nationalit<69>
'naf' => trim( substr($a, 193, 5)), // Code APE de l'entreprise
'cj' => $cj, // Code cat<61>gorie juridique
'capitalMontant'=>trim(substr($a, 202, 13))*1, // Capital (en unit<69>)
'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 d<>immatriculation 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<6E>es provisoires P ou blanc = <20>P<EFBFBD> si donn<6E>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 <20>tablissements <20> 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 <20>tablissements du siren $siren sont OK pour la mise <20> 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<><6C>tablissement 8=Etab. secondaire, 9=Si<53>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<6C> 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<70>ment d'adresse Alpha.
'naf' => trim( substr($a, 177, 5)), // APE de l'<27>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 <20>tablissement si<73>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 <20> 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 d<>usage ou raison sociale
$civilite=strtoupper(trim(substr($a, 238, 4))); // Code Civilit<69> du dirigeant
if ($civilite<>'M' && $civilite<>'MME' && $civilite<>'MLLE' && $civilite<>'')
die(date('Y/m/d - H:i:s') ." - ERREUR : Civilit<69> '$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<70>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<69> 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<50>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 <20> 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 <20> 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<6C> 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<6C> 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<6E> 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<EFBFBD>t
'codeEven' => trim( substr($a, 35, 10)), // Code <20>v<EFBFBD>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 <20>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 <20> Actif/Inactif des <20>tablissements pr<70>c<EFBFBD>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 <20>tablissements du siren $sirenPre non transmis ont <20>t<EFBFBD> pass<73>s <20> inactifs (".$nbEtab[10]." d<>j<EFBFBD> inactifs et ".$nbEtab[11]." actifs).".EOL;
print_r($nbEtab);
}
} elseif ($modeDebug) echo date ('Y/m/d - H:i:s') . " - Aucun <20>tablissement pour le siren $sirenPre en base pr<70>c<EFBFBD>dement !".EOL;
/** Passage <20> Actif/Inactif des dirigeants pr<70>c<EFBFBD>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 <20>t<EFBFBD> pass<73>s <20> inactifs (".$nbEtab[10]." d<>j<EFBFBD> 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<70>c<EFBFBD>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 <20>t<EFBFBD> pass<73>s <20> inactifs (".$nbEtab[10]." d<>j<EFBFBD> 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<70>c<EFBFBD>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 <20>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<EFBFBD> en base)".EOL;
$message.=date('Y/m/d - H:i:s'). " - Lignes 05 : $nbLignes05 actes/<2F>v<EFBFBD>nements (".$nbInsert[5]." ajouts et ".$nbUpdate[5]." d<>j<EFBFBD> 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'<27>tre historis<69>.".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<EFBFBD>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<6F>ration !";
$saisie = trim(strtoupper(fgets(STDIN)));
/** Passage des <EFBFBD>tablissements encore actifs <EFBFBD> inactif pour les soci<EFBFBD>t<EFBFBD>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 <20>tablissements <20> passer inactifs...".EOL;
foreach ($ret as $tabEtab)
$iDb->update('rncs_etab', array('actif'=>0, 'dateFermeture'=>$dateFlux), 'id='.$tabEtab['id']);
/** Passage <EFBFBD> inactif des soci<EFBFBD>t<EFBFBD>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 <20> l'<27>tat inactif des $nb entreprises non livr<76>es dans le stock...".EOL;
$sql="UPDATE rncs_entrep SET actif=0, dateFer=$dateFlux WHERE actif=1;";
$iDb->query($sql, true);
/** Confirmation <EFBFBD> actif des soci<EFBFBD>t<EFBFBD>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 <20> l'<27>tat actif des $nb entreprises charg<72>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();
?>