Test Failed
Push — master ( 1a9fa4...737114 )
by Esteban De La Fuente
03:38
created

Provincia::getCodigo()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 1
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 6
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Derafu: Biblioteca PHP (Núcleo).
7
 * Copyright (C) Derafu <https://www.derafu.org>
8
 *
9
 * Este programa es software libre: usted puede redistribuirlo y/o modificarlo
10
 * bajo los términos de la Licencia Pública General Affero de GNU publicada por
11
 * la Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o
12
 * (a su elección) cualquier versión posterior de la misma.
13
 *
14
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN
15
 * GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
16
 * PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública
17
 * General Affero de GNU para obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la Licencia Pública General Affero de GNU
20
 * junto a este programa.
21
 *
22
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
23
 */
24
25
namespace Derafu\Lib\Core\Enum\Cl;
26
27
use RuntimeException;
28
29
/**
30
 * Enum para representar las provincias de Chile.
31
 */
32
enum Provincia: int
33
{
34
    case ARICA = 151;
35
    case PARINACOTA = 152;
36
    case IQUIQUE = 11;
37
    case TAMARUGAL = 14;
38
    case ANTOFAGASTA = 21;
39
    case EL_LOA = 22;
40
    case TOCOPILLA = 23;
41
    case COPIAPO = 31;
42
    case CHANARAL = 32;
43
    case HUASCO = 33;
44
    case ELQUI = 41;
45
    case CHOAPA = 42;
46
    case LIMARI = 43;
47
    case VALPARAISO = 51;
48
    case MARGA_MARGA = 58;
49
    case ISLA_DE_PASCUA = 52;
50
    case LOS_ANDES = 53;
51
    case PETORCA = 54;
52
    case QUILLOTA = 55;
53
    case SAN_ANTONIO = 56;
54
    case SAN_FELIPE = 57;
55
    case CACHAPOAL = 61;
56
    case CARDENAL_CARO = 62;
57
    case COLCHAGUA = 63;
58
    case TALCA = 71;
59
    case CAUQUENES = 72;
60
    case CURICO = 73;
61
    case LINARES = 74;
62
    case CONCEPCION = 81;
63
    case ARAUCO = 82;
64
    case BIO__BIO = 83;
65
    case DIGUILLIN = 161;
66
    case ITATA = 162;
67
    case PUNILLA = 163;
68
    case CAUTIN = 91;
69
    case MALLECO = 92;
70
    case VALDIVIA = 141;
71
    case RANCO = 142;
72
    case LLANQUIHUE = 101;
73
    case CHILOE = 102;
74
    case OSORNO = 103;
75
    case PALENA = 104;
76
    case COIHAIQUE = 111;
77
    case AISEN = 112;
78
    case CAPITAN_PRAT = 113;
79
    case GENERAL_CARRERA = 114;
80
    case MAGALLANES = 121;
81
    case ANTARTICA_CHILENA = 122;
82
    case TIERRA_DEL_FUEGO = 123;
83
    case ULTIMA_ESPERANZA = 124;
84
    case SANTIAGO = 131;
85
    case CORDILLERA = 132;
86
    case CHACABUCO = 133;
87
    case MAIPO = 134;
88
    case MELIPILLA = 135;
89
    case TALAGANTE = 136;
90
91
    private const GLOSAS = [
92
        self::ARICA->value => 'Arica',
93
        self::PARINACOTA->value => 'Parinacota',
94
        self::IQUIQUE->value => 'Iquique',
95
        self::TAMARUGAL->value => 'Tamarugal',
96
        self::ANTOFAGASTA->value => 'Antofagasta',
97
        self::EL_LOA->value => 'El Loa',
98
        self::TOCOPILLA->value => 'Tocopilla',
99
        self::COPIAPO->value => 'Copiapó',
100
        self::CHANARAL->value => 'Chañaral',
101
        self::HUASCO->value => 'Huasco',
102
        self::ELQUI->value => 'Elqui',
103
        self::CHOAPA->value => 'Choapa',
104
        self::LIMARI->value => 'Limari',
105
        self::VALPARAISO->value => 'Valparaíso',
106
        self::MARGA_MARGA->value => 'Marga Marga',
107
        self::ISLA_DE_PASCUA->value => 'Isla de Pascua',
108
        self::LOS_ANDES->value => 'Los Andes',
109
        self::PETORCA->value => 'Petorca',
110
        self::QUILLOTA->value => 'Quillota',
111
        self::SAN_ANTONIO->value => 'San Antonio',
112
        self::SAN_FELIPE->value => 'San Felipe',
113
        self::CACHAPOAL->value => 'Cachapoal',
114
        self::CARDENAL_CARO->value => 'Cardenal Caro',
115
        self::COLCHAGUA->value => 'Colchagua',
116
        self::TALCA->value => 'Talca',
117
        self::CAUQUENES->value => 'Cauquenes',
118
        self::CURICO->value => 'Curico',
119
        self::LINARES->value => 'Linares',
120
        self::CONCEPCION->value => 'Concepción',
121
        self::ARAUCO->value => 'Arauco',
122
        self::BIO__BIO->value => 'Bío- Bío',
123
        self::DIGUILLIN->value => 'Diguillín',
124
        self::ITATA->value => 'Itata',
125
        self::PUNILLA->value => 'Punilla',
126
        self::CAUTIN->value => 'Cautín',
127
        self::MALLECO->value => 'Malleco',
128
        self::VALDIVIA->value => 'Valdivia',
129
        self::RANCO->value => 'Ranco',
130
        self::LLANQUIHUE->value => 'Llanquihue',
131
        self::CHILOE->value => 'Chiloe',
132
        self::OSORNO->value => 'Osorno',
133
        self::PALENA->value => 'Palena',
134
        self::COIHAIQUE->value => 'Coihaique',
135
        self::AISEN->value => 'Aisén',
136
        self::CAPITAN_PRAT->value => 'Capitan Prat',
137
        self::GENERAL_CARRERA->value => 'General Carrera',
138
        self::MAGALLANES->value => 'Magallanes',
139
        self::ANTARTICA_CHILENA->value => 'Antártica Chilena',
140
        self::TIERRA_DEL_FUEGO->value => 'Tierra del Fuego',
141
        self::ULTIMA_ESPERANZA->value => 'Ultima Esperanza',
142
        self::SANTIAGO->value => 'Santiago',
143
        self::CORDILLERA->value => 'Cordillera',
144
        self::CHACABUCO->value => 'Chacabuco',
145
        self::MAIPO->value => 'Maipo',
146
        self::MELIPILLA->value => 'Melipilla',
147
        self::TALAGANTE->value => 'Talagante',
148
    ];
149
150
    /**
151
     * Entrega el código de la provincia normalizado a 3 dígitos.
152
     *
153
     * @return string
154
     */
155
    public function getCodigo(): string
156
    {
157
        return $this->value < 100 ? '0' . $this->value : (string) $this->value;
158
    }
159
160
    /**
161
     * Obtiene la glosa asociada a una provincia.
162
     *
163
     * @return string
164
     */
165
    public function getGlosa(): string
166
    {
167
        return self::GLOSAS[$this->value];
0 ignored issues
show
Bug introduced by
The constant Derafu\Lib\Core\Enum\Cl\Provincia::GLOSAS was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
168
    }
169
170
    /**
171
     * Obtiene el nombre de la provincia.
172
     *
173
     * @return string
174
     */
175
    public function getNombre(): string
176
    {
177
        return $this->getGlosa();
178
    }
179
180
    /**
181
     * Entrega la región a la que pertenece la provincia.
182
     *
183
     * Los 2 primeros dígitos del código normalizado de la provincia
184
     * corresponden al código normalizado de la región.
185
     *
186
     * @return Region
187
     */
188
    public function getRegion(): Region
189
    {
190
        $regionCode = (int) substr($this->getCodigo(), 0, 2);
191
        $region = Region::tryFrom($regionCode);
192
193
        if ($region === null) {
194
            throw new RuntimeException(sprintf(
195
                'No se encontró la región para la provincia %s.',
196
                $this->getNombre()
197
            ));
198
        }
199
200
        return $region;
201
    }
202
203
    /**
204
     * Entrega las comunas asociadas a la provincia.
205
     *
206
     * Los 3 primeros dígitos del código normalizado de la comuna
207
     * corresponden al código normalizado de la provincia.
208
     *
209
     * @return Comuna[]
210
     */
211
    public function getComunas(): array
212
    {
213
        return array_filter(
214
            Comuna::cases(),
215
            fn ($comuna) =>
216
                substr($comuna->getCodigo(), 0, 3) === $this->getCodigo()
217
        );
218
    }
219
}
220