Test Failed
Pull Request — master (#28)
by Chris
12:42
created

ReportToCsv::execute()   B

Complexity

Conditions 4
Paths 3

Size

Total Lines 22
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 12
nc 3
nop 2
dl 0
loc 22
rs 8.9197
c 0
b 0
f 0
1
<?php
2
3
namespace OpenTickets\Tickets\Cli\Command;
4
5
use Carnage\Cqrs\MessageBus\MessageBusInterface;
6
use Carnage\Cqrs\Service\EventCatcher;
7
use OpenTickets\Tickets\Domain\Command\Ticket\CompletePurchase;
8
use OpenTickets\Tickets\Domain\Command\Ticket\ReserveTickets;
9
use OpenTickets\Tickets\Domain\Event\Ticket\TicketPurchaseCreated;
10
use OpenTickets\Tickets\Domain\Service\Configuration;
11
use OpenTickets\Tickets\Domain\ValueObject\Delegate;
12
use OpenTickets\Tickets\Domain\ValueObject\TicketReservationRequest;
13
use OpenTickets\Tickets\Report\ReportInterface;
14
use OpenTickets\Tickets\Report\ReportManager;
15
use Symfony\Component\Console\Command\Command;
16
use Symfony\Component\Console\Input\InputArgument;
17
use Symfony\Component\Console\Input\InputInterface;
18
use Symfony\Component\Console\Input\InputOption;
19
use Symfony\Component\Console\Output\OutputInterface;
20
21
class ReportToCsv extends Command
22
{
23
    /**
24
     * @var ReportManager
25
     */
26
    private $reportManager;
27
28
    public static function build(ReportManager $reportManager)
29
    {
30
        $instance = new self();
31
        $instance->reportManager = $reportManager;
32
        return $instance;
33
    }
34
35
    protected function configure()
36
    {
37
        $this->setName('opentickets:report-to-csv')
38
            ->setDescription('Creates a csv export of a report')
39
            ->setDefinition([
40
                new InputArgument('report', InputArgument::REQUIRED, 'Report to run'),
41
             ]);
42
    }
43
44
    protected function execute(InputInterface $input, OutputInterface $output)
45
    {
46
        $reportName = $input->getArgument('report');
47
        if (!$this->reportManager->has($reportName)){
48
            throw new \Exception('Invalid report name');
49
        }
50
51
        /** @var ReportInterface $report */
52
        $report = $this->reportManager->get($reportName);
53
54
        $reportData = $report->produceReport();
55
56
        $h = fopen('/tmp/report.csv', 'w+');
57
        $header = array_keys(current($reportData) ?: []);
58
        fputcsv($h, $header);
59
60
        foreach ($reportData as $datum) {
61
            fputcsv($h, $datum);
62
        }
63
64
        fclose($h);
65
    }
66
}