odea/batch/enrichissement.php

245 lines
6.4 KiB
PHP
Raw Normal View History

#!/usr/bin/php
<?php
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
define('APPLICATION_ENV', 'production');
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
try {
$opts = new Zend_Console_Getopt(
//Options
array(
'help|?' => "Aide.",
'id=s' => "Identifiant du traitement",
2012-03-14 10:42:09 +00:00
'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;
}
//Définition bdd
$dbConfig = new Zend_Config_Ini(APPLICATION_PATH . '/configs/configuration.ini', 'databases');
try {
$db = Zend_Db::factory($dbConfig->db);
} catch ( Exception $e ) {
exit ( $e->getMessage() );
}
//Définition bdd metier
try {
2012-03-20 08:24:41 +00:00
$dbMetier = Zend_Db::factory($dbConfig->jo);
} catch ( Exception $e ) {
exit ( $e->getMessage() );
}
2012-03-14 10:42:09 +00:00
$liste = array();
2012-03-20 08:24:41 +00:00
if ($opts->id)
{
$sql = $db->select()
->from('enrichissement_identifiants')
2012-04-04 14:06:46 +00:00
->where('id = ?', intval($opts->id));
2012-03-20 08:24:41 +00:00
$commande = $db->fetchRow($sql);
$identifiants = json_decode($commande['identifiants'], true);
$sql = $db->select()
->from('enrichissement_profils')
->where('id = ?', $commande['idProfil']);
$profil = $db->fetchRow($sql);
$dataProfil = json_decode($profil['criteres'], true);
} else if ($opts->file)
{
}
2012-03-14 10:42:09 +00:00
if ( count($identifiants)>0 && count($dataProfil)>0 )
{
2012-04-12 09:25:37 +00:00
$config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/configuration.ini');
2012-04-12 09:53:08 +00:00
$outFile = $opts->id.date('YmdHis').'.csv';
2012-03-14 10:42:09 +00:00
require_once 'Scores/Enrichissement.php';
2012-04-05 08:20:37 +00:00
$dico = new Enrichissement();
2012-03-14 10:42:09 +00:00
$fields = $dico->getFields();
//Entete, Valeur de remplacement et Requete SQL
2012-04-05 08:20:37 +00:00
$tabEntete = array('siren', 'nic');
2012-03-14 10:42:09 +00:00
$tabEnteteLabel = array('SIREN', 'NIC');
$sql = 'SELECT LPAD(siren, 9, 000000000) AS siren, LPAD(nic,5,00000) AS nic,';
2012-03-14 10:42:09 +00:00
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]) ) {
2012-04-04 14:06:46 +00:00
$sql.= ' '.$fields[$item]['sql'].', ';
2012-03-14 10:42:09 +00:00
} else {
$sql.= ' '.$fields[$item]['column'].' AS '.$item.',';
}
}
//Ajouter le champ presentRcs
2012-04-05 08:20:37 +00:00
$tabEntete[] = 'presentRcs';
$tabEnteteLabel[] = 'RCS';
$sql .= ' presentRcs';
2012-03-14 10:42:09 +00:00
//Pour chaque identifiant traiter les données
2012-04-05 08:20:37 +00:00
$row = 0;
2012-04-12 09:57:19 +00:00
$fp = fopen($config->path->data.'/'.$outFile, 'w');
2012-03-14 10:42:09 +00:00
//Ecrire l'entete
if (count($tabEnteteLabel)>0){
fputcsv($fp, $tabEnteteLabel, ',', '"');
}
2012-03-20 08:24:41 +00:00
$model = $sql;
2012-04-04 14:06:46 +00:00
$traite = 0;
2012-04-05 08:20:37 +00:00
//Date de debut de traitement.
$dateStart = date('YmdHms');
2012-03-14 10:42:09 +00:00
foreach ($identifiants as $siret )
{
2012-04-04 14:06:46 +00:00
$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;
}
2012-03-14 10:42:09 +00:00
$tabData = $result[0];
//Trier pour la sortie
$tabSortie = array();
foreach($tabEntete as $key){
$tabSortie[] = isset($tabData[$key]) ? $tabData[$key] : '';
}
fputcsv($fp, $tabSortie, ',', '"');
$row++;
}
2012-04-05 08:20:37 +00:00
//Gestion de l'erreur
$error = 0;
if($traite < $commande['nbLigneTotales'])
$error = 1;
//date de fin de traitement.
$dateStop = date('YmdHms');
//Update de la ligne dans la base de donnée.
$datas = array(
'nbLigneTraites' => $traite,
'dateStart' => $dateStart,
'dateStop' => $dateStop,
'error' => $error,
'fichier' => $outFile
2012-04-04 14:06:46 +00:00
);
2012-04-05 08:20:37 +00:00
$db->update('enrichissement_identifiants', $datas, 'id = '.$opts->id);
2012-03-20 08:24:41 +00:00
fclose($fp);
2012-03-14 10:42:09 +00:00
}
/* == 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<strlen($siren); $cpt++) {
if (($cpt % 2) == 1) { // Les positions paires : 2ème, 4ème, 6ème et 8ème chiffre
$tmp = substr($siren, $cpt, 1) * 2; // On le multiplie par 2
if ($tmp > 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<strlen($siret); $cpt++) {
if (($cpt % 2) == 0) { // Les positions impaires : 1er, 3è, 5è, etc...
$tmp = substr($siret, $cpt, 1) * 2; // On le multiplie par 2
if ($tmp > 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;
}
/**
* writeCSV
* @param array $list
* @param array $entete
* @param string $filename
*/
function writeCSV($list, $entete, $filename)
{
$fp = fopen($filename, 'w');
if (count($entete)>0){
fputcsv($fp, $entete, ',', '"');
}
foreach ($list as $fields) {
fputcsv($fp, $fields, ',', '"');
}
fclose($fp);
}