extranet/batch/getActes.php
2011-01-17 12:35:57 +00:00

247 lines
8.3 KiB
PHP

#!/usr/bin/php -q
<?php
// Paramètres
if ( in_array($argv[1], array('--help', '-help', '-h', '-?')) ) {
?>
Vérifie les actes numérisés reçus en provenance des Greffes.
Avec les options --help, -help, -h, et -?, vous obtiendrez cette aide.
Sans aucun paramètre, récupération des actes.
Mode test avec les options -t, --test, -test pour voir ce qui va être fait
Utilisation :
<?php echo $argv[0]; ?> >> /vers/fichier.log
<?php
exit;
}
$test = false;
if (in_array($argv[1], array('--test', '-test', '-t'))){
$test = true;
}
define ('PATH_DATA', '/var/www/data');
define ('ACTES_IGNUM_LOCAL_DIR', PATH_DATA.'/pdf/scan/');
define ('ACTES_IG_LOCAL_DIR', PATH_DATA.'/pdf/');
define ('ACTES_IGNUM_FTP_URL', 'ftp2.scores-decisions.com');
define ('ACTES_IGNUM_FTP_USER', 'mpc2500');
define ('ACTES_IGNUM_FTP_PASS', 'passmpc78');
$report_email = 'production@scores-decisions.com';
$report_subject = 'Traitement des actes '.date('Y-m-d H:i:s');
$report_txt = '';
require_once realpath(dirname(__FILE__) . '/../framework/fwk.php');
require_once realpath(dirname(__FILE__) . '/../config/config.inc');
require_once realpath(dirname(__FILE__) . '/mysql.php');
define('INCLUDE_PATH', realpath(dirname(__FILE__).'/../includes/') );
require_once FWK_PATH.'/common/ftp.php';
function sendMail($commande, $nomCible){
$subject = "Actes ou Statuts disponible pour ".$commande['siren'];
$message = "Le document commandé pour le siren ".$commande['siren']." est disponible en téléchargement sur le site de Scores & Décisions à l'adresse suivante :\r\n\r\n";
$message.= "http://extranet.scores-decisions.com/pdf/$nomCible\r\n";
$headers = 'From: infoslegales@scores-decisions.com' . "\r\n" .
'Reply-To: infoslegales@scores-decisions.com';
if ( mail($commande['emailCommande'], $subject, $message, $headers) ){
echo date ('Y/m/d - H:i:s').' - Un email a été envoyé à '.$commande['emailCommande']." pour la commande $nomCible.".EOL;
return true;
} else {
echo date ('Y/m/d - H:i:s').' - ERREUR : Impossible d\'envoyer l\'email à '.$commande['emailCommande']." pour la commande $nomCible.".EOL;
return false;
}
}
set_time_limit(0);
$eol = "\n";
/**
* Connexion à la base de données
*/
$con = mysql_pconnect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
if (!($con === false)) {
if (mysql_select_db(MYSQL_DB, $con) === false){
echo date ('Y/m/d - H:i:s') . ' - ERREUR : MySql n°'. mysql_errno() .') : '. mysql_error() . $eol;
}
} else {
echo date ('Y/m/d - H:i:s') .' - ERREUR : MySql n°'. mysql_errno() .') : '. mysql_error(). $eol;
}
/**
* Liste des commandes non traités depuis la base de données
*/
$tabCommandes = mysql_select(
'commandes',
'idCommande, idUser, login, emailCommande, siren, refDocument, typeCommande, dateCommande',
'dateReception=0',
false,
MYSQL_ASSOC
);
$nbCommandes = count($tabCommandes);
$tabTmp = array();
foreach ($tabCommandes as $commande) {
if ($commande['typeCommande']=='C'){
$tabTmp['c'.$commande['idCommande']] = $commande;
} elseif ($commande['typeCommande']=='G' || $commande['typeCommande']==''){
$tabTmp['g'.$commande['idCommande']] = $commande;
}
}
$tabCommandes = $tabTmp;
unset($tabTmp);
echo date('Y/m/d - H:i:s') ." - Il y a $nbCommandes commandes en attente de réception courrier ou numérisation !$eol";
/**
* Connexion au site FTP pour la récupération de la liste des fichiers au format pdf
*/
$conn_id = ftp_connect(ACTES_IGNUM_FTP_URL);
if (!$conn_id) {
echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de se connecter au serveur FTP (".ACTES_IGNUM_FTP_URL.") !".EOL;
exit;
}
$login_result = ftp_login($conn_id, ACTES_IGNUM_FTP_USER, ACTES_IGNUM_FTP_PASS);
if (!$login_result) {
echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de s'authentifier sur le serveur FTP (".ACTES_IGNUM_FTP_URL.")!".EOL;
exit;
}
$contents = ftp_nlist($conn_id, "*.pdf");
/**
* Liste de tout les fichiers disponible dans le repertoire
* et associe une clé pour faciliter le tri
*/
$tabFichiersFtp = array();
foreach ($contents as $filename){
$indice = 0;
if (preg_match('/[g|c][0-9]+\.pdf/', $filename) ||
preg_match('/[g|c][0-9]+-[0-9]{1,2}\.pdf/', $filename)){
list($ref, $indice) = explode(
'-',
str_replace(array('.pdf', 'g', 'c'), array('','',''), $filename)
);
if(empty($indice)) $indice = 0;
$tabFichiersFtp[$ref.'-'.$indice] = strtolower($filename);
// Fichiers en anomalies
} else {
if ($test){
echo "Erreur : Anomalie fichier numérisé $filename\n";
} else {
$subject = "Erreur : Anomalie fichier numérisé";
$message = "Le fichier $filename a été trouvé et ne correspond pas au format attendu";
$headers = 'From: supportdev@scores-decisions.com' . "\r\n" .
'Reply-To: supportdev@scores-decisions.com';
mail('supportdev@scores-decisions.com', $subject, $message, $headers);
}
}
}
/**
* Tri des fichiers par ordre décroissant
* Les noms des fichiers sont incrémenté par 1
*/
krsort($tabFichiersFtp);
/**
* Dans le cas ou il y a eu une erreur de scan, la production passe a nouveau le
* document dans le scanner et le fichier est envoyé sur le ftp
* Le document est nommé G[ref],G[ref]-1,G[ref]-2,.....pdf.
* On garde donc le dernier document scanné.
*/
$lastRef = '';
$tabFichiersTemp = array();
foreach($tabFichiersFtp as $k => $val)
{
list($ref, $indice) = explode('-',$k);
if( $lastRef != $ref ) {
$tabFichiersTemp[$ref] = $val;
}
$lastRef = $ref;
}
$tabFichiers = $tabFichiersTemp;
unset($tabFichiersTemp);
/**
* Pour chaque commande, test de la présence d'un fichier associé
* Si le fichier correspond téléchargement du fichier
*/
foreach ($tabCommandes as $ref => $commande){
foreach ($tabFichiers as $refAssocie => $fichier){
if (substr($ref,1) == $refAssocie){
echo date ('Y/m/d - H:i:s')." - Traitement de la commande $ref ".EOL;
if ($test){
echo date ('Y/m/d - H:i:s')." - Fichier $fichier ".EOL;
} else {
//Récupération du fichier depuis le FTP (s'il n'existe pas déjà)
if (!file_exists(ACTES_IGNUM_LOCAL_DIR.$fichier)){
if (ftp_get($conn_id, ACTES_IGNUM_LOCAL_DIR.$fichier, $fichier, FTP_BINARY, 0)) {
echo date ('Y/m/d - H:i:s')." - Fichier $fichier téléchargé depuis le serveur FTP.".EOL;
} else {
echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de télécharger le fichier $fichier !".EOL;
}
}
//Copie et renommage du fichier suivant la ref infogreffe (s'il n'existe pas déjà)
$sirenC = $commande['siren'];
$refC = $commande['refDocument'];
$nomCible = "acte-$sirenC-$refC.pdf";
if (preg_match('/^([0-9]{4}_).*?$/', $refC, $matches)){
$nomCible = "bilan-$sirenC-$refC.pdf";
}
if (file_exists(ACTES_IGNUM_LOCAL_DIR.$fichier) &&
!file_exists(ACTES_IG_LOCAL_DIR.$nomCible)){
if (rename(ACTES_IGNUM_LOCAL_DIR.$fichier, ACTES_IG_LOCAL_DIR.$nomCible)){
echo date ('Y/m/d - H:i:s')." - Fichier ".ACTES_IGNUM_LOCAL_DIR.$fichier." déplacé en ".ACTES_IG_LOCAL_DIR.$nomCible.".".EOL;
} else {
echo date ('Y/m/d - H:i:s')." ERREUR - Impossible de déplacer ".ACTES_IGNUM_LOCAL_DIR.$fichier." en ".ACTES_IG_LOCAL_DIR.$nomCible.' !'.EOL;
}
}
//Envoi du mail et Mise à jour de la commande
$testMail = false;
if (file_exists(ACTES_IG_LOCAL_DIR.$nomCible)){
if ($testMail){
echo "Envoi fichier $nomCible ($ref) à ".$commande['emailCommande'];
} else {
$report_txt.= "$ref intégré à l'extranet";
$isMailSent = false;
if (trim($commande['emailCommande'])!=''){
$isMailSent = sendMail($commande, $nomCible);
} else {
$isMailSent = true;
}
if ($isMailSent){
echo date ('Y/m/d - H:i:s')." - Commande $ref mise à jour".EOL;
mysql_update(
'commandes',
array( 'dateReception' => date('YmdHis') ),
'idCommande='.$commande['idCommande']
);
$report_txt.= ' - Email envoyé à '.$commande['emailCommande'];
} else {
$report_txt.= ' - Email non envoyé !';
echo date ('Y/m/d - H:i:s')." ERREUR - Email non envoyé et commande $ref non mise à jour".EOL;
}
$report_txt.= "\n";
}
}
}
break;
}
}
}
ftp_close($conn_id);
//Envoi du mail de rapport
if (!$test && !$testMail){
if (mail($report_email, $report_subject, $report_txt)){
echo date ('Y/m/d - H:i:s')."Rapport envoyé.";
} else {
echo date ('Y/m/d - H:i:s')."Erreur lors de l'envoir du rapport !";
}
}
?>