extranet/batch/getActes.php
2012-11-05 13:53:14 +00:00

271 lines
9.2 KiB
PHP

#!/usr/bin/php -q
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
/** Zend_Application */
require_once 'Zend/Application.php';
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
try {
$opts = new Zend_Console_Getopt(
//Options
array(
'help|?' => "Affiche l'aide.",
'list' => "Liste les actes en attente disponible sur le FTP et affiche les informations",
'get-s' => "Recupère seulement les actes du FTP (un seul document si la référence est spécifier G<NNN> )",
'send-s' => "Récupère les actes et envoi un mail à chaque client (un seul acte si la référence est spécifier G<NNN>)",
)
);
$opts->parse();
} catch (Zend_Console_Getopt_Exception $e) {
echo $e->getUsageMessage();
exit;
}
//Usage
if(count($opts->getOptions())==0 || isset($opts->help))
{
echo "Vérifie les actes numérisés reçus en provenance des Greffes.";
echo "\n\n";
echo $opts->getUsageMessage();
echo "\n";
exit;
}
$test = false;
if (isset($opts->list)){
$test = true;
}
$configuration = new Zend_Config_Ini(APPLICATION_PATH . '/configs/configuration.ini');
//Configuration FTP
define ('ACTES_IGNUM_FTP_URL', 'ftp2.scores-decisions.com');
define ('ACTES_IGNUM_FTP_USER', 'mpc2500');
define ('ACTES_IGNUM_FTP_PASS', 'passmpc78');
define ('PATH_DATA', $configuration->path->data);
define ('ACTES_IGNUM_LOCAL_DIR', PATH_DATA.'/'.$configuration->path->pdf.'/scan/');
define ('ACTES_IG_LOCAL_DIR', PATH_DATA.'/'.$configuration->path->pdf.'/');
$report_email = $configuration->mail->production;
$report_subject = 'Traitement des actes '.date('Y-m-d H:i:s');
$report_txt = '';
require_once '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/fichier/pdf/$nomCible\r\n";
$headers = 'From: infoslegales@scores-decisions.com' . "\r\n" .
'Reply-To: infoslegales@scores-decisions.com';
if ( mail($commande['emailCommande'], $subject, utf8_decode($message), $headers) ){
echo date ('Y/m/d - H:i:s').' - Un email a été envoyé à '.$commande['emailCommande']." pour la commande $nomCible.\n";
return true;
} else {
echo date ('Y/m/d - H:i:s').' - ERREUR : Impossible d\'envoyer l\'email à '.$commande['emailCommande']." pour la commande $nomCible.\n";
return false;
}
}
set_time_limit(0);
/**
* Connexion à la base de données
*/
$db = Zend_Db::factory($configuration->databases->db->sdv1);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
/**
* Liste des commandes non traités depuis la base de données
*/
$sql = "SELECT idCommande, idUser, login, emailCommande, siren, refDocument, typeCommande, dateCommande FROM commandes WHERE dateReception=0";
$tabCommandes = $db->fetchAssoc($sql);
$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 !\n";
/**
* 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.") !\n";
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.")!\n";
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\n";
if ($test){
echo date ('Y/m/d - H:i:s')." - Fichier $fichier \n";
} 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.\n";
} else {
echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de télécharger le fichier $fichier !\n";
}
}
//Copie et renommage du fichier suivant la ref infogreffe (s'il n'existe pas déjà)
$sirenC = $commande['siren'];
$refC = $commande['refDocument'];
require_once 'Infogreffe/Infogreffe.php';
$infogreffe = new Infogreffe();
if (preg_match('/^([0-9]{4}_).*?$/', $refC, $matches)){
$path = $infogreffe->bilanPath($refC);
$nomCible = $infogreffe->bilanFilename($sirenC, $refC);
} else {
$path = $infogreffe->actePath($refC);
$nomCible = $infogreffe->acteFilename($sirenC, $refC);
}
if (file_exists(ACTES_IGNUM_LOCAL_DIR.$fichier) &&
!file_exists(PATH_DATA.$path.$nomCible)) {
if (rename(ACTES_IGNUM_LOCAL_DIR.$fichier, PATH_DATA.$path.$nomCible)){
echo date ('Y/m/d - H:i:s')." - Fichier ".ACTES_IGNUM_LOCAL_DIR.$fichier." déplacé en ".PATH_DATA.$path.$nomCible.".\n";
} else {
echo date ('Y/m/d - H:i:s')." ERREUR - Impossible de déplacer ".ACTES_IGNUM_LOCAL_DIR.$fichier." en ".PATH_DATA.$path.$nomCible." !\n";
}
}
//Envoi du mail et Mise à jour de la commande
$testMail = false;
if (file_exists(PATH_DATA.$path.$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\n";
$commandesM = new Application_Model_Commandes();
$data = array( 'dateReception' => date('YmdHis'));
$commandesM->update($data, '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\n";
}
$report_txt.= "\n";
}
}
}
break;
}
}
}
ftp_close($conn_id);
//Envoi du mail de rapport
if (!$test && !$testMail){
if (mail($report_email, $report_subject, utf8_decode($report_txt))){
echo date ('Y/m/d - H:i:s')." - Rapport envoyé.\n";
} else {
echo date ('Y/m/d - H:i:s')." - Erreur lors de l'envoir du rapport !\n";
}
}
?>