CsvFormatter   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 50
c 1
b 0
f 0
dl 0
loc 78
rs 10
wmc 5

4 Methods

Rating   Name   Duplication   Size   Complexity  
A formatDonor() 0 31 2
A getName() 0 3 1
A initialize() 0 27 1
A finalize() 0 2 1
1
<?php
2
3
/**
4
 * This file is part of byrokrat\giroapp.
5
 *
6
 * byrokrat\giroapp is free software: you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License as published
8
 * by the Free Software Foundation, either version 3 of the License, or
9
 * (at your option) any later version.
10
 *
11
 * byrokrat\giroapp is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with byrokrat\giroapp. If not, see <http://www.gnu.org/licenses/>.
18
 *
19
 * Copyright 2016-21 Hannes Forsgård
20
 */
21
22
declare(strict_types=1);
23
24
namespace byrokrat\giroapp\Formatter;
25
26
use byrokrat\giroapp\DependencyInjection;
27
use byrokrat\giroapp\Domain\Donor;
28
use Symfony\Component\Console\Output\OutputInterface;
29
30
/**
31
 * Output donors as comma separated values
32
 */
33
final class CsvFormatter implements FormatterInterface
34
{
35
    use DependencyInjection\MoneyFormatterProperty;
36
37
    /**
38
     * @var OutputInterface
39
     */
40
    private $output;
41
42
    public function getName(): string
43
    {
44
        return 'csv';
45
    }
46
47
    public function initialize(OutputInterface $output): void
48
    {
49
        $this->output = $output;
50
51
        $headers = [
52
            'mandate-key',
53
            'state',
54
            'mandate-source',
55
            'payer-number',
56
            'account',
57
            'id',
58
            'name',
59
            'address.line1',
60
            'address.line2',
61
            'address.line3',
62
            'address.postal_code',
63
            'address.postal_city',
64
            'email',
65
            'phone',
66
            'amount',
67
            'comment',
68
            'created',
69
            'updated',
70
            'attributes',
71
        ];
72
73
        $this->output->writeln('"' . implode('", "', $headers) . '"');
74
    }
75
76
    public function formatDonor(Donor $donor): void
77
    {
78
        $attr = [];
79
80
        foreach ($donor->getAttributes() as $key => $value) {
81
            $attr[] = "$key:$value";
82
        }
83
84
        $data = array_map('addslashes', [
85
            $donor->getMandateKey(),
86
            $donor->getState()->getStateId(),
87
            $donor->getMandateSource(),
88
            $donor->getPayerNumber(),
89
            $donor->getAccount()->getNumber(),
90
            $donor->getDonorId()->format('S-sk'),
91
            $donor->getName(),
92
            $donor->getPostalAddress()->getLine1(),
93
            $donor->getPostalAddress()->getLine2(),
94
            $donor->getPostalAddress()->getLine3(),
95
            $donor->getPostalAddress()->getPostalCode(),
96
            $donor->getPostalAddress()->getPostalCity(),
97
            $donor->getEmail(),
98
            $donor->getPhone(),
99
            $this->moneyFormatter->format($donor->getDonationAmount()),
100
            $donor->getComment(),
101
            $donor->getCreated()->format(\DateTime::W3C),
102
            $donor->getUpdated()->format(\DateTime::W3C),
103
            implode(' ', $attr)
104
        ]);
105
106
        $this->output->writeln('"' . implode('", "', $data) . '"');
107
    }
108
109
    public function finalize(): void
110
    {
111
    }
112
}
113