Ajout méthode getRatios, issue #0000379

This commit is contained in:
Michael RICOIS 2010-11-23 17:18:37 +00:00
parent 9a59fbdcc7
commit 4fd1c3ae94
3 changed files with 195 additions and 142 deletions

View File

@ -64,4 +64,6 @@ Type.62 = "JalCollecte"
Type.63 = "GeoCodeReturn" Type.63 = "GeoCodeReturn"
Type.64 = "GeoCode" Type.64 = "GeoCode"
Type.65 = "ListeUtilisateursReturn" Type.65 = "ListeUtilisateursReturn"
Type.66 = "Utilisateur" Type.66 = "Utilisateur"
Type.67 = "RatiosReturn"
Type.68 = "RatiosResult"

View File

@ -991,7 +991,6 @@ class ListeUtilisateursReturn
public $error; public $error;
/** @var Utilisateur[] */ /** @var Utilisateur[] */
public $result; public $result;
} }
class Utilisateur class Utilisateur
@ -1013,3 +1012,40 @@ class Utilisateur
/** @var string */ /** @var string */
public $reference; public $reference;
} }
class RatiosReturn
{
/** @var ErrorType */
public $error;
/** @var RatiosResult */
public $result;
}
class RatiosResult
{
/** @var string */
public $Nom;
/** @var string */
public $NafEnt;
/** @var string */
public $NafEntLib;
/** @var string */
public $FJ;
/** @var string */
public $FJ_lib;
/** @var string */
public $Siren;
/** @var string */
public $NbEntNaf;
/** @var array */
public $BilansInfos;
/** @var array */
public $RatiosInfos;
/** @var array */
public $RatiosEntrep;
/** @var array */
public $RatiosEntrepEvol;
/** @var array */
public $RatiosSecteur;
}

View File

