355 lines
11 KiB
PHP
355 lines
11 KiB
PHP
<?php
|
|
//error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED);
|
|
error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED);
|
|
|
|
// --- Define path to application directory
|
|
defined('APPLICATION_PATH')
|
|
|| define('APPLICATION_PATH', realpath(__DIR__ . '/../application'));
|
|
|
|
// --- Define application environment
|
|
defined('APPLICATION_ENV')
|
|
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
|
|
|
|
// --- Composer autoload
|
|
require_once realpath(__DIR__ . '/../vendor/autoload.php');
|
|
|
|
// Create application, bootstrap, and run
|
|
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
|
|
|
|
// --- Options
|
|
$displayUsage = false;
|
|
try {
|
|
$opts = new Zend_Console_Getopt(array(
|
|
'help|?' => "Displays usage information.",
|
|
'since=s' => "Depuis une date (format AAAAMMJJ) ou depuis le dernier flux (flux)",
|
|
'from=s' => "depuis surveillance (surv) ou logs (log:default)",
|
|
'debug' => "Génére uniquement un fichier sans télétransmission",
|
|
'cron' => "Mandatory option for launch the cli in cron",
|
|
));
|
|
$opts->parse();
|
|
} catch (Zend_Console_Getopt_Exception $e) {
|
|
$displayUsage = true;
|
|
}
|
|
|
|
// --- Aide / Options
|
|
if (count($opts->getOptions())==0 || isset($opts->help)) {
|
|
$displayUsage = true;
|
|
}
|
|
|
|
// --- Usage
|
|
if ($displayUsage) {
|
|
echo "Prestation RRG Surveillance.\n";
|
|
echo $opts->getUsageMessage();
|
|
exit;
|
|
}
|
|
|
|
$c = new Zend_Config($application->getOptions());
|
|
Zend_Registry::set('config', $c);
|
|
|
|
$login = 'rrgws';
|
|
$client = 'rrg';
|
|
$typeDepot = 'FTP';
|
|
$prestation = 'HEXAVIA';
|
|
|
|
//Output path
|
|
$pathOut = $c->profil->path->shared . '/clients/' . $client . '/recv';
|
|
|
|
$fileOptionsOut = array(
|
|
'dir' => $pathOut,
|
|
'type' => 'csv',
|
|
'delimiter' => '$',
|
|
/*'enclosure' => '"',*/
|
|
/*'header' => array(
|
|
'ID_S&D',
|
|
'SIRET',
|
|
'DATE_CREATION',
|
|
'CA',
|
|
'ANNEE_CA',
|
|
'CODE_PAIEMENT',
|
|
'LIBELLE_CODE_PAIE',
|
|
'INDISCORE20',
|
|
'ENCOURS'
|
|
),*/
|
|
'columns' => array(
|
|
'SourceID',
|
|
'Siret',
|
|
'DateCreaEn',
|
|
'BilanCA',
|
|
'BilanDateCloture',
|
|
'PaiementCS',
|
|
'PaiementInfo',
|
|
'Indiscore',
|
|
'Encours',
|
|
),
|
|
'name' => 'surv_',
|
|
//'encoding' => 'ISO-8859-15',
|
|
);
|
|
|
|
require_once APPLICATION_PATH.'/configs/config.php';
|
|
require_once 'Metier/Scores/MScores.php';
|
|
|
|
$db = Zend_Db::factory($c->profil->db->metier);
|
|
$db->setFetchMode(Zend_Db::FETCH_OBJ);
|
|
Zend_Db_Table_Abstract::setDefaultAdapter($db);
|
|
|
|
$execRef = new Scores_Exec_Ref('RRGSURV');
|
|
$execId = $execRef->start();
|
|
|
|
$dateStart = new DateTime();
|
|
$dateEnd = new DateTime();
|
|
if ($opts->since == 'flux') {
|
|
$fluxoutM = new Application_Model_Sdv1FluxFileOut();
|
|
$sql = $fluxoutM->select()
|
|
->where('client=?', 'rrg')
|
|
->where('name=?', 'HEXAVIA')
|
|
->where('fileOut LIKE ?', 'surv_%')
|
|
->where('depotDate!=?', '0000-00-00 00:00:00')
|
|
->order('depotDate DESC')->limit(1);
|
|
$resultDate = $fluxoutM->fetchRow($sql);
|
|
$dateStart = DateTime::createFromFormat('YmdHis', $resultDate->dateEnd);
|
|
} elseif ($opts->since) {
|
|
$dateStart = DateTime::createFromFormat('Ymd', $opts->since);
|
|
} else {
|
|
if ($dateStart->getWeekday() == 1) {
|
|
$dateStart->sub(new DateInterval('P3D'));
|
|
} else {
|
|
$dateStart->sub(new DateInterval('P3D'));
|
|
}
|
|
}
|
|
|
|
$dateSql1 = $dateStart->format('Y-m-d');
|
|
$dateSql2 = $dateEnd->format('Y-m-d');
|
|
|
|
// --- Entités consultées via webservice (dateAjout) + Entités avec scores modifiés ou ajoutés (indiScoreDate)
|
|
if ($opts->from == 'surv') {
|
|
echo date('Y-m-d H:i:s')." - Selection dans le portefeuille entre le $dateSql1 et $dateSql2\n";
|
|
$sql = "SELECT LPAD(surv.siren,9,0) AS siren, surv.dateAjout, score.indiScore20, score.indiScoreDate, score.encours, score.cs, score.dateBilan
|
|
FROM jo.surveillances_site AS surv LEFT JOIN jo.scores_surveillance AS score ON surv.siren = score.siren
|
|
WHERE surv.source='score' AND surv.login='".$login."' AND
|
|
( (surv.dateAjout BETWEEN '".$dateSql1." 00:00:00' AND '".$dateSql2." 23:59:59')
|
|
OR (score.indiScoreDate BETWEEN '".$dateSql1." 00:00:00' AND '".$dateSql2." 23:59:59') )
|
|
GROUP BY siren ORDER BY siren, dateAjout DESC";
|
|
}
|
|
// --- Entités consultées via webservice depuis les logs (dateHeure) + Entités avec scores modifiés ou ajoutés (indiScoreDate)
|
|
elseif ($opts->from == 'log') {
|
|
echo date('Y-m-d H:i:s')." - Selection dans les logs entre le $dateSql1 et $dateSql2\n";
|
|
$sql = "SELECT LPAD(surv.siren,9,0) AS siren, surv.dateHeure AS dateAjout, score.indiScore20, score.indiScoreDate, score.encours, score.cs, score.dateBilan
|
|
FROM sdv1.logs AS surv LEFT JOIN jo.scores_surveillance AS score ON surv.siren = score.siren
|
|
WHERE surv.login='".$login."' AND page='identite' AND
|
|
( (surv.dateHeure BETWEEN '".$dateSql1." 00:00:00' AND '".$dateSql2." 23:59:59')
|
|
OR (score.indiScoreDate BETWEEN '".$dateSql1." 00:00:00' AND '".$dateSql2." 23:59:59') )
|
|
GROUP BY siren ORDER BY siren, dateAjout DESC";
|
|
}
|
|
|
|
try {
|
|
$resultItem = $db->fetchAll($sql);
|
|
} catch (Zend_Db_Exception $e) {
|
|
echo $e->getMessage();
|
|
echo "\n";
|
|
}
|
|
|
|
if ( count($resultItem) == 0 ) {
|
|
echo date('Y-m-d H:i:s')." - Aucun élément.\n";
|
|
} else {
|
|
|
|
$dateBegin = date('YmdHis');
|
|
echo date('Y-m-d H:i:s')." - NbLignes=".count($resultItem)."\n";
|
|
|
|
if ($execId !== null) {
|
|
$execRef->total($execId, count($resultItem));
|
|
}
|
|
|
|
// --- Ecriture du fichier
|
|
$file = $fileOptionsOut['dir'] . '/' .$fileOptionsOut['name'] . substr($dateBegin,0,8) . '.' . $fileOptionsOut['type'];
|
|
// --- Ouverture fichier
|
|
$fp = fopen($file, 'w');
|
|
if ( $fp === false ) {
|
|
echo date('Y-m-d H:i:s')." - ERREUR Impossible de créer le fichier ".$file."\n";
|
|
exit;
|
|
}
|
|
// --- Header
|
|
if ( count($fileOptionsOut['header']) > 0 ) {
|
|
fputcsv($fp, $fileOptionsOut['header'], $fileOptionsOut['delimiter'], $fileOptionsOut['enclosure']);
|
|
}
|
|
|
|
$iDb = new Metier_Util_Db();
|
|
$row = 0;
|
|
// --- Content
|
|
foreach ($resultItem as $item) {
|
|
|
|
if (intval($item->siren) == 0) {
|
|
continue;
|
|
}
|
|
|
|
$row++;
|
|
if ($opts->debug) { echo date('Y-m-d H:i:s')." - Ligne ".$row; }
|
|
|
|
if ($execId !== null) {
|
|
$execRef->increment($execId, $row);
|
|
}
|
|
|
|
// --- Data
|
|
$sql = $db->select()
|
|
->from('etablissements', array(
|
|
'LPAD(source_id,10,0) AS source_id',
|
|
'LPAD(siren,9,0) AS siren',
|
|
'LPAD(nic,5,0) AS nic'),
|
|
'jo')->where('siren=?', $item->siren)->where('siege=1')->order('actif DESC')->limit(1);
|
|
$etablissement = $db->fetchRow($sql, null, Zend_Db::FETCH_OBJ);
|
|
|
|
$DateCreaEn = '';
|
|
$BilanCA = '';
|
|
$BilanDateCloture = '';
|
|
$Indiscore = '';
|
|
$Encours = '';
|
|
// --- Calcul du score ou lecture depuis la table de sauvegarde des scores
|
|
if ($item->indiScoreDate === null) {
|
|
|
|
if ($opts->debug) { echo " - Calcul du score"; }
|
|
|
|
require_once 'Metier/Scores/MScores.php';
|
|
$evaluation = calculIndiScore($item->siren, 0, false, 0, false, 'scores', $iDb);
|
|
|
|
$PaiementCS = $evaluation['cs'];
|
|
$Indiscore = $evaluation['Indiscore20'];
|
|
$Encours = round($evaluation['encours']/1000) * 1000;
|
|
|
|
} else {
|
|
|
|
if ($opts->debug) { echo " - Données en cache"; }
|
|
|
|
$PaiementCS = $item->cs;
|
|
$Indiscore = $item->indiScore20;
|
|
$Encours = round($item->encours/1000) * 1000;
|
|
}
|
|
|
|
// --- Informations identitaire
|
|
$iInsee = new Metier_Insee_MInsee($iDb);
|
|
$tabIdentite = $iInsee->getIdentiteEntreprise($item->siren, 0, 0, false, false);
|
|
$DateCreaEn = $tabIdentite['DateCreaEn'];
|
|
if ( $tabIdentite['DateCreaEt'] > 0 && $tabIdentite['DateCreaEt'] < $tabIdentite['DateCreaEn'] ) {
|
|
$DateCreaEn = $tabIdentite['DateCreaEt'];
|
|
} elseif ( $tabIdentite['DateCreaEn'] > 0 ) {
|
|
$DateCreaEn = $tabIdentite['DateCreaEn'];
|
|
}
|
|
|
|
// --- Correction pour l'envoi des dates
|
|
if ( !empty($DateCreaEn) ) {
|
|
if (strlen($DateCreaEn)<8) {
|
|
$DateCreaEn = str_pad($DateCreaEn, 8, '0', STR_PAD_RIGHT);
|
|
}
|
|
if (substr($DateCreaEn, -2) * 1 == 0) {
|
|
$DateCreaEn = substr($DateCreaEn,0,6).'01';
|
|
}
|
|
}
|
|
|
|
// --- Gestion des bilans
|
|
$today = new DateTime();
|
|
if ( !empty($tabIdentite['bilanDate']) ) {
|
|
$compare = DateTime::createFromFormat('Ymd', $tabIdentite['bilanDate']);
|
|
$interval = $today->diff($compare, true);
|
|
$diffMonth = $interval->format('%y') * 12 + $interval->format('%m');
|
|
if ($diffMonth < 37) {
|
|
$BilanDateCloture = substr($tabIdentite['bilanDate'],6,2).
|
|
substr($tabIdentite['bilanDate'],4,2).substr($tabIdentite['bilanDate'],0,4);
|
|
$BilanCA = $tabIdentite['bilanFL'];
|
|
}
|
|
}
|
|
|
|
// --- Estimation du CA bilan
|
|
if (empty($BilanCA) && !empty($tabIdentite['bilanAnnee'])) {
|
|
// --- Condition RRG
|
|
if ( $tabIdentite['Eff'] > 0
|
|
|| substr($tabIdentite['FJ'],0,1) == 1 && $tabIdentite['Eff'] < 1
|
|
|| !empty($tabIdentite['NafEnt']) && strlen($tabIdentite['NafEnt']) == 5 && $tabIdentite['NafEnt'] != '0000Z' ) {
|
|
|
|
$dateCreaRecente = new DateTime();
|
|
$dateCreaRecente->sub(new DateInterval('P2Y1M'))->setDay(1);
|
|
$dateClotureEstime = new DateTime();
|
|
$dateClotureEstime->sub(new DateInterval('P1D'))->setDay(1);
|
|
$dateCompare = DateTime::createFromFormat('Ymd', $DateCreaEn);
|
|
|
|
// --- Création récente ( now - 2 ans < Date de création )
|
|
if ($dateCreaRecente < $dateCompare) {
|
|
$BilanDateCloture = '3112'.date('Y');
|
|
$BilanCA = $tabIdentite['bilanFLestime'];
|
|
}
|
|
// --- Date cloture estimée < Date de création
|
|
elseif ($dateClotureEstime < $dateCompare) {
|
|
$BilanDateCloture = '3112'.$tabIdentite['bilanAnnee'];
|
|
$BilanCA = $tabIdentite['bilanFLestime'];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Récupération du libellé d'information de paiement
|
|
$PaiementInfo = '';
|
|
if ( in_array($PaiementCS, array('0', 'I', 'P', 'D')) ) {
|
|
$iFacto = new Metier_Partenaires_MFacto($iDb);
|
|
$info = $iFacto->getLibInfoCS($PaiementCS);
|
|
$PaiementInfo = $info['LibCS'];
|
|
}
|
|
|
|
$values = array(
|
|
'SourceID' => $etablissement->source_id,
|
|
'Siret' => $etablissement->siren.$etablissement->nic,
|
|
'DateCreaEn' => $DateCreaEn,
|
|
'BilanCA' => $BilanCA,
|
|
'BilanDateCloture' => $BilanDateCloture,
|
|
'PaiementCS' => $PaiementCS,
|
|
'PaiementInfo' => $PaiementInfo,
|
|
'Indiscore' => $Indiscore,
|
|
'Encours' => $Encours,
|
|
);
|
|
|
|
// --- Trier données
|
|
$line = array();
|
|
foreach ( $fileOptionsOut['columns'] as $i => $column ) {
|
|
$line[] = $values[$column];
|
|
}
|
|
// --- Ecrire ligne
|
|
if ($opts->debug) { echo " - Ecriture ligne"; }
|
|
if ( empty($fileOptionsOut['enclosure']) ) {
|
|
fwrite($fp, join($fileOptionsOut['delimiter'], $line)."\n");
|
|
} else {
|
|
fputcsv($fp, $line, $fileOptionsOut['delimiter'], $fileOptionsOut['enclosure']);
|
|
}
|
|
|
|
if ($opts->debug) { echo "\n"; }
|
|
}
|
|
// --- Fermeture fichier
|
|
fclose($fp);
|
|
|
|
// --- Encoding
|
|
if ( array_key_exists('encoding', $fileOptionsOut) ) {
|
|
if ( $fileOptionsOut['encoding'] == 'ISO-8859-15' ) {
|
|
passthru("iconv -f UTF-8 -t ISO-8859-15 ".$file." -o ".$file.".enc");
|
|
passthru("cp -fv ".$file.".enc ".$file);
|
|
}
|
|
}
|
|
|
|
$nbLines = $row;
|
|
echo date('Y-m-d H:i:s')." - Nb Lignes Traitées : ".$nbLines."\n";
|
|
|
|
if ( $opts->cron ) {
|
|
$fluxoutM = new Application_Model_Sdv1FluxFileOut();
|
|
$dateEnd = date('YmdHis');
|
|
$fluxoutM->insert(array(
|
|
'client' => $client,
|
|
'name' => $prestation,
|
|
'nbLines' => $nbLines,
|
|
'dateBegin' => $dateBegin,
|
|
'dateEnd' => $dateEnd,
|
|
'fileOut' => basename($file),
|
|
'depotType' => $typeDepot,
|
|
'depotDate' => '0000-00-00 00:00:00',
|
|
));
|
|
}
|
|
}
|
|
|
|
if ($execId !== null) {
|
|
$execRef->end($execId);
|
|
}
|
|
|
|
echo date('Y-m-d H:i:s')." - Fin.\n";
|