Test Failed
Branch master (9eafef)
by Esteban De La Fuente
09:05
created

FakeCafProvider::retrieve()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 22
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 3.243

Importance

Changes 0
Metric Value
cc 3
eloc 9
c 0
b 0
f 0
nc 3
nop 3
dl 0
loc 22
rs 9.9666
ccs 7
cts 10
cp 0.7
crap 3.243
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * LibreDTE: Biblioteca PHP (Núcleo).
7
 * Copyright (C) LibreDTE <https://www.libredte.cl>
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
20
 * GNU junto a este programa.
21
 *
22
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
23
 */
24
25
namespace libredte\lib\Core\Package\Billing\Component\Identifier\Service;
26
27
use libredte\lib\Core\Package\Billing\Component\Document\Contract\TipoDocumentoInterface;
28
use libredte\lib\Core\Package\Billing\Component\Identifier\Contract\CafBagInterface;
29
use libredte\lib\Core\Package\Billing\Component\Identifier\Contract\CafFakerWorkerInterface;
30
use libredte\lib\Core\Package\Billing\Component\Identifier\Contract\CafProviderInterface;
31
use libredte\lib\Core\Package\Billing\Component\TradingParties\Contract\EmisorInterface;
32
33
/**
34
 * Implementación de un proveedor de archivos CAF falsos.
35
 *
36
 * Esta implementación es solo para pruebas de LibreDTE. Cada aplicación deberá
37
 * implementar un servicio real de CafProviderInterface para que sea inyectado
38
 * donde sea necesario (ej: en emisión masiva).
39
 */
40
class FakeCafProvider implements CafProviderInterface
41
{
42
    /**
43
     * Historial de folios asignados.
44
     *
45
     * Permite entregar siempre folios diferentes para los emisores y tipos de
46
     * documentos. Así se evitan problemas de repetir folios. Esto es lo que
47
     * realmente debería implementar la aplicación que use LibreDTE: un control
48
     * de la asignación de folios.
49
     *
50
     * El arreglo guardará por cada emisor y tipo de documento el último folio
51
     * que fue entregado.
52
     *
53
     * @var array<int, array<int, int>>
54
     */
55
    private array $folios = [];
56
57
    /**
58
     * Constructor con dependencias del servicio.
59
     *
60
     * @param CafFakerWorkerInterface $cafFakerWorker
61
     */
62 1
    public function __construct(
63
        private CafFakerWorkerInterface $cafFakerWorker
64
    ) {
65 1
    }
66
67
    /**
68
     * {@inheritDoc}
69
     */
70 1
    public function retrieve(
71
        EmisorInterface $emisor,
72
        TipoDocumentoInterface $tipoDocumento,
73
        ?int $folio = null
74
    ): CafBagInterface {
75
        // Resolver el folio que corresponde usar.
76 1
        if ($folio === null) {
77
            if (!isset($this->folios[$emisor->getRutAsInt()][$tipoDocumento->getCodigo()])) {
78
                $this->folios[$emisor->getRutAsInt()][$tipoDocumento->getCodigo()] = 0;
79
            }
80
            $folio = $this->folios[$emisor->getRutAsInt()][$tipoDocumento->getCodigo()] + 1;
81
        }
82
83
        // Recordar el folio entregado.
84 1
        $this->folios[$emisor->getRutAsInt()][$tipoDocumento->getCodigo()] = $folio;
85
86
        // Crear la bolsa con el CAF falso para el emisor, tipo de documento y
87
        // folio determinado.
88 1
        return $this->cafFakerWorker->create(
89 1
            $emisor,
90 1
            $tipoDocumento->getCodigo(),
0 ignored issues
show
Bug introduced by
It seems like $tipoDocumento->getCodigo() can also be of type string; however, parameter $codigoDocumento of libredte\lib\Core\Packag...rkerInterface::create() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

90
            /** @scrutinizer ignore-type */ $tipoDocumento->getCodigo(),
Loading history...
91 1
            $folio
92 1
        );
93
    }
94
}
95