<commit_before><commit_msg>Utilidad con el envío de boletas al SII y consulta de estado usando las funcionalidades extras de LibreDTE<commit_after><?php

/**
 * LibreDTE
 * Copyright (C) SASCO SpA (https://sasco.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 website\Dte;

/**
 * Clase que permite interacturar con el envío de boletas al SII mediante
 * las funcionalidades extras de LibreDTE.
 * Se provee como una clase aparte, porque es una funcionalidad que por defecto
 * viene desactivada.
 *
 * @author <NAME>, DeLaF (esteban[at]sasco.cl)
 * @version 2020-10-31
 */
class Utility_EnvioBoleta
{

    /**
     * Método que envía un XML de EnvioBoleta al SII y entrega el Track ID del envío
     * @author <NAME>, DeLaF (esteban[at]sasco.cl)
     * @version 2020-10-31
     */
    public static function enviar($usuario, $empresa, $xml, $Firma, $gzip = false, $retry = null)
    {
        $certificacion = \sasco\LibreDTE\Sii::getAmbiente();
        $r = libredte_api_consume(
            '/libredte/dte/envios/enviar?certificacion='.(int)$certificacion.'&gzip='.(int)$gzip.'&retry='.(int)$retry,
            [
                'auth' => [
                    'cert' => [
                        'cert-data' => $Firma->getCertificate(),
                        'pkey-data' => $Firma->getPrivateKey(),
                    ],
                ],
                'emisor' => $empresa,
                'xml' => base64_encode($xml),
            ]
        );
        if ($r['status']['code']!=200) {
            \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::REQUEST_ERROR_BODY, $r['body']);
            return false;
        }
        return $r['body'];
    }

    /**
     * Método que entrega el estado normalizado del envío e la boleta al SII
     * @author <NAME>, DeLaF (esteban[at]sasco.cl)
     * @version 2020-10-31
     */
    public static function estado_normalizado($rut, $dv, $track_id, $Firma, $dte, $folio)
    {
        $certificacion = \sasco\LibreDTE\Sii::getAmbiente();
        $r = libredte_api_consume(
            '/libredte/dte/envios/estado?certificacion='.(int)$certificacion,
            [
                'auth' => [
                    'cert' => [
                        'cert-data' => $Firma->getCertificate(),
                        'pkey-data' => $Firma->getPrivateKey(),
                    ],
                ],
                'emisor' => $rut.'-'.$dv,
                'track_id' => $track_id,
                'dte' => $dte,
                'folio' => $folio,
            ]
        );
        if ($r['status']['code']!=200) {
            \sasco\LibreDTE\Log::write(\sasco\LibreDTE\Estado::REQUEST_ERROR_BODY, $r['body']);
            return false;
        }
        return [
            'estado' => $r['body']['revision_estado'],
            'detalle' => $r['body']['revision_detalle'],
        ];
    }

}
{'fraction_non_alphanumeric': 0.12954230235783634, 'fraction_numerical': 0.009153952843273232, 'mean_word_length': 2.1383812010443863, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 27, 'https://': 1, 'lorem ipsum': 0, 'www.': 1, 'xml': 3}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6307992', 'n_tokens_mistral': 1248, 'n_tokens_neox': 1212, 'n_words': 294}