269 lines
9.7 KiB
PHP
269 lines
9.7 KiB
PHP
<?php
|
|
/**
|
|
* Chargement des fichiers en provenance de GE FactoFrance
|
|
* Les fichiers sont disponible dans le répertoire de stockage avec une date pour historisation
|
|
* Liste des fichiers :
|
|
* - GESCDACH
|
|
* - GESCDCLT
|
|
* - GESCDMVT
|
|
* Execution entre le 5 et le 8 du mois toutes les 4 heures ?
|
|
*/
|
|
ini_set('auto_detect_line_endings', true);
|
|
|
|
// --- 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
|
|
try {
|
|
$opts = new Zend_Console_Getopt(array(
|
|
'help|?' => "Displays usage information.",
|
|
'cron' => "Launch in cron",
|
|
'file=s' => "Specify file name to execute manually",
|
|
'debug' => "Mode debug",
|
|
));
|
|
$opts->parse();
|
|
} catch (Zend_Console_Getopt_Exception $e) {
|
|
echo $e->getUsageMessage();
|
|
exit;
|
|
}
|
|
|
|
//Usage
|
|
if( isset($opts->help) || count($opts->getOptions())==0 )
|
|
{
|
|
echo "Chargement des fichiers en provenance de GE FactoFrance.".PHP_EOL;
|
|
echo $opts->getUsageMessage();
|
|
exit;
|
|
}
|
|
|
|
$c = new Zend_Config($application->getOptions());
|
|
$db = Zend_Db::factory($c->profil->db->metier);
|
|
Zend_Db_Table_Abstract::setDefaultAdapter($db);
|
|
|
|
$tabFile = array();
|
|
|
|
//Lire le nom du fichier depuis la ligne de commande
|
|
if ( $opts->file ) {
|
|
if ( empty($opts->file) ) {
|
|
echo date('Y-m-d H:i:s') . " - Aucun fichier définit !".PHP_EOL;
|
|
exit;
|
|
}
|
|
|
|
$tabFile[] = $opts->file;
|
|
}
|
|
|
|
//Lire la table flux_filein (Nom du fichier, nombre de ligne)
|
|
if ( $opts->cron ) {
|
|
$fluxinM = new Application_Model_Sdv1FluxFileIn();
|
|
$sql = $fluxinM->select()
|
|
->where('client=?', 'gefacto')
|
|
->where('name=?', 'GEFACTO')
|
|
->where('depotType=?', 'SFTP')
|
|
->where('dateExecute=?','0000-00-00 00:00:00')
|
|
->order('dateInsert DESC');
|
|
|
|
$pitems = $fluxinM->fetchAll($sql);
|
|
foreach ( $pitems as $p ) {
|
|
$tabFile[] = $p->depotFile;
|
|
}
|
|
}
|
|
|
|
if ( count($tabFile)==0 ) {
|
|
echo date('Y-m-d H:i:s') . " - Aucun fichier à traiter !".PHP_EOL;
|
|
exit;
|
|
}
|
|
|
|
require_once APPLICATION_PATH . '/configs/config.php';
|
|
require_once 'framework/fwk.php';
|
|
require_once 'framework/mail/sendMail.php';
|
|
require_once 'Metier/insee/classMInsee.php';
|
|
require_once 'Metier/partenaires/classMFacto.php';
|
|
|
|
foreach ($tabFile as $filename)
|
|
{
|
|
$path = $c->profil->path->storage . '/clients/gefacto/send';
|
|
$file = $path . '/' . $filename;
|
|
|
|
//Check fichier
|
|
if ( file_exists($file) ) {
|
|
|
|
$dateFichier = date('YmdHis', filemtime($file));
|
|
|
|
echo date('Y-m-d H:i:s') . " - Chargement des Informations de Paiement ".basename($file).PHP_EOL;
|
|
|
|
//Ouvrir le fichier
|
|
$fp = fopen($file, 'r');
|
|
|
|
if (!$fp) {
|
|
echo date('Y-m-d H:i:s') . " - Impossible de lire le fichier !".PHP_EOL;
|
|
exit;
|
|
}
|
|
|
|
//Calcul du nombre de ligne du fichier
|
|
$nbLines = 0;
|
|
while (($buffer = fgets($fp)) !== false)
|
|
{
|
|
$nbLines++;
|
|
|
|
//Détection de la longueur de la première ligne
|
|
$lineLength = strlen($buffer);
|
|
if ( $lineLength<=30 ) {
|
|
$fileType = 1; $dbTableUpdate = 'ge_cs2';
|
|
} elseif ( $lineLength==122 ) {
|
|
$fileType = 0; $dbTableUpdate = 'ge_acheteurs';
|
|
} elseif ( $lineLength==75 ) {
|
|
$fileType = 2; $dbTableUpdate = 'ge_paiements';
|
|
}
|
|
//Erreur
|
|
else {
|
|
echo date('Y-m-d H:i:s') . " - Erreur : Première ligne de taille $lineLength non gérée !".PHP_EOL;
|
|
exit;
|
|
}
|
|
|
|
if ($opts->debug) echo date('Y-m-d H:i:s') . " - Ligne $nbLines".PHP_EOL;
|
|
|
|
}
|
|
|
|
//Retour au début du fichier
|
|
rewind($fp);
|
|
|
|
//Executer les chargements
|
|
|
|
$iDb = new WDB();
|
|
$iInsee = new MInsee($iDb);
|
|
|
|
$iFacto = new MFacto();
|
|
$iFacto->setTypeFic($fileType);
|
|
if ( $fileType==1 ) {
|
|
$iDb->update('sdv1.'.$dbTableUpdate, array('indTrt'=>0),'1');
|
|
}
|
|
|
|
$nbSiretInvalides = 0;
|
|
$nbSiretValides = 0;
|
|
$cptLine = $nbInsert = $nbUpdate = 0;
|
|
while (($buffer = fgets($fp)) !== false) {
|
|
$cptLine++;
|
|
|
|
if ($opts->debug) echo date('Y-m-d H:i:s') . " - Ligne $cptLine / $nbLines".PHP_EOL;
|
|
|
|
$dateInsert = date('YmdHis');
|
|
|
|
$a = $iFacto->readFic($buffer);
|
|
|
|
//Vérification du Siren/Siret
|
|
if ( $dbTableUpdate=='sdv1.ge_acheteurs' )
|
|
{
|
|
if (!$iInsee->valideSiren($a['SIRENE']))
|
|
{
|
|
$a['sirenValide'] = 0;
|
|
$nbSiretInvalides++;
|
|
}
|
|
else
|
|
{
|
|
$a['sirenValide'] = 1;
|
|
$nbSiretValides++;
|
|
}
|
|
}
|
|
|
|
//Siren pour la table ge_paiements
|
|
if ( $dbTableUpdate == 'ge_paiements' )
|
|
{
|
|
$result = $iDb->select('sdv1.ge_acheteurs', 'SIRENE', 'NUMACH='.$a['NUMACH']);
|
|
if (count($result) > 0)
|
|
{
|
|
$a['siren'] = $result[0]['SIRENE'];
|
|
}
|
|
}
|
|
|
|
//Insertion dans l'historique
|
|
if ( $dbTableUpdate == 'ge_cs2' )
|
|
{
|
|
$iDb->insert('historiques.'.$dbTableUpdate, array_merge($a, array('dateInsert'=>$dateInsert, 'dateConf'=>$dateFichier)));
|
|
if (mysql_errno()>0 && mysql_errno()<>1062) die("Table = $dbTableUpdate".PHP_EOL.mysql_error().PHP_EOL);
|
|
}
|
|
|
|
//Insertion dans la table
|
|
if ( $iDb->insert('sdv1.'.$dbTableUpdate, array_merge($a, array('dateInsert'=>$dateInsert))) )
|
|
{
|
|
$nbInsert++;
|
|
}
|
|
elseif ( $dbTableUpdate=='ge_cs2' )
|
|
{
|
|
$ret = $iDb->select('sdv1.'.$dbTableUpdate, 'cs, dateFin*1 AS dateFin', 'siren='.$a['siren'], false, MYSQL_ASSOC);
|
|
if ( count($ret)>0 )
|
|
{
|
|
$csPre = $ret[0]['cs'];
|
|
$datePre = $ret[0]['dateFin'];
|
|
if ($a['cs']<>$csPre || $a['dateFin']<>$datePre) {
|
|
$iDb->update('sdv1.'.$dbTableUpdate, array_merge($a, array(
|
|
'dateConf' => $dateFichier,
|
|
'csPre' => $csPre,
|
|
'dateCsPre' => $datePre,
|
|
'dateModifCS' => $dateFichier,
|
|
'dateUpdate' => $dateInsert,
|
|
'indTrt'=> 1)
|
|
),'siren='.$a['siren']);
|
|
}
|
|
else
|
|
{
|
|
$iDb->update('sdv1.'.$dbTableUpdate, array_merge($a, array(
|
|
'dateConf'=>$dateFichier,
|
|
'indTrt'=>1)
|
|
), 'siren='.$a['siren']);
|
|
}
|
|
if (mysql_errno()>0) {
|
|
if ($opts->debug) echo date('Y-m-d H:i:s') . " - Erreur SQL ".mysql_errno().' : '.mysql_error()." sur $dbTableUpdate pour ".print_r($a);
|
|
}
|
|
$nbUpdate++;
|
|
}
|
|
}
|
|
elseif ( $dbTableUpdate=='ge_acheteurs' )
|
|
{
|
|
$iDb->update('sdv1.'.$dbTableUpdate, array_merge($a, array('dateUpdate'=>$dateInsert)), 'NUMACH='.$a['NUMACH']);
|
|
if (mysql_errno()>0) {
|
|
if ($opts->debug) echo date('Y-m-d H:i:s') . " - Erreur SQL ".mysql_errno().' : '.mysql_error()." sur $dbTableUpdate pour ".print_r($a);
|
|
}
|
|
$nbUpdate++;
|
|
}
|
|
else
|
|
{
|
|
if ($opts->debug) echo date('Y-m-d H:i:s') . " - Erreur SQL ".mysql_errno().' : '.mysql_error()." sur $dbTableUpdate pour ".print_r($a);
|
|
}
|
|
}
|
|
|
|
//Fermeture du fichier
|
|
fclose($fp);
|
|
|
|
echo date('Y-m-d H:i:s') . " - $nbLines lignes traitées dont $nbSiretInvalides siren/siret invalides !".PHP_EOL;
|
|
echo date('Y-m-d H:i:s') . " - Le fichier ".basename($file)." vient d'être chargé : $nbInsert ajouts et $nbUpdate MAJ !".PHP_EOL;
|
|
if ($dbTableUpdate=='ge_cs2') {
|
|
$iDb->update('sdv1.'.$dbTableUpdate, array('dateSuppr'=>$dateInsert), 'indTrt=0');
|
|
}
|
|
|
|
$iDb->update('sdv1.flux_filein', array('dateExecute'=>date('YmdHis')), "name='GEFACTO' AND depotFile='".basename($file)."'", false);
|
|
echo date('Y-m-d H:i:s') . " - Le fichier ".basename($file)." vient d'être marqué traité.".PHP_EOL;
|
|
|
|
$message = "Le fichier ".basename($file)." vient d'être chargé :\r\n";
|
|
$message.= "$nbInsert ajouts et $nbUpdate mises à jours sur $nbLines lignes ($nbSiretInvalides siren/siret invalides).".PHP_EOL;
|
|
|
|
sendMail('production@scores-decisions.com', 'support@scores-decisions.com,ylenaour@scores-decisions.com', '[CHARGEMENT] Informations de Paiement', $message);
|
|
|
|
echo date('Y-m-d H:i:s') . " - Fin du chargement des Informations de Paiement ".basename($file).PHP_EOL;
|
|
|
|
} else {
|
|
|
|
echo date('Y-m-d H:i:s') . " - Fichier $file inexistant !".PHP_EOL;
|
|
|
|
}
|
|
}
|