Test Failed
Pull Request — master (#24)
by Herberto
05:13
created

CompanyFactory::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 3
dl 0
loc 9
ccs 5
cts 5
cp 1
crap 1
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Werkspot\KvkApi\Client\Factory\Profile;
6
7
use DateTime;
8
use Werkspot\KvkApi\Client\Factory\AbstractFactory;
9
use Werkspot\KvkApi\Client\Factory\Profile\Company\AddressFactoryInterface;
10
use Werkspot\KvkApi\Client\Factory\Profile\Company\BusinessActivityFactoryInterface;
11
use Werkspot\KvkApi\Client\Factory\Profile\Company\TradeNamesFactoryInterface;
12
use Werkspot\KvkApi\Client\Profile\Company;
13
14
final class CompanyFactory extends AbstractFactory implements CompanyFactoryInterface
15
{
16
    /**
17
     * @var AddressFactoryInterface
18
     */
19
    private $addressFactory;
20
21
    /**
22
     * @var BusinessActivityFactoryInterface
23
     */
24
    private $businessActivityFactory;
25
26
    /**
27
     * @var TradeNamesFactoryInterface
28
     */
29
    private $tradeNamesFactory;
30
31 4
    public function __construct(
32
        TradeNamesFactoryInterface $tradeNamesFactory,
33
        BusinessActivityFactoryInterface $businessActivityFactory,
34
        AddressFactoryInterface $addressFactory
35
    ) {
36 4
        $this->tradeNamesFactory = $tradeNamesFactory;
37 4
        $this->businessActivityFactory = $businessActivityFactory;
38 4
        $this->addressFactory = $addressFactory;
39 4
    }
40
41 2
    public function fromArray(array $data): Company
42
    {
43 2
        return new Company(
44 2
            $this->extractIntegerOrNull('kvkNumber', $data),
45 2
            $this->extractStringOrNull('branchNumber', $data),
46 2
            $this->extractIntegerOrNull('rsin', $data),
47 2
            $this->tradeNamesFactory->fromArray($data['tradeNames']),
48 2
            $this->extractStringOrNull('legalForm', $data),
49 2
            $this->extractBusinessActivities($data),
50 2
            $this->extractBoolean('hasEntryInBusinessRegister', $data),
51 2
            $this->extractBoolean('hasCommercialActivities', $data),
52 2
            $this->extractBoolean('hasNonMailingIndication', $data),
53 2
            $this->extractBoolean('isLegalPerson', $data),
54 2
            $this->extractBoolean('isBranch', $data),
55 2
            $this->extractBoolean('isMainBranch', $data),
56 2
            $this->extractIntegerOrNull('employees', $data),
57 2
            new DateTime($data['foundationDate'] ?? 'NOW'),
58 2
            new DateTime($data['registrationDate'] ?? $data['foundationDate'] ?? 'NOW'),
59 2
            $this->extractAddresses($data)
60
        );
61
    }
62
63 2
    private function extractBusinessActivities($data): ?array
64
    {
65 2
        if (array_key_exists('businessActivities', $data)) {
66 2
            return $this->businessActivityFactory->fromArray($data['businessActivities']);
67
        }
68
69
        return null;
70
    }
71
72 2
    private function extractAddresses($data): ?array
73
    {
74 2
        if (array_key_exists('addresses', $data)) {
75 2
            return $this->addressFactory->fromArray($data['addresses']);
76
        }
77
78
        return null;
79
    }
80
}
81