"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'; foreach ($tabFile as $filename) { $path = $c->profil->path->shared . '/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 Metier_Insee_MInsee($iDb); $iFacto = new Metier_Partenaires_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; } }