Completed
Push — master ( 854d5e...fc0783 )
by Stepan
05:04
created

ChartBuilder::calendarChart()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 16
rs 9.9332
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Application\Bundle\DefaultBundle\Service\Statistic\Chart;
4
5
use CMEN\GoogleChartsBundle\GoogleCharts\Charts\LineChart;
6
use Stfalcon\Bundle\EventBundle\Entity\Event;
7
use Stfalcon\Bundle\EventBundle\Repository\TicketRepository;
8
9
/**
10
 * ChartBuilder.
11
 */
12
class ChartBuilder
13
{
14
    /** @var TicketRepository */
15
    private $ticketRepository;
16
17
    /**
18
     * @param TicketRepository $ticketRepository
19
     */
20
    public function __construct(TicketRepository $ticketRepository)
21
    {
22
        $this->ticketRepository = $ticketRepository;
23
    }
24
25
    public function columnChart($data) {
26
        $chart = new \CMEN\GoogleChartsBundle\GoogleCharts\Charts\Material\ColumnChart();
27
        $chart->getData()->setArrayToDataTable($data);
28
        $chart->getOptions()->getChart()
29
            ->setTitle('Статистика продаж')
30
            ->setSubtitle('За последние 30 дней');
31
        $chart->getOptions()
32
            ->setBars('vertical')
33
            ->setHeight(400)
34
            ->setWidth(1400)
35
//            ->setColors(['#1b9e77', '#d95f02', '#7570b3'])
36
            ->getVAxis()
37
            ->setFormat('decimal');
38
        return $chart;
39
    }
40
41
    /**
42
     *
43
     *
44
     * @param $data
45
     * @return \CMEN\GoogleChartsBundle\GoogleCharts\Charts\CalendarChart
46
     */
47
    public function calendarChart($data) {
48
        $chart = new \CMEN\GoogleChartsBundle\GoogleCharts\Charts\CalendarChart();
49
        $chart->getData()->setArrayToDataTable($data);
50
51
        // рахуєм різницю в роках між першою датою графіка і останньою, щоб динамічно підлаштувати висоту канви
52
        $firstDate = array_keys($data)[1]; // в 0-му елементі заголовки графіка. перша дата в 1-му
53
        $lastDate = array_keys($data)[count($data)-1];
54
55
        $years = (new \DateTime($lastDate))->format('Y') - (new \DateTime($firstDate))->format('Y') + 1;
56
        $chart->getOptions()->setHeight(200*$years);
57
58
        $chart->getOptions()->getCalendar()->setCellSize(18);
59
        $chart->getOptions()->getNoDataPattern()->setBackgroundColor('#76a7fa');
60
        $chart->getOptions()->getNoDataPattern()->setColor('#a0c3ff');
61
62
        return $chart;
63
    }
64
65
    /**
66
     * @param array $data
67
     *
68
     * @return LineChart
69
     * @throws \Exception
70
     */
71
    public function lineChart($data)
72
    {
73
        $chart = new LineChart();
74
        $chart->getData()->setArrayToDataTable($data);
75
76
        $chart->getOptions()->setTitle('Продажа билетов за прошедший месяц');
77
        $chart->getOptions()->setHeight(600);
78
        $chart->getOptions()->setWidth(800);
79
        $chart->getOptions()->getTitleTextStyle()->setBold(true);
80
        $chart->getOptions()->getTitleTextStyle()->setColor('#009900');
81
        $chart->getOptions()->getTitleTextStyle()->setItalic(true);
82
        $chart->getOptions()->getTitleTextStyle()->setFontName('Arial');
83
        $chart->getOptions()->getTitleTextStyle()->setFontSize(20);
84
        $chart->getOptions()->getHAxis()->getTextStyle()->setFontSize(12);
85
        $chart->getOptions()->getVAxis()->getTextStyle()->setFontSize(12);
86
        $chart->getOptions()->setCurveType('function');
87
88
        return $chart;
89
    }
90
}
91