/**
  * Acción que envía el archivo XML del libro de guías al SII
  * Si no hay documentos en el período se enviará sin movimientos
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-27
  */
 public function enviar_sii($periodo)
 {
     $Emisor = $this->getContribuyente();
     // si el periodo es mayor o igual al actual no se puede enviar
     if ($periodo >= date('Ym')) {
         \sowerphp\core\Model_Datasource_Session::message('No puede enviar el libro de guías del período ' . $periodo . ', debe esperar al mes siguiente del período', 'error');
         $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request));
     }
     // obtener guías
     $guias = $Emisor->getGuias($periodo);
     // crear libro
     $Libro = new \sasco\LibreDTE\Sii\LibroGuia();
     // obtener firma
     $Firma = $Emisor->getFirma($this->Auth->User->id);
     if (!$Firma) {
         \sowerphp\core\Model_Datasource_Session::message('No hay firma electrónica asociada a la empresa (o bien no se pudo cargar), debe agregar su firma antes de generar DTE', 'error');
         $this->redirect('/dte/admin/firma_electronicas');
     }
     // agregar detalle
     $documentos = 0;
     foreach ($guias as $guia) {
         $documentos++;
         // armar detalle para agregar al libro
         $d = [];
         foreach ($guia as $k => $v) {
             if ($v !== null) {
                 $d[$this->libro_cols[$k]] = $v;
             }
         }
         // agregar detalle al libro
         $Libro->agregar($d);
     }
     // agregar carátula al libro
     $Libro->setFirma($Firma);
     $Libro->setCaratula(['RutEmisorLibro' => $Emisor->rut . '-' . $Emisor->dv, 'PeriodoTributario' => substr($periodo, 0, 4) . '-' . substr($periodo, 4), 'FchResol' => $Emisor->certificacion ? $Emisor->certificacion_resolucion : $Emisor->resolucion_fecha, 'NroResol' => $Emisor->certificacion ? 0 : $Emisor->resolucion_numero, 'TipoLibro' => 'ESPECIAL', 'TipoEnvio' => 'TOTAL', 'FolioNotificacion' => 1]);
     // obtener XML
     $xml = $Libro->generar();
     if (!$xml) {
         \sowerphp\core\Model_Datasource_Session::message('No fue posible generar el libro de guías<br/>' . implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error');
         $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request));
     }
     // enviar al SII
     $track_id = $Libro->enviar();
     if (!$track_id) {
         \sowerphp\core\Model_Datasource_Session::message('No fue posible enviar el libro de guías al SII<br/>' . implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error');
         $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request));
     }
     // guardar libro de ventas
     $DteGuia = new Model_DteGuia($Emisor->rut, $periodo, (int) $Emisor->certificacion);
     $DteGuia->documentos = $documentos;
     $DteGuia->xml = base64_encode($xml);
     $DteGuia->track_id = $track_id;
     $DteGuia->save();
     \sowerphp\core\Model_Datasource_Session::message('Libro de guías período ' . $periodo . ' envíado', 'ok');
     $this->redirect(str_replace('enviar_sii', 'ver', $this->request->request));
 }
 /**
  * Método que permite generar un libro de guías de despacho 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_guia()
 {
     // si no se viene por post terminar
     if (!isset($_POST['submit'])) {
         return;
     }
     // verificar campos no estén vacíos
     $campos = ['RutEmisorLibro', 'PeriodoTributario', 'FchResol', 'NroResol', 'TipoLibro', 'TipoEnvio', 'FolioNotificacion', 'contrasenia'];
     foreach ($campos as $campo) {
         if (!isset($_POST[$campo][0])) {
             \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 guías a la 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']), 'PeriodoTributario' => $_POST['PeriodoTributario'], 'FchResol' => $_POST['FchResol'], 'NroResol' => $_POST['NroResol'], 'TipoLibro' => $_POST['TipoLibro'], 'TipoEnvio' => $_POST['TipoEnvio'], 'FolioNotificacion' => $_POST['FolioNotificacion']];
     // generar libro de guías
     $LibroGuia = new \sasco\LibreDTE\Sii\LibroGuia();
     $LibroGuia->agregarCSV($_FILES['archivo']['tmp_name']);
     $LibroGuia->setFirma($Firma);
     $LibroGuia->setCaratula($caratula);
     $xml = $LibroGuia->generar();
     if (!$LibroGuia->schemaValidate()) {
         \sowerphp\core\Model_Datasource_Session::message(implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error');
         return;
     }
     // descargar XML
     $file = TMP . '/' . $LibroGuia->getID() . '.xml';
     file_put_contents($file, $xml);
     \sasco\LibreDTE\File::compress($file, ['format' => 'zip', 'delete' => true]);
     exit;
 }
Example #3
0
 * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
 * @version 2015-10-02
 */
