From 15eabc42ea029b659d1a7751f75850294d65ebc5 Mon Sep 17 00:00:00 2001 From: Damien LASSERRE Date: Mon, 13 Jun 2011 07:08:16 +0000 Subject: [PATCH] des nouvelles libs pour finance --- library/Finance/OtherFunctions.lib.php | 236 +++++++++++++++++++ library/Finance/RatiosData.lib.php | 213 +++++++++++++++++ library/Finance/RatiosGraph.lib.php | 311 +++++++++++++++++++++++++ library/Finance/liasseFiscale.lib.php | 5 - 4 files changed, 760 insertions(+), 5 deletions(-) create mode 100644 library/Finance/OtherFunctions.lib.php create mode 100644 library/Finance/RatiosData.lib.php create mode 100644 library/Finance/RatiosGraph.lib.php delete mode 100644 library/Finance/liasseFiscale.lib.php diff --git a/library/Finance/OtherFunctions.lib.php b/library/Finance/OtherFunctions.lib.php new file mode 100644 index 000000000..480d1dd86 --- /dev/null +++ b/library/Finance/OtherFunctions.lib.php @@ -0,0 +1,236 @@ + $val) { + if($arrayKey == $key) + if($val == $valeur) + return (true); + } + } + return (false); + } + + public function getReference($valeur, $reference, $annee, $synthese) + { + foreach ($synthese->BilansInfos->item as $item) { + if(substr($item->dateCloture, 0, 4) == $annee) { + foreach ($item->RatiosEntrep->item as $RatiosEntrep) { + if ($RatiosEntrep->id == $reference) { + return (round(($valeur/$RatiosEntrep->val)*100,2)); + } + } + } + } + } + + public function setSyntheseReference() + { + $bilanReference = array('r5' => array('evolution' => 'r6' , 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'CHIFFRE D\'AFFAIRES', + 'commentaires' => 'Montant total des ventes hors taxe tant sur le territoire français que hors de France.'), + 'r7' => array('evolution' => 'r8' , 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'RESULTAT COURANT AVANT IMPOTS', + 'commentaires' => 'Bénéfice ou perte constaté avant affectation des produits ou charges exceptionnelles, déduction des impôts et participation au bénéfice. Il est égal aux : + produits d\'exploitation (notamment les sommes reçues qui relèvent de l\'activité de l\'entreprise, soit les ventes de biens, prestations de services etc..) + + quotes-parts de résultats sur opérations faites en commun(par exemple, résultat des opérations faites par l\'intermédiaire d\'une société en participation) + + produits financiers (intérêts courus, gains de change, revenus tirés des comptes en banque) + - charges d\'exploitation + - quotes-parts de charges sur opérations en commun + - charges financières.)'), + 'r10' => array('evolution' => 'r11' , 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'RESULTAT NET', + 'commentaires' => 'Le résultat net comptable correspond au bénéfice ou perte de la période, mesuré par la différence entre les produits et les charges (au sens comptable) de l\'exercice. Il s\'agit du résultat courant, corrigé du résultat exceptionnel, déduction faite de l\'impôt sur le résultat et de l\'éventuelle participation des salariés. Il mesure les ressources nettes restant à l\'entreprise à l\'issue de l\'exercice.'), + 'r18' => array('evolution' => 'r19' , 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'FONDS PROPRES', + 'commentaires' => 'La situation nette ou Fonds propres ou bien encore, capitaux propres représentent l\'argent apporté par les actionnaires à la constitution de la société ou ultérieurement, ou laissés à la disposition de la société en tant que bénéfices non distribués sous forme de dividendes. Ils courent le risque total de l\'entreprise : si celle-ci va mal, ils ne seront pas rémunérés (aucun dividende ne sera versé) ; si elle dépose son bilan, les porteurs de capitaux propres ne seront remboursés qu\'après que les créanciers l\'aient été intégralement. Si elle va très bien au contraire, tous les profits leur reviennent.'), + 'r22' => array('evolution' => 'r23' , 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'TOTAL BILAN', + 'commentaires' => 'Le total du bilan est la somme de tous les actifs ainsi que des passifs, il caractérise la taille de l\'entreprise. + Selon le décret n° 2008-1354 du 18 décembre 2008, les critères désormais retenus pour les besoins de l\'analyse statistique et économique sont les suivants : + La catégorie des micro entreprises est constituée des entreprises qui : + * d\'une part occupent moins de 10 personnes ; + * d\'autre part ont un chiffre d\'affaires annuel ou un total de bilan n\'excédant pas 2 millions d\'euros. + La catégorie des petites et moyennes entreprises (PME) est constituée des entreprises qui : + * d\'une part occupent moins de 250 personnes ; + * d\'autre part ont un chiffre d\'affaires annuel n\'excédant pas 50 millions d\'euros ou un total de bilan n\'excédant pas 43 millions d\'euros. + La catégorie des entreprises de taille intermédiaire (ETI) est constituée des entreprises qui n\'appartiennent pas à la catégorie des petites et moyennes entreprises, et qui : + * d\'une part occupent moins de 5 000 personnes ; + * d\'autre part ont un chiffre d\'affaires annuel n\'excédant pas 1 500 millions d\'euros ou un total de bilan n\'excédant pas 2 000 millions d\'euros. + La catégorie des grandes entreprises (GE) est constituée des entreprises qui ne sont pas classées dans les catégories précédentes.'), + 'r231' => array('evolution' => 'r235', 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'FONDS DE ROULEMENT', + 'commentaires' => 'Le fonds de roulement représente la différence entre l\'actif à court terme et le passif à court terme (dont l\'échéance est de moins de douze mois). Un fonds de roulement positif indique qu\'une entreprise a suffisamment d\'actifs liquides pour régler ses dettes et engagements à court terme (12 mois). Dans certains cas particuliers, le FDR peut être négatif et l\'entreprise viable : GSA ou autre Hypermarchés par exemple. Cette situation devenant risquée en cas de baisse du CA.'), + 'r232' => array('evolution' => 'r236', 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'BESOIN EN FONDS DE ROULEMENT', + 'commentaires' => 'Pour les comptables, le BFR correspond aux actifs d\'exploitation (hors immobilisations et actifs financiers) diminués du montant des dettes d\'exploitation (cad aux fonds indéfiniment mobilisés). Ainsi, une entreprise dont le BFR s\'élève à 15 % de son chiffre d\'affaires requiert un besoin permanent de trésorerie représentant 15 % de son activité uniquement pour assurer la pérennité de son cycle d\'exploitation. Plus le niveau de BFR est faible (ou bien plus sa rotation est forte), plus le dégagement de liquidités est important dès lors que les marges sont positives.'), + 'r249' => array('evolution' => 'r254', 'unite' => 'EUR', 'operateur' => 1000, 'name' => 'TRESORERIE', + 'commentaires' => 'Trésorerie nette (FR-BFR)'), + 'r24' => array('evolution' => 'r24' , 'unite' => 'Pers.', 'operateur' => 1, 'name' => 'EFFECTIF', + 'commentaires' => 'La définition exacte de l\'effectif peut varier selon les sources : + DADS : effectif salarié instantané au 30 juin ; + SIRENE : effectif salarié au 31 décembre n (ou au 1er janvier n+1) ; cet effectif fait l\'objet d\'une mise à jour « de masse » au premier semestre à partir des données DADS, l\'effectif d\'une entreprise est alors la somme des effectifs de ses établissements au 31 décembre; + SUSE-FICUS : moyenne annuelle de l\'effectif salarié. + Dans un bilan c\'est la moyenne de l\'effectif de l\'exercice.') + ); + return ($bilanReference); + } + + public function referenceBilan($reference) + { + switch ($reference) + { + case 'actif': + $reference = array('r59' => 'Actif Immobilisé Net','r51' => 'Incorporelles', + 'r52' => 'Corporelles', 'r53' => 'Financières', + 'r69' => 'Actif Circulant Net', 'r60' => 'Stock et encours', + 'r61' => 'Créances Clients', 'r62' => 'Autres Créances', + 'r63' => 'Trésorerie Active', 'r22' => 'TOTAL ACTIF' + ); + break; + case 'passif': + $reference = array('r79' => 'Ressources Propres', 'r70' => 'Fonds Propres', + 'r71' => 'Provisions Risques', 'r72' => 'Comptes Courants', + 'r90' => 'Ressources Externes', 'r83' => 'Dettes Financières', + 'r84' => 'Dettes Fournisseurs', 'r85' => 'Dettes Fiscales', + 'r86' => 'Autres Dettes', 'r87' => 'Trésorerie Passive', + 'r22' => 'TOTAL PASSIF' + ); + break; + case 'sig': + $reference = array('r101' => 'CHIFFRE D\'AFFAIRES HORS TAXE', 'r102' => '-Achat de marchandises, de matières premières', + 'r110' => 'MARGE COMMERCIALE', 'r111' => '+Production vendue', + 'r112' => '+Production immobilisée et stockée', + 'r120' => 'PRODUCTION DE L\'EXERCICE', + 'r121' => 'Variation de stock de marchandises et matières premières', + 'r122' => 'MARGE BRUTE', + 'r123' => '-Autres charges externes', + 'r130' => 'VALEUR AJOUTÉE', 'r132' => 'Charges de personnel', + 'r133' => '-Impôts, taxes & versements assimilés', 'r131' => '+Subventions d\'exploitation', + 'r140' => 'EXCÉDENT BRUT D\'EXPLOITATION (EBE)', 'r141' => '+Autres produits d\'exploitation', + 'r142' => '-Autres charges d\'exploitation', 'r143' => '+Reprise sur dotations & transferts de charges', + 'r144' => '+70% Loyer de crédit bail', 'r145' => '-Dotations d\'exploitation & provisions d\'exploitation', + 'r150' => 'RÉSULTAT D\'EXPLOITATION', 'r151' => '+Produits financiers', + 'r152' => '+30% Loyer de crédit bail', 'r153' => '+Charges financières', + 'r170' => 'RÉSULTAT COURANT AVANT IMPOTS', 'r171' => '+Produits exceptionnels', + 'r172' => '-Charges exceptionnelles', 'r181' => '-Impôts sur les bénéfices', + 'r182' => '-Participation salariale', + 'r199' => 'RÉSULTAT NET' + ); + break; + } + return ($reference); + } + + /*public function formatElementForGraphiqueBilan($bilan) + { + $tb = array(); + + foreach ($bilan as $id => $item) { + foreach($bilan[$id]['item'] as $element) { + $tb[] = round($element*100/$bilan[$id]['item'][key($bilan['r22']['item'])],2); + } + } + return ($tb); + }*/ + + public function Tb($element, $reference) + { + if($element != 'NS') { + if ($element != 0 and $reference != 0) { + return (round(($element * 100) / $reference, 2)); + } else { + return($element); + } + } + return (false); + } + + public function ifIsHead($id) + { + $head = array('r59', 'r69', 'r22','r79', 'r90', 'r101', + 'r110', 'r120', 'r122', 'r130', 'r140', + 'r150', 'r170', 'r199' + ); + + if (in_array($id, $head)) + return (true); + return (false); + } + + public function createlementForGraphique($id) + { + $element = array('r51', 'r52', 'r53', 'r60', 'r61', 'r62', 'r63', + 'r70', 'r71', 'r72', 'r83', 'r84', 'r85', 'r86', 'r87', + ''); + + if (in_array($id, $element)) + return (true); + return (false); + } + + public function formatElementGraphiquebilan($tb) + { + $valeur = array(); + $case = 0; + + for ($i =0; $i < count($tb); $i++) { + foreach ($tb as $tableau) { + while($case < count($tableau)) { + $valeur[$i][] = $tableau[$case]; + break; + } + } + $case++; + } + return ($valeur); + } + + public function parseUnite($unite, $valeur) + { + switch ($unite) + { + case 'EUR': + return (number_format((round($valeur)/1000), 0, '', ' ')); + case '%' : + return (round($valeur)); + case 'Jours': + return ($valeur); + default: + return ($valeur); + } + } + + public function getSwitchFormRatios($ratio, $type, $date = false) + { + $change = false; + + if(!$date) { + foreach($ratio->BilansInfos->item as $valeur) { + if ($valeur->typeBilan == $type) + return ($valeur); + } + } else { + foreach($ratio->BilansInfos->item as $valeur) { + if ($valeur->typeBilan == $type and $valeur->dateCloture == $date) + return ($valeur); + else + $change = true; + } + } + if($change) { + foreach($ratio->BilansInfos->item as $valeur) { + if ($valeur->typeBilan == $type) + return ($valeur); + } + } + } + +} \ No newline at end of file diff --git a/library/Finance/RatiosData.lib.php b/library/Finance/RatiosData.lib.php new file mode 100644 index 000000000..96a4d0b7e --- /dev/null +++ b/library/Finance/RatiosData.lib.php @@ -0,0 +1,213 @@ +dateFunction = new WDate(); + $this->graphique = new Graphique(APPLICATION_PATH . '/../cache/pages/imgcache/'); + $this->siret = $siret; + $this->idSC = $idSC; + } + + public function rsynthese($synthese, $idsReference, &$tabAnnee, &$final) + { + $OtherFunction = new OtherFunction(); + + foreach ($synthese->BilansInfos->item as $item) { + $annee = substr($item->dateCloture, 0, 4); + if( $annee >= substr($synthese->BilansInfos->item[0]->dateCloture, 0, 4)-2) { + $tabAnnee[$this->dateFunction->dateT('Ymd', 'd/m/Y', $item->dateCloture)] = $item->duree; + foreach ($item->RatiosEntrep->item as $RatiosEntrep) { + foreach($idsReference as $id => $elements) { + if ($RatiosEntrep->id == $id) { + $final[$id.':'.$elements['titre']][$item->dateCloture] = + array('Valeur' => $RatiosEntrep->val/1000, + 'percent' => $OtherFunction->getReference($RatiosEntrep->val, $elements['total'], $annee, $synthese), 'id' => $id); + ksort($final[$id.':'.$elements['titre']]); + } + } + } + } + } + ksort($tabAnnee); + } + + public function synthese($synthese, $bilanReference, $typeBilan, $RatiosGraph) + { + $OtherFunction = new OtherFunction(); + $RatiosGraph = new RatiosGraph($this->siret, $this->idSC); + + foreach ($synthese->BilansInfos->item as $item) { + if ($item->typeBilan == $typeBilan) { + foreach ($item->RatiosEntrep->item as $RatiosEntrep) { + foreach ($bilanReference as $id => $params) { + if ($RatiosEntrep->id == $id) { + $bilan[$id]['name'] = $params['name']; + $bilan[$id]['unite'] = $params['unite']; + $bilan[$id]['commentaires'] = $params['commentaires']; + if (count($bilan[$id]['item']) <= 2) { + if (is_numeric($RatiosEntrep->val)) + $valeur = number_format(($RatiosEntrep->val / $params['operateur']), 0, '', ' '); + $bilan[$id]['item'][$item->dateCloture]['ValEntrep'] = $valeur;} + $this->graphique->GraphiqueLineXY($RatiosGraph->GraphiqueSyntheseLine($id, $synthese, + $item->typeBilan, $OtherFunction->maskNameImg('synthese', $this->siret, array($id,$item->typeBilan))), true); } } } + foreach ($item->RatiosEntrepEvol->item as $RatiosEntrepEvol) { + foreach ($bilanReference as $id => $params) { + if ($RatiosEntrepEvol->id == $params['evolution']) { + if (array_key_exists($item->dateCloture, $bilan[$id]['item'])) { + $bilan[$id]['item'][$item->dateCloture]['duree'] = $item->duree; + $bilan[$id]['item'][$item->dateCloture]['ValEntrepEvol'] = $RatiosEntrepEvol->val; } } } } + } + } + foreach ($bilan as $id => $val) + ksort($bilan[$id]['item']); + return ($bilan); + } + + public function constructElementForBilan($bilan, $tableauDeReference, &$type, &$date, &$duree, $typebilan) + { + foreach($bilan->BilansInfos->item as $element) { + if($element->typeBilan == $typebilan) + { + if($duree == EOF) + $duree = $element->duree; + if (@count($date) < 5) { + if(!in_array($element->dateCloture, $date)) + $date[] = $element->dateCloture; + } + foreach($element->RatiosEntrep->item as $item) { + foreach($tableauDeReference as $id => $valeur) { + if ($item->id == $id) { + if (count($type[$id]['item']) < 5) { + if ($item->val > 0) { + $type[$id]['item'][$element->dateCloture] = $item->val / 1000; + } + else + $type[$id]['item'][$element->dateCloture] = 'NS'; + } + } + } + } + } + } + foreach ($type as $id => $valeur) { + $type[$id]['item'] = array_reverse($valeur['item']); + } + $date = array_reverse($date); + } + + public function specialSIG($id, $element, $partial, $count) + { + $OtherFunction = new OtherFunction(); + + if($element != 'NS') { + if ($id == 'r101') + return $OtherFunction->Tb($element, $element) - $OtherFunction->Tb($partial['r122']['item'][$count], $partial['r101']['item'][$count]); + else if ($id == 'r122') + return $OtherFunction->Tb($element, $partial['r101']['item'][$count]) - $OtherFunction->Tb($partial['r130']['item'][$count], $partial['r101']['item'][$count]); + else if ($id == 'r130') + return $OtherFunction->Tb($element, $partial['r101']['item'][$count]) - $OtherFunction->Tb($partial['r140']['item'][$count], $partial['r101']['item'][$count]); + else if ($id == 'r140') + return $OtherFunction->Tb($element, $partial['r101']['item'][$count]) - $OtherFunction->Tb($partial['r150']['item'][$count], $partial['r101']['item'][$count]); + else if ($id == 'r150') + return $OtherFunction->Tb($element, $partial['r101']['item'][$count]) - $OtherFunction->Tb($partial['r170']['item'][$count], $partial['r101']['item'][$count]); + else if ($id == 'r170') + return $OtherFunction->Tb($element, $partial['r101']['item'][$count]) - $OtherFunction->Tb($partial['r199']['item'][$count], $partial['r101']['item'][$count]); + else if ($id == 'r199') + return $OtherFunction->Tb($element, $partial['r101']['item'][$count]); + } else + return (null); + } + + public function LineBilan(&$tableauBilanGraphique, $helper, $id, $Graphdate, $partial, $reference, $name, $url, $siren, $sig = false) + { + $i = 0; + $this->column = 0; + $GraphLine = array(); + $OtherFunction = new OtherFunction(); + $RatiosGraph = new RatiosGraph($this->siret, $this->idSC); + + /** Ont enregistre les données (premié temps) **/ + foreach($partial[$id]['item'] as $element) { + if($element != 'NS'){ $GraphLine[] = $number = $element; }else{$number = 0; $GraphLine[] = 0;}; + if($sig) { + $result = self::specialSIG($id, $element, $partial, $i); + if(is_numeric($result)) + $gr[] = ($result < 0)?0:$result; + } + else + if($OtherFunction->createlementForGraphique($id))$gr[] = $number; + } + ($gr != 0)?$tableauBilanGraphique = $gr:$tableauBilanGraphique = false; + + /** Ont affiche les données (deuxiéme temps) **/ + $html .= 'ifIsHead($id))?'class="subhead"':'class="bilanDatas"').'>'; + $html .= ''.$name.''; + foreach($partial[$id]['item'] as $element) { + $html .= '' . (($element != 'NS') ? number_format($element, 0, '', ' ') . ' K€':$element).''; + } + $html .= ''.$OtherFunction->Tb(end($partial[$id]['item']), end($partial[$reference]['item'])).''; + $image = $RatiosGraph->GraphiqueLineBilan($GraphLine, $RatiosGraph->maskNameImg('bilan', $this->siret, array($id)), $Graphdate); + $html .= ''; + $datas = implode('|', $GraphLine); + $dates = implode('|', $Graphdate); + $html .= ' + + '; + $html .= ''; + $html .= ''; + return ($html); + } + + public function compareValeur($valeurEnt, $valeurSec, $compare, $valeur = false) + { + $ecart = 1/100; + + if( $valeurSec=='NS' || $valeurEnt == 'NS' || $valeurSec==NULL || $valeurEnt==NULL) { + return ('-'); + } else if ($compare == '>') { + if (($valeurEnt + $ecart) > $valeurSec) { + if($valeur) + $return = 'bon'; + else $return = ''; + } elseif(($valeurSec - ($valeurSec * $ecart)) < $valeurEnt && ($valeurSec + ($valeurSec * $ecart)) > $valeurEnt) { + if($valeur) + $return = 'neutre'; + else $return = '-'; + } else { + if($valeur) + $return = 'mauvais'; + else $return = ''; + } + } else if ($compare == '<') { + if ($valeurEnt < $valeurSec) { + if($valeur) + $return = 'bon'; + else $return = ''; + } elseif( ($valeurSec - ($valeurSec * $ecart)) < $valeurEnt && ($valeurSec + ($valeurSec * $ecart)) > $valeurEnt) { + if($valeur) + $return = 'neutre'; + else $return = '-'; + } else { + if($valeur) + $return = 'mauvais'; + else $return = ''; + } + } + return ($return); + } +} \ No newline at end of file diff --git a/library/Finance/RatiosGraph.lib.php b/library/Finance/RatiosGraph.lib.php new file mode 100644 index 000000000..81b613a06 --- /dev/null +++ b/library/Finance/RatiosGraph.lib.php @@ -0,0 +1,311 @@ +siret = $siret; + $this->SCid = $SCid; + $this->imageCachePath = APPLICATION_PATH . '/../cache/pages/imgcache/'; + $this->graphique = new Graphique($this->imageCachePath); + } + + public function maskNameImg($action, $siret, $others = EOF) + { + $name = $action.'-'.$siret; + if($others != EOF) { + foreach($others as $other) { + $name .= '-'.$other; + } + } + $name .= '.png'; + return ($name); + } + + public function getValFromKey($stdClass, $key) + { + foreach($stdClass as $element) { + if ($element->id == $key) + return ($element->val/1000); + } + } + + public function trieType($data, $idType) + { + $type = array(); + + foreach($data as $item) + { + if($item->typeBilan == 'N') + $type['N'][] = $item; + else if($item->typeBilan == 'C') + $type['C'][] = $item; + } + return ($type[$idType]); + } + + public function createAbscisseSynthese($synthese, $id, &$labelX, $type) + { + $dataX1 = array(); + + foreach ($synthese->BilansInfos->item as $item) { + if ($item->typeBilan == $type) { + $labelX[] = substr($item->dateCloture, 0, 4); + foreach ($item->RatiosEntrep->item as $RatiosEntrep) { + if ($RatiosEntrep->id == $id) { + if (is_numeric($RatiosEntrep->val)) + $dataX1[] = ($RatiosEntrep->val / 1000); + } + } + } + } + $labelX = array_reverse($labelX); + $dataX1 = array_reverse($dataX1); + return ($dataX1); + } + + public function GraphiqueSyntheseLine($id, $synthese, $type, $name) + { + $labelX = array(); + $parametres = new stdClass(); + $parametres->nom = $name; + $parametres->datas = array(self::createAbscisseSynthese($synthese,$id, $labelX, $type)); + $parametres->TitlesY = array(array("Keuros")); + $parametres->TitlesX = array(array("Années")); + $parametres->LineLayer = array("Entreprise"); + $parametres->labelsY = array(); + $parametres->labelsX = $labelX; + + return ($parametres); + } + + public function GraphiqueSyntheseAnalyse($data, $type, $siret) + { + + //Définition des valeurs pour le graph + $dataBFR = array(); + $dataFR = array(); + $dataCA = array(); + $BFR = array(); + $i = 0; + $nbAnnees = 0; + $data = self::trieType($data, $type); + + //Tri des données par date et par ordre croissant + foreach ($data as $key => $row) { $date[$key] = $row->dateCloture; } + array_multisort($date, SORT_ASC, $data); + if(count($data)>5) + $data = array_slice($data, count($data)-5, null, true); + + //Parcourir les années + foreach($data as $item) { + $anneeFin = substr($item->dateCloture,0,4); + $moisFin = substr($item->dateCloture,4,2); + $jourFin = substr($item->dateCloture,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] = self::getValFromKey($item->RatiosEntrep->item, 'r236'); + $dataFR['y'][$i] = $dataFR['y'][$i+1] = self::getValFromKey($item->RatiosEntrep->item, 'r235'); + $dataCA['y'][$i] = $dataCA['y'][$i+1] = self::getValFromKey($item->RatiosEntrep->item, 'r6'); + $dataEBE['y'][$i] = $dataEBE['y'][$i+1] = self::getValFromKey($item->RatiosEntrep->item, 'r146'); + $i+=2; + } + + $parametres = new stdClass(); + $parametres->nom = self::maskNameImg('synthese', $this->siret, array('graphiqueSynthses', $type)); + $parametres->width = 660; + $parametres->height = 350; + $parametres->bgColor = 0xcccccc; + $parametres->edgeColor = 0x000000; + $parametres->raisedEffect = 1; + $parametres->addTitle = array("Synthèse *", "timesbi.ttf", 15, 0x000000); + $parametres->addText = array(array(60, 320, "* Elements financier rapportés à 12 mois")); + $parametres->setPlotArea = array(100, 80, 500, 200, 0xffffff, -1, -1, 0xcccccc, 0xcccccc); + $parametres->TitlesY = array(array("KEUROS","timesbi.ttf", 10)); + $parametres->TitlesX = array(array("<*block,valign=absmiddle*>Années<*/*>")); + $parametres->yAxisWidth = 2; + $parametres->xAxisWidth = 2; + $parametres->legendeParams = array(55, 30, false, "times.ttf", 9); + $parametres->addStepLineLayer = array('layer1' => array($dataFR['y'], 0x0000ff, "FONDS DE ROULEMENT", $dataFR['x']), + 'layer0' => array($dataBFR['y'], 0xff0000, "BESOIN EN FONDS DE ROULEMENT", $dataBFR['x']), + 'layer2' => array($dataCA['y'], 0x00ff00, "CHIFFRE D'AFFAIRES", $dataCA['x']), + 'layer3' => array($dataEBE['y'], 0x000000, "EXCEDENT BRUT D'EXPLOITATION", $dataEBE['x']) + ); + $parametres->dashLineColor = 'layer3'; + $parametres->addInterLineLayer = array('layer0:layer1' => array(0xff0000, Transparent), + 'layer0:layer1' => array(Transparent, 0x8044ff44) + ); + return ($parametres); + } + + public function selectTitleGraphique($type) + { + switch($type) { + case 'actif' : + return ('Composition de l\'actif au : '); + case 'passif': + return ('Composition du passif au : '); + case 'sig' : + return ('Sole Intermédiaire de Gestion au : '); + } + } + + public function GraphiqueBilan($type, $data, $i, $filename, $date, $count, $labels) + { + $parametres = new stdClass(); + $parametres->nom = self::maskNameImg('bilan', $this->siret, array($i, 'graph', $type)); + $parametres->title->texte = self::selectTitleGraphique($type).' '.$date; + $parametres->datas = $data; + $parametres->labels = $labels; + $parametres->makeSession = 'chart_'.$type.$i; + $retour = $this->graphique->GraphiquePieChart($parametres, true); + + $parametres->retour->file = $parametres->nom; + $parametres->retour->chartID = $retour->chartId; + $parametres->retour->imageMap = $retour->imageMap; + $parametres->retour->i = $type.$i; + $parametres->retour->hide = $i; + ($i == $count)?$parametres->retour->hide = false : $parametres->retour->hide = true; + return ($parametres->retour); + } + + public function GraphiqueLineBilan($data, $name, $date) + { + $parametres = new stdClass(); + $parametres->nom = $name; + $parametres->datas = array($data); + $parametres->TitlesY = array(array("Keuros")); + $parametres->TitlesX = array(array("Années")); + $parametres->LineLayer = array("Entreprise"); + $parametres->labelsY = array(); + $parametres->labelsX = $date; + + $this->graphique->GraphiqueLineXY($parametres, true); + return($parametres->nom); + } + + public function initTableau($tableau) + { + $i = 0; + + foreach($tableau as $date => $valeur){ + $tableau[$i] = $valeur; + unset($tableau[$date]); + $i++; + } + return ($tableau); + } + + public function countTypeBilan($ratios, $typeBilan) + { + $type = 0; + + foreach($ratios->BilansInfos->item as $item) { + if($item->typeBilan == $typeBilan) + $type++; + } + return ($type); + } + + protected function setUnite($valeur, $unite) + { + switch ($unite) { + case 'EUR': + return ($valeur = $valeur / 1000); + default: + return ($valeur); + } + } + + public function createAbscisse($type, $unite, $ratio, $id, $typeBilan = 'N', &$labelX = null, $nbResult = 5) + { + $i = 0; + + $dataX = array(); + if ($type == 'RatiosEntrep') { + foreach ($ratio->BilansInfos->item as $element) { + if($element->typeBilan == $typeBilan) { + if ($i >= self::countTypeBilan($ratio, $typeBilan)) + break; + if (is_array($labelX)) + $labelX[] = substr($element->dateCloture, 0, 4); + foreach ($element->RatiosEntrep->item as $ratioEntre) { + if ($ratioEntre->id == $id) { + $dataX[substr($element->dateCloture, 0, 4)] = self::setUnite($ratioEntre->val, $unite);$i++;} } } } } + if ($type == 'RatiosSecteur') { + foreach ($ratio->RatiosSecteur->item as $element) { + if($i >= self::countTypeBilan($ratio, $typeBilan)) + break; + foreach($element->liste->item as $item) { + if ($item->id == $id) { + $dataX[$element->annee] = self::setUnite($item->val, $unite);$i++; } } } } + if (is_array($labelX)) sort($labelX); + ksort($dataX); + $dataX = self::initTableau($dataX); + return ($dataX); + } + + public function createGraphique($ratio, $id, $unite, $type) + { + $Annees = array(); + $parametres = new stdClass(); + $parametres->nom = self::maskNameImg('ratios', substr($this->siret, 0, 9), array($id,$type)); + $parametres->datas = array(self::createAbscisse('RatiosEntrep', $unite, $ratio, $id, $type, $Annees), + self::createAbscisse('RatiosSecteur', $unite, $ratio, $id, $type)); + $parametres->TitlesY = array(array($unite)); + $parametres->TitlesX = array(array("Années")); + $parametres->colorLegende->Secteur = 0x008C00; + $parametres->colorLegende->Entreprise = 0x0000ff; + $parametres->LineLayer = array("Entreprise", "Secteur"); + $parametres->labelsY = array(); + $parametres->labelsX = $Annees; + + return ($this->graphique->GraphiqueLineXY($parametres, true)); + } + + public function bourseGraphique($filename) + { + $file = $filename.'.png'; + $noOfDays = 30; + $extraDays = 30; + $rantable = new RanTable(9, 6, $noOfDays + $extraDays); + $rantable->setDateCol(0, chartTime(2002, 9, 4), 86400, true); + $rantable->setHLOCCols(1, 100, -5, 5); + $rantable->setCol(5, 50000000, 250000000); + + $timeStamps = $rantable->getCol(0); // Les date + $highData = $rantable->getCol(1); // les données les plus hautes + $lowData = $rantable->getCol(2); // Les données les plus basses + $openData = $rantable->getCol(3); // Les donnée d'ouverture + $closeData = $rantable->getCol(4); // Les donnée de fermeture + $volData = $rantable->getCol(5); // Volume de data + + $parametres = new stdClass(); + $parametres->nom = $file; + $parametres->makeSession = "chart1"; + $parametres->timeStamps = $timeStamps; + $parametres->highData = $highData; + $parametres->lowData = $lowData; + $parametres->openData = $openData; + $parametres->closeData = $closeData; + $parametres->volData = $volData; + $parametres->extraDays = $extraDays; + + $retour = $this->graphique->GraphiqueFinance($parametres, true); + return (''.$retour->imageMap.''); + } +} \ No newline at end of file diff --git a/library/Finance/liasseFiscale.lib.php b/library/Finance/liasseFiscale.lib.php deleted file mode 100644 index 4a794f615..000000000 --- a/library/Finance/liasseFiscale.lib.php +++ /dev/null @@ -1,5 +0,0 @@ -