/** * 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)); }
* @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"; }