> /home/scores/log/SfrIndicateur.log * 01 00 * * 1-6 scores php /home/scores/batch/scripts/clients/SfrIndicateur.php --cron --evaluate >> /home/scores/log/SfrIndicateur.log */ error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED); // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); //Use classmap autoloader - useful with opcode and realpath cache require_once 'Zend/Loader/AutoloaderFactory.php'; require_once 'Zend/Loader/ClassMapAutoloader.php'; Zend_Loader_AutoloaderFactory::factory(array( 'Zend_Loader_ClassMapAutoloader' => array( __DIR__ . '/../../library/autoload_classmap.php', ), 'Zend_Loader_StandardAutoloader' => array( 'prefixes' => array( 'Zend' => __DIR__ . '/../../library/Zend', 'Application' => __DIR__ . '/../../library/Application', 'Scores' => __DIR__ . '/../../library/Scores', 'SdMetier' => __DIR__ . '/../../library/SdMetier', 'Metier' => __DIR__ . '/../../library/Metier', ), 'fallback_autoloader' => true ) )); // Zend_Application - Use it if you don't have autoloaders //require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); try { $opts = new Zend_Console_Getopt( //Options array( 'help|?' => "Displays usage information.", 'load-s' => "Preload file in database and check SIREN", 'evaluate-s' => "Lauch evaluation (specify the Seq Number to regen)", 'manual-s' => "Provide manualy the file path to get result and debug values", 'debug' => "Debug", 'cron' => "Mandatory option for launch the cli in cron", ) ); $opts->parse(); } catch (Zend_Console_Getopt_Exception $e) { echo $e->getUsageMessage(); exit; } //Usage if( isset($opts->help) || count($opts->getOptions())==0 ) { echo "Execute prestation SFR.\n"; echo $opts->getUsageMessage(); exit; } require_once APPLICATION_PATH.'/configs/config.php'; require_once 'framework/fwk.php'; require_once 'framework/common/chiffres.php'; require_once 'framework/common/dates.php'; require_once 'framework/mail/sendMail.php'; require_once 'framework/common/mysql.php'; require_once 'Metier/insee/classMInsee.php'; require_once 'Metier/scores/classMSolvabilite.php'; $c = new Zend_Config($application->getOptions()); $db = Zend_Db::factory($c->profil->db->metier); Zend_Db_Table_Abstract::setDefaultAdapter($db); $client = 'sfrbtr'; $typeDepot = 'SFTP'; $prestation = 'FICH_RCE'; //Input path $pathIn = $c->profil->path->storage . DIRECTORY_SEPARATOR . 'clients' . DIRECTORY_SEPARATOR . $client . DIRECTORY_SEPARATOR . 'send'; //Output path $pathOut = $c->profil->path->storage . DIRECTORY_SEPARATOR . 'clients' . DIRECTORY_SEPARATOR . $client . DIRECTORY_SEPARATOR . 'recv'; /* * File Configuration * Possible encoding : * Windows-1252//TRANSLIT * ISO-8859-15//TRANSLIT * */ $fileOptionsIn = array( 'dir' => $pathIn, 'type' => 'csv', 'delimiter' => ';', 'enclosure' => '"', 'header' => array('idDemande', 'SSAEmetteur'), 'columns' => array('siren', 'nbLignes', 'dateContrat', 'nbContrats', 'ir'), 'encoding' => 'ISO-8859-15', ); $fileOkOptionsOut = array( 'dir' => $pathOut, 'type' => 'csv', 'delimiter' => ';', 'enclosure' => '"', 'header' => array('idDemande', 'SSAEmetteur'), 'columns' => array('siren', 'idVOR', 'PO', 'commentaire'), 'name' => 'FICH_RCE_RETOUR_', 'encoding' => 'ISO-8859-15', ); $fileErrorOptionsOut = array( 'dir' => $pathOut, 'type' => 'csv', 'delimiter' => ';', 'enclosure' => '"', 'header' => array('idDemande', 'SSAEmetteur'), 'columns' => array('siren', 'code'), 'name' => 'FICH_RCE_ERREUR_', 'encoding' => 'ISO-8859-15', ); $filePortefeuilleOptionsOut = array( 'dir' => $pathOut, 'type' => 'csv', 'delimiter' => ',', 'enclosure' => '"', 'header' => array(), 'columns' => array( 'loginUti', 'source', 'email', 'siren', 'nic', 'ref', 'dateAjout', 'rs', 'cp', 'ville', 'dateDerEnvoi', 'encoursClient', 'actif', 'procol', 'indiScore20', 'encours', 'indiScoreDate', 'dateBilan', 'indiScore20Pre', 'encoursPre', 'indiScoreDatePre', 'sourceModif', 'scoreSolv', 'scoreSolvPre', 'scoreDir', 'scoreDirPre', 'scoreConf', 'scoreConfPre', 'cj', 'capital', 'capitalDev', 'ape_entrep', 'tca', 'teff_entrep', 'dateUpdate', ), 'name' => 'CLIENTSINDISCORE_', 'encoding' => 'ISO-8859-15', ); // => Debug Mode - Create file with debug values if ( $opts->manual ) { if ( !empty($opts->manual) && $opts->manual!==true ) { $filepath = $opts->manual; $pathOut = dirname(realpath($filepath)); } else { $pathOut = dirname(__FILE__); } $fileOptionsIn['dir'] = $pathOut; $fileErrorOptionsOut['dir'] = $pathOut; $fileOkOptionsOut['dir'] = $pathOut; $dateBegin = date('YmdHis'); $filesOutOptions = array( 'ok' => $fileOkOptionsOut, 'error' => $fileErrorOptionsOut ); } // => Automatic mode if ( $opts->cron ) { /* * Detecter si la date n'est pas trop ancienne */ $dateNow = new Zend_Date(); $dateIn1 = $dateNow->toString('yyyy-MM-dd HH:mm:ss'); $diff = $dateNow->sub(20, Zend_Date::HOUR); $dateIn2 = $diff->toString('yyyy-MM-dd HH:mm:ss'); //client, name, depotType, depotDate, depotFile, nbLines, dateInsert, dateExecute $fluxinM = new Application_Model_Sdv1FluxFileIn(); $sql = $fluxinM->select() ->where('client=?',$client) ->where('name=?', $prestation) ->where('depotType=?',$typeDepot) ->where('dateExecute=?','0000-00-00 00:00:00') ->where("dateInsert BETWEEN '".$dateIn2."' AND '".$dateIn1."' ") ->order('dateInsert DESC'); $pitems = $fluxinM->fetchAll($sql); if ( $pitems->count()==0 ) { echo date('Y-m-d H:i:s')." : Aucun traitement à réaliser.".PHP_EOL; exit; } foreach ($pitems as $p) { $filepath = $pathIn . DIRECTORY_SEPARATOR . $p->depotFile; break; } if ( !file_exists($filepath) ) { echo date('Y-m-d H:i:s')." : Fichier inexistant ! ".PHP_EOL; exit; } $opts->load = $filepath; } /** * Chargement du fichier avec premières vérifications */ if ($opts->load && !$opts->evaluate) { //Lire et vérifier le fichier if ( checkFile($opts->load, $fileOptionsIn) ) { //Charger dans la table client AVEC vérification SIREN valide et existe echo date('Y-m-d H:i:s')." - Début chargement..." . PHP_EOL; $seq = execDbIn($opts->load, $fileOptionsIn); //Marquer les SIREN qui n'existe pas dans la bdd echo date('Y-m-d H:i:s')." - Marquage des SIREN inexistant" . PHP_EOL; $sql = "UPDATE jo.sfr_data SET error=1020 WHERE NumSeq='".$seq."' AND error=0 AND siren NOT IN (SELECT DISTINCT siren FROM jo.etablissements_old)"; try { $result = $db->query($sql); } catch (Zend_Db_Exception $e) { $sql = "UPDATE jo.sfr_data SET error=1020 WHERE NumSeq='".$seq."' AND error=0 AND siren NOT IN (SELECT DISTINCT siren FROM jo.etablissements)"; $result = $db->query($sql); } //@todo : Mise à jour du portefeuille CFT (Nom de la prestation) //Ajouter les SIREN valide qui ne sont pas en surveillance echo date('Y-m-d H:i:s')." - Mise sous surveillance" . PHP_EOL; $sql = "INSERT IGNORE INTO jo.scores_surveillance (siren) (SELECT siren FROM jo.sfr_data WHERE error=0 AND NumSeq='".$seq."')"; $result = $db->query($sql); //Marquer les SIREN qui ne seront pas calculé /*echo date('Y-m-d H:i:s')." - Marquage des SIREN imposssible à calculer" . PHP_EOL; $sql = "UPDATE jo.sfr_data SET error=2020 WHERE NumSeq='".$seq."' AND error=0 AND siren IN (SELECT siren FROM jo.scores_surveillance WHERE naf='' OR CJ IS NULL OR dateCrea IS NULL OR indiScoreDate='0000-00-00')"; $result = $db->query($sql);*/ } // --- Nettoyage $date = new Zend_Date(); if ( $date->getWeekday() == 6 ) { $date->setDay(-1)->setHour(23)->setMinute(59)->setSecond(59); echo date('Y-m-d H:i:s')." - Suppression ancienne référence." . PHP_EOL; $sql = "DELETE FROM jo.sfr_data WHERE dateInsert < '".$date->toString('yyyy-MM-dd HH:mm:ss')."'"; try { $result = $db->query($sql); } catch (Zend_Db_Exception $e) {} } } /** * Lancement de l'évaluation et création des 3 fichiers de sorties */ if ( $opts->evaluate ) { if ( !empty($opts->manual) && $opts->manual!==true ) { echo "Traitement Manuel..." . PHP_EOL; execFileIn($filepath, $fileOptionsIn, array('ok'=>$fileOkOptionsOut,'error'=>$fileErrorOptionsOut), $opts->debug); } else { $nbLines = 0; //Use Seq Number from command line if ( $opts->evaluate !== true ) { $seq = $opts->evaluate; } //Guess the last Seq Number else { try { $db->setFetchMode(Zend_Db::FETCH_OBJ); $result = $db->fetchRow('SELECT NumSeq, dateInsert FROM jo.sfr_data ORDER BY id DESC LIMIT 0,1'); } catch(Zend_Db_Adapter_Exception $e) { echo $e->getMessage(); } $seq = $result->NumSeq; //Vérification date $dateNow = new Zend_Date(); $dateInsert = new Zend_Date($result->dateInsert, 'yyyy-MM-dd HH:mm:ss'); $diff = $dateNow->sub($dateInsert); $measure = new Zend_Measure_Time($diff->toValue(), Zend_Measure_Time::HOUR); if ( $measure->getValue()<20 ) { echo date('Y-m-d H:i:s')." : Aucun traitement à réaliser (Dernière date : ".$dateInsert->toString('yyyy-MM-dd HH:mm:ss').").".PHP_EOL; exit; } } $dateBegin = date('YmdHis'); //Génération des fichiers $db->setFetchMode(Zend_Db::FETCH_OBJ); if ( $opts->cron ) { //Marquer les SIREN qui ne seront pas calculé echo date('Y-m-d H:i:s')." - Marquage des SIREN imposssible à calculer" . PHP_EOL; $sql = "UPDATE jo.sfr_data SET error=2020 WHERE NumSeq='".$seq."' AND error=0 AND siren IN (SELECT siren FROM jo.scores_surveillance WHERE naf='' OR CJ IS NULL OR dateCrea IS NULL OR indiScoreDate='0000-00-00')"; $result = $db->query($sql); } //Recherche des siren valides ainsi que leur scores $sql = 'SELECT sfr.siren, sfr.DateContrat, sfr.IR,' . ' surv.actif, surv.procol, surv.naf, surv.CJ, surv.dateImmat, surv.dateCrea, surv.effectif, surv.indiScore20, surv.indiScoreDate, surv.dateUpdate' . ' FROM jo.sfr_data AS sfr' . ' LEFT JOIN jo.scores_surveillance AS surv ON sfr.siren=surv.siren' . ' WHERE sfr.error=0 AND sfr.NumSeq=\''.$seq.'\''; echo date('Y-m-d H:i:s')." - Recherche des SIREN valides avec leur score.".PHP_EOL; $result = $db->fetchAll($sql); if ( $result !== null ) { echo date('Y-m-d H:i:s')." - NbLignes=".count($result).PHP_EOL; $sfrDataM = new Application_Model_JoSfrData(); $file = $fileOkOptionsOut['dir'] . DIRECTORY_SEPARATOR . $fileOkOptionsOut['name'] . $dateBegin . '.' . $fileOkOptionsOut['type']; //Ouverture fichier RETOUR $fp = fopen($file, 'w'); $sfrM = new SdMetier_Sfr_Scoring(); $sfrM->notCalculateInError = true; //Header if ( $opts->debug ) { $keys = array_keys($sfrM->getValDebug()); $fileOkOptionsOut['columns'] = array_merge($fileOkOptionsOut['columns'], $keys); $line = array(); foreach ( $fileOkOptionsOut['columns'] as $i => $column ) { $line[] = array($seq, 'RCE'); } } else { $line = array($seq, 'RCE'); } fputcsv($fp, $line, $fileOkOptionsOut['delimiter'], $fileOkOptionsOut['enclosure']); $row = 0; //Content foreach ($result as $item) { $row++; echo date('Y-m-d H:i:s')." - Ligne $row : Siren=".$item->siren; //Score non calculé if ( $item->indiScore20 === null ) { echo ", Non calculé"; $sfrDataM->update(array('error' => 2020), "siren='".$item->siren."' AND NumSeq='".$seq."'"); } //Evaluation else { $sfrM = new SdMetier_Sfr_Scoring(); $sfrM->notCalculateInError = true; //Set Values $sfrM->setVal('ContratDate', $item->DateContrat); $sfrM->setVal('IR', $item->IR); $sfrM->setVal('NAF', $item->naf); $sfrM->setVal('FJ', $item->CJ); $sfrM->setVal('InseeActif', $item->actif); $sfrM->setVal('Effectif', $item->effectif); $sfrM->setVal('Indiscore',$item->indiScore20); $sfrM->setVal('DateCalculIndiscore',$item->indiScoreDate); $sfrM->setVal('DateUpdate',$item->dateUpdate); $sfrM->setVal('DateCrea',$item->dateCrea); $sfrM->setVal('DateImmat',$item->dateImmat); $sfrM->setVal('SituationJuridique',$item->procol); //Evaluate if ( $sfrM->evaluate($item->siren) ) { $values = array(); $values['siren'] = str_pad($item->siren, 9, '0', STR_PAD_LEFT); $values['idVOR'] = $sfrM->getIndicateur(); $values['commentaire'] = $sfrM->getComment(); //Only return PO when FEU = ORANGE if ($values['idVOR'] == 'ORANGE') { $values['PO'] = $sfrM->getPo(); } else { $values['PO'] = ''; } if ( $opts->debug ) { $valuesDebug = $sfrM->getValDebug(); $values = array_merge($values, $valuesDebug); } echo ", ID=".$values['idVOR'].", commentaire=".$values['commentaire']; //Ecrire fichier RETOUR $line = array(); foreach ( $fileOkOptionsOut['columns'] as $i => $column ) { $line[] = $values[$column]; } fputcsv($fp, $line, $fileOkOptionsOut['delimiter'], $fileOkOptionsOut['enclosure']); } else { echo ", Pas de calcul"; $sfrDataM->update(array('error' => 2020), "siren='".$item->siren."' AND NumSeq='".$seq."'"); } } echo PHP_EOL; } fclose($fp); } if ($fileOkOptionsOut['encoding']) { echo "Encodage du fichier".PHP_EOL; passthru("iconv -f UTF-8 -t ISO-8859-15 ".$file." -o ".$file.".enc"); passthru("cp -fv ".$file.".enc ".$file); } $nbLines = $row; if ( $opts->cron ) { $fluxoutM = new Application_Model_Sdv1FluxFileOut(); $dateEnd = date('YmdHis'); $fluxoutM->insert(array( 'client' => $client, 'name' => $prestation, 'nbLines' => $nbLines, 'dateBegin' => $dateBegin, 'dateEnd' => $dateEnd, 'fileOut' => basename($file), 'depotType' => $typeDepot, 'depotDate' => '0000-00-00 00:00:00', )); //Ecrire la date d'execution dans flux_filein $fluxinM->update(array('dateExecute' => $dateEnd), 'id='.$p->id); } //Recherche des siren en erreur $sql = 'SELECT sfr.siren, sfr.error' . ' FROM jo.sfr_data AS sfr' . ' WHERE sfr.error!=0 AND sfr.NumSeq=\''.$seq.'\''; echo date('Y-m-d H:i:s')." - Recherche des SIREN en erreur.".PHP_EOL; $result = $db->fetchAll($sql); if ( $result !== null ) { echo date('Y-m-d H:i:s')." - NbLignes=".count($result).PHP_EOL; $file = $fileErrorOptionsOut['dir'] . DIRECTORY_SEPARATOR . $fileErrorOptionsOut['name'] . $dateBegin . '.' . $fileErrorOptionsOut['type']; //Ouverture fichier ERREUR $fp = fopen($file, 'w'); //Header $line = array($seq, 'RCE'); fputcsv($fp, $line, $fileErrorOptionsOut['delimiter'], $fileErrorOptionsOut['enclosure']); $row = 0; //Content foreach ($result as $item) { $row++; echo date('Y-m-d H:i:s')." - Ligne $row : Siren=".$item->siren; $values = array( 'siren' => str_pad($item->siren, 9, '0', STR_PAD_LEFT), 'code' => $item->error, ); //Ecrire fichier ERREUR $line = array(); foreach ( $fileErrorOptionsOut['columns'] as $i => $column ) { $line[] = $values[$column]; } fputcsv($fp, $line, $fileErrorOptionsOut['delimiter'], $fileErrorOptionsOut['enclosure']); echo PHP_EOL; } fclose($fp); if ($fileErrorOptionsOut['encoding']) { passthru("iconv -f UTF-8 -t ISO-8859-15 ".$file." -o ".$file.".enc"); passthru("cp -fv ".$file.".enc ".$file); } $nbLines = $row; echo date('Y-m-d H:i:s')." - Nb Lignes Traitées : ".$nbLines.PHP_EOL; if ( $opts->cron ) { $fluxoutM = new Application_Model_Sdv1FluxFileOut(); $dateEnd = date('YmdHis'); $fluxoutM->insert(array( 'client' => $client, 'name' => $prestation, 'nbLines' => $nbLines, 'dateBegin' => $dateBegin, 'dateEnd' => $dateEnd, 'fileOut' => basename($file), 'depotType' => $typeDepot, 'depotDate' => '0000-00-00 00:00:00', )); //Ecrire la date d'execution dans flux_filein $fluxinM->update(array('dateExecute' => $dateEnd), 'id='.$p->id); } } //Extraction du fichier PORTEFEUILLE - @todo $sql = 'SELECT sfr.siren,' . ' surv.actif, surv.procol, surv.indiScore20, surv.encours, surv.indiScoreDate,' . ' surv.dateBilan, surv.indiScore20Pre, surv.encoursPre, surv.indiScoreDatePre, surv.sourceModif,' . ' surv.scoreSolv, surv.scoreSolvPre, surv.scoreDir, surv.scoreDirPre, surv.scoreConf, surv.scoreConfPre,' . ' surv.CJ, surv.naf, surv.effectif, surv.dateUpdate' . ' FROM jo.sfr_data AS sfr, jo.scores_surveillance AS surv' . ' WHERE sfr.siren=surv.siren AND sfr.error=0 AND sfr.NumSeq=\''.$seq.'\' AND indiScore20 IS NOT NULL'; echo date('Y-m-d H:i:s')." - Extraction du portefeuille.".PHP_EOL; $result = $db->fetchAll($sql); if ( $result !== null ) { echo date('Y-m-d H:i:s')." - NbLignes=".count($result).PHP_EOL; $file = $filePortefeuilleOptionsOut['dir'] . DIRECTORY_SEPARATOR . $filePortefeuilleOptionsOut['name'] . $dateBegin . '.' . $filePortefeuilleOptionsOut['type']; //Ouverture fichier PORTEFEUILLE $fp = fopen($file, 'w'); //Header fputcsv($fp, $filePortefeuilleOptionsOut['columns'], $filePortefeuilleOptionsOut['delimiter'], $filePortefeuilleOptionsOut['enclosure']); $row = 0; //Content foreach ($result as $item) { $row++; $values = array( 'loginUti' => 'AUTO', 'source' => 'score', 'email' => 'AUTO', 'siren' => str_pad($item->siren, 9, '0', STR_PAD_LEFT), 'nic' => '00000', 'ref' => 'AUTO', 'dateAjout' => '', 'rs' => '', 'cp' => '', 'ville' => '', 'dateDerEnvoi' => '', 'encoursClient' => '', 'actif' => $item->actif, 'procol' => $item->procol, 'indiScore20' => $item->indiScore20, 'encours' => $item->encours, 'indiScoreDate' => $item->indiScoreDate, 'dateBilan' => ($item->dateBilan == '0000-00-00 00:00:00') ? '' : $item->dateBilan, 'indiScore20Pre' => $item->indiScore20Pre, 'encoursPre' => $item->encoursPre, 'indiScoreDatePre' => ($item->indiScoreDatePre == '0000-00-00 00:00:00') ? '' : $item->indiScoreDatePre, 'sourceModif' => $item->sourceModif, 'scoreSolv' => $item->scoreSolv, 'scoreSolvPre' => $item->scoreSolvPre, 'scoreDir' => $item->scoreDir, 'scoreDirPre' => $item->scoreDirPre, 'scoreConf' => $item->scoreConf, 'scoreConfPre' => $item->scoreConfPre, 'cj' => $item->CJ, 'capital' => '', 'capitalDev' => '', 'ape_entrep' => $item->naf, 'tca' => '', 'teff_entrep' => $item->effectif, 'dateUpdate' => $item->dateUpdate, ); //Ecrire fichier POTEFEUILLE $line = array(); foreach ( $filePortefeuilleOptionsOut['columns'] as $i => $column ) { $line[] = $values[$column]; } fputcsv($fp, $line, $filePortefeuilleOptionsOut['delimiter'], $filePortefeuilleOptionsOut['enclosure']); } fclose($fp); if ($filePortefeuilleOptionsOut['encoding']) { passthru("iconv -f UTF-8 -t ISO-8859-15 ".$file." -o ".$file.".enc"); passthru("cp -fv ".$file.".enc ".$file); } $nbLines = $row; echo date('Y-m-d H:i:s')." - Nb Lignes Traitées : ".$nbLines.PHP_EOL; if ( $opts->cron ) { $fluxoutM = new Application_Model_Sdv1FluxFileOut(); $dateEnd = date('YmdHis'); $fluxoutM->insert(array( 'client' => $client, 'name' => $prestation, 'nbLines' => $nbLines, 'dateBegin' => $dateBegin, 'dateEnd' => $dateEnd, 'fileOut' => basename($file), 'depotType' => $typeDepot, 'depotDate' => '0000-00-00 00:00:00', )); //Ecrire la date d'execution dans flux_filein $fluxinM->update(array('dateExecute' => $dateEnd), 'id='.$p->id); } } } } /** * * @param array $values * @param string $seq * @param string $debug * @return array */ function execInternal($values, $seq, $debug = false) { $error = 0; $siren = $values['siren']; echo "$siren"; $classInsee = new MInsee(); $values['code'] = ''; //Siren valide - 1010 if ( !$classInsee->valideSiren($siren) ) { $error = 1; $code = 'error'; $values['code'] = '1010'; echo " - Erreur 1010."; } //Siren existant - 1020 else if ( !$classInsee->sirenExiste($siren) ) { $error = 1; $code = 'error'; $values['code'] = '1020'; echo " - Erreur 1020."; } //Date incorrecte - 2010 Zend_Date::setOptions(array('extend_month' => true)); if ( $values['dateContrat']!='' && Zend_Date::isDate($values['dateContrat'], array('date_format' => 'yyyyMMdd')) ) { $error = 1; $code = 'error'; $values['code'] = '2010'; echo " - Erreur 2010 "; } if ( $error == 0 ) { //Calculate data $sfrM = new SdMetier_Sfr_Scoring(); $sfrM->notCalculateInError = false; //Set Values $sfrM->setVal('ContratDate', $values['dateContrat']); $sfrM->setVal('IR', $values['ir']); //Evaluate if ( $sfrM->evaluate($siren) ) { $values['idVOR'] = $sfrM->getIndicateur(); $values['commentaire'] = $sfrM->getComment(); $values['PO'] = $sfrM->getPo(); $valuesDebug = $sfrM->getValDebug(); if ($debug) { $values = array_merge($values, $valuesDebug); } $code = 'ok'; echo " - VOR=".$values['idVOR']." , commentaire=".$values['commentaire']." , PO=".$values['PO']; } else { $error = 1; $code = 'error'; $values['code'] = '2020'; echo " - Not calculated "; } } echo PHP_EOL; return array( 'values' => $values, 'code' => $code, ); } /** * * @param string $file * @param array $fileOptionsIn * @param array $filesOptionsOut * @param boolean $debug * @param boolean $resume * @return array */ function execFileIn($file, $fileOptionsIn, $filesOptionsOut = array(), $debug = false, $resume = false) { global $dateBegin; //Set the input file path $filepathIn = $file; //Open output file path foreach ($filesOptionsOut as $code => $file) { ${'fp'.$code} = fopen($file['dir'] . DIRECTORY_SEPARATOR . $file['name'] . $dateBegin . '.' . $file['type'], 'w'); } //Read file if ( file_exists($filepathIn) ) { if (($handle = fopen($filepathIn, 'r')) !== false) { $row = 0; while (($data = fgetcsv($handle, 0, $fileOptionsIn['delimiter'], $fileOptionsIn['enclosure'])) !== false) { $row++; echo "Ligne $row : "; //Header if (count($fileOptionsIn['header']) > 0 && $row == 1) { foreach ( $fileOptionsIn['header'] as $i => $column ) { $header[$column] = $data[$i]; } echo "Detection HEADER.".PHP_EOL; if ($debug) { $filesOptionsOut['error']['header'] = array(); $filesOptionsOut['ok']['header'] = array(); } else { $filesOptionsOut['error']['header'] = $header; $filesOptionsOut['ok']['header'] = $header; } if ( $resume ) { fputcsv(${'fp'.$codeRetour}, $filesOptionsOut['ok']['line'][0], $filesOptionsOut['ok']['delimiter'], $filesOptionsOut['ok']['enclosure']); } } //Content else { //Set values from file $values = array(); foreach ( $fileOptionsIn['columns'] as $i => $column ) { $values[$column] = $data[$i]; } $isResume = false; if ( $resume ) { foreach ( $filesOptionsOut['ok']['line'] as $line ) { if ( $line[0] == $data[0] ) { fputcsv(${'fp'.$codeRetour}, $line, $filesOptionsOut['ok']['delimiter'], $filesOptionsOut['ok']['enclosure']); $isResume = true; break; } } } if ( !$isResume ) { //Exec the process $valuesClient = execInternal($values, $header['idDemande'], true); //Format output $codeRetour = $valuesClient['code']; //$filesOptionsOut[$codeRetour]['line'][] = $valuesClient['values']; if ($debug) { $filesOptionsOut[$codeRetour]['columns'] = array_keys($valuesClient['values']); } if ($row == 2) { foreach ($filesOptionsOut as $code => $file) { $line = array(); //Dynamic Header if ( count($file['header'])>0 ) { foreach ( $file['header'] as $i => $column ) { $line[] = $column; } } //Static Header else { foreach ( $file['columns'] as $i => $column ) { $line[] = $column; } } fputcsv(${'fp'.$code}, $line, $filesOptionsOut[$code]['delimiter'], $filesOptionsOut[$code]['enclosure']); } } //Write the line following the return code $line = array(); foreach ( $filesOptionsOut[$codeRetour]['columns'] as $i => $column ) { $line[] = $valuesClient['values'][$column]; } fputcsv(${'fp'.$codeRetour}, $line, $filesOptionsOut[$codeRetour]['delimiter'], $filesOptionsOut[$codeRetour]['enclosure']); } } } } fclose($handle); foreach ($filesOptionsOut as $code => $file) { fclose(${'fp'.$code}); } } } /** * * @param string $filepathIn * @param array $fileOptionsIn * @return boolean */ function checkFile ($filepathIn, $fileOptionsIn) { if ( file_exists($filepathIn) ) { if (($handle = fopen($filepathIn, 'r')) !== false) { $row = 0; while (($data = fgetcsv($handle, 0, $fileOptionsIn['delimiter'], $fileOptionsIn['enclosure'])) !== false) { $row++; //Header if (count($fileOptionsIn['header']) > 0 && $row == 1) { if ( count($fileOptionsIn['header']) != count($data) ) { return false; } } //Content else { if ( count($fileOptionsIn['columns']) != count($data) ) { return false; } } } } fclose($handle); return true; } } /** * Load in database * @param string $file * @param array $fileOptionsIn * @param array $filesOptionsOut * @param boolean $debug * @param boolean $resume * @return array */ function execDbIn($file, $fileOptionsIn, $debug = false) { //Set the input file path //$filepathIn = $fileOptionsIn['dir'] . DIRECTORY_SEPARATOR . $file; $filepathIn = $file; //Read file if ( file_exists($filepathIn) ) { $sfrDataM = new Application_Model_JoSfrData(); if (($handle = fopen($filepathIn, 'r')) !== false) { $row = 0; while (($data = fgetcsv($handle, 0, $fileOptionsIn['delimiter'], $fileOptionsIn['enclosure'])) !== false) { $row++; echo date('Y-m-d H:i:s')." - Ligne $row : "; //Header if (count($fileOptionsIn['header']) > 0 && $row == 1) { foreach ( $fileOptionsIn['header'] as $i => $column ) { $header[$column] = $data[$i]; } echo "Detection HEADER.".PHP_EOL; if ($debug) { $filesOptionsOut['error']['header'] = array(); $filesOptionsOut['ok']['header'] = array(); } else { $filesOptionsOut['error']['header'] = $header; $filesOptionsOut['ok']['header'] = $header; } } //Content else { //Set values from file $values = array(); foreach ( $fileOptionsIn['columns'] as $i => $column ) { $values[$column] = $data[$i]; } //Exec the process $values = execDbInternal($values); $sfrDataM->insert(array( 'NumSeq' => $header['idDemande'], 'siren' => $values['siren'], 'NbLignes' => $values['nbLignes'], 'NbContrats' => $values['nbContrats'], 'DateContrat' => $values['dateContrat'], 'IR' => $values['ir'], 'IdVOR' => '', 'comment' => '', 'PO' => 0, 'debug' => '', 'error' => $values['code'], )); } } } fclose($handle); return $header['idDemande']; } } function execDbInternal($values, $debug = false) { $error = 0; $siren = $values['siren']; echo "$siren"; $classInsee = new MInsee(); $values['code'] = ''; //Siren valide - 1010 if ( !$classInsee->valideSiren($siren) ) { $error = 1; $code = 'error'; $values['code'] = '1010'; echo " Erreur 1010."; } //Siren existant - 1020 /*else if ( !$classInsee->sirenExiste($siren) ) { $error = 1; $code = 'error'; $values['code'] = '1020'; echo " - Erreur 1020."; }*/ //Date incorrecte - 2010 Zend_Date::setOptions(array('extend_month' => true)); if ( $values['dateContrat']!='' && Zend_Date::isDate($values['dateContrat'], array('date_format' => 'yyyyMMdd')) ) { $error = 1; $code = 'error'; $values['code'] = '2010'; echo " Erreur 2010 "; } echo PHP_EOL; return $values; }