Skip to content

Commit

Permalink
Se agrega clase DocumentoValidator y se integra en flujo de normaliza…
Browse files Browse the repository at this point in the history
…ción de datos de un DTE como última etapa.
  • Loading branch information
estebandelaf committed Dec 20, 2024
1 parent 833192c commit 256ff6f
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 2 deletions.
13 changes: 12 additions & 1 deletion src/Sii/Dte/Documento/Builder/AbstractDocumentoBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
use libredte\lib\Core\Sii\Dte\Documento\DocumentoTipo;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoNormalizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoSanitizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoValidator;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\UtilsTrait;

/**
Expand Down Expand Up @@ -78,6 +79,13 @@ abstract class AbstractDocumentoBuilder
*/
private DocumentoSanitizer $sanitizer;

/**
* Validador de datos del documento a construir.
*
* @var DocumentoValidator
*/
private DocumentoValidator $validator;

/**
* Repositorio de impuestos adicionales.
*
Expand Down Expand Up @@ -110,12 +118,14 @@ public function __construct(?DataProviderInterface $dataProvider = null)
// Obtener el tipo de documento tributario.
$this->tipoDocumento = $this->documentoBaseForNewBuilds->getTipo();

// Crear instancias del normalizador y sanitizador.
// Crear instancias del normalizador, sanitizador y validador de los
// datos de los documentos tributarios electrónicos.
$this->normalizer = new DocumentoNormalizer(
$this->tipoDocumento,
[$this, 'applyDocumentoNormalization']
);
$this->sanitizer = new DocumentoSanitizer();
$this->validator = new DocumentoValidator();
}

/**
Expand All @@ -140,6 +150,7 @@ public function build(array $data, bool $normalize = true): AbstractDocumento
if ($normalize) {
$data = $this->normalizer->normalize($data);
$data = $this->sanitizer->sanitize($data);
$this->validator->validate($data);
}

// Crear el documento tributario y asignar sus datos.
Expand Down
6 changes: 5 additions & 1 deletion src/Sii/Dte/Documento/Normalization/DocumentoNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@ class DocumentoNormalizer
private DocumentoTipo $tipoDocumento;

/**
* Undocumented variable
* Callback con el método principal (de entrada) para la normalización de un
* cierto tipo de documento.
*
* Este callback, por defecto, se define en cada "DocumentoBuilder" en el
* método applyDocumentoNormalization().
*
* @var ?callable
*/
Expand Down
57 changes: 57 additions & 0 deletions src/Sii/Dte/Documento/Normalization/DocumentoValidator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

declare(strict_types=1);

/**
* LibreDTE: Biblioteca PHP (Núcleo).
* Copyright (C) LibreDTE <https://www.libredte.cl>
*
* Este programa es software libre: usted puede redistribuirlo y/o modificarlo
* bajo los términos de la Licencia Pública General Affero de GNU publicada
* por la Fundación para el Software Libre, ya sea la versión 3 de la Licencia,
* o (a su elección) cualquier versión posterior de la misma.
*
* Este programa se distribuye con la esperanza de que sea útil, pero SIN
* GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
* PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública
* General Affero de GNU para obtener una información más detallada.
*
* Debería haber recibido una copia de la Licencia Pública General Affero de
* GNU junto a este programa.
*
* En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
*/

namespace libredte\lib\Core\Sii\Dte\Documento\Normalization;

