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

Region::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
/**
28
 * Enum para representar las regiones de Chile.
29
 */
30
enum Region: int
31
{
32
    case TARAPACA = 1;
33
    case ANTOFAGASTA = 2;
34
    case ATACAMA = 3;
35
    case COQUIMBO = 4;
36
    case VALPARAISO = 5;
37
    case O_HIGGINS = 6;
38
    case MAULE = 7;
39
    case BIOBIO = 8;
40
    case ARAUCANIA = 9;
41
    case LOS_LAGOS = 10;
42
    case AYSEN = 11;
43
    case MAGALLANES = 12;
44
    case METROPOLITANA = 13;
45
    case LOS_RIOS = 14;
46
    case ARICA_PARINACOTA = 15;
47
    case NUBLE = 16;
48
49
    private const GLOSAS = [
50
        self::TARAPACA->value => 'Tarapacá',
51
        self::ANTOFAGASTA->value => 'Antofagasta',
52
        self::ATACAMA->value => 'Atacama',
53
        self::COQUIMBO->value => 'Coquimbo',
54
        self::VALPARAISO->value => 'Valparaíso',
55
        self::O_HIGGINS->value => 'Libertador General Bernardo O’Higgins',
56
        self::MAULE->value => 'Maule',
57
        self::BIOBIO->value => 'Biobío',
58
        self::ARAUCANIA->value => 'Araucanía',
59
        self::LOS_LAGOS->value => 'Los Lagos',
60
        self::AYSEN->value => 'Aysén',
61
        self::MAGALLANES->value => 'Magallanes',
62
        self::METROPOLITANA->value => 'Metropolitana',
63
        self::LOS_RIOS->value => 'Los Ríos',
64
        self::ARICA_PARINACOTA->value => 'Arica y Parinacota',
65
        self::NUBLE->value => 'Ñuble',
66
    ];
67
68
    /**
69
     * Entrega el código de la región normalizado a 2 dígitos.
70
     *
71
     * @return string
72
     */
73
    public function getCodigo(): string
74
    {
75
        return $this->value < 10 ? '0' . $this->value : (string) $this->value;
76
    }
77
78
    /**
79
     * Obtiene la glosa asociada a una región.
80
     *
81
     * @return string
82
     */
83
    public function getGlosa(): string
84
    {
85
        return self::GLOSAS[$this->value];
0 ignored issues
show
Bug introduced by
The constant Derafu\Lib\Core\Enum\Cl\Region::GLOSAS was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
86
    }
87
88
    /**
89
     * Obtiene el nombre de la región.
90
     *
91
     * @return string
92
     */
93
    public function getNombre(): string
94
    {
95
        return $this->getGlosa();
96
    }
97
98
    /**
99
     * Entrega las provincias asociadas a la región.
100
     *
101
     * Los 2 primeros dígitos del código normalizado de la provincia
102
     * corresponden al código normalizado de la región.
103
     *
104
     * @return Provincia[]
105
     */
106
    public function getProvincias(): array
107
    {
108
        return array_filter(
109
            Provincia::cases(),
110
            fn ($provincia) =>
111
                substr($provincia->getCodigo(), 0, 2) === $this->getCodigo()
112
        );
113
    }
114
115
    /**
116
     * Entrega las comunas asociadas a la región.
117
     *
118
     * Los 2 primeros dígitos del código normalizado de la comuna
119
     * corresponden al código normalizado de la región.
120
     *
121
     * @return Comuna[]
122
     */
123
    public function getComunas(): array
124
    {
125
        return array_filter(
126
            Comuna::cases(),
127
            fn ($comuna) =>
128
                substr($comuna->getCodigo(), 0, 2) === $this->getCodigo()
129
        );
130
    }
131
}
132