Bonjour,
Voila je rencontre un petit problème avec mon code.
j'ai créé deux services
class Chart
{
const ANIMATION_STARTUP = true;
const ANIMATION_DURATION = 1000;
const CHART_AREA_HEIGHT = '80%';
const CHART_AREA_WIDTH = '80%';
private $chartData;
public function __construct(ChartData $chartData)
{
$this->chartData = $chartData;
}
/**
* Crée le graphique du montant des bénéfices par année.
*
* @return ComboChart
* @throws \Exception
*/
public function amountByYear()
{
$arrayToDataTable = $this->chartData->dataAmountByYear();
$chart = new ComboChart();
$chart->getData()->setArrayToDataTable($arrayToDataTable);
$chart->getOptions()->getAnimation()->setStartup(self::ANIMATION_STARTUP);
$chart->getOptions()->getAnimation()->setDuration(self::ANIMATION_DURATION);
$chart->getOptions()->getChartArea()->setHeight(self::CHART_AREA_HEIGHT);
$chart->getOptions()->getChartArea()->setWidth(self::CHART_AREA_WIDTH);
$vAxisAmount = new VAxis();
$vAxisAmount->setTitle('Montant en €');
$vAxisEvol = new VAxis();
$vAxisEvol->setTitle('Evolution en %');
$chart->getOptions()->setVAxes([$vAxisAmount, $vAxisEvol]);
$seriesAmount = new \CMEN\GoogleChartsBundle\GoogleCharts\Options\ComboChart\Series();
$seriesAmount->setType('bars');
$seriesAmount->setTargetAxisIndex(0);
$seriesEvol = new \CMEN\GoogleChartsBundle\GoogleCharts\Options\ComboChart\Series();
$seriesEvol->setType('line');
$seriesEvol->setTargetAxisIndex(1);
$chart->getOptions()->setSeries([$seriesAmount, $seriesEvol]);
$chart->getOptions()->getHAxis()->setTitle('Année');
$chart->getOptions()->setColors(['##660099', '#759e1a']);
return $chart;
}
class ChartData
{
private $em;
public function __construct(ObjectManager $em)
{
$this->em = $em;
}
private function formatMoney($amount)
{
return number_format($amount, 2, ',', ' ');
}
/**
* Récupère et organise les données pour le graphique des chiffre d'affaire par année.
*
* @return array
* @throws \Exception
*/
public function dataAmountByYear()
{
$turnoverInYear=0;
$stats=array();
$commandes = $this->em->getRepository('CeCommandeBundle:Commande')->getWithyearUserAndZone();
foreach($commandes as $cmd){
$stats[(int)$cmd->getDateCommande()->format('Y') - 1] += 1;
$turnoverInYear+= $cmd->getTotal();
}
$arrayToDataTable[] = ['Année', 'Montant', ['role' => 'tooltip'], 'Evolution', ['role' => 'tooltip']];
$previousAmount = 0;
foreach ($stats as $stat) {
if ($previousAmount != 0) {
$evolution = round((($stat['amount'] * 100) / $previousAmount) - 100, 2);
} else {
$evolution = 0;
}
$previousAmount = $stat['amount'];
$tooltipAmount = $this->formatMoney($stat['amount']) . '€';
$tooltipEvol = "$evolution %";
$arrayToDataTable[] = [$stat['date'], floatval($stat['amount']), $tooltipAmount, $evolution, $tooltipEvol];
}
return $arrayToDataTable;
}
public function getWithyearUserAndZone()
{
$qb = $this
->createQueryBuilder('c')
->leftJoin('c.user', 'usr')
->leftJoin('c.zoneLivraison', 'z')
->orderBy('c.dateCommande', 'DESC')
->addSelect('usr')
->addSelect('z')
->addSelect('YEAR(c.dateCommande) as year')
->addSelect('MONTH(c.dateCommande) as month')
->addSelect('DAY(c.dateCommande) as day')
->groupBy('year')
->addgroupBy('month')
->addgroupBy('day')
->orderBy('c.dateCommande', 'DESC');
return $qb
->getQuery()
->getResult();
}
public function chartAction()
{
$chart = $this->get('app.chart');
return $this->render('CeCommandeBundle:Commande:chart.html.twig', ['amountByYear' => $chart->amountByYear()]);
}
<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
</head>
<div id="div_graph"></div>
<script type="text/javascript">
{{ gc_draw(amountByYear, 'div_graph') }}
</script>
</html>
mon problème c'est quand j'essaie de passer mes données pour mon chart dans la classe ChartData, je veux calculer le total commandes pour chaque année pour le passer à mon graphe mais je n'arrive pas, merci pour l'aide.
Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(