• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

h4kuna / ares / 20421659198

05 Dec 2025 08:01AM UTC coverage: 89.497% (+4.7%) from 84.821%
20421659198

push

github

h4kuna
Update ARES API 1.3.0

17 of 18 new or added lines in 1 file covered. (94.44%)

1 existing line in 1 file now uncovered.

409 of 457 relevant lines covered (89.5%)

0.89 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.77
/src/Ares/Core/JsonToDataTransformer.php
1
<?php declare(strict_types=1);
2

3
namespace h4kuna\Ares\Ares\Core;
4

5
use h4kuna\Ares\Ares\Helper;
6
use h4kuna\Ares\Ares\Sources;
7
use h4kuna\Ares\Tool\Strings;
8
use stdClass;
9

10
class JsonToDataTransformer
11
{
12
        private const RegisterPriority = ['rzp', 'res', 'vr'];
13

14

15
        public function transform(stdClass $json): Data
1✔
16
        {
17
                $data = new Data();
1✔
18
                $data->original = $json;
1✔
19

20
                $data->in = (string) $json->ico;
1✔
21
                $tinGroup = Strings::trimNull($json->dicSkDph ?? null);
1✔
22
                $tinGroup = $tinGroup === 'N/A' ? null : $tinGroup;
1✔
23
                $data->tin = Strings::trimNull($tinGroup ?? $json->dic ?? null);
1✔
24
                $data->sources = Helper::services((array) ($json->seznamRegistraci ?? []));
1✔
25

26
                $data->vat_payer = $data->sources[Sources::SER_NO_DPH] === true;
1✔
27
                $data->company = Strings::trimNull($json->obchodniJmeno ?? null);
1✔
28

29
                self::resolveAddress($data, $json);
1✔
30

31
                $data->nace = (array) ($json->czNace ?? []);
1✔
32
                $data->legal_form_code = isset($json->pravniForma) ? (int) $json->pravniForma : null;
1✔
33
                $data->legal_form_code_ros = isset($json->pravniFormaRos) ? (int) $json->pravniFormaRos : null;
1✔
34

35
                $data->is_person = self::resolveIsPerson($data->legal_form_code, $data->legal_form_code_ros);
1✔
36

37
                $data->created = Strings::createDateTime($json->datumVzniku ?? null);
1✔
38
                $data->dissolved = Strings::createDateTime($json->datumZaniku ?? null);
1✔
39
                $data->active = $data->dissolved === null;
1✔
40

41
                return $data;
1✔
42
        }
43

44

45
        private static function updateAddress(Data $data, stdClass $sidlo): bool
1✔
46
        {
47
                $data->zip = Strings::trimNull(Strings::replaceSpace((string) ($sidlo->psc ?? $sidlo->pscTxt ?? ''))); // input is int
1✔
48
                $data->street = Strings::trimNull($sidlo->nazevUlice ?? null);
1✔
49
                $data->country = Strings::trimNull($sidlo->nazevStatu ?? null);
1✔
50
                $data->country_code = Strings::trimNull($sidlo->kodStatu ?? null);
1✔
51
                $data->city = Strings::trimNull($sidlo->nazevObce ?? null);
1✔
52
                $data->city_post = Strings::trimNull($sidlo->nazevMestskeCastiObvodu ?? null);
1✔
53
                $data->city_district = Strings::trimNull($sidlo->nazevCastiObce ?? null);
1✔
54
                $data->district = Strings::trimNull($sidlo->nazevOkresu ?? null);
1✔
55
                $data->house_number = Helper::houseNumber((string) ($sidlo->cisloDomovni ?? $sidlo->cisloDoAdresy ?? ''), (string) ($sidlo->cisloOrientacni ?? ''), $sidlo->cisloOrientacniPismeno ?? '');
1✔
56

57
                return self::isAddressFilled($data);
1✔
58
        }
59

60

61
        private static function resolveAddress(Data $data, stdClass $json): void
1✔
62
        {
63
                $addressExists = isset($json->sidlo) && self::updateAddress($data, $json->sidlo);
1✔
64

65
                if ($addressExists === false) {
1✔
66
                        $additionalData = isset($json->dalsiUdaje) ? self::prepareForAddress($json->dalsiUdaje) : [];
1✔
67
                        if ($additionalData !== []) {
1✔
68
                                foreach (self::RegisterPriority as $register) {
1✔
69
                                        $key = self::keyForAddress($register, $json);
1✔
70
                                        if (isset($additionalData[$key])) {
1✔
71
                                                $addressExists = self::updateAddress($data, $additionalData[$key]);
1✔
72
                                                if ($addressExists === true) {
1✔
73
                                                        break;
1✔
74
                                                }
75
                                        }
76
                                }
77
                        }
78
                }
79

80
                if ($addressExists === false && isset($json->sidlo->textovaAdresa)) {
1✔
81
                        [
82
                                'zip' => $data->zip,
1✔
83
                                'street' => $data->street,
1✔
84
                                'house_number' => $data->house_number,
1✔
85
                                'city' => $data->city,
1✔
86
                                'country' => $country,
1✔
87
                        ] = Helper::parseAddress($json->sidlo->textovaAdresa);
1✔
88
                        $data->country ??= $country;
1✔
89
                }
90
        }
1✔
91

92

93
        private static function isAddressFilled(Data $data): bool
1✔
94
        {
95
                if ($data->zip === null) {
1✔
96
                        return false;
1✔
97
                }
98

99
                return $data->street !== null
1✔
100
                        || $data->country !== null
1✔
101
                        || $data->country_code !== null
1✔
102
                        || $data->city !== null
1✔
103
                        || $data->city_post !== null
1✔
104
                        || $data->city_district !== null
1✔
105
                        || $data->district !== null
1✔
106
                        || $data->house_number !== null;
1✔
107
        }
108

109

110
        /**
111
         * @param array<stdClass> $dalsiUdaje
112
         * @return array<stdClass>
113
         */
114
        private static function prepareForAddress(array $dalsiUdaje): array
1✔
115
        {
116
                $out = [];
1✔
117
                foreach ($dalsiUdaje as $json) {
1✔
118
                        $key = self::keyForAddress($json->datovyZdroj, $json);
1✔
119
                        foreach ($json->sidlo ?? [] as $sidlo) {
1✔
120
                                if ($sidlo?->primarniZaznam === true && isset($sidlo->sidlo)) {
1✔
121
                                        $out[$key] = $sidlo->sidlo;
1✔
122
                                        break;
1✔
123
                                }
124
                        }
125
                }
126

127
                return $out;
1✔
128
        }
129

130

131
        private static function keyForAddress(string $datovyZdroj, stdClass $json): string
1✔
132
        {
133
                $pravniForma = $json->pravniForma ?? (isset($json->pravniFormaRos) ? ($json->pravniFormaRos . 'ROS') : '0');
1✔
134
                return "$datovyZdroj|$pravniForma";
1✔
135
        }
136

137

138
        private static function resolveIsPerson(?int $pravniForma, ?int $pravniFormaRos): bool
1✔
139
        {
140
                if ($pravniForma === null && $pravniFormaRos === null) {
1✔
141
                        return false;
1✔
142
                } elseif ($pravniForma !== null && $pravniFormaRos !== null) {
1✔
143
                        return Helper::isPerson($pravniForma);
1✔
144
                } elseif ($pravniForma !== null) {
1✔
145
                        return Helper::isPerson($pravniForma);
1✔
146
                }
147

NEW
148
                return Helper::isPerson($pravniFormaRos);
×
149
        }
150

151
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc