443 lines
18 KiB
PHP
443 lines
18 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../application/bin.bootstrap.php';
|
|
|
|
// --- Options
|
|
$displayUsage = false;
|
|
try {
|
|
$opts = new Zend_Console_Getopt(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>)",
|
|
'type-s' => "Type de document : bilan, acte",
|
|
));
|
|
$opts->parse();
|
|
$optionsNb = count($opts->getOptions());
|
|
} catch (Zend_Console_Getopt_Exception $e) {
|
|
$displayUsage = true;
|
|
}
|
|
|
|
// --- Aide / Options
|
|
if ($optionsNb == 0 || isset($opts->help)) {
|
|
$displayUsage = true;
|
|
}
|
|
|
|
// --- Usage
|
|
if ($displayUsage) {
|
|
echo "Vérifie les actes numérisés reçus en provenance des Greffes.";
|
|
echo "\n\n";
|
|
echo $opts->getUsageMessage();
|
|
echo "\n";
|
|
exit;
|
|
}
|
|
|
|
$testMail = false;
|
|
|
|
$test = false;
|
|
if (isset($opts->list)){
|
|
$test = true;
|
|
}
|
|
|
|
$types = array('bi', 'ac');
|
|
|
|
// Configuration FTP
|
|
define ('ACTES_IGNUM_FTP_URL', 'ftp.scores-decisions.com');
|
|
define ('ACTES_IGNUM_FTP_USER', 'mpc2500');
|
|
define ('ACTES_IGNUM_FTP_PASS', 'passmpc78');
|
|
|
|
$pathIn = $c->profil->path->shared.'/files';
|
|
|
|
$report_email = $c->profil->mail->email->support;
|
|
$report_subject = 'Traitement des actes '.date('Y-m-d H:i:s');
|
|
$report_txt = '';
|
|
|
|
function sendMail($commande, $type){
|
|
$subject = "Actes ou Statuts disponible pour ".$commande->raisonSociale.' ('.$commande->siren.')';
|
|
$message = "Bonjour,\n\n";
|
|
$message.= "Le document commandé pour ".$commande->raisonSociale." (siren ".$commande->siren.") est disponible en téléchargement sur le site de Scores & Décisions.\r\n\r\n";
|
|
if ($commande->refClient!='') {
|
|
$message = "Votre référence : ".$commande->refClient."\r\n\r\n";
|
|
}
|
|
switch ( $type ) {
|
|
case 'BI':
|
|
$dateBilan = substr($commande->bilanCloture,8,2).'/'.substr($commande->bilanCloture,5,2).'/'.substr($commande->bilanCloture,0,4);
|
|
$message.= "Bilan cloturé le ".$dateBilan;
|
|
break;
|
|
case 'AC':
|
|
$dateActe = substr($commande->acteDate,8,2).'/'.substr($commande->acteDate,5,2).'/'.substr($commande->acteDate,0,4);
|
|
$dateDepot = substr($commande->depotDate,8,2).'/'.substr($commande->depotDate,5,2).'/'.substr($commande->depotDate,0,4);
|
|
$message.= "Acte n°".$commande->acteNum." du ".$dateActe." (Dépot n°".$commande->depotNum." du ".$dateDepot.") ";
|
|
break;
|
|
}
|
|
$message.= "\n\n";
|
|
|
|
$message.= "Consulter la fiche identité http://extranet.scores-decisions.com/identite/fiche/siret/".$commande->siren.", puis rubrique \"Pieces Officielles\"\n";
|
|
|
|
$message.= "ou directement depuis la page suivante http://extranet.scores-decisions.com/pieces";
|
|
switch ( $type ) {
|
|
case 'BI':
|
|
$message.= "/bilans/siret/".$commande->siren;
|
|
break;
|
|
case 'AC':
|
|
$message.= "/actes/siret/".$commande->siren;
|
|
break;
|
|
}
|
|
$message.= "\n\n";
|
|
|
|
$message.= "Bien cordialement, \n";
|
|
$message.= "Le service support.\n";
|
|
$message.= "\n";
|
|
|
|
$message.= "--";
|
|
|
|
$message.= "\n\n";
|
|
|
|
$message.= "SCORES & DECISIONS";
|
|
$message.= "\n";
|
|
$message.= "Service support";
|
|
$message.= "\n";
|
|
$message.= "1, rue de Clairefontaine - 78120 RAMBOUILLET";
|
|
$message.= "\n";
|
|
$message.= "tél : 0 811 261 216";
|
|
$message.= "\n";
|
|
$message.= "fax : 33 (0)1 75 43 85 74";
|
|
$message.= "\n";
|
|
$message.= "support@scores-decisions.com";
|
|
$message.= "\n";
|
|
$message.= "http://www.scores-decisions.com/";
|
|
$message.= "\n";
|
|
$message.= "Scores & Décisions est l'acteur nouvelle génération de l'information et de l'évaluation des entreprises";
|
|
|
|
$message.= "\n\n";
|
|
|
|
$message.= "Pensez à l'environnement avant d'imprimer ce message !";
|
|
$message.= "\n";
|
|
$message.= "Save paper - think before you print";
|
|
$message.= "\n";
|
|
|
|
$headers = 'From: support@scores-decisions.com' . "\r\n" .
|
|
'Reply-To: support@scores-decisions.com';
|
|
|
|
if ( mail(strtolower($commande->email), $subject, utf8_decode($message), $headers) ){
|
|
echo date ('Y/m/d - H:i:s').' - Un email a été envoyé à '.$commande->email." pour la commande ".$commande->id.".\n";
|
|
return true;
|
|
} else {
|
|
echo date ('Y/m/d - H:i:s').' - ERREUR : Impossible d\'envoyer l\'email à '.$commande->email." pour la commande ".$commande->id.".\n";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Liste des commandes non traités depuis la base de données
|
|
*/
|
|
$tabCommandes = array();
|
|
if (in_array('ac', $types)) {
|
|
$sql = "SELECT * FROM sdv1.greffe_commandes_ac WHERE mode=:mode AND dateCommande!=:commande AND dateEnvoi=:envoi";
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->bindValue('mode', 'C');
|
|
$stmt->bindValue('commande', '0000-00-00 00:00:00');
|
|
$stmt->bindValue('envoi', '0000-00-00 00:00:00');
|
|
$stmt->execute();
|
|
if ($stmt->rowCount() > 0) {
|
|
while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) {
|
|
$tabCommandes['G-AC-'.$row->id] = $row;
|
|
}
|
|
}
|
|
}
|
|
if (in_array('bi', $types)) {
|
|
$sql = "SELECT * FROM sdv1.greffe_commandes_bi WHERE mode=:mode AND dateCommande!=:commande AND dateEnvoi=:envoi";
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->bindValue('mode', 'C');
|
|
$stmt->bindValue('commande', '0000-00-00 00:00:00');
|
|
$stmt->bindValue('envoi', '0000-00-00 00:00:00');
|
|
$stmt->execute();
|
|
if ($stmt->rowCount() > 0) {
|
|
while ($row = $stmt->fetch(\PDO::FETCH_OBJ)) {
|
|
$tabCommandes['G-BI-'.$row->id] = $row;
|
|
}
|
|
}
|
|
}
|
|
$nbCommandes = count($tabCommandes);
|
|
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;
|
|
}
|
|
ftp_pasv($conn_id, true);
|
|
$contents = ftp_nlist($conn_id, "*.pdf");
|
|
if ($contents === false) {
|
|
echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de se connecter au serveur FTP (".ACTES_IGNUM_FTP_URL.") !\n";
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
$f = strtolower($filename);
|
|
if (preg_match('/g-(ac|bi)-[0-9]+\.pdf/', $f)
|
|
|| preg_match('/g-(ac|bi)-[0-9]+-[0-9]{1,2}\.pdf/', $f)) {
|
|
$part = substr(str_replace('.pdf', '', $f), 5);
|
|
$p = strpos($part, '-');
|
|
if ( $p === false ) {
|
|
$ref = substr($f, 0, 5) . $part;
|
|
$indice = 0;
|
|
} else {
|
|
$ref = substr($f, 0, 5) . substr($part, 0, $p);
|
|
$indice = substr($part, $p+1);
|
|
}
|
|
$tabFichiersFtp[strtoupper($ref).'-'.$indice] = $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) {
|
|
$part = substr($k, 5);
|
|
$p = strpos($part, '-');
|
|
if ($p === false) {
|
|
$ref = substr($k, 0, 5) . $part;
|
|
} else {
|
|
$ref = substr($k, 0, 5) . substr($part, 0, $p);
|
|
}
|
|
|
|
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 ($ref == $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($pathIn.'/'.$fichier)) {
|
|
if (ftp_get($conn_id, $pathIn.'/'.$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";
|
|
}
|
|
}
|
|
|
|
switch (substr($ref,2,2)) {
|
|
case 'BI':
|
|
$infogreffe = new Metier_Infogreffe_DocBI();
|
|
$infogreffe->setSiren($commande->siren);
|
|
//Format date cloture
|
|
$dateCloture = substr($commande->bilanCloture,0,4) . '-' .
|
|
substr($commande->bilanCloture,5,2) . '-' .
|
|
substr($commande->bilanCloture,8,2);
|
|
$path = $infogreffe->getFilePath($commande->bilanType, $dateCloture);
|
|
$nomCible = $infogreffe->getFileName($commande->bilanType, $dateCloture);
|
|
$fileOut = $c->profil->infogreffe->storage->path.'/'.$path.'/'.$nomCible;
|
|
|
|
$isFileOnStorage = false;
|
|
if (file_exists($fileOut)) {
|
|
$isFileOnStorage = true;
|
|
echo date ('Y/m/d - H:i:s')." - Fichier ".$pathIn.'/'.$fichier." déjà présent en ".$fileOut.".\n";
|
|
} else {
|
|
if (copy($pathIn.'/'.$fichier, $fileOut)) {
|
|
$isFileOnStorage = true;
|
|
echo date ('Y/m/d - H:i:s')." - Fichier ".$pathIn.'/'.$fichier." déplacé en ".$fileOut.".\n";
|
|
} else {
|
|
echo date ('Y/m/d - H:i:s')." ERREUR - Impossible de déplacer ".$pathIn.'/'.$fichier." en ".$fileOut." !\n";
|
|
}
|
|
}
|
|
|
|
// --- Lecture présence référence bilan
|
|
if ($commande->bilanType=='sociaux') {
|
|
$sql = "SELECT * FROM jo.greffes_bilans WHERE siren=:siren AND date_cloture=:cloture AND type_comptes='' OR type_comptes='sociaux'";
|
|
} else {
|
|
$sql = "SELECT * FROM jo.greffes_bilans WHERE siren=:siren AND date_cloture=:cloture AND type_comptes='consolides'";
|
|
}
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->bindValue('siren', $commande->siren);
|
|
$stmt->bindValue('cloture', $dateCloture);
|
|
$stmt->execute();
|
|
$item = $stmt->fetch(\PDO::FETCH_OBJ);
|
|
|
|
// --- Enregistrement
|
|
if ($isFileOnStorage && $item->pdfDate == '0000-00-00') {
|
|
$infos = $infogreffe->pdfInfos($fileOut);
|
|
if (false !== $infos) {
|
|
$data = array(
|
|
'pdfLink' => $nomCible,
|
|
'pdfSize' => $infos['size'],
|
|
'pdfPage' => $infos['pages'],
|
|
'pdfVer' => $infos['version'],
|
|
'pdfDate' => date('Ymd'),
|
|
);
|
|
try {
|
|
$conn->update('jo.greffes_bilans', $data, array('id' => $item->id));
|
|
} catch(\Doctrine\DBAL\DBALException $e) {
|
|
echo $e->getMessage();
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'AC':
|
|
$sql = "SELECT id, siren, numRC, LPAD(numGreffe,4,0) AS numGreffe, pdfLink,
|
|
pdfSize, pdfPage, pdfDate, num_depot, date_depot, date_acte,
|
|
LPAD(num_acte,2,0) AS num_acte, type_acte, type_acte_libelle,
|
|
nbpages_acte, decision_nature, decision_libelle FROM jo.greffes_actes
|
|
WHERE siren=:siren AND num_depot=:depot AND num_acte=:acte AND type_acte=:type";
|
|
$stmt = $conn->prepare($sql);
|
|
$stmt->bindValue('siren', $commande->siren);
|
|
$stmt->bindValue('depot', $commande->depotNum);
|
|
$stmt->bindValue('acte', $commande->acteNum);
|
|
$stmt->bindValue('type', $commande->acteType);
|
|
$stmt->execute();
|
|
$item = $stmt->fetch(\PDO::FETCH_OBJ);
|
|
|
|
$infogreffe = new Metier_Infogreffe_DocAC();
|
|
$infogreffe->setSiren($commande->siren);
|
|
$date = $commande->acteDate;
|
|
if ($date == '0000-00-00') {
|
|
$date = $commande->depotDate;
|
|
}
|
|
|
|
$path = $infogreffe->getFilePath($date);
|
|
//(Numéro du Greffe)-(dossier_millesime)-(dossier_statut)-(dossier_chrono)-(num_depot)
|
|
$options = $item->numGreffe . '-' . substr($item->numRC,0,2) . '-' . substr($item->numRC,2,1) . '-' . substr($item->numRC,3) . '-' . $item->num_depot;
|
|
$nomCible = $infogreffe->getFileName($date, $commande->acteNum, $commande->acteType, $options);
|
|
|
|
$fileOut = $c->profil->infogreffe->storage->path.'/'.$path.'/'.$nomCible;
|
|
|
|
$isFileOnStorage = false;
|
|
|
|
if (file_exists($fileOut)) {
|
|
$isFileOnStorage = true;
|
|
echo date ('Y/m/d - H:i:s')." - Fichier ".$pathIn.'/'.$fichier." déjà présent en ".$fileOut.".\n";
|
|
} else {
|
|
if (copy($pathIn.'/'.$fichier, $fileOut)) {
|
|
$isFileOnStorage = true;
|
|
echo date ('Y/m/d - H:i:s')." - Fichier ".$pathIn.'/'.$fichier." déplacé en ".$fileOut.".\n";
|
|
} else {
|
|
echo date ('Y/m/d - H:i:s')." ERREUR - Impossible de déplacer ".$pathIn.'/'.$fichier." en ".$fileOut." !\n";
|
|
}
|
|
}
|
|
|
|
if ($isFileOnStorage && $item->pdfDate == '0000-00-00') {
|
|
$infos = $infogreffe->pdfInfos($fileOut);
|
|
if ( false !== $infos ) {
|
|
$data = array(
|
|
'pdfLink' => $nomCible,
|
|
'pdfSize' => $infos['size'],
|
|
'pdfPage' => $infos['pages'],
|
|
'pdfVer' => $infos['version'],
|
|
'pdfDate' => date('Ymd'),
|
|
);
|
|
try {
|
|
$conn->update('jo.greffes_actes', $data, array('id' => $item->id));
|
|
echo " = enregistrement.\n";
|
|
} catch(\Doctrine\DBAL\DBALException $e) {
|
|
echo $e->getMessage();
|
|
}
|
|
}
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
// Envoi du mail et Mise à jour de la commande
|
|
if (file_exists($fileOut)) {
|
|
if ( $testMail ) {
|
|
echo "Envoi fichier $nomCible ($ref) à ".$commande->email;
|
|
} else {
|
|
$report_txt.= "$ref intégré à l'extranet";
|
|
$isMailSent = false;
|
|
if (trim($commande->email)!=''){
|
|
$isMailSent = sendMail($commande, substr($ref,2,2));
|
|
} else {
|
|
$isMailSent = true;
|
|
}
|
|
if ( $isMailSent ) {
|
|
$data = array( 'dateEnvoi' => date('YmdHis'));
|
|
switch ( substr($ref,2,2) ) {
|
|
case 'BI':
|
|
$conn->update('sdv1.greffe_commandes_bi', $data, array('id' => $commande->id));
|
|
break;
|
|
case 'AC':
|
|
$conn->update('sdv1.greffe_commandes_ac', $data, array('id' => $commande->id));
|
|
break;
|
|
}
|
|
echo date ('Y/m/d - H:i:s')." - Commande $ref mise à jour\n";
|
|
$report_txt.= ' - Email envoyé à '.$commande->email;
|
|
} 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";
|
|
}
|
|
} // Fin envoi mail
|
|
}
|
|
} // Fin condition ref
|
|
}
|
|
}
|
|
ftp_close($conn_id);
|
|
|
|
if (empty($report_txt)) {
|
|
$report_txt = "Aucun envoi.";
|
|
}
|
|
|
|
//Envoi du mail de rapport
|
|
if (!$test && !$testMail){
|
|
$headers = 'From: supportdev@scores-decisions.com';
|
|
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";
|
|
}
|
|
}
|
|
|
|
?>
|