"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";