+
+ |
+ FACTURE ORIGINALE |
+
+
+ SCORES & DECISIONS SAS |
+ |
+
+
+ S.A.S au capital 612 250 € |
+ |
+
+
+ 18, rue Saulnier – 75009 PARIS |
+ |
+
+
+ RCS VERSAILLES B 494 967 938 |
+ |
+
+
+ |
+
+
+ Tél. : 01 75 43 80 10 |
+ |
+
+
+ Fax : 01 75 43 85 74 |
+ |
+
+
+ compta@scores-decisions.com |
+ |
+
+
+ |
+
+
+ No de TVA : FR 84 494 967 938 |
+ |
+
+
+ |
+
+
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
|
+
+
+ |
+
+
+
+
+ Facture N° =$tplt['numFacture']?> du =$tplt['dateFacture']?> |
+
+ |
+
+
+ |
+
+
+ Raison sociale : |
+ =$tplt['raisonSociale']?> |
+ Client N° : |
+ =$tplt['numClient']?> |
+
+
+ ID client : |
+ =$tplt['refClient']?> |
+ |
+ |
+
+
+ Adresse de facturation : |
+ =$tplt['adresseFact1']?> =$tplt['adresseFact2']?> =$tplt['adresseFact3']?> |
+ Adresse de livraison : |
+ =$tplt['adresseLiv1']?> =$tplt['adresseLiv2']?> =$tplt['adresseLiv3']?> |
+
+
+ SIREN : |
+ =$tplt['siren']?> |
+ NIC : |
+ =$tplt['nic']?> |
+
+
+ N° de TVA : |
+ =$tplt['numtva']?> |
+ |
+ |
+
+
+ Contact : |
+ =$tplt['signataireNom']?> |
+ Correspondant : |
+ =$tplt['correspNom']?> |
+
+
+ E-mail : |
+ =$tplt['signataireMail']?> |
+ E-mail : |
+ =$tplt['correspMail']?> |
+
+
+ Téléphone : |
+ =$tplt['signataireTel']?> |
+ Téléphone : |
+ =$tplt['correspTel']?> |
+
+
+ |
+
+
+ |
+
+
+ Intitulé Prestations |
+ Quantité |
+ PU € HT |
+ Prix Total € HT |
+ TVA € |
+ Avoir / Remise |
+ Prix Total € TTC |
+
+ foreach ($tplt['ligne'] as $ligne=>$tplt2) { ?>
+
+ =$tplt2['intitule']?> |
+ =$tplt2['quantite']?> |
+ =number_format($tplt2['puht'], 2, ',', ' ')?> € |
+ =number_format($tplt2['totalht'], 2, ',', ' ')?> € |
+ =number_format($tplt2['tva'], 2, ',', ' ')?> € |
+ =number_format($tplt2['remise'], 2, ',', ' ')?> € |
+ =number_format($tplt2['totalttc'], 2, ',', ' ')?> € |
+
+ } ?>
+
+
+
|
+
|
+
|
+ =number_format($tplt['totalht'], 2, ',', ' ')?> € |
+ =number_format($tplt['tva'], 2, ',', ' ')?> € |
+ =number_format($tplt['remise'], 2, ',', ' ')?> € |
+ =number_format($tplt['totalttc'], 2, ',', ' ')?> € |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ Date de paiement : |
+ 5 jours a compter de la date de facturation |
+
+
+ Conditions d’escompte : |
+ Pas d'escompte en cas de paiement anticipé |
+
+
+ Taux indicatif de TVA : |
+ 19,60% |
+
+
+ Pénalités de retard : |
+ Se référer aux conditions générales de services |
+
+
+
+
\ No newline at end of file
diff --git a/batch/fedaso.php b/batch/fedaso.php
new file mode 100644
index 00000000..300e97c8
--- /dev/null
+++ b/batch/fedaso.php
@@ -0,0 +1,963 @@
+#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
+0) $nbEnvois=$nbEnvoisUti;
+ if (date('N')==5) $initReferentiel=true;
+ break;
+ case 'r':
+ $chargerRetour=true;
+ break;
+ case 'v':
+ $modeDebug=true;
+ break;
+ case 'l':
+ $lastDepot=true;
+ break;
+ case 't':
+ $initReferentiel=true;
+ break;
+ case '-':
+ case '?':
+ die($strInfoScript);
+ break;
+ default:
+ die('Option '. $argv[$i] . ' inconnue !'.EOL);
+ break;
+ }
+ } else $tabFichLigneCmd[]=$argv[$i];
+}
+
+// 1: A supprimer quand Fedaso est nickel... d'ici
+if (!$modeDebug) {
+ switch (''.date('d-m')) {
+ case '01-01':
+ case '01-05':
+ case '25-12':
+ die();
+ break;
+ default:
+ if (date('N')>5) // Nombre ISO-8601 du jour de la semaine (ajout PHP 5.1.0) de 1 à 7 : Lundi à Dimanche
+ die();
+ break;
+ }
+}
+
+$nbPdfEncours=$nbPdfInexist=0;
+
+if (count($tabFichLigneCmd)==0) {
+ $dh = opendir($repCsvFedaso);
+ while (false !== ($filename = readdir($dh))) {
+ if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.txt')
+ $tabFichierIn[] = $filename;
+ }
+ sort($tabFichierIn);
+} else $tabFichierIn=$tabFichLigneCmd;
+
+if ($initReferentiel) {
+ if (date('N')==5) echo date('Y/m/d - H:i:s') ." - Génération hebdomadaire du référentiel OK...". EOL;
+ else echo date('Y/m/d - H:i:s') ." - Génération forcée du référentiel OK...". EOL;
+ $nb=file_put_contents($repPdfInfogreffe."/tableCodesRetours_$verFedasoRef.csv", $fedaso->getRefCodeRetour($sep,$eol));
+ echo date('Y/m/d - H:i:s') ." - Référentiel 'Codes Retours' : $nb lignes.". EOL;
+ $nb=file_put_contents($repPdfInfogreffe."/tableCodesVoies_$verFedasoRef.csv", $fedaso->getRefCodeVoie($sep,$eol));
+ echo date('Y/m/d - H:i:s') ." - Référentiel 'Codes Voies' : $nb lignes.". EOL;
+ $nb=$iDb->exportCSV('SELECT devIso, devNom FROM sdv1.devise_liste;', $repPdfInfogreffe."/tableCodesDevises_$verFedasoRef.csv",$sep,$eol);
+ echo date('Y/m/d - H:i:s') ." - Référentiel 'Devises' : $nb lignes.". EOL;
+ $nb=$iDb->exportCSV('SELECT codActe, libActe FROM jo.tabActes;', $repPdfInfogreffe."/tableCodesActes_$verFedasoRef.csv",$sep,$eol);
+ echo date('Y/m/d - H:i:s') ." - Référentiel 'Actes' : $nb lignes.". EOL;
+ $nb=$iDb->exportCSV('SELECT codeFct AS codFonction, libelle AS libFonction FROM jo.bodacc_fonctions;', $repPdfInfogreffe."/tableCodesFonctions_$verFedasoRef.csv",$sep,$eol);
+ echo date('Y/m/d - H:i:s') ." - Référentiel 'Fonctions' : $nb lignes.". EOL;
+ $nb=$iDb->exportCSV('SELECT g.bdfFibCodeEtab AS banque, g.bdfFibCodeGuichet AS guichet, b.bdfFibDenom40 AS nomBanque, b.bdfFibDenom10 AS sigleBanque, g.bdfFibDenom20 AS nomGuichet, g.bdfFibAdresse1 AS adresse1, g.bdfFibAdresse2 AS adresse2, g.bdfFibAdresse3 AS adresse3, g.CP, g.Ville
+ FROM insee.BDF_Etabs b, insee.BDF_Guichets g
+ WHERE b.bdfFibCodeEtab = g.bdfFibCodeEtab
+ ORDER BY banque, guichet;', $repPdfInfogreffe."/tableCodesGuichets_$verFedasoRef.csv",$sep,$eol);
+ echo date('Y/m/d - H:i:s') ." - Référentiel 'Guichets' : $nb lignes.". EOL;
+ $nb=$iDb->exportCSV('SELECT codPays3 AS codPays, libPays FROM jo.tabPays;', $repPdfInfogreffe."/tableCodesPays_$verFedasoRef.csv",$sep,$eol);
+ echo date('Y/m/d - H:i:s') ." - Référentiel 'Pays' : $nb lignes.". EOL;
+ $zip = new ZipArchive;
+ $res=$zip->open($repPdfInfogreffe."/tableReferentiel_$verFedasoRef.zip", ZipArchive::OVERWRITE);
+ if ($res === TRUE) {
+ $zip->addFile($repPdfInfogreffe."/tableCodesRetours_$verFedasoRef.csv", "tableCodesRetours_$verFedasoRef.csv");
+ $zip->addFile($repPdfInfogreffe."/tableCodesVoies_$verFedasoRef.csv", "tableCodesVoies_$verFedasoRef.csv");
+ $zip->addFile($repPdfInfogreffe."/tableCodesDevises_$verFedasoRef.csv", "tableCodesDevises_$verFedasoRef.csv");
+ $zip->addFile($repPdfInfogreffe."/tableCodesActes_$verFedasoRef.csv", "tableCodesActes_$verFedasoRef.csv");
+ $zip->addFile($repPdfInfogreffe."/tableCodesFonctions_$verFedasoRef.csv", "tableCodesFonctions_$verFedasoRef.csv");
+ $zip->addFile($repPdfInfogreffe."/tableCodesGuichets_$verFedasoRef.csv", "tableCodesGuichets_$verFedasoRef.csv");
+ $zip->addFile($repPdfInfogreffe."/tableCodesPays_$verFedasoRef.csv", "tableCodesPays_$verFedasoRef.csv");
+ $zip->close();
+ unlink($repPdfInfogreffe."/tableCodesRetours_$verFedasoRef.csv");
+ unlink($repPdfInfogreffe."/tableCodesVoies_$verFedasoRef.csv");
+ unlink($repPdfInfogreffe."/tableCodesDevises_$verFedasoRef.csv");
+ unlink($repPdfInfogreffe."/tableCodesActes_$verFedasoRef.csv");
+ unlink($repPdfInfogreffe."/tableCodesFonctions_$verFedasoRef.csv");
+ unlink($repPdfInfogreffe."/tableCodesGuichets_$verFedasoRef.csv");
+ unlink($repPdfInfogreffe."/tableCodesPays_$verFedasoRef.csv");
+ echo date('Y/m/d - H:i:s') ." - Compression ZIP du référentiel OK...". EOL;
+ } else {
+ echo date('Y/m/d - H:i:s') ." - ERREUR ZIP n°$res : Compression ZIP du référentiel impossible !". EOL;
+ }
+
+}
+
+/*
+$nbLignes=$iDb->exportCSV(file_get_contents($sql), $csv.'.tmp');
+$fp = fopen("./csv2sql.log", 'a');
+fwrite($fp, date('Y-m-d H:i:s')." - $base $sql $csv : $nbLignes lignes extraites".EOL);
+*/
+
+
+
+
+$tabTmp=$iDb2->select('fedaso', 'count(*) AS nb', "DATE(dateEnvoi)=DATE(NOW())", false, MYSQL_ASSOC);
+$nbEncours=$tabTmp[0]['nb'];
+$tabTmp=$iDb2->select('fedaso', 'DATE(MAX(dateEnvoi)) AS lastEnvoi', "1", false, MYSQL_ASSOC);
+$maxEnvoi=$tabTmp[0]['lastEnvoi'];
+$message='';
+
+if ($lastDepot || ($genereDepot && $nbEncours==0)) {
+ $nbEncours=0;
+ $strFichierOut='';
+ $tabActesASaisir=$tabFichierOut=array();
+ $tabTmp=$iDb->select('jo.tabActes', 'codActe', 'prioriteSaisie BETWEEN 1 AND 10', false, MYSQL_ASSOC);
+ foreach ($tabTmp as $actes)
+ $tabActesASaisir[]=$actes['codActe'];
+ $nbTypesSaisie=count($tabActesASaisir);
+ echo date('Y/m/d - H:i:s') ." - Il y a $nbTypesSaisie types d'actes en saisie.". EOL;
+
+ echo date('Y/m/d - H:i:s') ." - Recherche des $nbEnvois documents à envoyer en saisie.". EOL;
+
+ while($nbEncours<=$nbEnvois) {
+ if ($lastDepot)
+ $tabTmp=$iDb->select('sdv1.fedaso', 'siren, page, params, dateEnvoi AS dateHeure', "dateEnvoi BETWEEN '$maxEnvoi 00:00:00' AND '$maxEnvoi 23:59:59'", false, MYSQL_ASSOC);
+ else
+ $tabTmp=$iDb->select('sdv1.logs', 'siren, page, params, dateHeure', "page LIKE 'greffe_%' AND params<>'' AND params NOT LIKE 'Erreur%' GROUP BY siren, page, params ORDER BY dateHeure DESC", false, MYSQL_ASSOC);
+ foreach ($tabTmp as $actes) {
+ $siren =$actes['siren'];
+ $params=$actes['params'];
+ $pageAc=$actes['page'];
+ $dateCmd=$actes['dateHeure'];
+ if ($pageAc=='greffe_bilans') {
+ $multiDepot=false;
+ // L'acte a traiter est un bilan
+ $url=URL_BASE."bilan-$siren-$params.pdf".URL_SECURE;
+ //$url="http://extranet.scores-decisions.com/datafile.php?q=bilan-$siren-$params.pdf";
+ } elseif ($pageAc=='greffe_actes') {
+ // L'acte est un acte/document divers
+ if (preg_match('/\|/', $params)) {
+ $multiDepot=true;
+ // L'acte contient plusieurs dépôts
+ $tabParams=explode('-', $params);
+ $dateActe=$tabParams[1];
+ // On liste les actes du dépôt
+ $tabTmp2=$iDb->select('jo.greffes_actes', 'siren, type_acte, (date_acte*1) AS dateActe, numGreffe, numRC, num_depot, num_acte', "siren=$siren AND dateActe=$dateActe", false, MYSQL_ASSOC);
+ $tabDepots=array();
+ if (count($tabTmp2)>0) {
+ foreach ($tabTmp2 as $actes2) {
+ $numRC1=substr($actes2['numRC'],0,2);
+ $numRC2=substr($actes2['numRC'],2,1);
+ $numRC3=substr($actes2['numRC'],3);
+ $params=$actes2['type_acte'].'-'.$actes2['dateActe'].'-'.$actes2['numGreffe'].
+ "-$numRC1-$numRC2-$numRC3-".$actes2['num_depot'].'-'.$actes2['num_acte'];
+ $url=URL_BASE."acte-$siren-$params.pdf".URL_SECURE;
+ if (!in_array(''.$actes2['type_acte'], $tabActesASaisir)) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (exclu)".EOL;
+ continue;
+ } else {
+ $tabDepots[]=$params;
+ // On vérifie si cette acte n'est pas déjà saisie ou en saisie !
+ if (!$lastDepot) {
+ $tabTmp2=$iDb2->select('fedaso', 'count(*) AS nb', "siren=$siren AND page='$pageAc' AND params='$params'", false, MYSQL_ASSOC);
+ if ($tabTmp2[0]['nb']>0) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (en cours)".EOL;
+ continue;
+ }
+ }
+ $nomPdf=basename(preg_replace('/\?.*$/','',$url));
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.$nomPdf);
+ if (!$tabPdf) {
+ $page=getUrl($url, '', '', '', false);
+ if ($page['code']<>200 || !isset($page['header']['Content-Disposition']) || $page['header']['Content-Disposition']=='') {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (inexistant)".EOL;
+ $tabDepots=@$iGreffes->getListeActes($siren);
+ $nbDepots=count($tabDepots);
+ print_r($tabDepots);
+ die();
+ continue;
+ }
+ @mkdir($repPdfInfogreffe);
+ $fp=@fopen($repPdfInfogreffe.'/'.$nomPdf, 'w');
+ if (!$fp || !fwrite($fp, $page['body']))
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (erreur fichier local)".EOL;
+ @fclose($fp);
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.$nomPdf);
+ // randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
+ }
+ if (!$tabPdf) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (vide)".EOL;
+ unlink($repPdfInfogreffe.'/'.$nomPdf);
+ continue;
+ }
+
+ $pdfSize= $tabPdf['pdfSize'];
+ $pdfVer = $tabPdf['version'];
+ $pdfPage= $tabPdf['nbPages'];
+
+ $nbEncours++;
+ $tabFichierOut[]=$nomPdf;
+ $strFichierOut.="$nbEncours\t$dateCmd\t$pdfSize ko\t$pdfPage\t$nomPdf".EOL;
+
+ if(!$iDb2->insert('fedaso', array( 'siren' => $siren,
+ 'params' => $params,
+ 'page' => $pageAc,
+ 'dateEnvoi' => date('YmdHis'),
+ 'dateCmd' => $dateCmd,
+ 'pdfNum' => $nbEncours,
+ 'pdfSize' => $pdfSize,
+ 'pdfPage' => $pdfPage,
+ ))) {
+ if (!$lastDepot)
+ echo date('Y/m/d - H:i:s') ." - ERREUR lors de l'insertion de $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ } else
+ echo date('Y/m/d - H:i:s') ." - $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ if ($nbEncours>=$nbEnvois) {
+ // On efface le dernier fichier car il est de trop !
+ //unlink($repPdfInfogreffe.'/'.basename($url));
+ break(3);
+ }
+ }
+ }
+ } else {
+ // La liste des actes n'est pas disponible sur notre Système !
+ }
+ } else {
+ $multiDepot=false;
+ $url=URL_BASE."acte-$siren-$params.pdf".URL_SECURE;
+ //$url="http://extranet.scores-decisions.com/datafile.php?q=acte-$siren-$params.pdf";
+ $tmp=explode('-', $params);
+ if (!in_array(''.$tmp[0], $tabActesASaisir)) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (exclu)".EOL;
+ continue;
+ }
+ }
+ }
+
+ if (!$multiDepot) {
+ // On vérifie si cette acte n'est pas déjà saisie ou en saisie !
+ if (!$lastDepot) {
+ $tabTmp2=$iDb2->select('fedaso', 'count(*) AS nb', "siren=$siren AND page='$pageAc' AND params='$params'", false, MYSQL_ASSOC);
+ if ($tabTmp2[0]['nb']>0) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (en cours)".EOL;
+ $nbPdfEncours++;
+ if (($nbPdfEncours+$nbPdfInexist)>1500)
+ break 2; // Arret de l'export de la liste
+ continue;
+ }
+ }
+ $nomPdf=basename(preg_replace('/\?.*$/','',$url));
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.$nomPdf);
+ if (!$tabPdf) {
+ $page=getUrl($url, '', '', '', false);
+ if ($page['code']<>200 || !isset($page['header']['Content-Disposition']) || $page['header']['Content-Disposition']=='') {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (inexistant)".EOL;
+ $nbPdfInexist++;
+ if (strlen($params)==35) {
+ //echo 'ici';
+ if ($pageAc=='greffe_actes') $tabDepots=@$iGreffes->getListeActes($siren);
+ elseif ($pageAc=='greffe_bilans') $tabDepots=@$iGreffes->getBilansImages($siren);
+ $nbDepots=count($tabDepots);
+ print_r($tabDepots);
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (RECHERCHE dans $nbDepots $pageAc)".EOL;
+ foreach ($tabDepots as $depot) {
+ if ($pageAc=='greffe_actes')
+ $params2=$depot['acte_type'].'-'.WDate::dateT('Y-m-d','Ymd',$depot['acte_date']).'-'.$depot['numGreffe'].
+ '-'.$depot['numRC'].'-'.$depot['depot_num'].'-'.$depot['acte_num'];
+ else {
+ $params2=$depot['annee'].'_'.$depot['type'].'-'.WDate::dateT('Y-m-d','Ymd',$depot['dateCloture']).'-'.
+ $depot['numGreffe'].'-'.$depot['numRC'].'-'.$depot['depot_num'];
+ /// echo("$url\t$params\t$params2".EOL);
+// die();
+ }
+ if (strpos($params2, $params)===false)
+ echo("$params2\tDIFFERENT DE\t$params".EOL);
+ else {
+ echo("$params2\tIDENTIQUE\t$params".EOL);
+ $url=URL_BASE."acte-$siren-$params2.pdf".URL_SECURE;
+ $params=$params2;
+ //die($url);
+ $page=getUrl($url, '', '', '', false);
+ if ($page['code']<>200 || !isset($page['header']['Content-Disposition']) || $page['header']['Content-Disposition']=='') {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (inexistant)".EOL;
+ continue;
+ }
+ break;
+ }
+ }
+ } else
+ //print_r($page);die();
+ continue;
+ }
+ @mkdir($repPdfInfogreffe);
+ $nomPdf=basename(preg_replace('/\?.*$/','',$url));
+ $fp=@fopen($repPdfInfogreffe.'/'.$nomPdf, 'w');
+ if (!$fp || !fwrite($fp, $page['body']))
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (erreur fichier local)".EOL;
+ @fclose($fp);
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.$nomPdf);
+ // randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
+ }
+ if (!$tabPdf) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (vide)".EOL;
+ unlink($repPdfInfogreffe.'/'.$nomPdf);
+ continue;
+ }
+
+ $pdfSize= $tabPdf['pdfSize'];
+ $pdfVer = $tabPdf['version'];
+ $pdfPage= $tabPdf['nbPages'];
+
+ $nbEncours++;
+ //$tabFichierOut[]=basename($url);
+ $tabFichierOut[]=$nomPdf;
+ $strFichierOut.="$nbEncours\t$dateCmd\t$pdfSize ko\t$pdfPage\t$nomPdf".EOL;
+
+ if(!$iDb2->insert('fedaso', array( 'siren' => $siren,
+ 'params' => $params,
+ 'page' => $pageAc,
+ 'dateEnvoi' => date('YmdHis'),
+ 'dateCmd' => $dateCmd,
+ 'pdfNum' => $nbEncours,
+ 'pdfSize' => $pdfSize,
+ 'pdfPage' => $pdfPage,
+ ))) {
+ if ($lastDepot)
+ echo date('Y/m/d - H:i:s') ." - Reprise $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ else
+ echo date('Y/m/d - H:i:s') ." - ERREUR lors de l'insertion de $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ } else
+ echo date('Y/m/d - H:i:s') ." - $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ if ($nbEncours>=$nbEnvois) {
+ // On efface le dernier fichier car il est de trop !
+ //unlink($repPdfInfogreffe.'/'.basename($url));
+ break(2);
+ }
+ }
+ }
+ }
+
+ $fichierIndex='lotliensn-'.date('Y-m-d-Hi').'.txt';
+ $nbActes=count($tabFichierOut);
+
+ if (file_put_contents($repPdfInfogreffe.'/'.$fichierIndex, $verFedasoFic.EOL.implode(EOL, $tabFichierOut).EOL.$nbActes))
+ $message=date('Y/m/d - H:i:s') ." - Le fichier index $fichierIndex a été crée pour les $nbActes.". EOL;
+ else
+ $message=date('Y/m/d - H:i:s') ." - Erreur : Création impossible du fichier index $fichierIndex pour les $nbActes !". EOL;
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Génération du dépôt pour le Maroc", $message.EOL.$strFichierOut);
+} elseif ($genereDepot && $nbEncours==$nbEnvois) {
+ $message=date('Y/m/d - H:i:s') ." - Les $nbEncours actes quotidiens ont déjà été déposés.". EOL;
+} elseif ($genereDepot && $nbEncours<$nbEnvois) {
+ $message=date('Y/m/d - H:i:s') ." - Erreur : Il n'y a que $nbEncours actes / $nbActes déposés pour Fedaso !". EOL;
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Génération du dépôt pour le Maroc", $message.EOL.$strFichierOut);
+}
+echo $message;
+
+
+if (count($tabFichierIn)>0 || count($tabFichLigneCmd)>0) {
+
+ echo date ('Y/m/d - H:i:s') . " - Début du traitement de chargement du retour Fedaso.".EOL;
+ $mailReferentiel=$msgDiff=array();
+ for ($i=0; isset($tabFichierIn[$i]); $i++)
+ {
+ //IKI
+ $nomFichier =$tabFichierIn[$i];
+ $dateFichier=date('YmdHis', filectime($repCsvFedaso.$nomFichier));
+ $fp=fopen($repCsvFedaso.$nomFichier, 'r');
+ if (!$fp) {
+ echo date ('Y/m/d - H:i:s') ." - Erreur : Impossible d'ouvrir le fichier n°$i à traiter (".$nomFichier.")".EOL;
+ echo date ('Y/m/d - H:i:s') . " - Fin du traitement".EOL;
+ die();
+ }
+
+ $nbLignes=0; // Nombre de ligne du fichier
+ while (!feof($fp))
+ {
+ $nbLignes++;
+ $a = trim(fgets($fp, 1024));
+ }
+
+ echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier n°$i, $nomFichier ($nbLignes lignes à traiter) !".EOL;
+
+
+ $refDocPre=$refoc=$dateInfoPre=$dateInfo=false;
+ $nbLiensInsert=$nbDirInsert=$nbRibInsert=0;
+ $ligne=1;
+ rewind($fp);
+
+ /** Traitement de la 1ère ligne **/
+ $a = utf8_decode(fgets($fp, 2048));
+
+ while (!feof($fp))
+ {
+ $ajoutMailRef=false;
+ /*
+ $siren = trim($a[0]);
+ $typeData = strtoupper(trim($a[1]));
+ $codeRetour = trim($a[2]);
+ $typeActe = trim($a[3]);
+ $refDoc = trim($a[4]);
+ */
+ $siren=$siren1 = trim(substr($a,0,9))*1;
+ $typeData = strtoupper(trim(substr($a,9,1)));
+ $codeRetour = trim(substr($a,10,3))*1;
+ $typeActe = trim(substr($a,13,3));
+ $refDoc = trim(substr($a,16,80));
+ if ($siren==0) {
+ $tmp=explode('-', $refDoc);
+ $siren=$tmp[1];
+ /*
+ if (substr($refDoc,4,1)=='_') $pageAc='greffe_bilans';
+ elseif (substr($refDoc,2,1)=='-') $pageAc='greffe_actes';
+ $tabTmp=$iDb2->select('fedaso', 'siren', "page='$pageAc' AND params='$refDoc'", false, MYSQL_ASSOC);
+ if ($tabTmp[0]['siren']>0) $siren=$tabTmp[0]['siren'];
+ echo date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : Siren vide dans $refDoc remplacé par $siren !".EOL;*/
+ if ($siren==0 || !$iInsee->valideSiren($siren))
+ die(date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : Siren $siren invalide dans $refDoc !".EOL);
+ }
+ $entrep=@$iInsee->getIdentiteEntreprise($siren);
+ $typePresta = strtoupper(trim(substr($a,96,1)));
+
+ /** @todo Tester les codes retour **/
+ switch ($codeRetour) {
+ case 100: // Document illisible
+ case 101: // Document partiellement lisible
+ case 102: // Document inattendu
+ case 103: // Page blanche
+ case 104: // Fichier absent
+ case 105: // Page partiellement scannée
+ case 106: // Document complémentaire concernant une autre société
+ case 107: // Page(s) manquante(s)
+ case 108: // Document(s) non Francophone
+ echo date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : Code retour n°$codeRetour sur $siren ($typeData) !".EOL;
+ continue;
+ break;
+ case 200: // Aucune information dirigeants
+ case 210: // Aucune information actionnaire
+ case 211: // Aucune information capitalistique
+ case 220: // Aucune information RIB
+ case 251: // Raison Sociale en double : entête retenue
+ case 252: // Raison Sociale en double : entête non retenue
+ echo date ('Y/m/d - H:i:s')." - ATTENTION fichier $nomFichier, ligne $ligne à priori vide (Vérifier si fedaso gère bien ces codes) !".EOL;
+ break;
+ case 201: // Code fonction inexistant
+ case 221: // Code guichet inconnu
+ case 250: // Raison Sociale absente
+ case 300: // Code pays absent du réferentiel
+ case 301: // Code devise absent du référentiel
+ $ajoutMailRef=true;
+ break;
+ case 0:
+ break;
+ default:
+ $message="ERREUR fichier $nomFichier, ligne $ligne : Code retour Fedaso inconnu '$codeRetour' pour le document $refDoc dans le fichier $nomFichier";
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Erreur code retour '$codeRetour' inconnu", $message);
+ echo date ('Y/m/d - H:i:s')." - $message".EOL;
+ die();
+ break;
+ }
+ // Récupération de la date du document
+ $tmp=@explode('-', $refDoc);
+ $dateDoc=@$tmp[3]*1;
+ // Transformation de la référence en réf. stockée en base (suppression siren, acte/bilan et .pdf)
+ $refBase=str_replace('.pdf','',preg_replace('/^(bilan|acte)-\d\d\d\d\d\d\d\d\d-/Ui','', $refDoc));
+
+ $tabTypeActes[$refDoc][]=$typeActe;
+ $tabInsert=array();
+ $table='';
+
+ //echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (deb)".EOL;
+
+ switch ($typeData) {
+ case 'R': // ligne de RIB
+ $rib=array();
+ $rib['codeBanque'] = trim(substr($a, 97, 5))*1;
+ $rib['codeGuichet'] = trim(substr($a,102, 5))*1;
+ $rib['numCompte'] = trim(substr($a,107,11));
+ $rib['clefRib'] = trim(substr($a,118, 2))*1;
+ $rib['libBanque'] = strtoupper(trim(substr($a,120,40)));
+ $rib['libGuichet'] = strtoupper(trim(substr($a,160,40)));
+ $rib['dateInfo'] = trim(substr($a,200, 8))*1;
+ $rib['dateDispo'] = trim(substr($a,208,14))*1;
+ $rib['dateSaisie'] = trim(substr($a,222,14))*1;
+ $rib['refDoc'] = $refBase;
+
+ if ($rib['codeBanque']<>0 || $rib['codeGuichet']<>0 || $rib['numCompte']<>'' || $rib['clefRib']<>0 ||
+ $rib['libBanque']<>'' || $rib['libGuichet']<>'' ) {
+ $table='fedRib';
+ $rib['siren'] = $siren;
+ $rib['source'] = 1500;
+ $rib['codeRetour']=$codeRetour;
+ $tabInsert=$rib;
+ @$tabTypeData[$refDoc][$typeData]++;
+
+ if ($ajoutMailRef) {
+ $mailReferentiel[]="Document $refDoc : Code Banque ou Guichet inconnu ". $rib['libBanque'].' ('.$rib['codeBanque'].') - '.$rib['libGuichet'].' ('.$rib['codeGuichet'].')';
+ }
+ }
+
+ break;
+
+ case 'D': // Ligne de Dirigeants
+
+ $dir=array();
+ $dir['siren'] = $siren;
+ $dir['raisonSociale']= strtoupper( trim(substr($a, 100,255)));
+ $dir['dateInfo'] = strtoupper( trim(substr($a,1019, 8)))*1;
+ $dir['source'] = 1500;
+ $dir['refDoc'] = $refBase;
+ if ($dir['dateInfo']==0) {
+ $dir['dateInfo']=$dateDoc;
+ }
+ if ($dir['raisonSociale']<>'')
+ if (!$iDb2->insert('capitalActions', $dir))
+ if (!$iDb2->update('capitalActions', $dir, "siren=$siren AND (dateInfo='".$dir['dateInfo']."' OR refDoc='$refBase')"))
+ echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'capitalAction' : ". mysql_error().EOL;
+
+ $dir['actif'] = trim(substr($a, 97, 1));
+ if ($dir['actif']=='')
+ $dir['actif']='-1';
+ $dir['typeDir'] = strtoupper( trim(substr($a, 98, 2)));
+ $dir['dirSiren']=$siren2= trim(substr($a, 355, 9));
+ $dir['dirSirenValide']=0;
+ if ($dir['typeDir']=='PM') {
+ if ($siren2<>0 && $iInsee->valideSiren($siren2))
+ $dir['dirSirenValide']=1;
+ else
+ echo date ('Y/m/d - H:i:s')." - Fichier $nomFichier, ligne $ligne : Prévoir le sirenage des dirigeants $codeRetour sur $siren/$siren2 ($typeData) !".EOL;
+ }
+
+ $dir['dirRS'] = strtoupper( trim(substr($a, 364,255)));
+ $dir['civilite'] = strtoupper( trim(substr($a, 619, 3)));
+ $dir['nom'] = strtoupper( trim(substr($a, 622, 60)));
+ $dir['prenom'] = strtoupper( trim(substr($a, 682, 40)));
+ $dir['naissance_nom']= strtoupper( trim(substr($a, 722, 60)));
+ $dir['naissance_date']= trim(substr($a, 782, 8))*1;
+ $dir['naissance_dept_pays']=strtoupper(trim(substr($a,790,3)));
+ $dir['naissance_lieu']= strtoupper( trim(substr($a, 793, 40)));
+ $dir['nat'] = strtoupper( trim(substr($a, 833, 3)));
+ $dir['adresse_num'] = trim(substr($a, 836, 4))*1;
+ $dir['adresse_btq'] = strtoupper( trim(substr($a, 840, 1)));
+ $dir['adresse_codvoie']=strtoupper( trim(substr($a, 841, 4)));
+ $dir['adresse_libvoie']=strtoupper( trim(substr($a, 845, 32)));
+ $dir['adresse_comp']= strtoupper( trim(substr($a, 877, 40)));
+ $dir['adresse_cp'] = strtoupper( trim(substr($a, 917, 5)));
+ $dir['adresse_ville']= strtoupper( trim(substr($a, 922, 40)));
+ $dir['adresse_pays']= strtoupper( trim(substr($a, 962, 3)));
+ if ($ajoutMailRef && $codeRetour==300)
+ $mailReferentiel[]="Document $refDoc : Code pays '".$dir['adresse_pays']."' ou nationalité '".$dir['nat']."'inconnu !";
+
+ $dir['fonction_code']= strtoupper( trim(substr($a, 965, 4)))*1;
+ $dir['fonction_lib']= strtoupper( trim(substr($a, 969, 50)));
+ if ($dir['fonction_code']==0 && $dir['fonction_lib']<>'')
+ $mailReferentiel[]="Document $refDoc : Code Fonction dirigeant inexistant '". $dir['fonction_lib']."'";
+ $dir['dateDispo'] = strtoupper( trim(substr($a,1027, 14)))*1;
+ $dir['dateSaisie'] = strtoupper( trim(substr($a,1041, 14)))*1;
+ $dir['codeRetour'] = $codeRetour;
+
+ if ($codeRetour==200) {
+ $table='';
+ } else {
+ @$tabTypeData[$refDoc][$typeData]++;
+ $tabInsert=$dir;
+ $table='fedDirigeants';
+ }
+
+ break;
+ case 'L': // lien
+ case 'A': // lien Actionnaires
+ case 'P': // lien Participations
+ case 'F': // lien Fusion Absorbant
+ case 'E': // ligne de lien Fusion Absorbée
+ case 'S': // ligne de lien Scission
+ $lien=array();
+ $pct=0;
+ $lien['capital'] = trim(substr($a, 97, 15))*1;
+ $lien['deviseCapital'] = strtoupper( trim(substr($a, 112, 3)));
+ $lien['nbActions'] = trim(substr($a, 115, 15))*1;
+ if ($ajoutMailRef && $codeRetour==301)
+ $mailReferentiel[]="Document $refDoc : Code devise inconnu ". $lien['deviseCapital'];
+
+ if ($lien['nbActions']<>0 && $lien['capital']<>0)
+ $lien['actionNominale'] = $lien['capital']/$lien['nbActions'];
+
+ if ($lien['capital']<>0 || $lien['deviseCapital']<>'' || $lien['nbActions']<>0) {
+ $lien['siren'] = $siren;
+ $lien['source'] = 1500;
+ $lien['refDoc'] = $refBase;
+ $lien['dateInfo'] = trim(substr($a, 631, 8))*1; // A voir mais la date du doc n'est pas la date de signature
+ $lien['dateSaisie'] = trim(substr($a, 782, 14))*1;
+
+ if ($lien['dateInfo']==0) {
+ $lien['dateInfo']=$dateDoc;
+ }
+
+ if (!$iDb2->insert('capitalActions', $lien))
+ if (!$iDb2->update('capitalActions', $lien, "siren=$siren AND (dateInfo='".$lien['dateInfo']."' OR refDoc='$refBase')"))
+ echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'capitalAction' : ". mysql_error().EOL;
+
+ }
+ //echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (capital)".EOL;
+
+ $lien['actif'] = trim(substr($a, 130, 1));
+ if ($lien['actif']=='')
+ $lien['actif']=1;//'NULL';
+ $lien['lienPct'] = trim(substr($a, 131, 6))*1;
+ $lien['lienNbActions'] = trim(substr($a, 137, 15))*1;
+ $lien['lienMontant'] = trim(substr($a, 152, 15))*1;
+ if ($lien['capital']>0) {
+ if ($lien['lienPct']>0)
+ $pct=$lien['lienPct'];
+ elseif ($lien['lienMontant']>0) {
+ $pct=($lien['lienMontant']/$lien['capital'])*100;
+ $lien['lienPct']=$pct;
+ }
+ } elseif($lien['lienNbActions']>0 && $lien['nbActions']) {
+ $pct=($lien['lienNbActions']/$lien['nbActions'])*100;
+ $lien['lienPct']=$pct;
+ }
+ $lien['MajMin'] = strtoupper( trim(substr($a, 167, 1)));
+ if ($pct>50 && $lien['MajMin']<>'+')
+ $lien['MajMin']='+';
+ $lien['PpPm'] = strtoupper( trim(substr($a, 168, 2)));
+ $lien['siren2']=$siren2 = trim(substr($a, 170, 9))*1;
+ $lien['RS'] = strtoupper( trim(substr($a, 179,255)));
+ $lien['nom'] = strtoupper( trim(substr($a, 434, 40)));
+ $lien['prenom'] = strtoupper( trim(substr($a, 474, 40)));
+ $lien['siren2Valide']=0;
+ //echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (".$lien['PpPm']." 1)".EOL;
+
+ if ($lien['PpPm']=='PM') {
+ if ($siren2<>0 && $iInsee->valideSiren($siren2))
+ $lien['siren2Valide']=1;
+ else
+ echo date ('Y/m/d - H:i:s')." - Fichier $nomFichier, ligne $ligne : Prévoir le sirenage des actionnaires/participations $codeRetour sur $siren/$siren2 ($typeData) !".EOL;
+ }
+ //echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (".$lien['PpPm']." 2)".EOL;
+ $lien['civilite'] = strtoupper( trim(substr($a, 514, 3)));
+ $lien['naissance_nom'] = strtoupper( trim(substr($a, 517, 60)));
+ $lien['naissance_date'] = strtoupper( trim(substr($a, 577, 8)));
+ $lien['naissance_dept_pays']= strtoupper( trim(substr($a, 585, 3)));
+ $lien['naissance_lieu'] = strtoupper( trim(substr($a, 588, 40)));
+ $lien['nat'] = strtoupper( trim(substr($a, 628, 3)));
+ $lien['adresse_num'] = strtoupper( trim(substr($a, 639, 4)));
+ $lien['adresse_btq'] = strtoupper( trim(substr($a, 643, 1)));
+ $lien['adresse_codvoie'] = strtoupper( trim(substr($a, 644, 4)));
+ $lien['adresse_libvoie'] = strtoupper( trim(substr($a, 648, 32)));
+ $lien['adresse_comp'] = strtoupper( trim(substr($a, 680, 40)));
+ $lien['adresse_cp'] = strtoupper( trim(substr($a, 720, 5)));
+ $lien['adresse_ville'] = strtoupper( trim(substr($a, 725, 40)));
+ $lien['adresse_pays'] = strtoupper( trim(substr($a, 765, 3)));
+ //$lien['dateDepot'] = strtoupper( trim(substr($a, 768, 1)));
+ $lien['typeLien']=$typeData;
+ $lien['codeRetour'] = $codeRetour;
+ $lien['dateInsert'] = date('YmdHis');
+ $inversionActionnaire=false;
+ if ($typeData=='P' || $typeData=='A') {
+ if ($typeData=='A') {
+ $actionPart1=2;
+ $actionPart2=1;
+ } elseif ($typeData=='P') {
+ $actionPart1=1;
+ $actionPart2=2;
+ }
+ if ($siren>0 && $siren2>0)
+ // On vérifie qu'aucun lien fournit par un tiers + précis ne soit en base
+ $ret=$iDb->select('liens', 'count(*) AS nb', "(Siren1 IN ($siren,$siren2) OR Siren2 IN ($siren,$siren2)) AND source>1500", false, MYSQL_ASSOC);
+ elseif ($siren>0 && $siren2<1000)
+ $ret=$iDb->select('liens', 'count(*) AS nb', "(Siren1=$siren OR Siren2=$siren) AND source>1500", false, MYSQL_ASSOC);
+
+ if ($ret[0]['nb']==0) {
+ if ($lien['adresse_pays']<>'' && $lien['adresse_pays']<>'FRA')
+ $pays=$lien['adresse_pays'];
+ else $pays='';
+ $rs1=trim(preg_replace('/ +/', ' ', $lien['RS']));
+ if ($pct>50 && $lien['MajMin']<>'+') $lien['MajMin']='+';
+ elseif ($pct<50 && $lien['MajMin']=='') $lien['MajMin']='-';
+
+ if ($rs1=='') {
+ $rs1=trim(preg_replace('/ +/', ' ', $lien['civilite'].' '.$lien['nom'].' '.$lien['prenom']));
+ if ($lien['naissance_nom']<>'') $rs1.=' '.trim(preg_replace('/ +/', ' ', 'né(e) '.$lien['naissance_nom']));
+ if ($typeData=='A') {
+ // On force le lien $siren est détenu par $rs1
+ $actionPart1=1;
+ $inversionActionnaire=true;
+ }
+ }
+
+ $tabInsertLiens1=array( 'Siren1' => $siren,
+ 'actif' => $lien['actif']*1,
+ 'source' => 1500,
+ 'ActionPart'=> $actionPart1,
+ 'Pmin' => round($pct,2),
+ 'Pmax' => round($pct,2),
+ 'MajMin' => $lien['MajMin'],
+ 'PpPm' => substr($lien['PpPm'],1,1), // P ou M
+ 'Siren2' => $siren2,
+
+ 'RaisonSociale'=>$rs1,
+ 'Pays' => $pays,
+ 'dateLien' => $lien['dateInfo'],
+ 'dateInsert'=> date('YmdHis'),
+ );
+ if (substr($entrep['FJ'],0,1)*1<>1) $pppm2='M';
+ else $pppm2='P';
+ $rs2=$entrep['Nom'];
+ $pays2=trim($entrep['Pays']);
+ $tabInsertLiens2=array( 'Siren1' => $siren2,
+ 'actif' => $lien['actif']*1,
+ 'source' => 1500,
+ 'ActionPart'=> $actionPart2,
+ 'Pmin' => round($pct,2),
+ 'Pmax' => round($pct,2),
+ 'MajMin' => $lien['MajMin'],
+ 'PpPm' => $pppm2, // P ou M
+ 'Siren2' => $siren,
+ 'RaisonSociale'=>$rs2,
+ 'Pays' => $pays2,
+ 'dateLien' => $lien['dateInfo'],
+ 'dateInsert'=> date('YmdHis'),
+ );
+ if ($iDb->insert('liens', $tabInsertLiens1))
+ $nbLiensInsert++;
+ else {
+ print_r($tabInsertLiens1);
+ echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'jo.liens' 1 : ". mysql_error().EOL;
+ }
+ if ($siren>0 && $siren2>1000) {
+ if($iDb->insert('liens', $tabInsertLiens2))
+ $nbLiensInsert++;
+ else {
+ print_r($tabInsertLiens2);
+ echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur 'jo.liens' 2 : ". mysql_error().EOL;
+ }
+ }
+ $lien['lienPublie']=1;
+ }
+ }
+
+ if ($codeRetour==210) {
+ $table='';
+ } else {
+ @$tabTypeData[$refDoc][$typeData]++;
+ $tabInsert=$lien;
+ $table='fedLiens';
+ }
+
+ break;
+
+ default:
+ echo date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : TypeData '$typeData' inconnu !".EOL;
+ break;
+ }
+ //echo "$nomFichier, $ligne, $codeRetour, $refDoc, $typeData (FIN)".EOL;
+
+ if ($table<>'') {
+ if (!$iDb2->insert($table, $tabInsert) && mysql_errno()<>1062)
+ echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - Insertion impossible sur '$table' : ". mysql_error().EOL;
+ else {
+ if ($table=='fedDirigeants') $nbDirInsert++;
+ elseif ($table=='fedRib') $nbRibInsert++;
+ }
+ }
+
+ /** Contôle des informations **/
+ if ($table=='fedLiens') {
+ $refDoc=$lien['refDoc'];
+ $dateInfo=$lien['dateInfo'];
+ $entete="$nomFichier\t$ligne\t$siren1\t$refDoc\t$typeData\t";
+
+ if ($inversionActionnaire) {
+ $ligneDiff="$entete.inversion Actionnaire et non Participation\t$rs1";
+ $msgDiff[]=$ligneDiff;
+ echo $ligneDiff.EOL;
+ }
+
+ if ($lien['nbActions']>$lien['capital']) {
+ $ligneDiff="$entete.nbActions capital incohérentes\t".$lien['nbActions'];
+ $msgDiff[]=$ligneDiff;
+ echo $ligneDiff.EOL;
+ }
+ /** On ne fait les contrôles suivants que si l'acte est récent ou pas de modifs **/
+ $documentRecent=true;
+ if ( ($refDocPre==$refDoc || $documentRecent) &&
+ (round($lien['capital'])<>round($entrep['Capital']) ||
+ $lien['deviseCapital']<>$entrep['CapitalDev']) ) {
+/* if ($lien['deviseCapital']=='FRF' && $entrep['CapitalDev']=='EUR'
+ && round($lien['capital']/6.55957)==round($entrep['Capital']) )
+ else*/
+ $ligneDiff=$entete."capital différents\t".$lien['capital'].' '.$lien['deviseCapital']."\t".$entrep['Capital'].' '.$entrep['CapitalDev'];
+ $msgDiff[]=$ligneDiff;
+ echo $ligneDiff.EOL;
+ }
+ } elseif ($table=='fedDirigeants') {
+ $refDoc=$dir['refDoc'];
+ $dateInfo=$dir['dateInfo'];
+ $entete="$nomFichier\t$ligne\t$siren1\t$refDoc\t$typeData\t";
+ if ($dir['dirSirenValide']==1 && !$iInsee->sirenExiste($dir['dirSirenValide'])) {
+ $ligneDiff=$entete."dirSiren inexistant\t".$dir['dirSiren'];
+ $msgDiff[]=$ligneDiff;
+ echo $ligneDiff.EOL;
+ }
+ /** On ne fait les contrôles suivants que si l'acte est récent ou pas de modifs **/
+ $documentRecent=true;
+ if (($refDocPre==$refDoc || $documentRecent) &&
+ (strtoupper($dir['raisonSociale'])<>strtoupper($entrep['Nom']))) {
+ $lev = levenshtein(strtoupper($dir['raisonSociale']), strtoupper($entrep['Nom']));
+ $tmoy= strlen($dir['raisonSociale'].$entrep['Nom']);
+ $lt=round($lev/$tmoy,2);
+ if ($lt>0.5) {
+ $ligneDiff=$entete."raisonSociale différent\t".$dir['raisonSociale']."\t".$entrep['Nom'];
+ $msgDiff[]=$ligneDiff;
+ echo $ligneDiff.EOL;
+ }
+ }
+ }
+
+ $ligne++;
+ $a = utf8_decode(fgets($fp, 2048));
+
+ // Variables de contrôles
+ $refDocPre=$refDoc;
+ $dateInfoPre=$dateInfo;
+ }
+
+ if (bzip2($repCsvFedaso.$nomFichier, FEDASO_BACKUP_DIR.$nomFichier)) {
+ unlink($repCsvFedaso.$nomFichier);
+ echo date ('Y/m/d - H:i:s') . " - Le fichier n°$i, $nomFichier vient d'être historisé.".EOL;
+ }
+ }
+
+ if (count($mailReferentiel)>0) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Penser à modifier le référentiel", implode(EOL, $mailReferentiel));
+ }
+ if (count($msgDiff)>0) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Chargement des flux quotidiens", "Récapitulatif du traitement :
+- $nbLiensInsert liens ajoutés
+- $nbDirInsert dirigeants ajoutés
+- $nbRibInsert RIB ajoutés
+Liste des contrôles :".EOL.implode(EOL, $msgDiff));
+ }
+
+ /** Enlever ce die() quand on est prêt à valider les fichiers charger **/
+ //die();
+
+ /** Mise à jour des informations globales de retour : Dates, Types d'actes et structures lues
+ **/
+ foreach ($tabTypeActes as $refDoc=>$typeActes) {
+
+ // Transformation de la référence en réf. stockée en base (suppression siren, acte/bilan et .pdf)
+ $params=str_replace('.pdf','',preg_replace('/^(bilan|acte)-\d\d\d\d\d\d\d\d\d-/Ui','', $refDoc));
+ $tmp=explode('-', $refDoc);
+ $siren=$tmp[1];
+
+ $tabTypeData2=array();
+ if (isset($tabTypeData[$refDoc]))
+ foreach ($tabTypeData[$refDoc] as $typeD=>$nbD)
+ $tabTypeData2=array_merge($tabTypeData2, array('nbData'.$typeD=>$nbD));
+
+ echo date ('Y/m/d - H:i:s') . " - Mise à jour des infos retournées pour $refDoc...".EOL;
+ $typeActes=array_unique($typeActes);
+ if (!$iDb2->update('fedaso', array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes),
+ 'dateRetour'=>$dateFichier)),"siren=$siren AND params='$params'")) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : ERREUR Fichier PDF non diffusé",
+ "siren=$siren AND params='$params'".EOL.
+ print_r(array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes), 'dateRetour'=>$dateFichier)),true));
+ echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - MAJ impossible sur 'fedaso' : ". mysql_error().EOL;
+ if (substr($params,0,4)*1>1950) $pageAc='greffe_bilans';
+ else $pageAc='greffe_actes';
+ $iDb2->insert('fedaso', array( 'siren' => $siren,
+ 'params' => $params,
+ 'page' => $pageAc,
+ 'dateEnvoi' => date('YmdHis'),
+ ));
+ if (!$iDb2->update('fedaso', array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes),
+ 'dateRetour'=>$dateFichier)),"siren=$siren AND params='$params'")) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : ERREUR Fichier PDF non diffusé",
+ "siren=$siren AND params='$params'".EOL.
+ print_r(array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes), 'dateRetour'=>$dateFichier)),true));
+ die();
+ }
+ }
+ }
+
+ echo date ('Y/m/d - H:i:s') . " - Fin du traitement de chargement du retour Fedaso.".EOL;
+
+} else {
+ //$message.="Aucun fichier CSF à traiter !\r\n";
+ echo date ('Y/m/d - H:i:s') . " - Aucun fichier Fedaso à traiter !".EOL;
+ //if (count($argv)==1) die($strInfoScript);
+}
+
+echo date('Y/m/d - H:i:s') .' - FIN du script.'. EOL;
+
+ ?>
\ No newline at end of file
diff --git a/batch/fedasoBilans.php b/batch/fedasoBilans.php
new file mode 100644
index 00000000..7b70184f
--- /dev/null
+++ b/batch/fedasoBilans.php
@@ -0,0 +1,772 @@
+#!/usr/bin/php -c/var/www/batch/config/php_batch_sd.ini
+0) $nbEnvois=$nbEnvoisUti;
+ if (date('N')==5) $initReferentiel=true;
+ break;
+ case 'r':
+ $chargerRetour=true;
+ break;
+ case 'v':
+ $modeDebug=true;
+ break;
+ case 'm':
+ $modeTest=true;
+ break;
+ case 'l':
+ $lastDepot=true;
+ break;
+ case 't':
+ $initReferentiel=true;
+ break;
+ case '-':
+ case '?':
+ die($strInfoScript);
+ break;
+ default:
+ die('Option '. $argv[$i] . ' inconnue !'.EOL);
+ break;
+ }
+ } else $tabFichLigneCmd[]=$argv[$i];
+}
+
+// 1: A supprimer quand Fedaso est nickel... d'ici
+if (!$modeDebug) {
+ switch (''.date('d-m')) {
+ case '01-01':
+ case '01-05':
+ case '25-12':
+ die();
+ break;
+ default:
+ if (date('N')>5) // Nombre ISO-8601 du jour de la semaine (ajout PHP 5.1.0) de 1 à 7 : Lundi à Dimanche
+ die();
+ break;
+ }
+}
+
+$nbPdfEncours=$nbPdfInexist=0;
+
+if (count($tabFichLigneCmd)==0) {
+ $dh = opendir(FEDASO_BILANS_DONE_DIR);
+ while (false !== ($filename = readdir($dh))) {
+ if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.txt')
+ $tabFichierIn[] = $filename;
+ }
+ sort($tabFichierIn);
+} else $tabFichierIn=$tabFichLigneCmd;
+
+/*
+$nbLignes=$iDb->exportCSV(file_get_contents($sql), $csv.'.tmp');
+$fp = fopen("./csv2sql.log", 'a');
+fwrite($fp, date('Y-m-d H:i:s')." - $base $sql $csv : $nbLignes lignes extraites".EOL);
+*/
+
+/*
+
+
+$tabTmp=$iDb2->select('fedaso', 'count(*) AS nb', "DATE(dateEnvoi)=DATE(NOW())", false, MYSQL_ASSOC);
+$nbEncours=$tabTmp[0]['nb'];
+$tabTmp=$iDb2->select('fedaso', 'DATE(MAX(dateEnvoi)) AS lastEnvoi', "1", false, MYSQL_ASSOC);
+$maxEnvoi=$tabTmp[0]['lastEnvoi'];
+$message='';
+
+if ($lastDepot || ($genereDepot && $nbEncours==0)) {
+ $nbEncours=0;
+ $strFichierOut='';
+ $tabActesASaisir=$tabFichierOut=array();
+ $tabTmp=$iDb->select('jo.tabActes', 'codActe', 'prioriteSaisie BETWEEN 1 AND 10', false, MYSQL_ASSOC);
+ foreach ($tabTmp as $actes)
+ $tabActesASaisir[]=$actes['codActe'];
+ $nbTypesSaisie=count($tabActesASaisir);
+ echo date('Y/m/d - H:i:s') ." - Il y a $nbTypesSaisie types d'actes en saisie.". EOL;
+
+ echo date('Y/m/d - H:i:s') ." - Recherche des $nbEnvois documents à envoyer en saisie.". EOL;
+
+ while($nbEncours<=$nbEnvois) {
+ if ($lastDepot)
+ $tabTmp=$iDb->select('sdv1.fedaso', 'siren, page, params, dateEnvoi AS dateHeure', "dateEnvoi BETWEEN '$maxEnvoi 00:00:00' AND '$maxEnvoi 23:59:59'", false, MYSQL_ASSOC);
+ else
+ $tabTmp=$iDb->select('sdv1.logs', 'siren, page, params, dateHeure', "page LIKE 'greffe_%' AND params<>'' AND params NOT LIKE 'Erreur%' GROUP BY siren, page, params ORDER BY dateHeure DESC", false, MYSQL_ASSOC);
+ foreach ($tabTmp as $actes) {
+ $siren =$actes['siren'];
+ $params=$actes['params'];
+ $pageAc=$actes['page'];
+ $dateCmd=$actes['dateHeure'];
+ if ($pageAc=='greffe_bilans') {
+ $multiDepot=false;
+ // L'acte a traiter est un bilan
+ $url="http://extranet.scores-decisions.com/pdf/bilan-$siren-$params.pdf";
+ //$url="http://extranet.scores-decisions.com/datafile.php?q=bilan-$siren-$params.pdf";
+ } elseif ($pageAc=='greffe_actes') {
+ // L'acte est un acte/document divers
+ if (preg_match('/\|/', $params)) {
+ $multiDepot=true;
+ // L'acte contient plusieurs dépôts
+ $tabParams=explode('-', $params);
+ $dateActe=$tabParams[1];
+ // On liste les actes du dépôt
+ $tabTmp2=$iDb->select('jo.greffes_actes', 'siren, type_acte, (date_acte*1) AS dateActe, numGreffe, numRC, num_depot, num_acte', "siren=$siren AND dateActe=$dateActe", false, MYSQL_ASSOC);
+ $tabDepots=array();
+ if (count($tabTmp2)>0) {
+ foreach ($tabTmp2 as $actes2) {
+ $numRC1=substr($actes2['numRC'],0,2);
+ $numRC2=substr($actes2['numRC'],2,1);
+ $numRC3=substr($actes2['numRC'],3);
+ $params=$actes2['type_acte'].'-'.$actes2['dateActe'].'-'.$actes2['numGreffe'].
+ "-$numRC1-$numRC2-$numRC3-".$actes2['num_depot'].'-'.$actes2['num_acte'];
+ $url="http://extranet.scores-decisions.com/pdf/acte-$siren-$params.pdf";
+ if (!in_array(''.$actes2['type_acte'], $tabActesASaisir)) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (exclu)".EOL;
+ continue;
+ } else {
+ $tabDepots[]=$params;
+ // On vérifie si cette acte n'est pas déjà saisie ou en saisie !
+ if (!$lastDepot) {
+ $tabTmp2=$iDb2->select('fedaso', 'count(*) AS nb', "siren=$siren AND page='$pageAc' AND params='$params'", false, MYSQL_ASSOC);
+ if ($tabTmp2[0]['nb']>0) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (en cours)".EOL;
+ continue;
+ }
+ }
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.basename($url));
+ if (!$tabPdf) {
+ $page=getUrl($url, '', '', '', false);
+ if ($page['code']<>200 || !isset($page['header']['Content-Disposition']) || $page['header']['Content-Disposition']=='') {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (inexistant)".EOL;
+ $tabDepots=@$iGreffes->getListeActes($siren);
+ $nbDepots=count($tabDepots);
+ print_r($tabDepots);
+ die();
+ continue;
+ }
+ @mkdir($repPdfInfogreffe);
+ $fp=@fopen($repPdfInfogreffe.'/'.basename($url), 'w');
+ if (!$fp || !fwrite($fp, $page['body']))
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (erreur fichier local)".EOL;
+ @fclose($fp);
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.basename($url));
+ // randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
+ }
+ if (!$tabPdf) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (vide)".EOL;
+ unlink($repPdfInfogreffe.'/'.basename($url));
+ continue;
+ }
+
+ $pdfSize= $tabPdf['pdfSize'];
+ $pdfVer = $tabPdf['version'];
+ $pdfPage= $tabPdf['nbPages'];
+
+ $nbEncours++;
+ $tabFichierOut[]=basename($url);
+ $strFichierOut.="$nbEncours\t$dateCmd\t$pdfSize ko\t$pdfPage\t".basename($url).EOL;
+
+ if(!$iDb2->insert('fedaso', array( 'siren' => $siren,
+ 'params' => $params,
+ 'page' => $pageAc,
+ 'dateEnvoi' => date('YmdHis'),
+ 'dateCmd' => $dateCmd,
+ 'pdfNum' => $nbEncours,
+ 'pdfSize' => $pdfSize,
+ 'pdfPage' => $pdfPage,
+ ))) {
+ if (!$lastDepot)
+ echo date('Y/m/d - H:i:s') ." - ERREUR lors de l'insertion de $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ } else
+ echo date('Y/m/d - H:i:s') ." - $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ if ($nbEncours>=$nbEnvois) {
+ // On efface le dernier fichier car il est de trop !
+ //unlink($repPdfInfogreffe.'/'.basename($url));
+ break(3);
+ }
+ }
+ }
+ } else {
+ // La liste des actes n'est pas disponible sur notre Système !
+ }
+ } else {
+ $multiDepot=false;
+ $url="http://extranet.scores-decisions.com/pdf/acte-$siren-$params.pdf";
+ //$url="http://extranet.scores-decisions.com/datafile.php?q=acte-$siren-$params.pdf";
+ $tmp=explode('-', $params);
+ if (!in_array(''.$tmp[0], $tabActesASaisir)) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (exclu)".EOL;
+ continue;
+ }
+ }
+ }
+
+ if (!$multiDepot) {
+ // On vérifie si cette acte n'est pas déjà saisie ou en saisie !
+ if (!$lastDepot) {
+ $tabTmp2=$iDb2->select('fedaso', 'count(*) AS nb', "siren=$siren AND page='$pageAc' AND params='$params'", false, MYSQL_ASSOC);
+ if ($tabTmp2[0]['nb']>0) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (en cours)".EOL;
+ $nbPdfEncours++;
+ if (($nbPdfEncours+$nbPdfInexist)>1500)
+ break 2; // Arret de l'export de la liste
+ continue;
+ }
+ }
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.basename($url));
+ if (!$tabPdf) {
+ $page=getUrl($url, '', '', '', false);
+ if ($page['code']<>200 || !isset($page['header']['Content-Disposition']) || $page['header']['Content-Disposition']=='') {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (inexistant)".EOL;
+ $nbPdfInexist++;
+ if (strlen($params)==35) {
+ //echo 'ici';
+ if ($pageAc=='greffe_actes') $tabDepots=@$iGreffes->getListeActes($siren);
+ elseif ($pageAc=='greffe_bilans') $tabDepots=@$iGreffes->getBilansImages($siren);
+ $nbDepots=count($tabDepots);
+ print_r($tabDepots);
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (RECHERCHE dans $nbDepots $pageAc)".EOL;
+ foreach ($tabDepots as $depot) {
+ if ($pageAc=='greffe_actes')
+ $params2=$depot['acte_type'].'-'.WDate::dateT('Y-m-d','Ymd',$depot['acte_date']).'-'.$depot['numGreffe'].
+ '-'.$depot['numRC'].'-'.$depot['depot_num'].'-'.$depot['acte_num'];
+ else {
+ $params2=$depot['annee'].'_'.$depot['type'].'-'.WDate::dateT('Y-m-d','Ymd',$depot['dateCloture']).'-'.
+ $depot['numGreffe'].'-'.$depot['numRC'].'-'.$depot['depot_num'];
+ /// echo("$url\t$params\t$params2".EOL);
+// die();
+ }
+ if (strpos($params2, $params)===false)
+ echo("$params2\tDIFFERENT DE\t$params".EOL);
+ else {
+ echo("$params2\tIDENTIQUE\t$params".EOL);
+ $url="http://extranet.scores-decisions.com/pdf/acte-$siren-$params2.pdf";
+ $params=$params2;
+ //die($url);
+ $page=getUrl($url, '', '', '', false);
+ if ($page['code']<>200 || !isset($page['header']['Content-Disposition']) || $page['header']['Content-Disposition']=='') {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (inexistant)".EOL;
+ continue;
+ }
+ break;
+ }
+ }
+ } else
+ //print_r($page);die();
+ continue;
+ }
+ @mkdir($repPdfInfogreffe);
+ $fp=@fopen($repPdfInfogreffe.'/'.basename($url), 'w');
+ if (!$fp || !fwrite($fp, $page['body']))
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (erreur fichier local)".EOL;
+ @fclose($fp);
+ $tabPdf=getPdfInfo($repPdfInfogreffe.'/'.basename($url));
+ // randsleep($tempsMinEntreRequetes, $tempsMaxEntreRequetes);
+ }
+ if (!$tabPdf) {
+ echo date('Y/m/d - H:i:s') ." - ___\t$url (vide)".EOL;
+ unlink($repPdfInfogreffe.'/'.basename($url));
+ continue;
+ }
+
+ $pdfSize= $tabPdf['pdfSize'];
+ $pdfVer = $tabPdf['version'];
+ $pdfPage= $tabPdf['nbPages'];
+
+ $nbEncours++;
+ //$tabFichierOut[]=basename($url);
+ $tabFichierOut[]=basename($url);
+ $strFichierOut.="$nbEncours\t$dateCmd\t$pdfSize ko\t$pdfPage\t".basename($url).EOL;
+
+ if(!$iDb2->insert('fedaso', array( 'siren' => $siren,
+ 'params' => $params,
+ 'page' => $pageAc,
+ 'dateEnvoi' => date('YmdHis'),
+ 'dateCmd' => $dateCmd,
+ 'pdfNum' => $nbEncours,
+ 'pdfSize' => $pdfSize,
+ 'pdfPage' => $pdfPage,
+ ))) {
+ if ($lastDepot)
+ echo date('Y/m/d - H:i:s') ." - Reprise $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ else
+ echo date('Y/m/d - H:i:s') ." - ERREUR lors de l'insertion de $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ } else
+ echo date('Y/m/d - H:i:s') ." - $nbEncours\t$url ($pdfSize ko, $pdfPage pages)".EOL;
+ if ($nbEncours>=$nbEnvois) {
+ // On efface le dernier fichier car il est de trop !
+ //unlink($repPdfInfogreffe.'/'.basename($url));
+ break(2);
+ }
+ }
+ }
+ }
+
+ $fichierIndex='lotliensn-'.date('Y-m-d-Hi').'.txt';
+ $nbActes=count($tabFichierOut);
+
+ if (file_put_contents($repPdfInfogreffe.'/'.$fichierIndex, $verFedasoFic.EOL.implode(EOL, $tabFichierOut).EOL.$nbActes))
+ $message=date('Y/m/d - H:i:s') ." - Le fichier index $fichierIndex a été crée pour les $nbActes.". EOL;
+ else
+ $message=date('Y/m/d - H:i:s') ." - Erreur : Création impossible du fichier index $fichierIndex pour les $nbActes !". EOL;
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Génération du dépôt pour le Maroc", $message.EOL.$strFichierOut);
+} elseif ($genereDepot && $nbEncours==$nbEnvois) {
+ $message=date('Y/m/d - H:i:s') ." - Les $nbEncours actes quotidiens ont déjà été déposés.". EOL;
+} elseif ($genereDepot && $nbEncours<$nbEnvois) {
+ $message=date('Y/m/d - H:i:s') ." - Erreur : Il n'y a que $nbEncours actes / $nbActes déposés pour Fedaso !". EOL;
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Génération du dépôt pour le Maroc", $message.EOL.$strFichierOut);
+}
+echo $message;
+*/
+
+// Lecture du dossier des dépots de bilans à demander en saisie
+if ($genereDepot) {
+ $nbEncours=0;
+ $dh = opendir(BILANS_A_SAISIR_DIR);
+ while (false !== ($filename = readdir($dh))) {
+ if ($filename<>'.' && $filename<>'..' && substr($filename, -4)=='.pdf') {
+ $filename2=str_replace('.pdf','',$filename);
+ $tabTmp=explode('_', str_replace('BS','',$filename2));
+ $siren = $tabTmp[0];
+ $dateClot= $tabTmp[1];
+ $dureeClot=$tabTmp[2];
+ $conf = $tabTmp[3];
+ $idUti = $tabTmp[4];
+ $idBddExt=@$tabTmp[5];
+ $env = ''.@$tabTmp[6];
+ $dateFic=date('YmdHis', filectime(BILANS_A_SAISIR_DIR.'/'.$filename));
+ $tabPdf=getPdfInfo(BILANS_A_SAISIR_DIR.'/'.$filename);
+ if ($tabPdf) {
+ $pdfSize= $tabPdf['pdfSize'];
+ $pdfVer = $tabPdf['version'];
+ $pdfPage= $tabPdf['nbPages'];
+ }
+ $sizeKo=round($pdfSize/1024,1);
+ echo "$filename\t$sizeKo Ko\t$pdfPage page(s)\t";
+
+ if(!$iDb2->insert('fedaso_bilans',array('siren' => $siren,
+ 'dateCloture' => $dateClot,
+ 'duree' => $dureeClot,
+ 'confidentiel' => $conf,
+ 'idUtilisateur' => $idUti,
+ 'idExtranet' => $idBddExt,
+ 'environnement' => $env,
+ 'refDoc' => $filename,
+ 'dateEntree' => $dateFic,
+ 'dateEnvoi' => date('YmdHis'),
+ 'pdfNum' => $nbEncours,
+ 'pdfSize' => $pdfSize,
+ 'pdfPage' => $pdfPage,
+ ))) {
+ echo 'KO bdd'.mysql_error().EOL;
+ } else {
+ $nbEncours++;
+ bzip2(BILANS_A_SAISIR_DIR.'/'.$filename, FEDASO_BACKUP_DIR.$filename);
+ move(BILANS_A_SAISIR_DIR.'/'.$filename, FEDASO_BILANS_TODO_DIR.'/'.$filename);
+ echo 'Ok'.EOL;
+ }
+ }
+ }
+}
+
+if (count($tabFichierIn)>0 || count($tabFichLigneCmd)>0) {
+ $messageErrCtrl=''; // Message listant les erreurs de saisie
+ echo date ('Y/m/d - H:i:s') . " - Début du traitement de chargement du retour Bilans Fedaso.".EOL;
+ $mailReferentiel=$msgDiff=array();
+ for ($i=0; isset($tabFichierIn[$i]); $i++)
+ {
+ //IKI
+ $nomFichier =$tabFichierIn[$i];
+ $dateFichier=date('YmdHis', filectime(FEDASO_BILANS_DONE_DIR.$nomFichier));
+ $fp=fopen(FEDASO_BILANS_DONE_DIR.$nomFichier, 'r');
+ if (!$fp) {
+ echo date ('Y/m/d - H:i:s') ." - Erreur : Impossible d'ouvrir le fichier n°$i à traiter (".$nomFichier.")".EOL;
+ echo date ('Y/m/d - H:i:s') . " - Fin du traitement".EOL;
+ die();
+ }
+
+ $nbLignes=0; // Nombre de ligne du fichier
+ while (!feof($fp))
+ {
+ $nbLignes++;
+ $a = trim(fgets($fp));
+ }
+
+ echo date ('Y/m/d - H:i:s')." - Début du traitement du fichier n°$i, $nomFichier ($nbLignes bilans à traiter) !".EOL;
+
+
+ $refDocPre=$refoc=$dateInfoPre=$dateInfo=false;
+ $ligne=1;
+ rewind($fp);
+
+ /** Traitement de la 1ère ligne **/
+ $a = utf8_decode(fgets($fp));
+
+ while (!feof($fp))
+ {
+ $ajoutMailRef=false;
+ $a=explode(',',$a);
+
+ $refDoc = trim($a[0]);
+ // On ignore la ligne d'entête
+ if ($refDoc<>'PdfId') {
+ $siren = trim($a[1])*1;
+ $nic = trim($a[2])*1;
+ //$typeData = strtoupper(trim(substr($a,9,1)));
+ //$typeActe = trim(substr($a,13,3));
+ $dateExercice = trim($a[3])*1;
+ $dureeExercice = trim($a[4])*1;
+ $dateExercicePre = trim($a[5])*1;
+ $devise = strtoupper(trim($a[6]));
+ if ($devise=='') $devise = 'EUR';
+ $liasse = trim($a[7])*1;
+ $typeBilan = strtoupper(trim($a[8]));
+ // Liste des codes retours
+ $codeRetour = trim($a[9]);
+ if (preg_match('/01/', $codeRetour)) $codeSai='01';
+ elseif (preg_match('/00/', $codeRetour)) $codeSai='00';
+ else $codeSai=substr($codeRetour,0,2);
+ $unite = strtoupper(trim($a[10]));
+ // Postes du bilans
+ $strPostes = trim($a[11]);
+ $tabPostes=array();
+ $tabTmp=explode(';',$strPostes);
+ foreach ($tabTmp as $tmpPoste) {
+ $tabTmp2=explode('=',$tmpPoste);
+ $tabPostes[$tabTmp2[0]]=$tabTmp2[1];
+ }
+
+ // Contrôle du siren retourné par Fedaso
+ if ($siren==0 || !$iInsee->valideSiren($siren)) {
+ $tmp=explode('-', $refDoc);
+ $siren=$tmp[1];
+ if ($siren==0 || !$iInsee->valideSiren($siren)) {
+ $tmp=explode('_', $refDoc);
+ $siren=preg_replace('/^BS/','',$tmp[0])*1;
+ }
+ if ($siren==0 || !$iInsee->valideSiren($siren))
+ die(date ('Y/m/d - H:i:s')." - ERREUR fichier $nomFichier, ligne $ligne : Siren $siren invalide dans $refDoc !".EOL);
+ }
+
+ $ret=$iDb->select('bilans', 'siren, typeBilan, dateExercice, dateExercicePre, PERIOD_DIFF(SUBSTRING(dateExercice,1,6),SUBSTRING(dateExercicePre,1,6)) as dureeExerciceCalc, dureeExercice', "siren='$siren' AND typeBilan='$typeBilan' AND dateExercice='$dateExercicePre'", true, MYSQL_ASSOC);
+ if (isset($ret[0])) {
+ $bilanPre=$ret[0];
+ if ($bilanPre['dureeExercice']>0) $dureeExercicePre=$bilanPre['dureeExercice'];
+ elseif ($bilanPre['dureeExerciceCalc']>0) $dureeExercicePre=$bilanPre['dureeExerciceCalc'];
+ }
+ $tabInsert=array('siren'=>$siren,
+ 'dateProvPartenaire'=>date('Ymd'),
+ 'dateExercice'=>$dateExercice,
+ 'dateExercicePre'=>$dateExercicePre,
+ 'dureeExercice'=>$dureeExercice,
+ 'dureeExercicePre'=>$dureeExercicePre,
+ 'monnaie'=>$devise,
+ 'typeBilan'=>$typeBilan,
+ 'monnaieOrigine'=>$devise,
+ 'unite'=>$unite,
+ 'partenaire'=>19,
+ 'postes'=>$strPostes);
+ if ($codeSai=='00' || $codeSai=='01') {
+ $ret=$iDb->select('bilans', 'partenaire, siren, typeBilan, dateExercice, dateExercicePre, PERIOD_DIFF(SUBSTRING(dateExercice,1,6),SUBSTRING(dateExercicePre,1,6)) as dureeExerciceCalc, dureeExercice', "siren='$siren' AND typeBilan='$typeBilan' AND dateExercice='$dateExercice'", true, MYSQL_ASSOC);
+ // Il y a déjà ce bilan en base ?
+ if (1==0) {//isset($ret[0])) {
+ /* $bilanPre=$ret[0];
+ if ($bilanPre['partenaire']==7 ||
+ $bilanPre['partenaire']==8 ||
+ $bilanPre['partenaire']==9) {*/
+ $ret=$iDb->update('bilans', $tabInsert, "siren='$siren' AND typeBilan='$typeBilan' AND dateExercice='$dateExercice'");
+ $nbUpdate++;
+ //} else
+ // $nbNotUpdate++;
+ } else {
+ /** Tester sur les nouveaux bilans
+ * - CA x par 10 - 100
+ * - Sous-totaux
+ * - Total Bilan
+ **/
+ if ($typeBilan=='N' || $typeBilan=='S') {
+ $anoBilan=false;
+ $msgBilan='';
+ foreach ($tabCtrl[$typeBilan] as $ctrl=>$libCtrl) {
+ $tmpCtrl=preg_split('/(\+|\-|=)/', $ctrl, null, PREG_SPLIT_DELIM_CAPTURE);
+ $total=0;
+ $action='+';
+ $strEcho="$libCtrl :\t$ctrl";
+ foreach ($tmpCtrl as $strCtrl) {
+ switch($strCtrl) {
+ case '+': $action='+'; break;
+ case '-': $action='-'; break;
+ case '=': $action='='; break;
+ default:
+ if ($action=='+') $total+=@$tabPostes[$strCtrl];
+ elseif ($action=='-') $total-=@$tabPostes[$strCtrl];
+ elseif ($action=='=') {
+ if ($total>0) {
+ $totalMin=($total*0.995)-ECART_CTRL_MAX;
+ $totalMax=($total*1.005)+ECART_CTRL_MAX;
+ } elseif ($total<0) {
+ $totalMin=($total*1.005)-ECART_CTRL_MAX;
+ $totalMax=($total*0.995)+ECART_CTRL_MAX;
+ } else {
+ $totalMin=ECART_CTRL_MAX*(-1);
+ $totalMax=ECART_CTRL_MAX;
+ }
+ if (!((@$tabPostes[$strCtrl]*1)>=$totalMin && (@$tabPostes[$strCtrl]*1)<=$totalMax)) {
+ if (!$anoBilan)
+ $messageLigne="Fichier $fichier : ligne $ligne, $siren, $dateExercice - Retour Saisie n°$codeSai : ".$tabLibCodeSaisie['_'.$codeSai].EOL;
+ else
+ $messageLigne='';
+ $messageLigne.="$strEcho (saisi ".@$tabPostes[$strCtrl].' <> '.$total." calculé)".EOL;
+ echo $messageLigne;
+ $messageErrCtrl.=$messageLigne;
+ $msgBilan.=$messageLigne; //if ($tabPostes[$strCtrl]<>$total) echo "\tdifférents";
+ if ($codeSai=='00') $anoBilan=2;
+ }
+ // else echo "ok\t(".@$tabPostes[$strCtrl].'='.$total.')'.EOL;
+ }
+ break;
+ }
+ }
+ }
+ }
+ /*
+ $mBil=new MBilans($sirenPre);
+ $tabBilans=@$mBil->listeBilans();
+ //echo 'Liste des Bilans en base :'.EOL;
+ //print_r($tabBilans);
+ $tabBilan=@$mBil->getBilan(WDate::dateT('Ymd','d/m/Y',$dateClP), $typeBilan);
+ echo "Bilan précédent datant du '$dateClP' :".EOL;
+ //print_r($tabBilan);
+ echo "Bilan à ajouter datant du '$dateCloturePre' :".EOL;
+ //print_r($tabInsert);
+ //print_r($tabPostes);
+ if ($typeBilan=='N') {
+ foreach ($tabCtrlInter[$typeBilan] as $ctrl=>$libCtrl) {
+ $total=@$tabBilan[$ctrl]*1;
+ $strEcho="PROBLEME D'UNITE ? $libCtrl :\t$ctrl";
+ if ($total>0) {
+ $totalMin1=($total*0.008)-ECART_CTRL_MAX;
+ $totalMax1=($total*0.0012)+ECART_CTRL_MAX;
+ $totalMin2=($total*800)-ECART_CTRL_MAX;
+ $totalMax2=($total*1200)+ECART_CTRL_MAX;
+ } elseif ($total<0) {
+ $totalMin1=($total*0.0012)-ECART_CTRL_MAX;
+ $totalMax1=($total*0.008)+ECART_CTRL_MAX;
+ $totalMin2=($total*1200)-ECART_CTRL_MAX;
+ $totalMax2=($total*800)+ECART_CTRL_MAX;
+ } else {
+ $totalMin1=$totalMin2=false;//ECART_CTRL_MAX*(-1);
+ $totalMax1=$totalMax2=false;//ECART_CTRL_MAX;
+ }
+ if (isset($tabBilan[$ctrl]) && // Il y a un poste
+ !$totalMin1 && // Des seuils min
+ !$totalMin2 && // ... et max
+ !((@$tabPostes[$ctrl]*1)>=$totalMin1 && (@$tabPostes[$ctrl]*1)<=$totalMax1)) {
+ if (!$anoBilan)
+ $messageLigne="Fichier $fichier : ligne $nbLignes, $sirenPre, $dateCloturePre - Retour Saisie n°$codeSai : ".$tabLibCodeSaisie['_'.$codeSai].EOL;
+ else
+ $messageLigne='';
+ $messageLigne.="$strEcho (saisi en N ".@$tabPostes[$ctrl].' <> '.$total." présent en N-1 $dateClP)".EOL;
+ echo $messageLigne;
+ $messageErrCtrl.=$messageLigne; //if ($tabPostes[$strCtrl]<>$total) echo "\tdifférents";
+ if ($codeSai=='00') $anoBilan=true;
+ //die();
+ }
+ }
+ }
+// die();
+ */
+ $ret=$iDb->insert('bilans', $tabInsert);
+ $nbInsert++;
+ print_r($tabInsert);
+ //die();
+ }
+ } else
+ print_r($tabInsert);
+
+ /** Mise à jour des informations de saisie **/
+ $nbPostes=count($tabPostes);
+ $tabUpdate=array( 'retNic' => $nic,
+ 'retDateClot' => $dateExercice,
+ 'retDuree' => $dureeExercice,
+ 'retDatePre' => $dateExercicePre,
+ 'retDevise' => $devise,
+ 'retLiasse' => $liasse,
+ 'retTypeBilan' => $typeBilan,
+ 'retUnite' => $unite,
+ 'retNbPostes' => $nbPostes,
+ 'retPostes' => $strPostes,
+ 'codeRetour' => $codeRetour,
+ 'dateRetour' => $dateFichier,
+ 'dateChargement'=> date('YmdHis'),
+ 'retAnoSaisie' => $anoBilan,
+ 'retAnoListes' => $msgBilan,
+ );
+ $iDb2->update('fedaso_bilans', $tabUpdate, "refDoc='$refDoc'");
+
+ /** Envoi du mail à l'utilisateur final **/
+ $filename2=str_replace('.pdf','',$refDoc);
+ $tabTmp=explode('_', $filename2);
+ $siren = preg_replace('/^BS/','',$tabTmp[0])*1;
+ $dateClot= $tabTmp[1];
+ $idUti = $tabTmp[4];
+ $rep=$iDb2->select('utilisateurs', 'id, idClient, login, email, actif, nom, prenom, referenceParDefaut', "id='$idUti'", true, MYSQL_ASSOC);
+ $emailEnvoi=$rep[0]['email'];
+ $tabIdentite=@$iInsee->getIdentiteLight($siren);
+ $sirenAff=implode(' ', str_split($siren,3));
+ $rs=substr($tabIdentite['Nom'],0,30).'...';
+ $message="Siren : $sirenAff\r\n".'Raison Sociale : '.$tabIdentite['Nom']."\r\n";
+ // Durée de l'exercice
+ if ($dureeExercice*1>0) $strDuree=" (durée : $dureeExercice mois)";
+ else $strDuree='';
+
+ $message.='Date de clôture : '. WDate::dateT('Ymd','d/m/Y',$dateExercice)."$strDuree\r\n";
+ if ($typeBilan<>'') $message.="Format de liasse : $liasse\r\n";
+ $message.="\r\n";
+ $message.="Adresse du siège : ". $tabIdentite['Adresse'].', '.$tabIdentite['CP'].' '.$tabIdentite['Ville']."\r\n";
+ $message.="Forme juridique : ". $tabIdentite['FJ_lib'].' ('.$tabIdentite['FJ'].")\r\n";
+ $message.="Activité de l'entreprise : ". $tabIdentite['NafEntLib'].' ('.$tabIdentite['NafEnt'].")\r\n";
+ $message.="\r\n";
+
+ $message.="NOS SERVICES ONT EFFECTUE LA SAISIE DU BILAN POUR CETTE ENTREPRISE\r\n";
+
+ if ($modeTest) $emailEnvoi='lenaoury@gmail.com';
+ @sendMail('prod@scores-decisions.com', $emailEnvoi, "Saisie de Bilan $sirenAff : $rs", $message);
+ @sendMail('prod@scores-decisions.com', 'ylenaour@scores-decisions.com', "Saisie de Bilan $sirenAff : $rs", $message.EOL.EOL."--------------------------------------------------".EOL."Ce mail a été envoyé à $emailEnvoi.");
+
+ // Comptage des retours par codes saisies
+ @$tabNbCodeRet['_'.$codeSai]++;
+ }
+ $ligne++;
+ $a = utf8_decode(fgets($fp));
+
+ // Variables de contrôles
+ $refDocPre=$refDoc;
+ $dateInfoPre=$dateInfo;
+ }
+
+ if (bzip2(FEDASO_BILANS_DONE_DIR.$nomFichier, FEDASO_BACKUP_DIR.$nomFichier)) {
+ unlink(FEDASO_BILANS_DONE_DIR.$nomFichier);
+ echo date ('Y/m/d - H:i:s') . " - Le fichier n°$i, $nomFichier vient d'être historisé.".EOL;
+ }
+ }
+ /*
+ if (count($mailReferentiel)>0) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Penser à modifier le référentiel", implode(EOL, $mailReferentiel));
+ }
+ if (count($msgDiff)>0) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : Liste des c'ontrôles", implode(EOL, $msgDiff));
+ }
+
+ /** Enlever ce die() quand on est prêt à valider les fichiers charger **/
+ //die();
+
+ /** Mise à jour des informations globales de retour : Dates, Types d'actes et structures lues
+ **/
+ /*
+ foreach ($tabTypeActes as $refDoc=>$typeActes) {
+
+ // Transformation de la référence en réf. stockée en base (suppression siren, acte/bilan et .pdf)
+ $params=str_replace('.pdf','',preg_replace('/^(bilan|acte)-\d\d\d\d\d\d\d\d\d-/Ui','', $refDoc));
+ $tmp=explode('-', $refDoc);
+ $siren=$tmp[1];
+
+ $tabTypeData2=array();
+ if (isset($tabTypeData[$refDoc]))
+ foreach ($tabTypeData[$refDoc] as $typeD=>$nbD)
+ $tabTypeData2=array_merge($tabTypeData2, array('nbData'.$typeD=>$nbD));
+
+ echo date ('Y/m/d - H:i:s') . " - Mise à jour des infos retournées pour $refDoc...".EOL;
+ $typeActes=array_unique($typeActes);
+ if (!$iDb2->update('fedaso', array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes),
+ 'dateRetour'=>$dateFichier)),"siren=$siren AND params='$params'")) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : ERREUR Fichier PDF non diffusé",
+ "siren=$siren AND params='$params'".EOL.
+ print_r(array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes), 'dateRetour'=>$dateFichier)),true));
+ echo date ('Y/m/d - H:i:s')." - ERREUR ". mysql_errno(). " - MAJ impossible sur 'fedaso' : ". mysql_error().EOL;
+ if (substr($params,0,4)*1>1950) $pageAc='greffe_bilans';
+ else $pageAc='greffe_actes';
+ $iDb2->insert('fedaso', array( 'siren' => $siren,
+ 'params' => $params,
+ 'page' => $pageAc,
+ 'dateEnvoi' => date('YmdHis'),
+ ));
+ if (!$iDb2->update('fedaso', array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes),
+ 'dateRetour'=>$dateFichier)),"siren=$siren AND params='$params'")) {
+ sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "FEDASO : ERREUR Fichier PDF non diffusé",
+ "siren=$siren AND params='$params'".EOL.
+ print_r(array_merge($tabTypeData2, array('typeActesLus'=>implode(';', $typeActes), 'dateRetour'=>$dateFichier)),true));
+ die();
+ }
+ }
+ }
+ */
+ echo date ('Y/m/d - H:i:s') . " - Fin du traitement de chargement du retour Fedaso.".EOL;
+
+} else {
+ //$message.="Aucun fichier CSF à traiter !\r\n";
+ echo date ('Y/m/d - H:i:s') . " - Aucun fichier Fedaso à traiter !".EOL;
+ //if (count($argv)==1) die($strInfoScript);
+}
+
+echo date('Y/m/d - H:i:s') .' - FIN du script.'. EOL;
+
+ ?>
\ No newline at end of file
diff --git a/batch/ftpadmin.sh b/batch/ftpadmin.sh
new file mode 100644
index 00000000..25185127
--- /dev/null
+++ b/batch/ftpadmin.sh
@@ -0,0 +1,141 @@
+#!/bin/bash
+################################################################################
+# Utilitaire pour Pure-FTP
+# PureFTPadmin v1.0 Feb 05 2003 written by : SkazeR