0) { //Tri des tableaux foreach ($bilansInfos as $key => $row) { $bilansInfos[$key]['cle'] = $key; $date[$key] = $row['dateCloture']; $duree[$key] = $row['duree']; $devise[$key] = $row['devise']; $unite[$key] = $row['unite']; $cle[$key] = $row['cle']; } array_multisort($date, SORT_DESC, $duree, SORT_DESC, $devise, SORT_DESC, $unite, SORT_DESC, $cle, SORT_DESC, $bilansInfos); //Tri des autres tableaux $tempRatiosEntrep = $ratiosEntrep; $tempRatiosEntrepEvol = $ratiosEntrepEvol; $tempRatiosInfos = $ratiosInfos; $i = 0; foreach ($bilansInfos as $row){ $ratiosEntrep[$i] = $tempRatiosEntrep[$row['cle']]; $ratiosEntrepEvol[$i] = $tempRatiosEntrepEvol[$row['cle']]; $ratiosInfos[$i] = $tempRatiosInfos[$row['cle']]; $i++; } } return array('bilansInfos'=>$bilansInfos, 'ratiosEntrep'=>$ratiosEntrep, 'ratiosEntrepEvol'=>$ratiosEntrepEvol, 'ratiosInfos'=>$ratiosInfos); } function ratiosRatios($bilansInfos, $ratiosEntrep, $ratiosEntrepEvol, $ratiosInfos, $ratiosSecteur) { //Suppression des éléments ne possédant pas de date de cloture $index = 0; foreach($bilansInfos as $bilansInfo) { if(!isset($bilansInfo['dateCloture'])) { unset($bilansInfos[$index]); unset($ratiosEntrep[$index]); unset($ratiosEntrepEvol[$index]); unset($ratiosInfos[$index]); unset($ratiosSecteur[$index]); } $index++; } //Tri des tableaux par ordre décroissant suivant la date de cloture //Transformation du tableau sous forme clé => valeur foreach ($bilansInfos as $key => $row) { $bilansInfos[$key]['cle'] = $key; $date[$key] = $row['dateCloture']; $duree[$key] = $row['duree']; $devise[$key] = $row['devise']; $unite[$key] = $row['unite']; $cle[$key] = $row['cle']; } //Tri du tableau de référence suivant la date de cloture array_multisort($date, SORT_DESC, $duree, SORT_DESC, $devise, SORT_DESC, $unite, SORT_DESC, $cle, SORT_DESC, $bilansInfos); //Tri des autres tableaux $tempRatiosEntrep = $ratiosEntrep; $tempRatiosEntrepEvol = $ratiosEntrepEvol; $tempRatiosSecteur = $ratiosSecteur; $i = 0; foreach ($bilansInfos as $row){ $ratiosEntrep[$i] = $tempRatiosEntrep[$row['cle']]; $ratiosEntrepEvol[$i] = $tempRatiosEntrepEvol[$row['cle']]; $ratiosSecteur[$i] = $tempRatiosSecteur[$row['cle']]; $i++; } //Fin de tri des tableaux return array('bilansInfos'=>$bilansInfos, 'ratiosEntrep'=>$ratiosEntrep, 'ratiosEntrepEvol'=>$ratiosEntrepEvol, 'ratiosInfos'=>$ratiosInfos, 'ratiosSecteur'=>$ratiosSecteur); } /** * Formatte les informations provenant du webservices pour l'affichage de la page bilans * @param $bilansInfos * @param $ratiosEntrep * @param $ratiosEntrepEvol * @param $ratiosInfos * @return unknown_type */ function ratiosBilans($bilansInfos, $ratiosEntrep, $ratiosEntrepEvol, $ratiosInfos) { global $firephp; global $ratiosEntrep; // A supprimer, pour compatibilité graphPercent //Suppression des éléments ne possédant pas de date de cloture $index = 0; foreach($bilansInfos as $bilansInfo) { if(!isset($bilansInfo['dateCloture'])) { unset($bilansInfos[$index]); unset($ratiosEntrep[$index]); unset($ratiosEntrepEvol[$index]); unset($ratiosInfos[$index]); } $index++; } if(count($bilansInfos)>0) { //Transformation du tableau sous forme clé => valeur foreach ($bilansInfos as $key => $row) { $bilansInfos[$key]['cle'] = $key; $date[$key] = $row['dateCloture']; $duree[$key] = $row['duree']; $devise[$key] = $row['devise']; $unite[$key] = $row['unite']; $cle[$key] = $row['cle']; } //Tri du tableau de référence suivant la date de cloture array_multisort($date, SORT_DESC, $duree, SORT_DESC, $devise, SORT_DESC, $unite, SORT_DESC, $cle, SORT_DESC, $bilansInfos); //Tri des autres tableaux $tempRatiosEntrep = $ratiosEntrep; $tempRatiosEntrepEvol = $ratiosEntrepEvol; $tempRatiosSecteur = $ratiosSecteur; $i = 0; foreach ($bilansInfos as $row){ $ratiosEntrep[$i] = $tempRatiosEntrep[$row['cle']]; $ratiosEntrepEvol[$i] = $tempRatiosEntrepEvol[$row['cle']]; $ratiosSecteur[$i] = $tempRatiosSecteur[$row['cle']]; //Génération données graphique actif $dataActif[$i] = array( graphPercent($i,'r51','r22'), graphPercent($i,'r52','r22'), graphPercent($i,'r53','r22'), graphPercent($i,'r60','r22'), graphPercent($i,'r61','r22'), graphPercent($i,'r62','r22'), graphPercent($i,'r63','r22'), ); //Génération données graphique passif $dataPassif[$i] = array( graphPercent($i,'r70','r22'), graphPercent($i,'r71','r22'), graphPercent($i,'r72','r22'), graphPercent($i,'r83','r22'), graphPercent($i,'r84','r22'), graphPercent($i,'r85','r22'), graphPercent($i,'r86','r22'), graphPercent($i,'r87','r22'), ); //Génération données graphique SIG $dataSIG[$i] = array( graphPercent($i,'r101','r101')-graphPercent($i,'r122','r101'), graphPercent($i,'r122','r101')-graphPercent($i,'r130','r101'), graphPercent($i,'r130','r101')-graphPercent($i,'r140','r101'), graphPercent($i,'r140','r101')-graphPercent($i,'r150','r101'), graphPercent($i,'r150','r101')-graphPercent($i,'r170','r101'), graphPercent($i,'r170','r101')-graphPercent($i,'r199','r101'), graphPercent($i,'r199','r101'), ); $i++; } } return array( 'bilansInfos' => $bilansInfos, 'ratiosEntrep' => $ratiosEntrep, 'ratiosEntrepEvol' => $ratiosEntrepEvol, 'ratiosInfos' => $ratiosInfos, 'dataActif' => $dataActif, 'dataPassif' => $dataPassif, 'dataSIG' => $dataSIG ); } /** * Retourne un tableau de données formatés pour les graphiques. * @param array $bilansInfo * Le tableau des bilans * @param array $ratiosEntrep * Le tableau des ratios entreprise * @param array $tabRatioGraph * Un tableau des ratios à utiliser pour le graphique général * @param array $tabRatioGraphEvol * Un tableau des ratios à utiliser pour les graphiques d'évolution * @return array * Retourne un tableau structuré composé de dataGraph, et de dataEvol. */ function synthese_datagraph($bilansInfos, $ratiosEntrep, $tabRatioGraph, $tabRatioGraphEvol) { global $firephp; $dataGraph = array(); $dataEvol = array(); $nbrAnnees = count($bilansInfos)-1; $i=0; foreach($bilansInfos as $dateCloture){ //Données pour le graphique if(isset($dateCloture['dateCloture'])){ $dataGraph[$i]['date'] = $dateCloture['dateCloture']; $dataGraph[$i]['duree'] = $dateCloture['duree']; foreach($tabRatioGraph as $item){ $dataGraph[$i][$item['ratio']] = $ratiosEntrep[$i][$item['ratio']]/$item['op']; } } //Données pour les graphiques évolutions if(isset($bilansInfos[$nbrAnnees-$i]['dateCloture'])){ foreach($tabRatioGraphEvol as $ratio => $info){ $dataEvol[$ratio][] = array( 'date'=>$bilansInfos[$nbrAnnees-$i]['dateCloture'], 'value'=>(($ratiosEntrep[$nbrAnnees-$i][$ratio]!='NS') ? $ratiosEntrep[$nbrAnnees-$i][$ratio]/$info['op'] : 0 ) ); } } $i++; } return array("graph" => $dataGraph, "evol" => $dataEvol); } /** * Formatte chaîne contenant la date formaté. * @param array $bilansInfo * Le tableau des bilans * @param array $nAnnee * Le numéro de l'année * @return string * Retourne la date formaté. */ function synthese_formatdateCloture($bilansInfos, $nAnnee){ if(isset($bilansInfos[$nAnnee]['dateCloture'])) { print substr($bilansInfos[$nAnnee]['dateCloture'],6,2).'/'.substr($bilansInfos[$nAnnee]['dateCloture'],4,2).'/'.substr($bilansInfos[$nAnnee]['dateCloture'],0,4).'
'.$bilansInfos[$nAnnee]['duree'].' mois'; }else{ print '-'; } } /** * Retourne une chaîne contenant les ligne d'un tableau html. * @param array $ratiosInfos * Le tableau des informations ratios * @param array $dataEvol * Le tableau des données évolution * @param array $tabRatio * Un tableau des ratios à utiliser pour générer les lignes * @return string * Retourne une chaîne. */ function synthese_tablerow($ratiosInfos, $dataEvol, $tabRatio){ global $fileName; $row = ''; foreach($tabRatio as $ratio => $info){ $row.= ''."\n". ' '.$info['titre'].''."\n". ' '.dRatio(2,$ratio).''."\n". ' '.dRatio(1,$ratio).''."\n". ' '.dEvol(1,$info['evol']).''."\n". ' '.dRatio(0,$ratio).''."\n". ' '.dEvol(0,$info['evol']).''."\n"; if(count($tabRatio)!=1){ $class = 'class="sTip"'; $href='/?page=synthese&siret='.$_REQUEST['siret'].'&idEntreprise='.$_REQUEST['idEntreprise'].'&ratio='.$ratio; $unite = ''; if(isset($info['unite']) && $info['unite']==1){ $unite = $ratiosInfos[$info['evol']]['unite']; } $rel='./pages/synthese_dgraph.php?widht=375&f='.synthese_graphEvol($dataEvol[$ratio], $unite, $ratio, $fileName); }else{ $class = ''; $href='#'; $ref=''; } $row.= ' Visionner le graphique'."\n"; $row.= ''."\n"; } return $row; } /** * Retourne l'url de la page d'appel du graphique avec tous ces paramètres. * @param array $data * Les données du tableau * @return string * Retourne une chaîne. */ function synthese_graphEvol($data, $unite, $ratio, $filename){ require_once 'phpchartdir/phpchartdir.php'; $unite = ( $_REQUEST['unite']!='' ? $unite : 'KEUROS' ); if(count($data)<=1){ $return = 0; }else{ foreach($data as $value){ $dataX[] = $value['value']; $labelsX[] = substr($value['date'],0,4); } $i=-100; while($i>100){ $labelsY[] = $i;} # Create a XYChart object of size 250 x 250 pixels $c = new XYChart(350, 250); $c->setPlotArea(55, 10, 280, 200); $c->yAxis->setTitle($unite); $c->xAxis->setTitle("Années"); $c->xAxis->setWidth(2); $c->yAxis->setWidth(2); $c->addLineLayer($dataX); # Set the labels. $c->yAxis->setLabels($labelsY); $c->yAxis->setLabelStep(10); $c->xAxis->setLabels($labelsX); $path = PATH_SITE.'/cache/imgcache/'; $file = $filename.'-'.$ratio.'.png'; if($c->makeChart($path.$file) === TRUE){ $return = $file; } else{ $return = FALSE; } } return $return; } function synthese_graph_linecompare($data, $filename){ global $firephp; //Graphique style linecompare / CA / FR / BFR require_once 'phpchartdir/phpchartdir.php'; //Tri des données par date et par ordre croissant foreach ($data as $key => $row) { $date[$key] = $row['date']; } array_multisort($date, SORT_ASC, $data); //Définition des valeurs pour le graph $dataBFR = array(); $dataFR = array(); $dataCA = array(); $i=0; //Parcourir les années foreach($data as $item){ $anneeFin = substr($item['date'],0,4); $moisFin = substr($item['date'],4,2); $jourFin = substr($item['date'],6,2); //Calcul de la date de début $dateDebut = date("Ymd", mktime(0, 0, 0, $moisFin-$item['duree'], $jourFin, $anneeFin)); $anneeDebut = substr($dateDebut,0,4); $moisDebut = substr($dateDebut,4,2); $jourDebut = substr($dateDebut,6,2); //Affectation des abscisses $dataBFR['x'][$i] = $dataFR['x'][$i] = $dataCA['x'][$i] = $dataEBE['x'][$i] = chartTime((int)$anneeDebut, (int)$moisDebut, (int)$jourDebut); $dataBFR['x'][$i+1] = $dataFR['x'][$i+1] = $dataCA['x'][$i+1] = $dataEBE['x'][$i+1] = chartTime((int)$anneeFin, (int)$moisFin, (int)$jourFin); //Affectation des ordonnées $dataBFR['y'][$i] = $dataBFR['y'][$i+1] = $item['r236']; $dataFR['y'][$i] = $dataFR['y'][$i+1] = $item['r235']; $dataCA['y'][$i] = $dataCA['y'][$i+1] = $item['r6']; $dataEBE['y'][$i] = $dataEBE['y'][$i+1] = $item['r146']; $i+=2; } $c = new XYChart(570, 350, 0xcccccc, 0x000000, 1); $c->addTitle("Synthèse *", "timesbi.ttf", 15, 0x000000); $c->addText(60, 320, "* Elements financier rapportés à 12 mois" ); $c->setPlotArea(60, 80, 500, 200, 0xffffff, -1, -1, 0xcccccc, 0xcccccc); $c->yAxis->setTitle("KEUROS","timesbi.ttf",10); $c->xAxis->setTitle( "<*block,valign=absmiddle*>Années<*/*>"); $c->xAxis->setWidth(2); $c->yAxis->setWidth(2); // Add a legend box at (55, 32) (top of the chart) with horizontal layout. Use 9 pts // Arial Bold font. Set the background and border color to Transparent. $legendObj = $c->addLegend(55, 30, false, "times.ttf", 9); $legendObj->setBackground(Transparent); // Add a blue (0000ff) step line layer to the chart and set the line width to 2 pixels $layer1 = $c->addStepLineLayer($dataFR['y'], 0x0000ff, "FONDS DE ROULEMENT"); $layer1->setXData($dataFR['x']); $layer1->setLineWidth(2); // Add a red (ff0000) step line layer to the chart and set the line width to 2 pixels $layer0 = $c->addStepLineLayer($dataBFR['y'], 0xff0000, "BESOIN EN FONDS DE ROULEMENT"); $layer0->setXData($dataBFR['x']); $layer0->setLineWidth(2); // Add a green (00ff00) step line layer to the chart and set the line width to 2 pixels $layer2 = $c->addStepLineLayer($dataCA['y'], 0x00ff00, "CHIFFRE D'AFFAIRES"); $layer2->setXData($dataCA['x']); $layer2->setLineWidth(2); // Add a black (000000) step line layer style dash to the chart and set the line width to 2 pixels $layer3 = $c->addStepLineLayer($dataEBE['y'], $c->dashLineColor(0x000000, DashLine), "EXCEDENT BRUT D'EXPLOITATION"); $layer3->setXData($dataEBE['x']); $layer3->setLineWidth(2); # If the FR line gets above the BFR line, color to area between the lines red (ff0000) $c->addInterLineLayer($layer0->getLine(0), $layer1->getLine(0), 0xff0000, Transparent); # If the FR line gets below the lower BFR line, color to area between the lines light green (8099ff99) $c->addInterLineLayer($layer0->getLine(0), $layer1->getLine(0), Transparent, 0x8044ff44); $path = PATH_SITE.'/cache/imgcache/'; $file = $filename.'-graph-linecompare.png'; if($c->makeChart($path.$file) === TRUE){ $return = ''; }else{ $return = 'Impossible de générer le graphique'; } return $return; } /** * Retourne une chaîne contenant la ligne d'un tableau html. * @param array $ratiosInfos * Le tableau des information ratios * @param array $dataEvol * Le tableau des données évolution * @param array $tabRatio * Un tableau des ratios à utiliser pour le générer les lignes * @return string * Retourne une chaîne. */ function ratios_tablerow($ratiosInfos, $tabRatio, $bilan, $ratio = ''){ global $fileName; foreach($tabRatio as $item){ if($ratio==''){ if(isset($item['ratio'])){ $row.= ''."\n"; $row.= ' '.$item['titre'].'
'.$item['stitre'].'
'."\n"; $row.= ' '.dRatio($bilan,$item['ratio']).''."\n"; $row.= ' '.dSecteur($bilan,$item['ratio']).''."\n"; $row.= ' '; $row.= ''."\n"; $row.= dPosition($bilan,$item['ratio'],$item['position']); $row.= ''; $row.= ''."\n"; $row.= ''."\n"; }else{ $row.= ''."\n"; $row.= ' '.$item['titre'].''."\n"; $row.= ' Entreprise'."\n"; $row.= ' Secteur'."\n"; $row.= ' Position'."\n"; $row.= ''."\n"; } }elseif($ratio==$item['ratio']){ $row.= ''."\n". ' '.$tabRatio[$item['parent']]['titre'].''."\n". ' Entreprise'."\n". ' Secteur'."\n". ' Position'."\n". ''."\n"; $row.= ''."\n". ' '.$item['titre'].'
'.$item['stitre'].'
'."\n". ' '.dRatio($bilan,$item['ratio']).''."\n". ' '.dSecteur($bilan,$item['ratio']).''."\n". ' '."\n". ' '."\n". dPosition($bilan,$item['ratio'],$item['position'])."\n". ' '."\n". ' '."\n". ''."\n"; } } return $row; } /** * Enregistre le graphique bilan actif sous forme d'image. * @param array $data * Tableau structuré des données * @param array $filename * Le nom de fichier généré * @return string * Retourne un message d'erreur ou le code HTML d'affichage. */ function bilans_graph_actif($data, $filename){ require_once 'phpchartdir/phpchartdir.php'; $w = 570; $h = 210; $x = round($w/2); $y = round($h/2); $radius=90; $c = new PieChart($w, $h); $labels = array('Immo. incorporelles', 'Immo. corporelles', 'Immo. financières', 'Stock et encours', 'Créances Clients', 'Autres créances', 'Trésorerie Active'); $textBoxObj = $c->addTitle("Composition de l'actif", "timesbi.ttf", 15); $c->setPieSize($x, $y, $radius); $c->setLabelLayout(SideLayout); $t = $c->setLabelStyle(); $t->setBackground(SameAsMainColor, Transparent, glassEffect()); $t->setRoundedCorners(5); # Set the border color of the sector the same color as the fill color. Set the line # color of the join line to black (0x0) $c->setLineColor(SameAsMainColor, 0x000000); $c->setStartAngle(135); $c->setLabelFormat("<*block,valign=absmiddle*>{label} <*font=timesbi.ttf,size=0*>({percent|0}%)"); $c->setData($data, $labels); $c->set3D(20); $path = PATH_SITE.'/cache/imgcache/'; $file = $filename.'-graph-bilansactif.png'; if($c->makeChart($path.$file) === TRUE){ $return = ''; }else{ $return = 'Impossible de générer le graphique'; } return $return; } /** * Enregistre le graphique bilan SIG sous forme d'image. * @param array $data * Tableau structuré des données * @param array $filename * Le nom de fichier généré * @return string * Retourne un message d'erreur ou le code HTML d'affichage. */ function bilans_graph_sig($data, $filename){ require_once 'phpchartdir/phpchartdir.php'; $w = 570; $h = 210; $x = round($w/2); $y = round($h/2); $radius=70; $c = new PieChart($w, $h); $labels = array('Achats de marchandises.', 'Autres achats externes', 'Charges de fonctionnement', 'Amortissement et provisions', 'Perte financière', 'Impôts sociétés', 'RÉSULTAT NET', ); $textBoxObj = $c->addTitle("Solde Intermédiaire de Gestion", "timesbi.ttf", 15); $c->setPieSize($x, $y, $radius); $c->setLabelLayout(SideLayout); $t = $c->setLabelStyle(); $t->setBackground(SameAsMainColor, Transparent, glassEffect()); $t->setRoundedCorners(5); $c->setLineColor(SameAsMainColor, 0x000000); $c->setLabelFormat("<*block,valign=absmiddle*>{label} <*font=arial.ttf,size=0*>({percent|0}%)"); $c->setStartAngle(135); $c->setData($data, $labels); $c->set3D(20); $path = PATH_SITE.'/cache/imgcache/'; $file = $filename.'-graph-bilanssig.png'; if($c->makeChart($path.$file) === TRUE){ $return = ''; }else{ $return = 'Impossible de générer le graphique'; } return $return; } /** * Enregistre le graphique bilan passif sous forme d'image. * @param array $data * Tableau structuré des données * @param array $filename * Le nom de fichier généré * @return string * Retourne un message d'erreur ou le code HTML d'affichage. */ function bilans_graph_passif($data, $filename){ require_once 'phpchartdir/phpchartdir.php'; $w = 570; $h = 210; $x=round($w/2); $y=round($h/2); $radius=90; $c = new PieChart($w, $h); $labels = array('Fonds propres', 'Provisions Risques', 'Compte Courant', 'Dettes Financières', 'Dettes Fournisseurs', 'Dettes fiscales', 'Autres Dettes', 'Trésorerie Passive'); $textBoxObj = $c->addTitle("Composition du passif", "timesbi.ttf", 15); $c->setPieSize($x, $y, $radius); $c->setLabelLayout(SideLayout); $t = $c->setLabelStyle(); $t->setBackground(SameAsMainColor, Transparent, glassEffect()); $t->setRoundedCorners(5); $c->setLineColor(SameAsMainColor, 0x000000); $c->setStartAngle(135); $c->setLabelFormat("<*block,valign=absmiddle*>{label} <*font=timesbi.ttf,size=0*>({percent|0}%)"); $c->setData($data, $labels); $c->set3D(20); $path = PATH_SITE.'/cache/imgcache/'; $file = $filename.'-graph-passif.png'; if($c->makeChart($path.$file) === TRUE){ $return = ''; }else{ $return = 'Impossible de générer le graphique'; } return $return; } /** * Enregistre le graphique évolution. * @param array $data * Tableau structuré des données * @param array $filename * Le nom de fichier généré * @return string * Retourne un message d'erreur ou le code HTML d'affichage. */ function ratios_graph($ratio, $data, $filename){ $path = PATH_SITE.'/cache/imgcache/'; if($ratio != ''){ $file = $filename.'-'.$ratio.'.png'; }else{ $file = $filename.'.png'; } if(file_exists($path.$file)){ $return = $file; }else{ require_once 'phpchartdir/phpchartdir.php'; if(count($data)<=1){ $return = 0; }else{ foreach($data['data'] as $value){ $dataX1[] = $value['entreprise']; $dataX2[] = $value['secteur']; $labelsX[] = substr($value['date'],0,4); } $i=-100; while($i>100){ $labelsY[] = $i;} $c = new XYChart(350, 250); $c->setPlotArea(55, 10, 280, 200); $c->yAxis->setTitle($data['unite']); $c->xAxis->setTitle("Années"); $c->xAxis->setWidth(2); $c->yAxis->setWidth(2); $legendObj = $c->addLegend(50, 10, false, "times.ttf", 9); $legendObj->setBackground(Transparent); $c->addLineLayer($dataX1, 0x0000ff, "Entreprise"); $c->addLineLayer($dataX2, 0x008C00, "Secteur"); $c->yAxis->setLabels($labelsY); $c->yAxis->setLabelStep(10); $c->xAxis->setLabels($labelsX); if($c->makeChart($path.$file) === TRUE){ $return = $file; } else{ $return = FALSE; } } } return $return; } ?>