@ -3052,167 +3052,184 @@ if ($infoEnq['LitigeChoix']<>'non')
} }
/** /**
* * getRatios
* Enter description here ... * @param string $siren
* @param unknown_type $siren * @param string $page
* @param unknown_type $page * @return RatiosReturn
*/ */
protected function getRatios($siren, $page='ratios') { public function getRatios($siren, $page='ratios')
{
//Authentification
if (!$this->checkAuth($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'], $_SERVER['REMOTE_ADDR']))
{
throw new SoapFault('900','Identifiant ou mot de passe incorrect !');
exit;
}
//Initialisation
$error = new ErrorType();
$tabRatiosInfos=$tabRatiosSecteurs=$tabBilansR=$tabRatios2=$tabRatiosEvol=array(); $tabRatiosInfos=$tabRatiosSecteurs=$tabBilansR=$tabRatios2=$tabRatiosEvol=array();
$tabRet = array();
global $tva, $tabFormules, $mBil, $tabBilan, $efftr; //global $tva, $tabFormules, $mBil, $tabBilan, $efftr;
debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__); debugLog('I',"Liste des Ratios demandée pour $siren",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
$tabRet=array();
if (strlen($siren)<>9) { if (strlen($siren)<>9)
{
debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__); debugLog('W', "Siren $siren incorrect", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
return array('error'=>array('errnum'=>102, 'errmsg'=>'Siren inexistant'), 'results'=>$tabRet); $error->errnum =102;
$error->errmsg = 'Siren inexistant';
} }
$siren=$siren*1; elseif ($siren*1==0)
if ($siren==0) { {
debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__); debugLog('W', "Siren $siren inexistant", __LINE__, __FILE__, __FUNCTION__, __CLASS__);
return array('error'=>array('errnum'=>102, 'errmsg'=>'Siren inexistant'), 'result'=>$tabRet); $error->errnum =102;
$error->errmsg = 'Siren inexistant';
} }
else
{
debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
$iInsee = new MInsee();
$tabIdentite = $iInsee->getIdentiteEntreprise($siren,0,0,false,false);
debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
$naf=$tabIdentite['NafEnt'];
$nafLib=$tabIdentite['NafEntLib'];
$efftr=$tabIdentite['Effectif']*1;
$fj=$tabIdentite['FJ'];
debugLog('I',"Liste des Ratios demandée pour $siren avant getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); $mBil=new MBilans($siren);
$tabBilans=$mBil->listeBilans(true);
//@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true));
$tabIdentite=$this->iInsee->getIdentiteEntreprise($siren,0,0,false,false); $nbBilans=count($tabBilans);
debugLog('I',"Liste des Ratios demandée pour $siren après getIdentiteEntreprise",__LINE__,__FILE__, __FUNCTION__, __CLASS__); $tabBilan=$tabBil=array();
$naf=$tabIdentite['NafEnt']; if ($nbBilans>0)
$nafLib=$tabIdentite['NafEntLib']; $tabRatios=@calculRatios($tabBilans, $tabIdentite, true);
$efftr=$tabIdentite['Effectif']*1;
$fj=$tabIdentite['FJ'];
$mBil=new MBilans($siren); $nbRatios=count($tabRatios);
$tabBilans=$mBil->listeBilans(true); debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
//@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "getRatios sur $siren", print_r($tabBilans, true));
$nbBilans=count($tabBilans);
$tabBilan=$tabBil=array();
if ($nbBilans>0)
$tabRatios=@calculRatios($tabBilans, $tabIdentite, true);
$nbRatios=count($tabRatios);
debugLog('I',"Liste des Ratios demandée pour $siren après calculRatios ($nbRatios)",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
/** Tableau d'infos sur les formules **/ /** Tableau d'infos sur les formules **/
$tabBorneMin=$tabBorneMax=array(); $tabBorneMin=$tabBorneMax=array();
foreach ($tabFormules as $formule) { foreach ($tabFormules as $formule) {
$id=$formule['id']*1; $id=$formule['id']*1;
$libelle=$formule['libelle']; $libelle=$formule['libelle'];
$unite=$formule['unite']; $unite=$formule['unite'];
$commentaires=$formule['commentaires']; $commentaires=$formule['commentaires'];
// Utilisation d'un index texte à cause du webservice // Utilisation d'un index texte à cause du webservice
$tabRatiosInfos['r'.$id]=array( 'libelle' => prepareString($formule['libelle']), $tabRatiosInfos['r'.$id]=array( 'libelle' => prepareString($formule['libelle']),
'unite' => $formule['unite'], 'unite' => $formule['unite'],
//'borneMin' => $formule['borneMin'], //'borneMin' => $formule['borneMin'],
//'borneMax' => $formule['borneMax'], //'borneMax' => $formule['borneMax'],
'commentaires' => prepareString($formule['commentaires']), 'commentaires' => prepareString($formule['commentaires']),
); );
$tabBorneMin[$id]=$formule['borneMin']; $tabBorneMin[$id]=$formule['borneMin'];
$tabBorneMax[$id]=$formule['borneMax']; $tabBorneMax[$id]=$formule['borneMax'];
} }
/** Tanleau des années de bilans **/ /** Tanleau des années de bilans **/
$tabAnnees=array(); $tabAnnees=array();
// Tableau d'infos sur les bilans // Tableau d'infos sur les bilans
foreach ($tabRatios as $i=>$R) { foreach ($tabRatios as $i=>$R) {
$tabBilansR[$i]=array( 'dateCloture' => $tabBilan[$i]['DATE_CLOTURE'], $tabBilansR[$i]=array( 'dateCloture' => $tabBilan[$i]['DATE_CLOTURE'],
'duree' => $tabBilan[$i]['DUREE_MOIS'], 'duree' => $tabBilan[$i]['DUREE_MOIS'],
'devise' => $tabBilan[$i]['MONNAIE'], 'devise' => $tabBilan[$i]['MONNAIE'],
'typeBilan' => $tabBilan[$i]['CONSOLIDE'], 'typeBilan' => $tabBilan[$i]['CONSOLIDE'],
'unite' => 'U', 'unite' => 'U',
); );
if (substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900) if (substr($tabBilan[$i]['DATE_CLOTURE'],0,4)>1900)
$tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4); $tabAnnees[$i]=substr($tabBilan[$i]['DATE_CLOTURE'],0,4);
} }
foreach ($tabRatios as $i=>$R) { foreach ($tabRatios as $i=>$R) {
// Utilisation d'un index texte à cause du webservice // Utilisation d'un index texte à cause du webservice
foreach ($R as $Ridx=>$Rmont) { foreach ($R as $Ridx=>$Rmont) {
if ($Rmont<>'NS') { if ($Rmont<>'NS') {
if ($tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx]) if ($tabBorneMin[$Ridx]<>'' && $Rmont<$tabBorneMin[$Ridx])
$Rmont='<'.$tabBorneMin[$Ridx]; $Rmont='<'.$tabBorneMin[$Ridx];
elseif ($tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx]) elseif ($tabBorneMax[$Ridx]<>'' && $Rmont>$tabBorneMax[$Ridx])
$Rmont='>'.$tabBorneMax[$Ridx]; $Rmont='>'.$tabBorneMax[$Ridx];
}
if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>')
$tabRatios2[$i]['r'.$Ridx]=$Rmont;
else
$tabRatios2[$i]['r'.$Ridx]=round($Rmont,2);
if ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
|| ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
)
$Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]);
elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
|| ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
)
$Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]);
else
$Rmont='NS';
if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800)
$tabRatiosEvol[$i]['r'.$Ridx]='NS';
else
$tabRatiosEvol[$i]['r'.$Ridx]=@number_format($Rmont,2,',',' ');
// debugLog('I',"Liste des Ratios demandée pour $siren ratio $i, $Ridx=$Rmont",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
} }
if (substr($Rmont,0,1)=='N' || substr($Rmont,0,1)=='<' || substr($Rmont,0,1)=='>')
$tabRatios2[$i]['r'.$Ridx]=$Rmont;
else
$tabRatios2[$i]['r'.$Ridx]=round($Rmont,2);
if ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='S'||($tabBilan[$i+1]['CONSOLIDE']=='N'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
|| ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+1]['CONSOLIDE']=='N'||($tabBilan[$i+1]['CONSOLIDE']=='S'&&$tabBilan[$i+1]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
)
$Rmont=(($R[$Ridx]-$tabRatios[$i+1][$Ridx])*100)/abs($tabRatios[$i+1][$Ridx]);
elseif ( ($tabBilan[$i]['CONSOLIDE']=='S'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='S'||($tabBilan[$i+2]['CONSOLIDE']=='N'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
|| ($tabBilan[$i]['CONSOLIDE']=='N'&&isset($tabRatios[$i+1])&&($tabBilan[$i+2]['CONSOLIDE']=='N'||($tabBilan[$i+2]['CONSOLIDE']=='S'&&$tabBilan[$i+2]['DATE_CLOTURE']<>$tabBilan[$i]['DATE_CLOTURE'])))
)
$Rmont=(($R[$Ridx]-$tabRatios[$i+2][$Ridx])*100)/abs($tabRatios[$i+2][$Ridx]);
else
$Rmont='NS';
if ($Rmont=='NS' || $Rmont<-800 || $Rmont>800)
$tabRatiosEvol[$i]['r'.$Ridx]='NS';
else
$tabRatiosEvol[$i]['r'.$Ridx]=@number_format($Rmont,2,',',' ');
// debugLog('I',"Liste des Ratios demandée pour $siren ratio $i, $Ridx=$Rmont",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
} }
} debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
debugLog('I',"Liste des Ratios demandée pour $siren après EVOLUTION",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
/** Tableau des ratios secteurs */ /** Tableau des ratios secteurs */
$tabRatiosSecteurs=array(); $tabRatiosSecteurs=array();
if (strlen($naf)>4) $strNaf=" AND naf5='$naf' "; if (strlen($naf)>4) $strNaf=" AND naf5='$naf' ";
else $strNaf=" AND naf4='$naf' "; else $strNaf=" AND naf4='$naf' ";
$strAnnees=implode(',', $tabAnnees); $strAnnees=implode(',', $tabAnnees);
if (count($tabAnnees)>0) { if (count($tabAnnees)>0) {
$iDb=new WDB('jo'); $iDb=new WDB('jo');
$tabTmp=$iDb->select('ratios_secteurs', 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", true, MYSQL_ASSOC); $tabTmp=$iDb->select('ratios_secteurs', 'annee, naf5, naf4, id, (montant/nombre) AS ratio, nombre', "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC", true, MYSQL_ASSOC);
$nbRatiosSec=0; $nbRatiosSec=0;
$anneePre=$tabTmp[0]['annee']; $anneePre=$tabTmp[0]['annee'];
$iAn=0; $iAn=0;
foreach ($tabTmp as $tabTmp2) { foreach ($tabTmp as $tabTmp2) {
if ($anneePre<>$tabTmp2['annee']) $iAn++; if ($anneePre<>$tabTmp2['annee']) $iAn++;
$Ridx=$tabTmp2['id']; $Ridx=$tabTmp2['id'];
if ($tabTmp2['nombre']>$nbRatiosSec) $nbRatiosSec=$tabTmp2['nombre']; if ($tabTmp2['nombre']>$nbRatiosSec) $nbRatiosSec=$tabTmp2['nombre'];
if ($tabRatiosInfos['r'.$Ridx]['unite']=='EUR') $montant=round($tabTmp2['ratio']*1000); if ($tabRatiosInfos['r'.$Ridx]['unite']=='EUR') $montant=round($tabTmp2['ratio']*1000);
else $montant=round($tabTmp2['ratio']); else $montant=round($tabTmp2['ratio']);
if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx]) if ($tabBorneMin[$Ridx]<>'' && $montant<$tabBorneMin[$Ridx])
$montant='<'.$tabBorneMin[$Ridx]; $montant='<'.$tabBorneMin[$Ridx];
elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx]) elseif ($tabBorneMax[$Ridx]<>'' && $montant>$tabBorneMax[$Ridx])
$montant='>'.$tabBorneMax[$Ridx]; $montant='>'.$tabBorneMax[$Ridx];
if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>') if (substr($montant,0,1)=='N' || substr($montant,0,1)=='<' || substr($montant,0,1)=='>')
$tabRatiosSecteurs[$iAn]['r'.$Ridx]=$montant; $tabRatiosSecteurs[$iAn]['r'.$Ridx]=$montant;
else else
$tabRatiosSecteurs[$iAn]['r'.$Ridx]=round($montant,2); $tabRatiosSecteurs[$iAn]['r'.$Ridx]=round($montant,2);
// $tabRatiosSecteurs[$iAn]['r'.$Ridx]=$montant; // $tabRatiosSecteurs[$iAn]['r'.$Ridx]=$montant;
$anneePre=$tabTmp2['annee']; $anneePre=$tabTmp2['annee'];
//$tabRatiosSecteurs=array('titi'); //$tabRatiosSecteurs=array('titi');
}
} }
} //$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC");
//$tabRatiosSecteurs=array(count($tabTmp), "1 $strNaf AND annee IN ($strAnnees) ORDER BY annee DESC, id ASC");
$tabRet=array( 'Nom' => prepareString($tabIdentite['Nom']), $result = new RatiosResult();
'NafEnt' => $tabIdentite['NafEnt'], $result->Nom = $tabIdentite['Nom'];
'NafEntLib' => prepareString($tabIdentite['NafEntLib']), $result->NafEnt = $tabIdentite['NafEnt'];
'FJ' => $fj, $result->NafEntLib = $tabIdentite['NafEntLib'];
'FJ_lib' => prepareString($tabIdentite['FJ_lib']), $result->FJ = $fj;
'Siren' => $siren, $result->FJ_lib = $tabIdentite['FJ_lib'];
'NbEntNaf' => $nbRatiosSec, $result->Siren = $siren;
'BilansInfos' => $tabBilansR, $result->NbEntNaf = $nbRatiosSec;
'RatiosInfos' => $tabRatiosInfos, $result->BilansInfos = $tabBilansR;
'RatiosEntrep' => $tabRatios2, $result->RatiosInfos = $tabRatiosInfos;
'RatiosEntrepEvol' => $tabRatiosEvol, $result->RatiosEntrep = $tabRatios2;
'RatiosSecteur' => $tabRatiosSecteurs, $result->RatiosEntrepEvol = $tabRatiosEvol;
); $result->RatiosSecteur = $tabRatiosSecteurs;
debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__); debugLog('I',"Liste des Ratios demandée pour $siren RETURN",__LINE__,__FILE__, __FUNCTION__, __CLASS__);
wsLog($page, $siren); wsLog($page, $siren);
return array('error'=>array('errnum'=>0, 'errmsg'=>''), 'result'=>$tabRet); $output = new RatiosReturn();
$output->error = $error;
$output->result = $result;
return $output;
}
} }
/** /**
@ -3364,8 +3381,6 @@ if ($infoEnq['LitigeChoix']<>'non')
); );
$k++; $k++;
} }
//@sendMail('production@scores-decisions.com', 'ylenaour@scores-decisions.com', "Debug", print_r($tabRet,true)) ;
return array( 'criteres'=>array('recherche'=>$recherche, 'annee'=>$annee), return array( 'criteres'=>array('recherche'=>$recherche, 'annee'=>$annee),
'nbReponses'=>count($tabRet), 'nbReponses'=>count($tabRet),