setVersion($version); $this->setCompile($compile); //Charger les Tabs - ou pas //Get default database adapter //$this->db = Zend_Db_Table_Abstract::getDefaultAdapter(); //Charger les Rules (dans l'ordre) $this->RulesVORP = include realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'RulesVorp-'.$this->version.'.php'; $this->RulesVORD = include realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'RulesVord-'.$this->version.'.php'; $this->RulesPO = include realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'RulesPO-'.$this->version.'.php'; if ($this->debug) file_put_contents('sfr.log', "DEBUT\n"); } public function evaluate($siren) { $classInsee = new MInsee(); //Identite $identite = $classInsee->getIdentiteEntreprise($siren); //Naf de l'entreprise $this->ValNAF = $identite['NafEnt']; //Forme juridique de l'entreprise $this->ValFJ = $identite['FJ']; //insee /** * Effectif de l'entreprise * 1 - Chiffre au bilan * 2 - Info insee Identite::Effectif à la centaine approché */ $this->ValEffectif = $identite['Effectif']; $bilanAgeMax = 3*12; //Age maximum du dernier bilan en mois if (!empty($identite['bilanDate']) && intval($identite['bilanYP'])>0 ) { Zend_Date::setOptions(array('extend_month' => true)); $dateBilan = new Zend_Date($identite['bilanDate'], 'yyyyMMdd'); $dateNow = new Zend_Date(); $difference = $dateNow->sub($dateBilan); $measure = new Zend_Measure_Time($difference->toValue(), Zend_Measure_Time::SECOND); $measure->convertTo(Zend_Measure_Time::MONTH); $nbMonth = $measure->getValue(); if ( $nbMonth < $bilanAgeMax ) { $this->ValEffectif = $identite['bilanYP']; } } //Entreprise Active à l'insee $this->ValInseeActif = $identite['Actif']; //Age de l'entreprise en mois $this->ValInseeAge = null; //Date création Insee (ATTENTION vide) / Date immat RNCS if ( !empty($identite['DateCreaEn']) ) { Zend_Date::setOptions(array('extend_month' => true)); $dateC = new Zend_Date($identite['DateCreaEn'], 'yyyyMMdd'); $dateNow = new Zend_Date(); $difference = $dateNow->sub($dateC); $measure = new Zend_Measure_Time($difference->toValue(), Zend_Measure_Time::SECOND); $measure->convertTo(Zend_Measure_Time::MONTH); $this->ValInseeAge = $measure->getValue(); } elseif ( !empty($identite['dateImmat']) && $identite['dateImmat']!='0000-00-00 00:00:00' ) { Zend_Date::setOptions(array('extend_month' => true)); $dateC = new Zend_Date($identite['dateImmat'], 'yyyyMMdd'); $dateNow = new Zend_Date(); $difference = $dateNow->sub($dateC); $measure = new Zend_Measure_Time($difference->toValue(), Zend_Measure_Time::SECOND); $measure->convertTo(Zend_Measure_Time::MONTH); $this->ValInseeAge = $measure->getValue(); } //Entreprise coté au CAC $this->ValIsCAC = null; /** * Liens - remonté le groupe pour voir si SIREN dans CAC40 * Tete de groupe - ISIN * * Tete de groupe compléte et SIREN dans CAC */ //GetAnnoncesLegales //$classInsee->getAnnoncesLegales($siren, 0, array()); $this->ValRJ = 0; //Liste des codes - 1200 $this->ValSV = 0; //Liste des codes - 1100 $this->ValLJ = 0; //Liste des codes - 1300 //Indiscore - aller chercher scores dans l'historique $indiscore = calculIndiScore($siren); $this->ValIndiscore = $indiscore['Indiscore20']; if ($this->debug) file_put_contents('sfr.log', "INDISCORE = ".$this->ValIndiscore."\n", FILE_APPEND); //Rules $ruleType = array( 'VORP' , 'VORD' , 'PO'); foreach ( $ruleType as $type ) { $this->rules($type); } } /** * Execution des règles * Si les conditions contenu dans la regle * * * @param string $type */ protected function rules($type) { $rules = $this->{'Rules'.$type}; foreach ( $rules as $rule ) { if ($this->debug) file_put_contents('sfr.log', "\nREGLE - ".$rule['name']."\n", FILE_APPEND); $all = false; if ( $rule['value'] == 'CONTINUE' ) { $all = true; } $return = $this->params($rule['params'], $all); // Continue always if ( $rule['value'] == 'CONTINUE' ) { continue; } //Continue elseif ( $return === false ){ continue; } // Stop elseif ( $rule['value'] == 'STOP' && $return === true ) { break; } //Set Value else { if( $type == 'PO' ) { $this->ValPO = $this->paramValue($rule['value']); } else { $this->ValFEU = $this->paramValue($rule['value']); } break; } } } /** * Traitement des conditions * - Si la condition est FAUSSE * => arrêt pour passer à la règle suivante * - Si la condition est VRAI * => passage à la condition suivante * @param array $conditions * - var : Nom de la variable * - type : Type du test de la condition * - value : Valeur à tester * - define : "var" à définir avec la "value" * @return boolean */ protected function params($conditions = array(), $all = false) { $test = false; if ( count($conditions) > 0 ) { foreach ( $conditions as $c ) { $test = $this->paramEval($c['var'], $c['type'], $c['value']); if ($this->debug) file_put_contents('sfr.log', "PARAM - RETURN = ".$test."\n", FILE_APPEND); if ( null === $test ) { // Oops ! Problem ! } // Stopper elseif ( $test === false && $all === false ) { break; // Continuer ou Stopper sur element define } elseif ( $test === true ) { if ( array_key_exists('define', $c) ) { $this->paramDefine($c['define']['var'], $c['define']['value']); } if ($all === true) { break; } } } } return $test; } /** * Transformation des variables * @param string $val * @return number|mixed|NULL */ protected function paramValue($val) { if ( is_numeric($val) ) { return (float) $val; } if ( is_string($val) && defined('self::'.$val) ) { return constant('self::'.$val); } if ( is_string($val) && is_array($this->{'Tab'.$val}) ) { return $this->{'Tab'.$val}; } return null; } /** * Evaluation de la condition * @param string $var * @param string $type * @param string $value * @return boolean|NULL */ protected function paramEval($var, $type, $value) { $valueReal = $this->paramValue($value); if ($this->debug) file_put_contents('sfr.log', "PARAM - ".$var." ".$type." ".$value." = ".$this->{'Val'.$var}."\n", FILE_APPEND); switch ($type) { case 'MIN': if ( $this->{'Val'.$var} > $valueReal ) { return true; } return false; break; case 'MAX': if ( $this->{'Val'.$var} < $valueReal ) { return true; } return false; break; case 'EGAL': if ( $this->{'Val'.$var} == $valueReal ) { return true; } return false; break; case 'LIST': if ( in_array($this->{'Val'.$var}, $valueReal) ) { return true; } return false; break; } return null; } protected function _Indicateur($value) { switch($value) { case self::VERT: return 'VERT'; break; case self::ROUGE: return 'ROUGE'; break; case self::ORANGE: return 'ORANGE'; break; } } public function getIndicateur() { return $this->_Indicateur($this->ValFEU); } public function getPo() { return $this->ValPO; } /** * * @param string $name * @param string $val */ protected function paramDefine($name, $val) { $value = null; if ( is_numeric($val) ) { $value = (int) $val; } if ( is_string($val) && defined('self::'.$val) ) { $value = constant('self::'.$val); } if ($this->debug) file_put_contents('sfr.log', "SET VAR - Val".$name." = ".$value."\n", FILE_APPEND); $this->{'Val'.$name} = $value; } protected function comment(){} /** * */ protected function setTabs() { if ( $this->compile ) { } else { return $this->loadTabsFromDb(); } } /** * */ protected function loadTabsFromDb(){} /** * */ protected function setRules() { if ( $this->compile ) { $this->RulesVORp = include_once 'Metier/Sfr/RulesVORp-'.$this->version.'.php'; $this->RulesVORd = include_once 'Metier/Sfr/RulesVORd-'.$this->version.'.php'; } else { $this->RulesVORp = $this->loadRulesFromDb('VORp'); $this->RulesVORd = $this->loadRulesFromDb('VORd'); } } protected function loadRulesFromDb($type = null) { } protected function setCompile($compile = true) { $this->compile = $compile; } /** * Define static file and version * @param string $version */ protected function setVersion($version = null) { if ( null !== $version ) { $this->version = $version; } } }