/** * @file 022-libro_ventas_csv.php * * Ejemplo que muestra como crear el libro de ventas a partir de un archivo CSV * * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-09-18 */ // respuesta en texto plano header('Content-type: text/plain'); // incluir archivos php de la biblioteca y configuraciones include 'inc.php'; // caratula del libro $caratula = ['RutEmisorLibro' => '76192083-9', 'RutEnvia' => '11222333-4', 'PeriodoTributario' => '1980-03', 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoOperacion' => 'VENTA', 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006]; // Objetos de Firma y LibroCompraVenta $Firma = new \sasco\LibreDTE\FirmaElectronica($config['firma']); $LibroCompraVenta = new \sasco\LibreDTE\Sii\LibroCompraVenta(); // agregar detalle desde un archivo CSV con ; como separador $LibroCompraVenta->agregarVentasCSV('libros/libro_ventas.csv'); // enviar libro de compras y mostrar resultado del envío: track id o bien =false si hubo error $LibroCompraVenta->setCaratula($caratula); $LibroCompraVenta->generar(false); // generar XML sin firma y sin detalle $LibroCompraVenta->setFirma($Firma); $track_id = $LibroCompraVenta->enviar(); // enviar XML generado en línea anterior var_dump($track_id); // si hubo errores mostrar foreach (\sasco\LibreDTE\Log::readAll() as $error) { echo $error, "\n"; }
/** * Método que permite generar un libro de Compras o Ventas a partir de un * archivo CSV con el detalle del mismo * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-12-24 */ public function generar_libro() { // si no se viene por post terminar if (!isset($_POST['submit'])) { return; } // verificar campos no estén vacíos $campos = ['TipoOperacion', 'RutEmisorLibro', 'PeriodoTributario', 'FchResol', 'NroResol', 'TipoLibro', 'TipoEnvio', 'FolioNotificacion', 'contrasenia']; foreach ($campos as $campo) { if (empty($_POST[$campo])) { \sowerphp\core\Model_Datasource_Session::message($campo . ' no puede estar en blanco', 'error'); return; } } // 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 CSV con el detalle de las compras o ventas al que deseas generar su XML', 'error'); return; } // si no se pasó la firma error if (!isset($_FILES['firma']) or $_FILES['firma']['error']) { \sowerphp\core\Model_Datasource_Session::message('Debes enviar el archivo con la firma digital', 'error'); return; } // Objeto de la Firma try { $Firma = new \sasco\LibreDTE\FirmaElectronica(['data' => file_get_contents($_FILES['firma']['tmp_name']), 'pass' => $_POST['contrasenia']]); } catch (\Exception $e) { \sowerphp\core\Model_Datasource_Session::message('No fue posible abrir la firma digital, quizás contraseña incorrecta', 'error'); return; } // generar caratula del libro $caratula = ['RutEmisorLibro' => str_replace('.', '', $_POST['RutEmisorLibro']), 'RutEnvia' => $Firma->getID(), 'PeriodoTributario' => $_POST['PeriodoTributario'], 'FchResol' => $_POST['FchResol'], 'NroResol' => $_POST['NroResol'], 'TipoOperacion' => $_POST['TipoOperacion'], 'TipoLibro' => $_POST['TipoLibro'], 'TipoEnvio' => $_POST['TipoEnvio'], 'FolioNotificacion' => $_POST['FolioNotificacion']]; // definir si es certificacion $caratula_certificacion = ['COMPRA' => ['PeriodoTributario' => 2000, 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006], 'VENTA' => ['PeriodoTributario' => 1980, 'FchResol' => '2006-01-20', 'NroResol' => 102006, 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 102006]]; $certificacion = true; foreach ($caratula_certificacion[$caratula['TipoOperacion']] as $attr => $val) { if ($caratula[$attr] != $val or $attr == 'PeriodoTributario' and substr($caratula[$attr], 0, 4) != $val) { $certificacion = false; break; } } // generar libro de compras o venta $LibroCompraVenta = new \sasco\LibreDTE\Sii\LibroCompraVenta((bool) $_POST['simplificado']); if ($caratula['TipoOperacion'] === 'COMPRA') { $LibroCompraVenta->agregarComprasCSV($_FILES['archivo']['tmp_name']); } else { $LibroCompraVenta->agregarVentasCSV($_FILES['archivo']['tmp_name']); } $LibroCompraVenta->setCaratula($caratula); $LibroCompraVenta->setFirma($Firma); $xml = $LibroCompraVenta->generar(); if (!$LibroCompraVenta->schemaValidate()) { \sowerphp\core\Model_Datasource_Session::message(implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error'); return; } // descargar XML $file = TMP . '/' . $LibroCompraVenta->getID() . '.xml'; file_put_contents($file, $xml); \sasco\LibreDTE\File::compress($file, ['format' => 'zip', 'delete' => true]); exit; }