#!/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; // 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 (!$iInsee->valideSiren($siren)) echo 'KO siren invalide'.EOL; 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; $tabIdentite=@$iInsee->getIdentiteLight($siren); $sirenAff=implode(' ', str_split($siren,3)); $rs=substr($tabIdentite['Nom'],0,30).'...'; $message="Merci de procéder dès que possible à la saisie du bilan PDF de $pdfPage pages pour la société suivante :\r\n"; $message.="\r\n"; $message="Siren : $sirenAff\r\n".'Raison Sociale : '.$tabIdentite['Nom']."\r\n"; // Durée de l'exercice if ($dureeClot*1>0) $strDuree=" (durée : $dureeClot mois)"; else $strDuree=''; $message.='Date de clôture : '. WDate::dateT('Ymd','d/m/Y',$dateClot)."$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.="Document "; if ($conf<>1) $message.="non "; $message.="confidentiel\r\n"; $message.="Fichier $filename du ". WDate::dateT('Ymd','d/m/Y',$dateFic)."\r\n"; $message.="Nombre de pages : $pdfPage pages (".round($pdfSize/1000,1)." Ko)\r\n"; $message.="Utilisateur n°$idUti\r\n"; $message.="Extranet n°$idBddExt\r\n"; $message.="\r\n"; if ($pdfPage*1>10) $message.="Le document étant volumineux, pensez à saisir les actionnaires et participations (généralement mentionnés dans les annexes 17 et 18) !\r\n"; // if ($env==1) $message.="CECI EST UN TEST, MERCI DE NE PAS SAISIR LE DOCUMENT\r\n"; $message.="\r\n"; $message.="https://tville.scores-decisions.com/boffice/sirenbod/bilans.php?type=SAIS&ctrl=0\r\n"; sendMail('production@scores-decisions.com', 'jal42@scores-decisions.com', "Demande de saisie du bilan $siren du ".WDate::dateT('Ymd','d/m/Y',$dateClot)." ($dureeClot mois)", $message); } } } } 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=5; } // 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; ?>