/**
* Clase que maneja la validación de los datos de un documento.
*/
class DocumentoValidator
{
/**
* Ejecuta la validación de los datos.
*
* @param array $data Arreglo con los datos del documento a validar.
*/
public function validate(array $data): void
{
$this->applyProValidation($data);
}

/**
* Valida los datos del documento utilizando funcionalidades Pro.
*
* @param array $data Arreglo con los datos del documento a validar.
* @throws DocumentoValidatorException
*/
private function applyProValidation(array $data): void
{
// Validar los datos con las funcionalidades Pro de la biblioteca.
$class = '\libredte\lib\Pro\Sii\Dte\Documento\Normalization\DocumentoValidator';
if (class_exists($class)) {
$validator = $class::create($this);
$validator->validate($data);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
use libredte\lib\Core\Sii\Dte\Documento\DocumentoTipo;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoNormalizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoSanitizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoValidator;
use libredte\lib\Core\Sii\Dte\Documento\SobreEnvio;
use libredte\lib\Core\Xml\XmlConverter;
use libredte\lib\Core\Xml\XmlDocument;
Expand Down Expand Up @@ -75,6 +76,7 @@
#[CoversClass(DocumentoTipo::class)]
#[CoversClass(DocumentoNormalizer::class)]
#[CoversClass(DocumentoSanitizer::class)]
#[CoversClass(DocumentoValidator::class)]
#[CoversClass(XmlConverter::class)]
#[CoversClass(XmlDocument::class)]
#[CoversClass(XmlUtils::class)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
use libredte\lib\Core\Sii\Dte\Documento\DocumentoTipo;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoNormalizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoSanitizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoValidator;
use libredte\lib\Core\Sii\Dte\Documento\SobreEnvio;
use libredte\lib\Core\Xml\XmlConverter;
use libredte\lib\Core\Xml\XmlDecoder;
Expand Down Expand Up @@ -101,6 +102,7 @@
#[CoversClass(DocumentoTipo::class)]
#[CoversClass(DocumentoNormalizer::class)]
#[CoversClass(DocumentoSanitizer::class)]
#[CoversClass(DocumentoValidator::class)]
#[CoversClass(SobreEnvio::class)]
#[CoversClass(XmlConverter::class)]
#[CoversClass(XmlDecoder::class)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
use libredte\lib\Core\Sii\Dte\Documento\DocumentoTipo;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoNormalizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoSanitizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoValidator;
use libredte\lib\Core\Sii\Dte\Documento\Parser\DocumentoParser;
use libredte\lib\Core\Sii\Dte\Documento\Parser\Sii\JsonParser;
use libredte\lib\Core\Sii\Dte\Documento\Parser\Sii\XmlParser;
Expand All @@ -59,6 +60,7 @@
#[CoversClass(DocumentoTipo::class)]
#[CoversClass(DocumentoNormalizer::class)]
#[CoversClass(DocumentoSanitizer::class)]
#[CoversClass(DocumentoValidator::class)]
#[CoversClass(DocumentoParser::class)]
#[CoversClass(JsonParser::class)]
#[CoversClass(XmlParser::class)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
use libredte\lib\Core\Sii\Dte\Documento\DocumentoTipo;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoNormalizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoSanitizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoValidator;
use libredte\lib\Core\Sii\Dte\Documento\Parser\DocumentoParser;
use libredte\lib\Core\Sii\Dte\Documento\Parser\Sii\JsonParser;
use libredte\lib\Core\Sii\Dte\Documento\Parser\Sii\XmlParser;
Expand Down Expand Up @@ -85,6 +86,7 @@
#[CoversClass(DocumentoTipo::class)]
#[CoversClass(DocumentoNormalizer::class)]
#[CoversClass(DocumentoSanitizer::class)]
#[CoversClass(DocumentoValidator::class)]
#[CoversClass(DocumentoParser::class)]
#[CoversClass(JsonParser::class)]
#[CoversClass(XmlParser::class)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
use libredte\lib\Core\Sii\Dte\Documento\DocumentoTipo;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoNormalizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoSanitizer;
use libredte\lib\Core\Sii\Dte\Documento\Normalization\DocumentoValidator;
use libredte\lib\Core\Sii\Dte\Documento\Renderer\AbstractRenderer;
use libredte\lib\Core\Sii\Dte\Documento\Renderer\DocumentoRenderer;
use libredte\lib\Core\Xml\XmlConverter;
Expand Down Expand Up @@ -103,6 +104,7 @@
#[CoversClass(DocumentoTipo::class)]
#[CoversClass(DocumentoNormalizer::class)]
#[CoversClass(DocumentoSanitizer::class)]
#[CoversClass(DocumentoValidator::class)]
#[CoversClass(DocumentoRenderer::class)]
#[CoversClass(AbstractRenderer::class)]
#[CoversClass(XmlConverter::class)]
Expand Down

0 comments on commit 256ff6f

Please sign in to comment.