#!/usr/bin/php "Aide.", 'id=s' => "Identifiant du traitement", 'file=s' => "Identifiant pour les traitements par fichier" ) ); $opts->parse(); } catch (Zend_Console_Getopt_Exception $e) { echo $e->getUsageMessage(); exit; } //Usage if(isset($opts->help) || !isset($opts->id) && !isset($opts->file) ) { echo $opts->getUsageMessage(); exit; } $config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/configuration.ini'); //MetadataCache pour la base de données $frontendOptions = array( 'lifetime' => 14400, 'automatic_serialization' => true ); $backendOptions = array(); $cache = Zend_Cache::factory('Core','Apc', $frontendOptions, $backendOptions); Zend_Db_Table_Abstract::setDefaultMetadataCache($cache); //Définition bdd try { $db = Zend_Db::factory($config->databases->db); } catch ( Exception $e ) { exit ( $e->getMessage() ); } //Définition bdd metier try { $dbMetier = Zend_Db::factory($config->databases->jo); } catch ( Exception $e ) { exit ( $e->getMessage() ); } $liste = array(); if ($opts->id) { //Read SIRETs $commandesM = new Application_Model_EnrichissementIdentifiants($db); $commande = $commandesM->find(intval($opts->id))->current(); $identifiants = json_decode($commande->identifiants, true); //Read profil for data extract $profilM = new Application_Model_EnrichissementProfils($db); $profil = $profilM->find(intval($commande->idProfil))->current(); $dataProfil = json_decode($profil->criteres, true); } else if ($opts->file) { } //Something is needed if ( count($identifiants)==0 || count($dataProfil)==0 ) { exit; } //Let's go $mois = substr($commande->dateAdded,0,4).substr($commande->dateAdded,5,2); if(!file_exists($config->path->data.'/'.$mois)) mkdir($config->path->data.'/'.$mois); $path = $config->path->data.'/'.$mois; $outFile = $profil['login'].'_'.$opts->id.'_'.date('YmdHis').'.csv'; require_once 'Scores/Enrichissement.php'; $dico = new Enrichissement(); $fields = $dico->getFields(); //Entete, Valeur de remplacement et Requete SQL $tabEntete = array('siren', 'nic'); $tabEnteteLabel = array('SIREN', 'NIC'); $sql = 'SELECT LPAD(siren, 9, 000000000) AS siren, LPAD(nic,5,00000) AS nic,'; foreach ( $dataProfil as $item ) { //Définition de l'entete $tabEnteteLabel[] = $fields[$item]['label']; $tabEntete[] = $item; //Construction de la requete SQL if ( array_key_exists('sql', $fields[$item]) ) { $sql.= ' '.$fields[$item]['sql'].', '; } else { $sql.= ' '.$fields[$item]['column'].' AS '.$item.','; } } //Ajouter le champ presentRcs $tabEntete[] = 'presentRcs'; $tabEnteteLabel[] = 'RCS'; $sql .= ' presentRcs'; //Pour chaque identifiant traiter les données $row = 0; $fp = fopen($path.'/'.$outFile, 'w'); //Ecrire l'entete if (count($tabEnteteLabel)>0){ fputcsv($fp, $tabEnteteLabel, ',', '"'); } //Mise à jour des éléments if ($opts->id) { $commandesM->update(array( 'dateStart'=>date('Y-m-d H:i:s'), 'fichier' => basename($outFile) ), "id = ".$commande->id); } $model = $sql; $traite = 0; //Date de debut de traitement. $dateStart = date('YmdHms'); foreach ($identifiants as $siret ) { $sql = $model.' FROM etablissements_act WHERE siren='.substr($siret,0,9).' AND nic='.substr($siret,9,5); try { $result = $dbMetier->fetchAll($sql); $traite++; } catch(Exception $e) { echo $sql; } $tabData = $result[0]; //Trier pour la sortie $tabSortie = array(); foreach($tabEntete as $key){ $tabSortie[] = isset($tabData[$key]) ? $tabData[$key] : ''; } fputcsv($fp, $tabSortie, ',', '"'); //Mise à jour des lignes traitées dans la base if ($opts->id) { $commandesM->update(array('nbLigneTraites'=>$row), "id = ".$commande->id); } $row++; } fclose($fp); if ($opts->id) { $commandesM->update( array('dateStop' => date('Y-m-d H:i:s')) , "id = ".$commande->id); } /* == FUNCTION == */ /** * Verifie si un SIREN est valide * @param Le code SIREN dont on veut vérifier la validité. * @return Un booléen qui vaut 'true' si le code SIREN passé en * paramètre est valide, false sinon. */ function sirenValide($siren) { if ( (strlen($siren) != 9) || (is_nan($siren)) ) $estValide = false; else { // Donc le SIREN est un numérique à 9 chiffres $somme = 0; $tmp = 0; for ($cpt = 0; $cpt 9) $tmp-= 9; // Si le résultat est supérieur à 9, on lui soustrait 9 } else $tmp = substr($siren, $cpt, 1); $somme+= intval($tmp); } if (($somme % 10) == 0) $estValide = true; // Si la somme est un multiple de 10 alors le SIREN est valide else $estValide = false; } return $estValide; } /** * Verifie si un SIRET est valide * @param Le code SIRET dont on veut vérifier la validité. * @return Un booléen qui vaut 'true' si le code SIRET passé en * paramètre est valide, false sinon. */ function siretValide($siret) { if ( (strlen($siret) != 14) || (is_nan($siret)) ) $estValide = false; else { // Donc le SIRET est un numérique à 14 chiffres // Les 9 premiers chiffres sont ceux du SIREN (ou RCS), les 4 suivants // correspondent au numéro d'établissement // et enfin le dernier chiffre est une clef de LUHN. $somme = 0; $tmp = 0; for ($cpt = 0; $cpt 9) $tmp-= 9; // Si le résultat est supérieur à 9, on lui soustrait 9 } else $tmp = substr($siret, $cpt, 1); $somme+= intval($tmp); } if (($somme % 10) == 0) $estValide = true; // Si la somme est un multiple de 10 alors le SIRET est valide else $estValide = false; } return $estValide; }