コード例 #1
0
 /**
  * Método principal del comando
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-15
  */
 public function main()
 {
     // cargar XML y extraer arreglo con datos de carátula y DTEs
     $EnvioDte = new \sasco\LibreDTE\Sii\EnvioDte();
     $EnvioDte->loadXML(file_get_contents($this->args['xml']));
     $Caratula = $EnvioDte->getCaratula();
     $Documentos = $EnvioDte->getDocumentos();
     // procesar cada DTEs e ir creando los archivos PDF
     foreach ($Documentos as $DTE) {
         if (!$DTE->getDatos()) {
             $this->error('No se pudieron obtener los datos de uno de los DTE del XML');
         }
         $this->out('Generando PDF para DTE ' . $DTE->getID());
         $pdf = new \sasco\LibreDTE\Sii\PDF\Dte($this->args['papel']);
         $pdf->setFooterText();
         if ($this->args['logo']) {
             $pdf->setLogo($this->args['logo']);
         }
         $pdf->setResolucion(['FchResol' => $Caratula['FchResol'], 'NroResol' => $Caratula['NroResol']]);
         $pdf->setWebVerificacion($this->args['web']);
         $pdf->agregar($DTE->getDatos(), $DTE->getTED());
         if (isset($this->args['cedible'])) {
             $pdf->setCedible(true);
             $pdf->agregar($DTE->getDatos(), $DTE->getTED());
         }
         $pdf->Output($this->args['dir'] . '/dte_' . $Caratula['RutEmisor'] . '_' . $DTE->getID() . '.pdf', 'F');
     }
     return 0;
 }
コード例 #2
0
 * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
 * @version 2015-09-16
 */
