#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini "'",'&'=>'&', '²'=>'²', "\r"=>'', "\n"=>'', "\t"=>'')); if ($lon==-1) return $txt.$sep; elseif ($sep=='') return sprintf("%-".$lon.'.'.$lon."s", $txt); else return trim(sprintf("%-".$lon.'.'.$lon."s", $txt)).$sep; } function choixAdr($bodEtab, $bodSiege, $insee) { if (strlen(trim($bodSiege))>0) $adr=trim($bodSiege); elseif (strlen(trim($bodEtab))>0) $adr=trim($bodEtab); else $adr=''; if (isset($insee) && trim($insee)<>'') return $insee; else return $adr; } error_reporting(E_ALL); include_once(FWK_PATH.'common/chiffres.php'); include_once(FWK_PATH.'common/dates.php'); include_once(INCLUDE_PATH.'partenaires/classMBilans.php'); include_once(INCLUDE_PATH.'insee/classMInsee.php'); include_once(INCLUDE_PATH.'scores/classMFinancier.php'); include_once(INCLUDE_PATH.'scores/classMScores.php'); include_once(FWK_PATH.'mail/sendMail.php'); include_once(INCLUDE_PATH.'partenaires/classMLiens.php'); global $iDb2,$iDb3,$iLiens,$iBilan,$iInsee; $iDb=new WDB('jo'); $iDb2=new WDB('historiques'); $iDb3=new WDB('tmp'); $iInsee=new MInsee(); $iBilan=new MBilans(0); $iLiens=new MLiens(0); $iCotation=new ICotation(array()); $presta=false; $date=date('Ymd'); $tabFichier=array(); $nbSirValides=$nbSirInvalides=0; $nbNicValides=$nbNicInvalides=0; $nbInsert=0; $strInfoScript='Usage : '.basename($argv[0]). " [OPTION] [Stock Adecco à charger] Traitement spécifique Adecco Diffusion des Mise à jour des champs complexes de la table 'etablissement_act' et génération du fichier spécifique Véolia. Options : -1 Prestation 1 -2 Prestation 2 -v Verbosité maximum "; $argv=$_SERVER['argv']; if ($_SERVER['argc']>1) { for ($i=1; isset($argv[$i]); $i++) { if (substr($argv[$i],0,1)=='-') { switch (substr($argv[$i],1,1)) { case '1': $presta=1; break; case '2': $presta=1; break; case '-': case '?': die($strInfoScript); break; default: die('Option '. $argv[$i] . " inconnue !\n"); break; } } else $tabFichier[]=$argv[$i]; } } if (count($tabFichier)==1) { /* Chargement du fichier Entrant adecco */ $nomFichier=$tabFichier[0]; $fp=fopen($nomFichier, 'r'); if (!$fp) { echo date ('Y/m/d - H:i:s')." - Erreur : Impossible d'ouvrir le fichier Adecco à traiter ('".$nomFichier."') !".EOL; echo date ('Y/m/d - H:i:s')." - Fin du traitement".EOL; die(); } $nbLignes=0; // Nombre de ligne du fichier while (!feof($fp)) { $nbLignes++; $a = trim(fgets($fp, 4096)); } echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier '$nomFichier' ($nbLignes lignes à traiter).".EOL; rewind($fp); /** Traitement de la 1ère ligne **/ $ligne = trim(fgets($fp, 4096)); if ($ligne<>'adREF|adSIREN|adNIC|adRAISON_SOCIALE|adADRESSE|adFILLER|adCP|adNAF2008|adTRANCHE_EFFECTIF|adCEDEX|adCODE_COMMUNE|adVILLE|adVILLE_CDX|ADSE') die('Première ligne du flux Adecco innatendue !'.EOL); $dateInsert=date('YmdHis'); $nbLignesLues=1; while (!feof($fp)) { $nbLignesLues++; $a=array(); $ligne = trim(fgets($fp, 4096)); $tabEtab=explode('|', $ligne); $a['adREF'] = $tabEtab[0]; $a['adSIREN'] = $tabEtab[1]; $a['adNIC'] = $tabEtab[2]; $a['adRAISON_SOCIALE'] = $tabEtab[3]; $a['adADRESSE'] = $tabEtab[4]; $a['adFILLER'] = $tabEtab[5]; $a['adCP'] = $tabEtab[6]; $a['adNAF2008'] = $tabEtab[7]; $a['adTRANCHE_EFFECTIF']= $tabEtab[8]; $a['adCEDEX'] = $tabEtab[9]; $a['adCODE_COMMUNE'] = $tabEtab[10]; $a['adVILLE'] = $tabEtab[11]; $a['adVILLE_CDX'] = $tabEtab[12]; $a['ADSE'] = $tabEtab[13]; if (!$iInsee->valideSiren($a['adSIREN'])) { $a['sirenValide']=0; $a['nicValide']=0; $nbNicInvalides++; $nbSirInvalides++; } else { $a['sirenValide']=1; $nbSirValides++; if (!$iInsee->valideSiren($a['adSIREN'], $a['adNIC'])) { $a['nicValide']=0; $nbNicInvalides++; } else { $a['nicValide']=1; $nbNicValides++; } } $a['siret']=''.$tabEtab[1].''.$tabEtab[2]; if ($iDb3->insert('adecco_in', $a)) $nbInsert++; else die(mysql_error().EOL); } echo date ('Y/m/d - H:i:s')." - Fin du traitement du fichier '$nomFichier' ($nbLignes/$nbLignesLues lignes traitées dont $nbInsert insérées).".EOL; } if ($presta<>1 && $presta<>2) { if (count($tabFichier)<>1) echo date('Y/m/d - H:i:s') ." - Prestation '$presta' inconnue !".EOL; die(); } $fp=fopen('/home/data/clients/adecco/adecco'.$presta."_$date.txt",'w'); // Ligne d'entête fwrite($fp, "adSIREN|adNIC|adREF|adRAISON_SOCIALE|adADRESSE|adFILLER|adCP|adVILLE|SIREN|NIC|L1_NOMEN|L2_COMP|L3_CADR|L4_VOIE|L5_DISP|L6_POST|L7_ETRG|ZR1|RPET|DEPET|ARRONET|CTONET|COMET|LIBCOM|DU|TU|UU|CODPOS|ZR2|TCD|ZEMET|CODEVOIE|NUMVOIE|INDREP|TYPVOIE|LIBVOIE|ENSEIGNE|APET700|ZR3|SIEGE|TEFET|EFETCENT|ORIGINE|DCRET|MMINTRET|ACTIVNAT|LIEUACT|ACTISURF|SAISONAT|MODET|DAPET|DEFET|EXPLET|PRODPART|AUXILT|EAEANT|EAEAPET|EAESEC1T|EAESEC2T|NOMEN|SIGLE|CIVILITE|CJ|TEFEN|EFENCENT|APEN700|ZR4|APRM|TCA|RECME|DAPEN|DEFEN|DCREN|MMINTREN|MONOACT|MODEN|EXPLEN|EAEANN|EAEAPEN|EAESEC1N|EAESEC2N|EAESEC3N|EAESEC4N|NBETEXPL|TCAEXP|REGIMP|MONOREG|RPEN|DEPCOMEN|sdActif|sdEvenDate|sdEven|sdNomPrenomDir|sdYP|sdPctAct|sdSirenAct|sdNomAct".EOL); //exporteAdecco('32392385400059','ref',$fp, $presta,'','','','',''); //die(); if ($presta==1) { //$nbRows=$iDb->select('tmp.adecco', 'REF, SIREN, NIC, siret, RAISON_SOCIALE, ADRESSE, FILLER, CP, VILLE', "nafet IN('7810Z', '7820Z', '7830Z')", true, MYSQL_ASSOC, true); $nbRows=$iDb->select('tmp.adecco_in', 'ID_LEA AS REF, SIREN, NIC, CONCAT(SIREN,NIC) AS siret, RAISON_SOCIALE, ADRESSE1 AS ADRESSE, ADRESSE2 AS FILLER, CODE_POSTAL AS CP, VILLE/*CODE_COMMUNE, CEDEX*/', '1', true, MYSQL_ASSOC, true); echo date('Y/m/d - H:i:s') ." - Il y a $nbRows établissements Adecco en Presta $presta...".EOL; while($tabTmp=$iDb->fetch(MYSQL_ASSOC)) { exporteAdecco($tabTmp['siret'],$tabTmp['REF'],$fp, $presta, $tabTmp['RAISON_SOCIALE'], $tabTmp['ADRESSE'], $tabTmp['FILLER'], $tabTmp['CP'], $tabTmp['VILLE']); } /** @toto Presta 1 : - enregistrer chaque ligne fourni en bdd - vérifier les fusions */ } else { /** @todo - Non présents dans le fichier source Adecco - Non Fournis dans le fichier principal (Déménagements, et affectation de NIC valide) etab >= à 10 salariés, France entière avec Corse et les DOM TOM. Les sociétés étrangères immatriculées au RCS sont à exclure. Les 2 NAF suivants sont à exclure 6820B = SCI/location de terrains 7020Z = Holding */ $iDb->query('SELECT siret FROM tmp.`adecco_in` UNION SELECT siretTrouve AS siret FROM tmp.`adecco_out`;'); echo mysql_error().EOL; if (mysql_errno()>0) die(); $tabSiret=array(); while($tabTmp=$iDb->fetch(MYSQL_ASSOC)) { $tabSiret[]=$tabTmp['siret']; } $tabSiret=array_unique($tabSiret); $nbRows=count($tabSiret); echo date('Y/m/d - H:i:s') ." - Il y a $nbRows siret Adecco uniques à exclure en Presta $presta...".EOL; $nbRows=$iDb->select('jo.etablissements_act', "'' AS REF, siren AS SIREN, nic AS NIC, concat(siren, nic) AS siret", "cj NOT BETWEEN 3000 AND 3999 AND ape_etab NOT IN ('6820B','7020Z') AND eff_etab>9", true, MYSQL_ASSOC, true); // "siret NOT IN(SELECT CONCAT(SIREN,NIC) AS siret FROM tmp.adecco_echantillon)", true, MYSQL_ASSOC, true); echo date('Y/m/d - H:i:s') ." - Il y a $nbRows établissements Adecco en Presta $presta...".EOL; echo mysql_error().EOL; if (mysql_errno()>0) die(); while($tabTmp=$iDb->fetch(MYSQL_ASSOC)) { if (!in_array($tabTmp['siret'], $tabSiret)) exporteAdecco($tabTmp['siret'],$tabTmp['REF'],$fp, $presta); } } echo date('Y/m/d - H:i:s') ." - Fin de la prestation Adecco en Presta $presta.".EOL; fclose($fp); die(); function exporteAdecco($siret,$ref,$fp=false, $presta, $RAISON_SOCIALE='', $ADRESSE='', $FILLER='', $CP='', $VILLE='') { global $iDb2,$iDb3,$iLiens,$iBilan,$iInsee; $siren=substr($siret,0,9); $nic=substr($siret,9,5); $strIdentite=" SIREN,NIC,NOM AS L1_nomen,NOM2 AS L2_ComP,ADR_COMP AS L3_cadr, NULL AS L4_VOIE, ADR_DISTSP AS L5_disp, NULL AS L6_POST, PAYS AS L7_ETRG, '' AS ZR1, NULL AS RPET, ADR_DEP AS insdepet, NULL AS ARRONET, NULL AS CTONET, ADR_COM AS comet, ADR_LIBCOM AS libcom, NULL AS DU, NULL AS TU, NULL AS UU, ADR_CP AS codpos, '' AS ZR2, NULL AS TCD, NULL AS ZEMET, CODEVOIE, ADR_NUMVOIE AS NUMVOIE, ADR_BTQ AS INDREP, ADR_TYPVOIE AS TYPVOIE, ADR_LIBVOIE AS LIBVOIE, ENSEIGNE, APE_ETAB AS apet700, '' AS ZR3, SIEGE, TEFF_ET AS tefet, EFF_ET AS efetcent, ORIGINE, DCRET, NULL AS MMINTRET, ACTIVNAT, LIEUACT, ACTISURF, SAISONAT, MODET, DAPET, DEFET, EXPLET, PRODPART, AUXILT, NULL AS EAEANT, NULL AS EAEAPET, NULL AS EAESEC1T, NULL AS EAESEC2T, NOM AS nomen, SIGLE, CIVILITE, CJ, TEFF_ENT AS tefen, EFF_ENT AS efencent, APE_ENT AS insapen700, '' AS ZR4, APRM, TCA, NULL AS RECME, DAPEN, DEFEN, DCREN,NULL AS MMINTREN, MONOACT, MODEN, EXPLEN, NULL AS EAEANN, NULL AS EAEAPEN, NULL AS EAESEC1N, NULL AS EAESEC2N, NULL AS EAESEC3N, NULL AS EAESEC4N, NBETAB AS nbETEXPL, TCAEXP, REGIMP, MONOREG, NULL AS RPEN,NULL AS DEPCOMEN, ACTIF AS sdActif"; $strNotice=" insSIREN AS SIREN, insNIC AS NIC, insL4_VOIE AS L4_VOIE, insL6_POST AS L6_POST, insRPET AS RPET, insDEPCOMEN AS DEPCOMEN, insRPEN AS RPEN, insARRONET AS ARRONET, insCTONET AS CTONET, insTCD AS TCD, insZEMET AS ZEMET, insDU AS DU, insTU AS TU, insUU AS UU, insMMINTRET AS MMINTRET, insMMINTREN AS MMINTREN, insRECME AS RECME, insEAEANT AS EAEANT, insEAEAPET AS EAEAPET, insEAESEC1T AS EAESEC1T, insEAESEC2T AS EAESEC2T, insEAEANN AS EAEANN, insEAEAPEN AS EAEAPEN, insEAESEC1N AS EAESEC1N, insEAESEC2N AS EAESEC2N, insEAESEC3N AS EAESEC3N, insEAESEC4N AS EAESEC4N"; $ret=$iDb2->select('insee.identite', $strIdentite, "SIREN=$siren AND NIC=$nic", false); $ret2=$iDb2->select('insee.insee_notices', $strNotice, "insSIREN=$siren AND insNIC=$nic", false, MYSQL_ASSOC); //echo '2:'.mysql_error().EOL; //$ret=$iDb2->select('historiques.notice_201012', 'insSIREN,insNIC,insL1_nomen,insL2_ComP,insL3_cadr,insL4_VOIE,insL5_disp,insL6_post,insL7_ETRG,insZR1,insrpet,insdepet,insarronet,insctonet,inscomet,inslibcom,insdu,insTu,insuu,inscodpos,insZR2,instcd,inszemet,inscodevoie,insNUMVOIE,insINDREP,insTYPVOIE,insLIBVOIE,insENSEIGNE,insapet700,insZR3,inssiege,instefet,insefetcent,insorigine,insdcRET,insMMIntrET,insACTIVNAT,insLIEUACT,insACTISURF,inssaisonat,insMODET,insdapet,insdefet,insEXPLET,insProdpart,insauxilt,inseaeant,inseaeapet,inseaesec1t,inseaesec2t,insnomen,inssigle,insCIVILITE,inscj,instefen,insefencent,insapen700,insZR4,insaprm,instca,insrecme,insdapen,insdefen,insdcren,insmmintren,insmonoact,insMODEN,insEXPLEN,inseaeann,insEAEapen,inseaesec1n,inseaesec2n,inseaesec3n,inseaesec4n,insnbETEXPL,instcaexp,insregimp,insmonoreg,insrpen,insdepcomen', "siret='$siret'", false); $even=$evenDate=$nomPrenomDir=$YP=$pctAct=$sirenAct=$nomAct=''; $strOut="$siren|$nic|$ref|$RAISON_SOCIALE|$ADRESSE|$FILLER|$CP|$VILLE|"; if (count($ret)==0) { /*$actif=0; $strOut.="$siren|$nic|"; for($i=0;$i<79;$i++) $strOut.='|';*/ $even='Siren/Siret invalide'; // Recherche par IDENTITE $deb=0;$nbRep=20;$maxRep=20;$siege=$actif=''; $nomIn=$RAISON_SOCIALE; $adrIn=$ADRESSE; //$FILLER $cpIn=$CP; $comIn=$VILLE; $res=@$iInsee->rechercheEtab($nomIn, $adrIn, $cpIn, $comIn, $siege, $actif, $deb, $nbRep, $maxRep, false, true); if ($res['nbReponses']>0) { $levMin=1; $trouve=false; foreach ($res['reponses'] as $i=>$etab) { //die(print_r($etab)); $size=strlen($nomIn.$etab['Nom'].$adrIn.$etab['Adresse'].$cpIn.$etab['CP'].$comIn.$etab['Ville']); $levNom=levenshtein($nomIn,$etab['Nom']); $levAdr=levenshtein($adrIn,$etab['Adresse']); $levCP =levenshtein($cpIn ,$etab['CP']); $levCom=levenshtein($comIn,$etab['Ville']); $levTot=$levNom+$levAdr+$levCP+$levCom; $levPct=$levTot/$size; if ($levPct<0.15 && $levPct<$levMin) { $trouve=true; $siret=''.$etab['Siren'].''.$etab['Nic']; $levMin=$levPct; } } if ($trouve) { $siren=substr($siret,0,9); $nic=substr($siret,9,5); $ret=$iDb2->select('insee.identite', $strIdentite, "SIREN=$siren AND NIC=$nic", false); $ret2=$iDb2->select('insee.insee_notices', $strNotice, "insSIREN=$siren AND insNIC=$nic", false, MYSQL_ASSOC); } } } if (count($ret)==0) { $actif=0; $strOut.="$siren|$nic|"; for($i=0;$i<80;$i++) $strOut.='|'; $even='Siren/Siret inexistant'; } else { $tmp=$ret[0]; $actif=$tmp['sdActif']*1; $nouveauSiret=''; $tabAncienSiret=array(); $nbDem=0; while ($actif==0) { if ($presta==2) return; // Recherche du nouveau siret //echo "DEB Recherche du nouveau siret pour $siren $nic actif=$actif, nbDem=$nbDem, nouveauSiret=$nouveauSiret/"; $tabAssoc=@$iInsee->getSiretAssoc($siren, $nic); $nouveauSiret=@trim(''.$tabAssoc['suc']['siren']. $tabAssoc['suc']['nic']); @$tabAncienSiret[$nouveauSiret]++; if($nouveauSiret<>'' && @$tabAncienSiret[''.$siren.$nic]<=2) { $nbDem++; $siren=substr($nouveauSiret,0,9); $nic=substr($nouveauSiret,9,5); $ret=$iDb2->select('insee.identite', $strIdentite, "SIREN=$siren AND NIC=$nic", false); $ret2=$iDb2->select('insee.insee_notices', $strNotice, "insSIREN=$siren AND insNIC=$nic", false, MYSQL_ASSOC); $tmp=$ret[0]; $actif=$tmp['sdActif']*1; $even="Etablissement déménagé $nbDem fois "; } else break; //echo "FIN Recherche du nouveau siret pour $siren $nic actif=$actif, nbDem=$nbDem, nouveauSiret=$nouveauSiret/"; } //$tmp=$ret[0]; //$actif=$tmp['sdActif']; $effet=$tmp['efetcent']*1; $tmp2=@$ret2[0]; $afficherNotice=false; if ($actif*1==0) { $actif=0; $strOut.="$siren|$nic|"; for($i=0;$i<80;$i++) $strOut.='|'; if (@$even=='') $even='Etablissement inactif '; else $even.='inactif '; // Recherche du dernier Even Insee $ret=$iDb2->select('insee.insee_even', 'insEVE,insDATEVE,insSIRETPS,idFlux,insSIRETASS', "insSIREN=$siren AND insNIC=$nic AND insEVE IN (400,410,420,425,430,435,510,530,620,621,650,795)", false, MYSQL_ASSOC); if (count($ret)==1 ) { $tmp=$ret[0]; /*$siret2=$tmp['insSIRETPS']*1; if ($siret2==0) $siret2=$tmp['insSIRETASS']*1; if ($siret2>0) $siret2=' de/vers '.$siret2; else $siret2='';*/ $infoFusion=false; switch ($tmp['insEVE']*1) { case 400: $even.='suppression du doublon '; break; case 410: $even.='cessation juridique de l\'entreprise '; $infoFusion=true; break; case 420: case 425: $even.='cessation économique de l\'entreprise ';$infoFusion=true; break; case 430: case 435: $even.='fermeture de l\'etablissement '; break; // case 510: // case 530: $even.='transfert'.$siret2.' '; break; case 620: case 621: case 650: $even.='cessation economique de l\'etablissement '; break; case 795: $even.='personne radiee a sa demande de SIRENE diffusion '; break; default: $even.=' '; break; } $evenDate=$tmp['insDATEVE']; if ($infoFusion) { // Annonces BODACC Fusion/Absorptions $tabFusion=$iInsee->getAnnoncesLegales($siren, 0, array(2700,2701,2702,2703,2710,2720,2721,2725,2726,2730,2740), false); if (count($tabFusion)>0) { $FUSIONPROJET_SIREN=0; foreach ($tabFusion as $iDep=>$depot) { if ($iDep==0) $ANNONCEFUSDATE=$depot['DateParution']; $ANNONCEFUS++; $FUSIONPROJET_DATE=$depot['dateJugement']; // Date du projet de fusion $FUSIONPROJET=$depot['complement']; // Présence d'un projet de fusion, libellé du projet if (preg_match_all("/((?:[0-9]{9,9})|(?:[0-9]{3,3} [0-9]{3,3} [0-9]{3,3})|(?:[0-9]{3,3}\.[0-9]{3,3}\.[0-9]{3,3})|(?:[0-9]{3,3}-[0-9]{3,3}-[0-9]{3,3}))/", $FUSIONPROJET, $matches)) { foreach ($matches[1] as $FUSIONPROJET_SIREN) { $FUSIONPROJET_SIREN=strtr($FUSIONPROJET_SIREN, array('.'=>'','-'=>'', ' '=>'')); if (!$iInsee->valideSiren($FUSIONPROJET_SIREN)) $FUSIONPROJET_SIREN=0; else break; } } if ($FUSIONPROJET_SIREN*1>1000) break; } $even.='dans le cadre d\'une fusion '; if ($FUSIONPROJET_SIREN>1000) $even.="avec $FUSIONPROJET_SIREN "; } if (strtr($evenDate,array('-'=>''))*1==0) { $tabRad=$iInsee->getAnnoncesLegales($siren, 0, array(2000,2200,2201,2202,2203,2204,2205,2206,2208,2210,2212,6000,6001,6002,6003,6004,6005,6100,6200,6201,6300,6400,6500,6600,6700), false); $evenDate=$tabRad[0]['DateParution']; } } } } else { foreach ($tmp as $i=>$value) { if (is_numeric($i)) { if ($value===null) $afficherNotice=true; else { $strOut.=str_replace('|',' ',$tmp[$i]).'|'; $afficherNotice=false; } } else { if ($afficherNotice) { $strOut.=str_replace('|',' ',$tmp2[$i]).'|'; } } } if ($presta==2 && ($effet<10 || $actif==0)) return; // Dirigeant $ret=$iDb2->select('jo.etablissements', 'dirNom,dirPrenom', "siren=$siren LIMIT 0,1", false, MYSQL_ASSOC); $tmp=@$ret[0]; $nomPrenomDir=trim($tmp['dirPrenom'].' '.$tmp['dirNom']); // Actionnaire $tabAct=$iLiens->getActionnaires($siren, true); foreach ($tabAct as $i=>$lien) { $sirenAct=$lien['Siren']; //die(print_r($lien)); if($sirenAct>100 && ($lien['PminNum']>=50 || $lien['MajMin']=='+')) { $tabIdentiteA=$iInsee->getIdentiteLight($sirenAct); $pctAct=$lien['Pmin']; $nomAct=$tabIdentiteA['Nom']; break; } } } } $strOut.="$evenDate|$even|".str_replace('|',' ',$nomPrenomDir)."|$YP|$pctAct|$sirenAct|".str_replace('|',' ',$nomAct).EOL; if ($presta==1) { $iDb3->insert('adecco_out', array( 'ref'=>$ref, 'siren'=>$siren, 'nic'=>$nic, 'siretTrouve'=>$siren.''.$nic, 'siret'=>$siret, 'evenDate'=>$evenDate, 'even'=>$even)); } echo $strOut; if ($fp) fwrite($fp, $strOut); } ?>