48ff906eed
Ajout des bons CSS dans la version printable. Suppression des balises Style dans les balises HTML. Modification du format des dates + quelques bugs... Modification des tailles de polices et de quelque mise en page améliorées.
829 lines
38 KiB
PHP
829 lines
38 KiB
PHP
<?php
|
|
/*
|
|
* To change this template, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
Class AvisDeCredit
|
|
{
|
|
private $report;
|
|
private $scores = array('IndiScore' => array('min'=> 0, 'max' => 100),
|
|
'Conan & Holder' => array('min' => -4.5, 'max' => 16),
|
|
'Afdcc2' => array('min' => 0, 'max' => 5),
|
|
'Score Z' => array('min' => -3, 'max' => 3),
|
|
'CommonRisk' => array('min' => 0, 'max' => 20),
|
|
'ERC' => array('min' => -5, 'max' => 5)
|
|
);
|
|
private $pdRating = array('AAA' => 9, 'AA' => 8, 'A' =>7, 'BBB' => 6, 'BB' => 5, 'B' => 4, 'CCC' => 3, 'CC' => 2, 'C' => 1, 'D' => 0);
|
|
private $pathImg;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->pathImg = $pathImg;
|
|
$this->report = $report;
|
|
$this->formatDate();
|
|
foreach($this->report->DataSet->Company->CreditRecommendation as $credit) {
|
|
$this->createGraphique($this->scores[$credit->RiskClasses->CommonRiskClass->RatingName->_]['min'], $this->scores[$credit->RiskClasses->CommonRiskClass->RatingName->_]['max'],
|
|
$credit->RiskClasses->CommonRiskClass->RatingValue, str_replace(' ', '_',$credit->RiskClasses->CommonRiskClass->RatingName->_));
|
|
foreach ($credit->RiskClasses->ProviderRiskClass as $ProviderRiskClass) {
|
|
$this->createGraphique($this->scores[$ProviderRiskClass->RatingName->_]['min'], $this->scores[$ProviderRiskClass->RatingName->_]['max'],
|
|
$ProviderRiskClass->RatingValue, str_replace(' ', '_',$ProviderRiskClass->RatingName->_));
|
|
}
|
|
}
|
|
}
|
|
|
|
public function formatDate()
|
|
{
|
|
$date = new WDate();
|
|
$function = new GiantFunction();
|
|
for($i = 0; $i < count($this->report->DataSet->Company->CreditRecommendation); $i++) {
|
|
if (isset($this->report->DataSet->Company->CreditRecommendation[$i]->Date->_)) {
|
|
$this->report->DataSet->Company->CreditRecommendation[$i]->Date->_ =
|
|
$date->dateT($function->getFormatDate($this->report->DataSet->Company->CreditRecommendation[$i]->Date->format),
|
|
'd/m/Y',
|
|
$this->report->DataSet->Company->CreditRecommendation[$i]->Date->_);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function setNomberRecommendation()
|
|
{
|
|
for($i = 0; $i < count($this->report->DataSet->Company->CreditRecommendation); $i++) {
|
|
if (isset($this->report->DataSet->Company->CreditRecommendation[$i]->AmountAdvised->_)) {
|
|
$this->report->DataSet->Company->CreditRecommendation[$i]->AmountAdvised->_ =
|
|
number_format($this->report->DataSet->Company->CreditRecommendation[$i]->AmountAdvised->_, 0, '', ' ');
|
|
$this->report->DataSet->Company->CreditRecommendation[$i]->AmountAdvised->currency = GiantFunction::getPoundName(
|
|
$this->report->DataSet->Company->CreditRecommendation[$i]->AmountAdvised->currency);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function createGraphique($min, $max, $current, $name)
|
|
{
|
|
if (!file_exists($this->pathImg.'-'.$name.'.png')) {
|
|
$m = new LinearMeter(640, 10, 0xffffff);
|
|
$m->setMeter(0, 0, 630, 10, Bottom);
|
|
switch($name) {
|
|
case 'IndiScore':
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(9, 100, 0x21FF11, "");
|
|
$m->addZone(5, 9, 0xFF8C19, "");
|
|
$m->addZone(0, 5, 0xFF0004, "");
|
|
break;
|
|
case 'Conan_&_Holder':
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(6.8, 16, 0x21FF11, "");
|
|
$m->addZone(-4.5, 6.8, 0xFF0004, "");
|
|
break;
|
|
case 'Afdcc2':
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(0.30, 5, 0x21FF11, "");
|
|
$m->addZone(0, 0.30, 0xFF0004, "");
|
|
break;
|
|
case 'Score_Z':
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(0, 3, 0x21FF11, "");
|
|
$m->addZone(-3, 0, 0xFF0004, "");
|
|
break;
|
|
case 'CommonRisk':
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(8, 20, 0x21FF11, "");
|
|
$m->addZone(5, 8, 0xFF8C19, "");
|
|
$m->addZone(0, 5, 0xFF0004, "");
|
|
break;
|
|
case 'ERC':
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(0, 5, 0x21FF11, "");
|
|
$m->addZone(-2, 0, 0xFF8C19, "");
|
|
$m->addZone(-5, -2, 0xFF0004, "");
|
|
break;
|
|
case 'PD_Rating':
|
|
$current = $this->pdRating[$current];
|
|
$m->setScale(0, 9);
|
|
$m->addZone(6, 9, 0x21FF11, "");
|
|
$m->addZone(2, 6, 0xFF8C19, "");
|
|
$m->addZone(0, 2, 0xFF0004, "");
|
|
break;
|
|
case 'PD_Percentage':
|
|
$current = (($current > 100)?100:$current);
|
|
$current = (($current < 0)?0:$current);
|
|
$current = 100 - $current;
|
|
$m->setScale(0, 100);
|
|
$m->addZone(60, 100, 0x21FF11, "");
|
|
$m->addZone(30, 60, 0xFF8C19, "");
|
|
$m->addZone(0, 30, 0xFF0004, "");
|
|
break;
|
|
case 'Common_Rating':
|
|
if(empty($min)){$min = 0;}
|
|
if(empty($max)){$max = 10;}
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(4, 10, 0x21FF11, "");
|
|
$m->addZone(2, 4, 0xFF8C19, "");
|
|
$m->addZone(0, 2, 0xFF0004, "");
|
|
break;
|
|
default:
|
|
if(empty($min)){$min = 0;}
|
|
if(empty($max)){$max = 100;}
|
|
$current = (($current > $max)?$max:$current);
|
|
$current = (($current < $min)?$min:$current);
|
|
$m->setScale($min, $max);
|
|
$m->addZone(50, 100, 0x21FF11, "");
|
|
$m->addZone(0, 50, 0xFF0004, "");
|
|
}
|
|
$pointerObj = $m->addPointer($current, 0x000000);
|
|
$m->makeChart($this->pathImg.'-'.$name.'.png');
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
|
|
class ComparaisonValeurs
|
|
{
|
|
private $report;
|
|
private $pathImg;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->pathImg = $pathImg;
|
|
$this->report = $report;
|
|
foreach($this->report->DataSet->Company->PeerGroup as $PeerGroup) {
|
|
if(isset($PeerGroup->FlexibleComparisonItems)){
|
|
$this->generateStructureRatio('FlexibleComparisonItems');
|
|
$copy = $this->report->DataSet->Company->ComparaisonValeurs;
|
|
foreach($copy as $name => $ComparaisonValeurs) {
|
|
if(isset($ComparaisonValeurs['old'])) {
|
|
foreach($ComparaisonValeurs['old'] as $date => $valeur) {
|
|
$labels[] = $date;
|
|
foreach($valeur as $val) {
|
|
$entreprise[] = $val->SubjectValue;
|
|
$secteur[] = $val->AverageValue;
|
|
}
|
|
}
|
|
$entreprise = array_reverse($entreprise);
|
|
$secteur = array_reverse($secteur);
|
|
$labels = array_reverse($labels);
|
|
$this->createGraphique($name, $labels, $entreprise, $secteur);
|
|
unset($entreprise, $secteur, $labels);
|
|
}
|
|
}
|
|
} else if($PeerGroup->AmountAdvisedComparison) {
|
|
print_r($PeerGroup->AmountAdvisedComparison);
|
|
} else if($PeerGroup->ProviderRatingComparison) {
|
|
print_r($PeerGroup->ProviderRatingComparison);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function generateStructureRatio($type)
|
|
{
|
|
$i = 0;
|
|
$date = new WDate();
|
|
foreach($this->report->DataSet->Company->PeerGroup as $PeerGroup) {
|
|
switch($type) {
|
|
case 'FlexibleComparisonItems':
|
|
|
|
foreach($PeerGroup->FlexibleComparisonItems->ComparisonItemsGroup as $ComparisonItemsGroup) {
|
|
foreach($ComparisonItemsGroup->FlexibleComparisonItem as $FlexibleComparisonItem) {
|
|
$name = str_replace(' ', '_', str_replace('\'', '', $FlexibleComparisonItem->ItemName->_));
|
|
if(!isset($this->report->DataSet->Company->ComparaisonValeurs[$name]['date'])) {
|
|
$this->report->DataSet->Company->ComparaisonValeurs[$name]['date'] = $date->dateT('Ymd', 'd/m/Y', $ComparisonItemsGroup->Period->EndDate->_);}
|
|
if(!isset($this->report->DataSet->Company->ComparaisonValeurs[$name]['current'])){
|
|
$this->report->DataSet->Company->ComparaisonValeurs[$name]['current'] = $FlexibleComparisonItem->SubjectValue;}
|
|
if(!isset($this->report->DataSet->Company->ComparaisonValeurs[$name]['entreprise'])){
|
|
$this->report->DataSet->Company->ComparaisonValeurs[$name]['entreprise'] = $FlexibleComparisonItem->AverageValue;}
|
|
if($date->dateT('Ymd', 'd/m/Y', $ComparisonItemsGroup->Period->EndDate->_) != $this->report->DataSet->Company->ComparaisonValeurs[$name]['date']){
|
|
$this->report->DataSet->Company->ComparaisonValeurs[$name]['old'][$date->dateT('Ymd', 'd/m/Y', $ComparisonItemsGroup->Period->EndDate->_)][] = $FlexibleComparisonItem;}}}
|
|
break;
|
|
case 'AmountAdvisedComparison':
|
|
foreach($PeerGroup->AmountAdvisedComparison as $AmountAdvisedComparison) {
|
|
$std = new stdClass();
|
|
$std->description = $AmountAdvisedComparison->Description->_;
|
|
$std->ComparisonFigures = $AmountAdvisedComparison->ComparisonFigures;
|
|
$this->report->DataSet->Company->AmountAdvisedComparison = $std;
|
|
}
|
|
break;
|
|
case 'ProviderRatingComparison':
|
|
foreach($PeerGroup->AmountAdvisedComparison as $ProviderRatingComparison) {
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function createGraphique($name, $labels, $entreprise, $secteur)
|
|
{
|
|
if(!file_exists($this->pathImg.'-'.$name.'.png')) {
|
|
$c = new XYChart(400, 170);
|
|
$c->setPlotArea(50, 20, 300, 120);
|
|
|
|
$legendObj = $c->addLegend(110, -5, false, "arialbd.ttf", 9);
|
|
$legendObj->setBackground(Transparent);
|
|
|
|
$layer = $c->addLineLayer2();
|
|
$layer->setLineWidth(1);
|
|
$layer->addDataSet($entreprise, 0xFF0004, 'Entreprise');
|
|
$layer->addDataSet($secteur, 0x2E00FF, 'Secteur');
|
|
|
|
$c->xAxis->setLabels($labels);
|
|
$c->xAxis->setLabelStep(1);
|
|
$c->makeChart($this->pathImg.'-'.$name.'.png');
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
|
|
class ComportementPaiement
|
|
{
|
|
private $report;
|
|
private $pathImg;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->report = $report;
|
|
$this->pathImg = $pathImg;
|
|
$this->generateStructure();
|
|
$this->createGraphique('ComportementPaiement');
|
|
$this->createGraphiqueByAmount('ComportementPaiementByAmount');
|
|
}
|
|
|
|
public function generateStructure()
|
|
{
|
|
$date = new WDate();
|
|
if(isset($this->report->DataSet->Company->PaymentBehaviour)) {
|
|
foreach($this->report->DataSet->Company->PaymentBehaviour as $PaymentBehaviour) {
|
|
if(isset($PaymentBehaviour->AnalysisByPeriod->Category)) {
|
|
foreach($PaymentBehaviour->AnalysisByPeriod->Category as $period) {
|
|
foreach($period->DueDateExceeds as $DueDateExceeds) {
|
|
$this->report->DataSet->Company->
|
|
ComportementPaiement[$date->dateT('Ymd', 'd/m/Y', $period->Period->StartDate->_).':'.$date->dateT('Ymd', 'd/m/Y', $period->Period->EndDate->_)][$DueDateExceeds->NrOfDaysExceeds->LowerLimit->_.':'.$DueDateExceeds->NrOfDaysExceeds->UpperLimit->_] =
|
|
$DueDateExceeds->Percentage;
|
|
}
|
|
}
|
|
}
|
|
if(isset($PaymentBehaviour->AnalysisByAmount->Category)) {
|
|
foreach($PaymentBehaviour->AnalysisByAmount->Category as $Amount) {
|
|
foreach($Amount->DueDateExceeds as $AmountExceeds) {
|
|
$index = ((isset($Amount->AmountCategory->LowerLimit->_))?$Amount->AmountCategory->LowerLimit->_:'0').
|
|
':'.(isset($Amount->AmountCategory->HigherLimit->_)?$Amount->AmountCategory->HigherLimit->_:'0');
|
|
$this->report->DataSet->Company->ByAmount[$index][$AmountExceeds->NrOfDaysExceeds->LowerLimit->_.':'.$AmountExceeds->NrOfDaysExceeds->UpperLimit->_] = $AmountExceeds->Percentage;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return (false);
|
|
}
|
|
|
|
|
|
public function createGraphique($nameImg)
|
|
{
|
|
if(!file_exists($this->pathImg.'-'.$nameImg.'.png')) {
|
|
# The data for the chart
|
|
if(isset($this->report->DataSet->Company->ComportementPaiement)) {
|
|
foreach($this->report->DataSet->Company->ComportementPaiement as $date => $ComportementPaiement) {
|
|
$date = explode(':', $date);
|
|
$dates = explode('/', $date[1]);
|
|
$labels[] = $dates[1].'/'.$dates[2];
|
|
foreach($ComportementPaiement as $name => $element) {
|
|
if(max($ComportementPaiement) == $element) {
|
|
$name = explode(':', $name);
|
|
$datas[] = $name[0];
|
|
}
|
|
}
|
|
}
|
|
$data = array_reverse($datas);
|
|
$labels = array_reverse($labels);
|
|
$c = new XYChart(600, 300, 0xffffc0, 0x000000, 1);
|
|
$c->setSearchPath(dirname(__FILE__));
|
|
$plotAreaObj = $c->setPlotArea(95, 50, 420, 205, 0xffffff);
|
|
$plotAreaObj->setGridColor(0xc0c0c0, 0xc0c0c0);
|
|
$legendBox = $c->addLegend(55, 25, false, "", 8);
|
|
$legendBox->setBackground(Transparent);
|
|
$legendBox->addKey("Normal", 0x8033ff33);
|
|
$legendBox->addKey("Attention", 0x80ff8f0f);
|
|
$legendBox->addKey("Critique", 0x80ff3333);
|
|
$textBoxObj = $c->addTitle(
|
|
"<*block,valign=absmiddle*><*img=star.png*><*img=star.png*> Jours ".
|
|
"<*img=star.png*><*img=star.png*><*/*>", "arialbi.ttf", 13, 0xffffff);
|
|
$textBoxObj->setBackground(0x000000, -1, 1);
|
|
$c->yAxis->setTitle("Jours");
|
|
$c->xAxis->setLabels($labels);
|
|
$c->xAxis->setLabelStep(1);
|
|
$c->xAxis->setTitle(
|
|
"<*block,valign=absmiddle*><*img=clock.png*> Dates<*/*>");
|
|
$c->xAxis->setWidth(2);
|
|
$c->yAxis->setWidth(2);
|
|
$markObj = $c->yAxis->addMark(30, 0x80ff8f0f, "Attention = 30");
|
|
$markObj->setLineWidth(1);
|
|
$markObj = $c->yAxis->addMark(60, 0x80ff3333, "Critique = 60");
|
|
$markObj->setLineWidth(1);
|
|
$c->addAreaLayer($data, $c->yZoneColor(30, 0x8033ff33, 0x80ff8f0f));
|
|
$c->addAreaLayer($data, $c->yZoneColor(60, 0x80ff8f0f, 0x80ff3333));
|
|
$textBoxObj = $c->addText(475, 255,
|
|
"<*block,valign=absmiddle*><*img=small_molecule.png*> <*block*>".
|
|
"<*font=timesbi.ttf,size=10,color=804040*>Scores et decisions<*/*>");
|
|
$textBoxObj->setAlignment(BottomRight);
|
|
$c->makeChart($this->pathImg.'-'.$nameImg.'.png');
|
|
}
|
|
}
|
|
}
|
|
|
|
public function createGraphiqueByAmount($nameImg)
|
|
{
|
|
if(!file_exists($this->pathImg.'-'.$nameImg.'.png')) {
|
|
if(isset($this->report->DataSet->Company->ByAmount)) {
|
|
foreach($this->report->DataSet->Company->ByAmount as $sommes => $ByAmount) {
|
|
$somme = explode(':', $sommes);
|
|
$labels[] = round($somme[0]/1000).'-'.round($somme[1]/1000).'K€';
|
|
foreach($ByAmount as $name => $element) {
|
|
if(max($ByAmount) == $element) {
|
|
$name = explode(':', $name);
|
|
$data[] = $name[0];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
$colors = array(0xcc0000, 0x66aaee, 0xeebb22, 0xcccccc, 0xcc88ff);
|
|
$c = new XYChart(600, 340);
|
|
$c->setColors($whiteOnBlackPalette);
|
|
$c->setBackground(0xffffff);
|
|
$c->setPlotArea(70, 50, 480, 240, -1, -1, Transparent, 0xe2e2e2);
|
|
$c->swapXY();
|
|
$barLayerObj = $c->addBarLayer3($data, $colors);
|
|
$barLayerObj->setBorderColor(Transparent, barLighting(0.75, 2.0));
|
|
$c->xAxis->setLabels($labels);
|
|
$c->syncYAxis();
|
|
$c->yAxis->setTitle("Jours", "arialbd.ttf", 10);
|
|
$c->yAxis->setColors(Transparent);
|
|
$c->yAxis2->setColors(Transparent);
|
|
$c->xAxis->setTickColor(Transparent);
|
|
$c->xAxis->setLabelStyle("arialbd.ttf", 8);
|
|
$c->yAxis->setLabelStyle("arialbd.ttf", 8);
|
|
$c->yAxis2->setLabelStyle("arialbd.ttf", 8);
|
|
$c->makeChart($this->pathImg.'-'.$nameImg.'.png');
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
|
|
class ComptesAnnuels
|
|
{
|
|
|
|
private $report;
|
|
private $pathImg;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->pathImg = $pathImg;
|
|
$this->report = $report;
|
|
$this->formatDate($report);
|
|
$this->report->DataSet->Company->Assets = new stdClass();
|
|
$this->report->DataSet->Company->Assets->TotalAssets = $this->bilans('Assets', 'TotalAssets');
|
|
$this->report->DataSet->Company->Assets->TotalFixedAssets = $this->bilans('Assets', 'FixedAssets:TotalFixedAssets', true);
|
|
$this->report->DataSet->Company->Assets->FixedAssets = $this->bilans('Assets', 'FixedAssets:TotalIntangibleAssets', true);
|
|
$this->report->DataSet->Company->Assets->TotalIntangibleAssets = $this->bilans('Assets', 'FixedAssets:TotalTangibleAssets', true);
|
|
$this->report->DataSet->Company->Assets->TotalFinancialAssets = $this->bilans('Assets', 'FixedAssets:TotalFinancialAssets', true);
|
|
$this->report->DataSet->Company->Assets->RawMaterialsAndSupplies = $this->bilans('Assets', 'CurrentAssets:RawMaterialsAndSupplies', true);
|
|
$this->report->DataSet->Company->Assets->Inventories = $this->bilans('Assets', 'CurrentAssets:Inventories', true);
|
|
$this->report->DataSet->Company->Assets->TotalReceivables = $this->bilans('Assets', 'CurrentAssets:TotalReceivables', true);
|
|
$this->report->DataSet->Company->Assets->CashBankSecurities = $this->bilans('Assets', 'CurrentAssets:CashBankSecurities', true);
|
|
$this->report->DataSet->Company->Assets->OtherCurrentAssets = $this->bilans('Assets', 'CurrentAssets:OtherCurrentAssets', true);
|
|
$this->report->DataSet->Company->Assets->TotalCurrentAssets = $this->bilans('Assets', 'CurrentAssets:TotalCurrentAssets', true);
|
|
|
|
$this->report->DataSet->Company->Liabilities = new stdClass();
|
|
$this->report->DataSet->Company->Liabilities->TotalLiabilities = $this->bilans('Liabilities', 'TotalLiabilities');
|
|
$this->report->DataSet->Company->Liabilities->TotalEquity = $this->bilans('Liabilities', 'ShareholdersFunds:TotalEquity', true);
|
|
$this->report->DataSet->Company->Liabilities->EquityCapital = $this->bilans('Liabilities', 'ShareholdersFunds:EquityCapital', true);
|
|
$this->report->DataSet->Company->Liabilities->SurplusEquity = $this->bilans('Liabilities', 'ShareholdersFunds:SurplusEquity', true);
|
|
$this->report->DataSet->Company->Liabilities->ProfitAndLossAccount = $this->bilans('Liabilities', 'ShareholdersFunds:ProfitAndLossAccount', true);
|
|
$this->report->DataSet->Company->Liabilities->LongTermDeferredTaxes = $this->bilans('Liabilities', 'LongTermLiabilities:LongTermDeferredTaxes', true);
|
|
$this->report->DataSet->Company->Liabilities->AccumulatedDepreciation = $this->bilans('Liabilities', 'LongTermLiabilities:AccumulatedDepreciation', true);
|
|
$this->report->DataSet->Company->Liabilities->OtherLongTermLiabilities = $this->bilans('Liabilities', 'LongTermLiabilities:OtherLongTermLiabilities', true);
|
|
$this->report->DataSet->Company->Liabilities->TotalLongTermLiabilities = $this->bilans('Liabilities', 'LongTermLiabilities:TotalLongTermLiabilities', true);
|
|
$this->report->DataSet->Company->Liabilities->TradeCreditors = $this->bilans('Liabilities', 'CurrentLiabilities:TradeCreditors', true);
|
|
$this->report->DataSet->Company->Liabilities->DueToBanks = $this->bilans('Liabilities', 'CurrentLiabilities:DueToBanks', true);
|
|
$this->report->DataSet->Company->Liabilities->ShortTermLiabilities = $this->bilans('Liabilities', 'CurrentLiabilities:ShortTermLiabilities', true);
|
|
$this->report->DataSet->Company->Liabilities->Provisions = $this->bilans('Liabilities', 'CurrentLiabilities:Provisions', true);
|
|
$this->report->DataSet->Company->Liabilities->OtherShortTermLiabilities = $this->bilans('Liabilities', 'CurrentLiabilities:OtherShortTermLiabilities', true);
|
|
$this->report->DataSet->Company->Liabilities->TotalShortTermLiabilities = $this->bilans('Liabilities', 'Other:WorkingCapital', true);
|
|
|
|
$this->report->DataSet->Company->ProfitAndLoss = new stdClass();
|
|
$this->report->DataSet->Company->ProfitAndLoss->NetSales = $this->bilans('ProfitAndLoss', 'NetSales', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->NetIncomeLossOfTheYear = $this->bilans('ProfitAndLoss', 'NetIncomeLossOfTheYear', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->GrossProfit = $this->bilans('ProfitAndLoss', 'GrossProfit', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->OperatingResult = $this->bilans('ProfitAndLoss', 'OperatingResult', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->ResultsOfOrdinaryOperations = $this->bilans('ProfitAndLoss', 'ResultsOfOrdinaryOperations', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->NetProfitBeforeTaxes = $this->bilans('ProfitAndLoss', 'NetProfitBeforeTaxes', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->FinancialCharges = $this->bilans('ProfitAndLoss', 'FinancialCharges', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->Depreciation = $this->bilans('ProfitAndLoss', 'Depreciation', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->Purchases = $this->bilans('ProfitAndLoss', 'Purchases', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->WagesAndSalaries = $this->bilans('ProfitAndLoss', 'WagesAndSalaries', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->FinancialIncome = $this->bilans('ProfitAndLoss', 'FinancialIncome', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->Tax = $this->bilans('ProfitAndLoss', 'Tax', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->ExtraordinaryItems = $this->bilans('ProfitAndLoss', 'ExtraordinaryItems', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->NetSales = $this->bilans('ProfitAndLoss', 'NetSales', false, 'ProfitAndLoss');
|
|
$this->report->DataSet->Company->ProfitAndLoss->NetSales = $this->bilans('ProfitAndLoss', 'NetSales', false, 'ProfitAndLoss');
|
|
|
|
$this->report->DataSet->Company->KeyCreditRatios = new stdClass();
|
|
$this->report->DataSet->Company->KeyCreditRatios->Leverage = $this->bilans('KeyCreditRatios', 'Leverage', false, 'KeyCreditRatios');
|
|
$this->report->DataSet->Company->KeyCreditRatios->QuickRatio = $this->bilans('KeyCreditRatios', 'QuickRatio', false, 'KeyCreditRatios');
|
|
$this->report->DataSet->Company->KeyCreditRatios->CurrentRatio = $this->bilans('KeyCreditRatios', 'CurrentRatio', false, 'KeyCreditRatios');
|
|
$this->report->DataSet->Company->KeyCreditRatios->InterestCover = $this->bilans('KeyCreditRatios', 'InterestCover', false, 'KeyCreditRatios');
|
|
$this->report->DataSet->Company->KeyCreditRatios->Gearing = $this->bilans('KeyCreditRatios', 'Gearing', false, 'KeyCreditRatios');
|
|
$this->generateDatasForGraphique($this->report);
|
|
}
|
|
|
|
public function createGraphiqueLine($name, $datas)
|
|
{
|
|
if(!file_exists($this->pathImg.'-'.$name.'-line.png')) {
|
|
foreach($datas as $date => $valeur) {
|
|
$labels[] = $date;
|
|
$data[] = $valeur;
|
|
}
|
|
if(!empty($data))
|
|
$data = array_reverse($data);
|
|
if(!empty($labels))
|
|
$labels = array_reverse($labels);
|
|
$c = new XYChart(400, 170);
|
|
$c->setPlotArea(50, 20, 300, 120);
|
|
|
|
$legendObj = $c->addLegend(110, -5, false, "arialbd.ttf", 9);
|
|
$legendObj->setBackground(Transparent);
|
|
|
|
$layer = $c->addLineLayer2();
|
|
$layer->setLineWidth(1);
|
|
$layer->addDataSet($data, 0xFF0004, 'Valeurs');
|
|
$c->xAxis->setLabels($labels);
|
|
$c->xAxis->setLabelStep(1);
|
|
$c->makeChart($this->pathImg.'-'.str_replace(' ', '', $name).'-line.png');
|
|
}
|
|
}
|
|
|
|
public function createBilanGraphique($name, $datas, $labels, $width = 590, $height = 270)
|
|
{
|
|
if(!file_exists($this->pathImg.'-'.$name.'.png')) {
|
|
$c = new PieChart($width, $height);
|
|
$c->setPieSize(150, 135, 100);
|
|
$c->addLegend(340, 60);
|
|
$c->setLabelFormat("{percent}%");
|
|
$c->setData($datas, $labels);
|
|
$c->setSectorStyle(RoundedEdgeShading, 0xffffff, 1);
|
|
$c->makeChart($this->pathImg.'-'.$name.'.png');
|
|
}
|
|
}
|
|
|
|
public function generateDatasForGraphique($result)
|
|
{
|
|
$parametres = new stdClass();
|
|
$actifLabel = array('FixedAssets', 'TotalIntangibleAssets', 'TotalFinancialAssets', 'RawMaterialsAndSupplies', 'Inventories', 'CashBankSecurities', 'OtherCurrentAssets');
|
|
$actifDatas = array(
|
|
$result->DataSet->Company->Assets->FixedAssets[key($result->DataSet->Company->Assets->FixedAssets)],
|
|
$result->DataSet->Company->Assets->TotalIntangibleAssets[key($result->DataSet->Company->Assets->TotalIntangibleAssets)],
|
|
$result->DataSet->Company->Assets->TotalFinancialAssets[key($result->DataSet->Company->Assets->TotalFinancialAssets)],
|
|
$result->DataSet->Company->Assets->RawMaterialsAndSupplies[key($result->DataSet->Company->Assets->RawMaterialsAndSupplies)],
|
|
$result->DataSet->Company->Assets->Inventories[key($result->DataSet->Company->Assets->Inventories)],
|
|
$result->DataSet->Company->Assets->CashBankSecurities[key($result->DataSet->Company->Assets->CashBankSecurities)],
|
|
$result->DataSet->Company->Assets->OtherCurrentAssets[key($result->DataSet->Company->Assets->OtherCurrentAssets)]
|
|
);
|
|
|
|
$passifLabel = array('EquityCapital', 'SurplusEquity', 'ProfitAndLossAccount', 'LongTermDeferredTaxes', 'AccumulatedDepreciation', 'OtherLongTermLiabilities',
|
|
'TotalLongTermLiabilities', 'TradeCreditors', 'DueToBanks', 'ShortTermLiabilities', 'Provisions', 'OtherShortTermLiabilities', 'TotalShortTermLiabilities');
|
|
$passifDatas = array(
|
|
$result->DataSet->Company->Liabilities->EquityCapital[key($result->DataSet->Company->Liabilities->EquityCapital)],
|
|
$result->DataSet->Company->Liabilities->SurplusEquity[key($result->DataSet->Company->Liabilities->SurplusEquity)],
|
|
$result->DataSet->Company->Liabilities->ProfitAndLossAccount[key($result->DataSet->Company->Liabilities->ProfitAndLossAccount)],
|
|
$result->DataSet->Company->Liabilities->LongTermDeferredTaxes[key($result->DataSet->Company->Liabilities->LongTermDeferredTaxes)],
|
|
$result->DataSet->Company->Liabilities->AccumulatedDepreciation[key($result->DataSet->Company->Liabilities->AccumulatedDepreciation)],
|
|
$result->DataSet->Company->Liabilities->OtherLongTermLiabilities[key($result->DataSet->Company->Liabilities->OtherLongTermLiabilities)],
|
|
$result->DataSet->Company->Liabilities->TotalLongTermLiabilities[key($result->DataSet->Company->Liabilities->TotalLongTermLiabilities)],
|
|
$result->DataSet->Company->Liabilities->TradeCreditors[key($result->DataSet->Company->Liabilities->TradeCreditors)],
|
|
$result->DataSet->Company->Liabilities->DueToBanks[key($result->DataSet->Company->Liabilities->DueToBanks)],
|
|
$result->DataSet->Company->Liabilities->ShortTermLiabilities[key($result->DataSet->Company->Liabilities->ShortTermLiabilities)],
|
|
$result->DataSet->Company->Liabilities->Provisions[key($result->DataSet->Company->Liabilities->Provisions)],
|
|
$result->DataSet->Company->Liabilities->OtherShortTermLiabilities[key($result->DataSet->Company->Liabilities->OtherShortTermLiabilities)],
|
|
$result->DataSet->Company->Liabilities->TotalShortTermLiabilities[key($result->DataSet->Company->Liabilities->TotalShortTermLiabilities)]
|
|
);
|
|
|
|
$profitandlossLabel = array('NetSales', 'NetIncomeLossOfTheYear', 'GrossProfit', 'OperatingResult', 'ResultsOfOrdinaryOperations', 'NetProfitBeforeTaxes',
|
|
'FinancialCharges', 'Depreciation', 'Purchases', 'WagesAndSalaries', 'FinancialIncome', 'Tax', 'ExtraordinaryItems');
|
|
$lossDatas = array('NetSales', 'NetIncomeLossOfTheYear', 'GrossProfit', 'OperatingResult', 'ResultsOfOrdinaryOperations', 'NetProfitBeforeTaxes',
|
|
'FinancialCharges', 'Depreciation', 'Purchases', 'WagesAndSalaries', 'FinancialIncome', 'Tax', 'ExtraordinaryItems');
|
|
foreach($lossDatas as $profitandlossData) {
|
|
if(isset($result->DataSet->Company->ProfitAndLoss->$profitandlossData))
|
|
$Datas[] = $result->DataSet->Company->ProfitAndLoss->{$profitandlossData}[key($result->DataSet->Company->ProfitAndLoss->$profitandlossData)];
|
|
else
|
|
$Datas[] = 0;
|
|
}
|
|
$profitandlossDatas = $Datas;
|
|
$this->createBilanGraphique('actifs', $actifDatas, $actifLabel);
|
|
$this->createBilanGraphique('passifs', $passifDatas, $passifLabel, 590, 310);
|
|
$this->createBilanGraphique('profitandloss', $profitandlossDatas, $profitandlossLabel, 590, 310);
|
|
}
|
|
|
|
public function bilans($type, $name, $lvl = false, $BalanceSheet = 'BalanceSheet')
|
|
{
|
|
if($lvl){$explode = explode(':', $name);$name=$explode[0];}
|
|
foreach($this->report->DataSet->Company->AnnualAccounts as $AnnualAccounts) {
|
|
foreach($AnnualAccounts->HarmonizedAnnualAccounts->{$BalanceSheet} as $bilan => $HarmonizedAnnualAccounts) {
|
|
if ($BalanceSheet == 'BalanceSheet') {
|
|
if ($bilan == $type) {
|
|
foreach($HarmonizedAnnualAccounts as $element => $valeur) {
|
|
if ($element == $name) {
|
|
($lvl)?$bilans[$AnnualAccounts->AccountsDate->_] =
|
|
$valeur->$explode[1]->_/1000:
|
|
$bilans[$AnnualAccounts->AccountsDate->_] = $valeur->_/1000; } } }
|
|
} else {
|
|
if($bilan == $name) {
|
|
(!$BalanceSheet == 'KeyCreditRatios')?$div=1000:$div=1;
|
|
$bilans[$AnnualAccounts->AccountsDate->_] = $HarmonizedAnnualAccounts->_/$div; } } } }
|
|
$name = ($lvl)?$explode[1]:$name;
|
|
$this->createGraphiqueLine($name, $bilans);
|
|
return $bilans;
|
|
}
|
|
|
|
public function formatDate($report)
|
|
{
|
|
$date = new WDate();
|
|
$function = new GiantFunction();
|
|
for ($i = 0; $i < count($this->report->DataSet->Company->AnnualAccounts); $i++) {
|
|
if(isset($this->report->DataSet->Company->AnnualAccounts[$i]->AccountsDate->_)) {
|
|
$this->report->DataSet->Company->AnnualAccounts[$i]->AccountsDate->_ = $date->dateT(
|
|
$function->getFormatDate($this->report->DataSet->Company->AnnualAccounts[$i]->AccountsDate->format), 'd/m/Y',
|
|
$this->report->DataSet->Company->AnnualAccounts[$i]->AccountsDate->_);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
|
|
class Dirigeant {
|
|
|
|
private $report;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->report = $report;
|
|
$this->generateStructure();
|
|
}
|
|
|
|
public function generateStructure()
|
|
{
|
|
$date = new WDate();
|
|
foreach($this->report->DataSet->Company->Position as $Position) {
|
|
$this->report->DataSet->Company->Dirigeant[$Position->PositionTitle->code][$date->dateT('Ymd', 'd/m/Y', $Position->Period->StartDate->_).':'.$date->dateT('Ymd', 'd/m/Y',$Position->Period->EndDate->_)][] = $Position->Person;
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
|
|
class Historiques
|
|
{
|
|
private $report;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->report = $report;
|
|
if(isset($this->report->DataSet->Company->Event))
|
|
$this->generateStructure();
|
|
}
|
|
|
|
public function generateStructure()
|
|
{
|
|
$myEvent = array();
|
|
$function = new GiantFunction();
|
|
foreach($this->report->DataSet->Company->Event as $events) {
|
|
$std = new stdClass();
|
|
$std->EventCode = $events->EventCode;
|
|
$std->Description = $events->Description->_;
|
|
$std->FreeText = $events->FreeText->_;
|
|
$std->Date = $function->setDate($events->Date->_, $events->Date->format);
|
|
$std->Format = $events->Date->format;
|
|
$myEvent[$events->Source->_][$events->Date->_][] = $std;
|
|
unset ($std);
|
|
}
|
|
$this->report->DataSet->Company->Event = $myEvent;
|
|
foreach($this->report->DataSet->Company->Event as $name => $event) {
|
|
ksort($this->report->DataSet->Company->Event[$name]);
|
|
$this->report->DataSet->Company->Event[$name] = array_reverse($this->report->DataSet->Company->Event[$name], true);
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
|
|
class InformationGenerale
|
|
{
|
|
private $report;
|
|
private $block = array('block1' => array('CompanyName', 'Vat',
|
|
'LegalForm', 'IncorporationDate',
|
|
'CompanyStatus', 'CompanyId'
|
|
),
|
|
'block2' => array('TelephoneNumber', 'Telefax',
|
|
'EmailAddress', 'WebAddress',
|
|
'Address'
|
|
));
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$function = new GiantFunction();
|
|
if(isset($report)) {
|
|
$this->report = $report->DataSet->Company;
|
|
$this->report->Vat = $this->report->Vat->VatNumber;
|
|
$this->report->CompanyName = $this->report->CompanyName[0]->_;
|
|
$this->report->CompanyAddress = $this->report->CompanyAddress[0]->HouseNumber.' '.$this->report->CompanyAddress[0]->Street.' - '.$this->report->CompanyAddress[0]->PostCode.' '.$this->report->CompanyAddress[0]->City;
|
|
$this->report->TelephoneNumber = $this->report->TelephoneNumber[0]->_;
|
|
$this->report->Telefax = $this->report->Telefax[0];
|
|
$this->report->IncorporationDate = $function->setDate($this->report->IncorporationDate->_, $this->report->IncorporationDate->format);
|
|
$this->report->UnifiedLegalForm = $this->report->LegalForm[0]->UnifiedLegalForm;
|
|
$this->report->LegalForm = $this->report->LegalForm[0]->CountryLegalForm->_;
|
|
$this->report->WebAddress = '<a href="http://'.$this->report->WebAddress.'">'.$this->report->WebAddress.'</a>';
|
|
$this->report->EmailAddress = '<a href="mailto:'.$this->report->EmailAddress.'">'.$this->report->EmailAddress.'</a>';
|
|
$this->report->activity = $this->getActivity($this->report->Operations);
|
|
$this->report->Employees = $this->getEmployees($this->report->Employees);
|
|
$this->report->ProductName = $this->report->Operations->ProductName;
|
|
//$this->report->ValideNumber = GiantFunction::checkVat(substr($this->report->Vat, 2), $request->getParam('Pays'));
|
|
$this->generateStructur();
|
|
}
|
|
}
|
|
|
|
public function getEmployees($Employees)
|
|
{
|
|
$employees = array();
|
|
if(isset($Employees)) {
|
|
foreach($Employees as $employed) {
|
|
$employees[$employed->Period->StartDate->_] =
|
|
array('TotalStaffEmployed' => (empty($employed->TotalStaffEmployed))?'NC':$employed->TotalStaffEmployed,
|
|
'FulltimeEquivalent' => (empty($employed->FulltimeEquivalent))?'NC':$employed->FulltimeEquivalent);
|
|
}
|
|
return ($employees);
|
|
}
|
|
}
|
|
|
|
public function getActivity($Operations)
|
|
{
|
|
$activity = array();
|
|
if(isset($Operations->IndustryCode)) {
|
|
foreach($Operations->IndustryCode as $operation) {
|
|
$activity = array_merge(
|
|
array((empty($operation->NaceCode))?'NC':' '.$operation->NaceCode => (empty($operation->Description->_))?'NC':$operation->Description->_), $activity);
|
|
}
|
|
}
|
|
return ($activity);
|
|
}
|
|
|
|
public function generateStructur()
|
|
{
|
|
foreach($this->block as $elements) {
|
|
foreach($elements as $element) {
|
|
if(empty ($this->report->$element))
|
|
$this->report->$element = 'N/C';
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
|
|
}
|
|
|
|
class PositionFinanciere
|
|
{
|
|
private $report;
|
|
private $labelDate = array();
|
|
private $color = array(0x808080ff, 0x80ff0000, 0x8000ff00, 0x80FF16EB, 0x801900FF, 0x80EEFF02, 0x8033D6C8);
|
|
private $pathImg;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->pathImg = $pathImg;
|
|
$this->report = $report;
|
|
$this->generateStructure();
|
|
$this->createGraphique();
|
|
}
|
|
|
|
public function createGraphique()
|
|
{
|
|
if(!file_exists($this->pathImg.'-positionFinanciere.png')) {
|
|
# The data for the area chart
|
|
foreach($this->report->DataSet->Company->PositionFinanciere as $name => $element) {
|
|
if($name == 'AuthorizedCapital' or $name == 'IssuedCapital' or $name == 'WorkingCapital') {
|
|
foreach($element as $item) {
|
|
$data[$name][] = ($item < 0)?0:$item;
|
|
}
|
|
}
|
|
}
|
|
foreach($this->labelDate as $date => $val) {
|
|
$labels[] = $date;
|
|
}
|
|
$labels = array_reverse($labels);
|
|
$c = new XYChart(500, 270);
|
|
$c->setPlotArea(70, 70, 350, 150);
|
|
$legendObj = $c->addLegend(55, 0, false, "", 8);
|
|
$legendObj->setBackground(Transparent);
|
|
$c->xAxis->setTitle("Années");
|
|
$c->yAxis->setTitle("Euros");
|
|
$c->xAxis->setLabels($labels);
|
|
//$c->xAxis->setLabelStep(2, 1);
|
|
foreach($data as $name => $val) {
|
|
$val = array_reverse($val);
|
|
$key = array_rand($this->color);
|
|
$c->addAreaLayer($val, $this->color[$key], $name, 3);
|
|
}
|
|
$c->makeChart($this->pathImg.'-positionFinanciere.png');
|
|
}
|
|
}
|
|
|
|
public function generateStructure()
|
|
{
|
|
$dateFunction = new WDate();
|
|
|
|
foreach($this->report->DataSet->Company->FinancialSummary as $FinancialSummary) {
|
|
foreach($FinancialSummary as $name => $valeur) {
|
|
if($name != 'SummaryDate' and $name != 'AccountStatus' and $name != 'Unit') {
|
|
(($FinancialSummary->Unit == 1)?$unit=1000:$unit=1);
|
|
$date = (strlen($FinancialSummary->SummaryDate->_) == 8 )?$dateFunction->dateT('Ymd', 'd/m/Y', $FinancialSummary->SummaryDate->_):$FinancialSummary->SummaryDate->_;
|
|
$return[$name][$date] = number_format ($valeur->_/$unit, 0, '', ' ').(($unit==1000)?' K€':' €');
|
|
$this->labelDate[$date] = true;
|
|
}
|
|
}
|
|
}
|
|
$this->report->DataSet->Company->PositionFinanciereDate = $this->labelDate;
|
|
$this->report->DataSet->Company->PositionFinanciere = $return;
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
|
|
class StructureEntreprise
|
|
{
|
|
private $report;
|
|
|
|
public function __construct($report, $pathImg)
|
|
{
|
|
$this->report = $report;
|
|
$this->generatestructure();
|
|
}
|
|
|
|
public function generatestructure()
|
|
{
|
|
foreach($this->report->DataSet->Company->Associated as $Associated) {
|
|
if($Associated->RelationShip == 'Shareholder' ) {
|
|
$this->report->DataSet->Company->Shareholder[] = $Associated;
|
|
}
|
|
if($Associated->RelationShip == 'Participation') {
|
|
$this->report->DataSet->Company->Participation[] = $Associated;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getDatas()
|
|
{
|
|
return ($this->report);
|
|
}
|
|
}
|
|
?>
|