#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini [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 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é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 d’usage 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(); ?>