// 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', 'FchResol' => '2014-12-05', 'NroResol' => 0, 'FolioNotificacion' => 1];
// receptor de las guías
$receptor = '55666777-8';
// set de pruebas guías - número de atención 414177
$detalles = [['Folio' => 4, 'TpoOper' => 5, 'RUTDoc' => $caratula['RutEmisorLibro'], 'TasaImp' => \sasco\LibreDTE\Sii::getIVA()], ['Folio' => 5, 'TpoOper' => 1, 'RUTDoc' => $receptor, 'MntNeto' => 1375761, 'TasaImp' => \sasco\LibreDTE\Sii::getIVA(), 'TpoDocRef' => 33, 'FolioDocRef' => 69, 'FchDocRef' => date('Y-m-d')], ['Folio' => 6, 'Anulado' => 2, 'TpoOper' => 1, 'RUTDoc' => $receptor, 'MntNeto' => 1050032, 'TasaImp' => \sasco\LibreDTE\Sii::getIVA()]];
// Objetos de Firma y LibroGuia
$Firma = new \sasco\LibreDTE\FirmaElectronica($config['firma']);
$LibroGuia = new \sasco\LibreDTE\Sii\LibroGuia();
// agregar cada uno de los detalles al libro
foreach ($detalles as $detalle) {
    $LibroGuia->agregar($detalle);
}
// enviar libro de guías y mostrar resultado del envío: track id o bien =false si hubo error
$LibroGuia->setFirma($Firma);
$LibroGuia->setCaratula($caratula);
$LibroGuia->generar();
$track_id = $LibroGuia->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";
}
 * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
 * @version 2015-12-14
 */
// 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', 'FchResol' => '2014-12-05', 'NroResol' => 0, 'FolioNotificacion' => 1];
// receptor de las guías
$receptor = '55666777-8';
// set de pruebas guías - número de atención 414177
$detalles = [['Folio' => 4, 'TpoOper' => 5, 'RUTDoc' => $caratula['RutEmisorLibro'], 'TasaImp' => \sasco\LibreDTE\Sii::getIVA()], ['Folio' => 5, 'TpoOper' => 1, 'RUTDoc' => $receptor, 'MntNeto' => 1375761, 'TasaImp' => \sasco\LibreDTE\Sii::getIVA(), 'TpoDocRef' => 33, 'FolioDocRef' => 69, 'FchDocRef' => date('Y-m-d')], ['Folio' => 6, 'Anulado' => 2, 'TpoOper' => 1, 'RUTDoc' => $receptor, 'MntNeto' => 1050032, 'TasaImp' => \sasco\LibreDTE\Sii::getIVA()]];
// Objetos de Firma y LibroGuia
$Firma = new \sasco\LibreDTE\FirmaElectronica($config['firma']);
$LibroGuia = new \sasco\LibreDTE\Sii\LibroGuia();
// agregar cada uno de los detalles al libro
foreach ($detalles as $detalle) {
    $LibroGuia->agregar($detalle);
}
// enviar libro de guías y mostrar resultado del envío: track id o bien =false si hubo error
$LibroGuia->setFirma($Firma);
$LibroGuia->setCaratula($caratula);
$LibroGuia->generar();
if ($LibroGuia->schemaValidate()) {
    //echo $LibroGuia->generar();
    $track_id = $LibroGuia->enviar();
    var_dump($track_id);
}
// si hubo errores mostrar
foreach (\sasco\LibreDTE\Log::readAll() as $error) {