362 lines
14 KiB
PHP
362 lines
14 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>)",
|
|
'control' => "Control",
|
|
)
|
|
);
|
|
$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;
|
|
}
|
|
|
|
$c = new Zend_Config($application->getOptions());
|
|
Zend_Registry::set('config', $c);
|
|
|
|
$test = false;
|
|
if (isset($opts->list)){
|
|
$test = true;
|
|
}
|
|
|
|
//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', $c->profil->path->data);
|
|
define ('ACTES_IGNUM_LOCAL_DIR', PATH_DATA.'/pdf/scan/');
|
|
define ('ACTES_IG_LOCAL_DIR', PATH_DATA.'/pdf/');
|
|
|
|
$report_email = $c->profil->mail->email->support;
|
|
$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($c->profil->db->sdv1);
|
|
Zend_Db_Table_Abstract::setDefaultAdapter($db);
|
|
|
|
/**
|
|
* List actes files and check if an entry exist in the database
|
|
* greffes/actes/AAAA/MM
|
|
* preg_match('/^acte-([0-9]{9})-(ST)-([0-9]{8})-.*\.pdf/', $fichier, $matches)
|
|
* preg_match('/^acte-([0-9]{9})-([0-9a-zA-Z]{1,})-([0-9]{8})-.*-([0-9]{2})\.pdf/', $fichier, $matches)
|
|
*/
|
|
if ($opts->control) {
|
|
|
|
$dir = PATH_DATA.'/greffes/actes';
|
|
if (is_dir($dir)) {
|
|
if ($dh = opendir($dir)) {
|
|
//Annee
|
|
while (($anneeDir = readdir($dh)) !== false) {
|
|
if ($anneeDir != '.' || $anneeDir != '..') {
|
|
echo "Dir ".$dir . DIRECTORY_SEPARATOR . $anneeDir."\n";
|
|
if ($dhAnneeDir = opendir($dir . DIRECTORY_SEPARATOR . $anneeDir)) {
|
|
//Mois
|
|
while (($moisDir = readdir($dhAnneeDir)) !== false) {
|
|
echo "Dir ".$dir . DIRECTORY_SEPARATOR . $anneeDir . DIRECTORY_SEPARATOR . $moisDir."\n";
|
|
if ($moisDir != '.' || $moisDir != '..') {
|
|
//Fichier
|
|
if ($dhFile = opendir($dir . DIRECTORY_SEPARATOR . $anneeDir . DIRECTORY_SEPARATOR . $moisDir)) {
|
|
while (($file = readdir($dhFile)) !== false) {
|
|
if ($file != '.' || $file != '..') {
|
|
|
|
if (preg_match('/^acte-([0-9]{9})-([0-9a-zA-Z]{1,})-([0-9]{8})-.*-([0-9]{2})\.pdf/', $file, $matches)) {
|
|
$siren = $matches[1];
|
|
$type = $matches[2];
|
|
$date = $matches[3];
|
|
$num = $matches[4];
|
|
$actesM = new Application_Model_ActesFiles();
|
|
$sql = $actesM->select()
|
|
->where('siren=?', $siren)
|
|
->where('type=?', $type)
|
|
->where('date=?', $date)
|
|
->where('num=?', $num);
|
|
$result = $actesM->fetchRow($sql);
|
|
if ( null === $result ) {
|
|
echo "Insert $file\n";
|
|
$actesM->insert(array(
|
|
'siren' => $siren,
|
|
'type' => $type,
|
|
'date' => $date,
|
|
'num' => $num,
|
|
'file' => $file,
|
|
));
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
closedir($dhFile);
|
|
}
|
|
}
|
|
}
|
|
closedir($dhAnneeDir);
|
|
}
|
|
}
|
|
}
|
|
closedir($dh);
|
|
}
|
|
}
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
$type = 'bilan';
|
|
} else {
|
|
$path = $infogreffe->actePath($refC);
|
|
$nomCible = $infogreffe->acteFilename($sirenC, $refC);
|
|
$type = 'acte';
|
|
}
|
|
|
|
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)){
|
|
if ( $type == 'acte' ){
|
|
preg_match('/^acte-([0-9]{9})-([0-9a-zA-Z]{1,})-([0-9]{8})-(.*)-(.*)-(.*)-(.*)-(.*)-([0-9]{1,})\.pdf$/', $nomCible, $matches);
|
|
$siren = $matches[1];
|
|
$type_acte = $matches[2];
|
|
$date_acte = $matches[3];
|
|
$num_acte = $matches[9];
|
|
$actesM = new Application_Model_ActesFiles();
|
|
$sql = $actesM->select()->where('file=?',$nomCible);
|
|
$result = $actesM->fetchRow($sql);
|
|
if ( null === $result ) {
|
|
$actesM->insert(array(
|
|
'siren' => $siren,
|
|
'type' => $type_acte,
|
|
'date' => $date_acte,
|
|
'num' => $num_acte,
|
|
'file' => $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);
|
|
|
|
if (empty($report_txt)) {
|
|
$report_txt = "Aucun envoi.";
|
|
}
|
|
|
|
//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";
|
|
}
|
|
}
|
|
|
|
?>
|