// respuesta en texto plano
header('Content-type: text/plain; charset=ISO-8859-1');
// incluir archivos php de la biblioteca y configuraciones
include 'inc.php';
// datos para validar
$archivo_recibido = 'xml/intercambio/ENVIO_DTE_420328.xml';
$RutReceptor_esperado = '76192083-9';
$RutEmisor_esperado = '88888888-8';
// Cargar EnvioDTE y extraer arreglo con datos de carátula y DTEs
$EnvioDte = new \sasco\LibreDTE\Sii\EnvioDte();
$EnvioDte->loadXML(file_get_contents($archivo_recibido));
$Caratula = $EnvioDte->getCaratula();
$Documentos = $EnvioDte->getDocumentos();
// caratula
$caratula = ['RutResponde' => $RutReceptor_esperado, 'RutRecibe' => $Caratula['RutEmisor'], 'IdRespuesta' => 1];
// objeto para la respuesta
$RespuestaEnvio = new \sasco\LibreDTE\Sii\RespuestaEnvio();
// procesar cada DTE
$i = 1;
foreach ($Documentos as $DTE) {
    $estado = !$DTE->getEstadoValidacion(['RUTEmisor' => $RutEmisor_esperado, 'RUTRecep' => $RutReceptor_esperado]) ? 0 : 2;
    $RespuestaEnvio->agregarRespuestaDocumento(['TipoDTE' => $DTE->getTipo(), 'Folio' => $DTE->getFolio(), 'FchEmis' => $DTE->getFechaEmision(), 'RUTEmisor' => $DTE->getEmisor(), 'RUTRecep' => $DTE->getReceptor(), 'MntTotal' => $DTE->getMontoTotal(), 'CodEnvio' => $i++, 'EstadoDTE' => $estado, 'EstadoDTEGlosa' => \sasco\LibreDTE\Sii\RespuestaEnvio::$estados['respuesta_documento'][$estado]]);
}
// asignar carátula y Firma
$RespuestaEnvio->setCaratula($caratula);
$RespuestaEnvio->setFirma(new \sasco\LibreDTE\FirmaElectronica($config['firma']));
// generar XML
$xml = $RespuestaEnvio->generar();
コード例 #3
0
 /**
  * Acción que genera el libro de ventas a partir del XML de EnvioDTE creado
  * para la certificación
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-16
  */
 public function set_pruebas_ventas()
 {
     // si no se pasó el archivo error
     if (!isset($_FILES['archivo']) or $_FILES['archivo']['error']) {
         \sowerphp\core\Model_Datasource_Session::message('Debes enviar el archivo XML del EnvioDTE al que quieres generar su Libro de Ventas', 'error');
         $this->redirect('/certificacion/set_pruebas#ventas');
     }
     // obtener documentos
     $EnvioDte = new \sasco\LibreDTE\Sii\EnvioDte();
     $EnvioDte->loadXML(file_get_contents($_FILES['archivo']['tmp_name']));
     $Caratula = $EnvioDte->getCaratula();
     $Documentos = $EnvioDte->getDocumentos();
     // amar caratula
     $caratula = ['RutEmisorLibro' => $Caratula['RutEmisor'], 'RutEnvia' => $Caratula['RutEnvia'], 'PeriodoTributario' => $_POST['PeriodoTributario'], 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoOperacion' => 'VENTA', 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006];
     // armar libro de ventas
     $LibroCompraVenta = new \sasco\LibreDTE\Sii\LibroCompraVenta(true);
     // libro simplificado
     foreach ($Documentos as $DTE) {
         $LibroCompraVenta->agregar($DTE->getResumen(), false);
         // agregar detalle sin normalizar
     }
     // generar XML con el libro de ventas
     $LibroCompraVenta->setCaratula($caratula);
     $xml = $LibroCompraVenta->generar(false);
     // generar XML sin firma y sin detalle
     // verificar problemas de esquema
     /*if (!$LibroCompraVenta->schemaValidate()) {
           \sowerphp\core\Model_Datasource_Session::message(
               implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error'
           );
           $this->redirect('/certificacion/set_pruebas#ventas');
       }*/
     // descargar XML
     $file = TMP . '/' . $LibroCompraVenta->getID() . '.xml';
     file_put_contents($file, $xml);
     \sasco\LibreDTE\File::compress($file, ['format' => 'zip', 'delete' => true]);
     exit;
 }
コード例 #4
0
 /**
  * Método que entrega el arreglo con los datos que se usaron para generar el
  * XML del DTE
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-24
  */
 public function getDatos()
 {
     if (!$this->datos) {
         $EnvioDte = new \sasco\LibreDTE\Sii\EnvioDte();
         $EnvioDte->loadXML(base64_decode($this->xml));
         $datos = $EnvioDte->getDocumentos()[0]->getDatos();
     }
     return $datos;
 }
コード例 #5
0
 /**
  * Recurso de la API que genera el PDF de los DTEs contenidos en un EnvioDTE
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2016-01-15
  */
 public function _api_generar_pdf_POST()
 {
     // verificar si se pasaron credenciales de un usuario
     $User = $this->Api->getAuthUser();
     if (is_string($User)) {
         $this->Api->send($User, 401);
     }
     // si hubo problemas al subir el archivo error
     if (!isset($this->Api->data['xml']) and (!isset($_FILES['xml']) or $_FILES['xml']['error'])) {
         $this->Api->send('Hubo algún problema al recibir el archivo XML con el EnvioDTE', 500);
     }
     // recuperar contenido del archivo xml
     if (isset($this->Api->data['xml'])) {
         $xml = base64_decode($this->Api->data['xml']);
     } else {
         $xml = file_get_contents($_FILES['xml']['tmp_name']);
     }
     // recuperar contenido del logo (si existe)
     if (isset($this->Api->data['logo'])) {
         $logo = base64_decode($this->Api->data['logo']);
     } else {
         if (isset($_FILES['logo']) and !$_FILES['logo']['error']) {
             $logo = file_get_contents($_FILES['logo']['tmp_name']);
         }
     }
     // crear flag cedible
     $cedible = !empty($this->Api->data['cedible']) ? $this->Api->data['cedible'] : false;
     // crear flag papel continuo
     $papelContinuo = !empty($this->Api->data['papelContinuo']) ? $this->Api->data['papelContinuo'] : false;
     // crear opción para web de verificación
     $webVerificacion = !empty($this->Api->data['webVerificacion']) ? $this->Api->data['webVerificacion'] : false;
     // sin límite de tiempo para generar documentos
     set_time_limit(0);
     // Cargar EnvioDTE y extraer arreglo con datos de carátula y DTEs
     $EnvioDte = new \sasco\LibreDTE\Sii\EnvioDte();
     $EnvioDte->loadXML($xml);
     $Caratula = $EnvioDte->getCaratula();
     $Documentos = $EnvioDte->getDocumentos();
     // directorio temporal para guardar los PDF
     $dir = sys_get_temp_dir() . '/dte_' . $Caratula['RutEmisor'] . '_' . $Caratula['RutReceptor'] . '_' . str_replace(['-', ':', 'T'], '', $Caratula['TmstFirmaEnv']);
     if (is_dir($dir)) {
         \sasco\LibreDTE\File::rmdir($dir);
     }
     if (!mkdir($dir)) {
         $this->Api->send('No fue posible crear directorio temporal para DTEs', 500);
     }
     // procesar cada DTEs e ir agregándolo al PDF
     foreach ($Documentos as $DTE) {
         if (!$DTE->getDatos()) {
             $this->Api->send('No se pudieron obtener los datos de un DTE', 500);
         }
         // generar PDF
         $pdf = new \sasco\LibreDTE\Sii\PDF\Dte($papelContinuo);
         $pdf->setFooterText();
         if (isset($logo)) {
             $pdf->setLogo('@' . $logo);
         }
         $pdf->setResolucion(['FchResol' => $Caratula['FchResol'], 'NroResol' => $Caratula['NroResol']]);
         if ($webVerificacion) {
             $pdf->setWebVerificacion($webVerificacion);
         }
         $pdf->agregar($DTE->getDatos(), $DTE->getTED());
         if ($cedible and $DTE->esCedible()) {
             $pdf->setCedible(true);
             $pdf->agregar($DTE->getDatos(), $DTE->getTED());
         }
         $file = $dir . '/dte_' . $Caratula['RutEmisor'] . '_' . $DTE->getID() . '.pdf';
         $pdf->Output($file, 'F');
     }
     // si solo es un archivo y se pidió no comprimir se entrega directamente
     if (isset($this->Api->data['compress']) and !$this->Api->data['compress'] and !isset($Documentos[1])) {
         $this->response->sendFile($file, ['disposition' => 'attachement', 'exit' => false]);
         \sowerphp\general\Utility_File::rmdir($dir);
         exit(0);
     } else {
         \sasco\LibreDTE\File::compress($dir, ['format' => 'zip', 'delete' => true]);
     }
 }
コード例 #6
0
$boletas = 'xml/EnvioBOLETA.xml';
$notas_credito = 'xml/EnvioDTE.xml';
// cargar XML boletas y notas
$EnvioBOLETA = new \sasco\LibreDTE\Sii\EnvioDte();
$EnvioBOLETA->loadXML(file_get_contents($boletas));
$EnvioDTE = new \sasco\LibreDTE\Sii\EnvioDte();
$EnvioDTE->loadXML(file_get_contents($notas_credito));
// crear objeto para consumo de folios
$ConsumoFolio = new \sasco\LibreDTE\Sii\ConsumoFolio();
$ConsumoFolio->setFirma(new \sasco\LibreDTE\FirmaElectronica($config['firma']));
// agregar detalle de boletas
foreach ($EnvioBOLETA->getDocumentos() as $Dte) {
    $ConsumoFolio->agregar($Dte->getResumen());
}
// agregar detalle de notas de crédito
foreach ($EnvioDTE->getDocumentos() as $Dte) {
    $ConsumoFolio->agregar($Dte->getResumen());
}
// crear carátula para el envío (se hace después de agregar los detalles ya que
// así se obtiene automáticamente la fecha inicial y final de los documentos)
$CaratulaEnvioBOLETA = $EnvioBOLETA->getCaratula();
$ConsumoFolio->setCaratula(['RutEmisor' => $CaratulaEnvioBOLETA['RutEmisor'], 'FchResol' => $CaratulaEnvioBOLETA['FchResol'], 'NroResol' => $CaratulaEnvioBOLETA['NroResol']]);
// generar, validar schema y mostrar XML
$ConsumoFolio->generar();
if ($ConsumoFolio->schemaValidate()) {
    //echo $ConsumoFolio->generar();
    $track_id = $ConsumoFolio->enviar();
    var_dump($track_id);
}
// si hubo errores mostrar
foreach (\sasco\LibreDTE\Log::readAll() as $error) {
コード例 #7
0
 * @version 2015-12-14
 */
// respuesta en texto plano
header('Content-type: text/plain; charset=ISO-8859-1');
// incluir archivos php de la biblioteca y configuraciones
include 'inc.php';
// archivos
$boletas = 'xml/EnvioBOLETA.xml';
// cargar XML boletas y notas
$EnvioBOLETA = new \sasco\LibreDTE\Sii\EnvioDte();
$EnvioBOLETA->loadXML(file_get_contents($boletas));
// crear objeto para libro de boletas
$LibroBoleta = new \sasco\LibreDTE\Sii\LibroBoleta();
$LibroBoleta->setFirma(new \sasco\LibreDTE\FirmaElectronica($config['firma']));
// agregar detalle de boletas
foreach ($EnvioBOLETA->getDocumentos() as $Dte) {
    $r = $Dte->getResumen();
    $LibroBoleta->agregar(['TpoDoc' => $r['TpoDoc'], 'FolioDoc' => $r['NroDoc'], 'Anulado' => in_array($r['NroDoc'], [1, 3, 5]) ? 'A' : false, 'FchEmiDoc' => $r['FchDoc'], 'RUTCliente' => $r['RUTDoc'], 'MntExe' => $r['MntExe'] ? $r['MntExe'] : false, 'MntTotal' => $r['MntTotal']]);
}
// crear carátula para el libro
$CaratulaEnvioBOLETA = $EnvioBOLETA->getCaratula();
$LibroBoleta->setCaratula(['RutEmisorLibro' => $CaratulaEnvioBOLETA['RutEmisor'], 'FchResol' => $CaratulaEnvioBOLETA['FchResol'], 'NroResol' => $CaratulaEnvioBOLETA['NroResol'], 'FolioNotificacion' => 1]);
// generar, validar schema y mostrar XML
$LibroBoleta->generar();
if ($LibroBoleta->schemaValidate()) {
    echo $LibroBoleta->generar();
}
// si hubo errores mostrar
foreach (\sasco\LibreDTE\Log::readAll() as $error) {
    echo $error, "\n";
}