/** * Acción que permite al usuario agregar una nueva firma electrónica * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-09-22 */ public function agregar() { if (isset($_POST['submit'])) { // verificar que se haya podido subir el archivo con la firma if (!isset($_FILES['firma']) or $_FILES['firma']['error']) { \sowerphp\core\Model_Datasource_Session::message('Ocurrió un error al subir la firma', 'error'); return; } // cargar firma $data = file_get_contents($_FILES['firma']['tmp_name']); try { $Firma = new \sasco\LibreDTE\FirmaElectronica(['data' => $data, 'pass' => $_POST['contrasenia']]); } catch (\sowerphp\core\Exception $e) { \sowerphp\core\Model_Datasource_Session::message($e->getMessage(), 'error'); return; } // si todo fue ok se crea el objeto firma para la bd y se guarda $FirmaElectronica = new Model_FirmaElectronica($Firma->getID()); $FirmaElectronica->nombre = $Firma->getName(); $FirmaElectronica->email = $Firma->getEmail(); $FirmaElectronica->desde = $Firma->getFrom(); $FirmaElectronica->hasta = $Firma->getTo(); $FirmaElectronica->emisor = $Firma->getIssuer(); $FirmaElectronica->usuario = $this->Auth->User->id; $FirmaElectronica->archivo = base64_encode($data); $FirmaElectronica->contrasenia = \website\Dte\Utility_Data::encrypt($_POST['contrasenia']); try { $FirmaElectronica->save(); \sowerphp\core\Model_Datasource_Session::message('Se asoció la firma electrónica de ' . $Firma->getName() . ' (' . $Firma->getID() . ') al usuario ' . $this->Auth->User->usuario, 'ok'); $this->redirect('/dte/admin/firma_electronicas'); } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) { \sowerphp\core\Model_Datasource_Session::message('Ocurrió un error al guardar la firma.<br/>' . $e->getMessage(), 'error'); return; } } }
/** * Acción que permite subir un caf para un tipo de folio * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl) * @version 2015-09-22 */ public function subir_caf() { $Emisor = $this->getContribuyente(); $this->set(['Emisor' => $Emisor]); // procesar solo si se envió el formulario if (isset($_POST['submit'])) { // verificar que se haya podido subir CAF if (!isset($_FILES['caf']) or $_FILES['caf']['error']) { \sowerphp\core\Model_Datasource_Session::message('Ocurrió un error al subir el CAF', 'error'); return; } if (\sowerphp\general\Utility_File::mimetype($_FILES['caf']['tmp_name']) != 'application/xml') { \sowerphp\core\Model_Datasource_Session::message('Formato del archivo ' . $_FILES['caf']['name'] . ' es incorrecto', 'error'); return; } // cargar caf $caf = file_get_contents($_FILES['caf']['tmp_name']); $Folios = new \sasco\LibreDTE\Sii\Folios($caf); // si no se pudo validar el caf error if (!$Folios->getTipo()) { \sowerphp\core\Model_Datasource_Session::message('No fue posible cargar el CAF ' . $_FILES['caf']['name'] . ':<br/>' . implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error'); return; } // verificar que el caf tenga previamente cargado un mantenedor de folio $DteFolio = new Model_DteFolio($Emisor->rut, $Folios->getTipo(), (int) $Folios->getCertificacion()); if (!$DteFolio->exists()) { \sowerphp\core\Model_Datasource_Session::message('Primero debe crear el mantenedor de los folios de tipo ' . $Folios->getTipo(), 'error'); return; } // verificar que el caf sea del emisor if ($Folios->getEmisor() != $Emisor->rut . '-' . $Emisor->dv) { \sowerphp\core\Model_Datasource_Session::message('RUT del CAF ' . $Folios->getEmisor() . ' no corresponde con el RUT de la empresa ' . $Emisor->razon_social . ' ' . $Emisor->rut . '-' . $Emisor->dv, 'error'); return; } // verificar que el folio que se está subiendo sea para el ambiente actual de la empresa $ambiente_empresa = $Emisor->certificacion ? 'certificación' : 'producción'; $ambiente_caf = $Folios->getCertificacion() ? 'certificación' : 'producción'; if ($ambiente_empresa != $ambiente_caf) { \sowerphp\core\Model_Datasource_Session::message('Empresa está en ambiente de ' . $ambiente_empresa . ' pero folios son de ' . $ambiente_caf, 'error'); return; } // crear caf para el folio $DteCaf = new Model_DteCaf($DteFolio->emisor, $DteFolio->dte, (int) $Folios->getCertificacion(), $Folios->getDesde()); if ($DteCaf->exists()) { \sowerphp\core\Model_Datasource_Session::message('El CAF para el documento de tipo ' . $DteCaf->dte . ' que inicia en ' . $Folios->getDesde() . ' en ambiente de ' . $ambiente_caf . ' ya estaba cargado', 'warning'); return; } $DteCaf->hasta = $Folios->getHasta(); $DteCaf->xml = \website\Dte\Utility_Data::encrypt($caf); try { $DteCaf->save(); } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) { \sowerphp\core\Model_Datasource_Session::message('No fue posible guardar el CAF: ' . $e->getMessage(), 'error'); return; } // actualizar mantenedor de folios if (!$DteFolio->disponibles) { $DteFolio->siguiente = $Folios->getDesde(); $DteFolio->disponibles = $Folios->getHasta() - $Folios->getDesde() + 1; } else { $DteFolio->disponibles += $Folios->getHasta() - $Folios->getDesde() + 1; } $DteFolio->alertado = 'f'; try { $DteFolio->save(); \sowerphp\core\Model_Datasource_Session::message('El CAF para el documento de tipo ' . $DteCaf->dte . ' que inicia en ' . $Folios->getDesde() . ' en ambiente de ' . $ambiente_caf . ' fue cargado, el siguiente folio disponible es ' . $DteFolio->siguiente, 'ok'); $this->redirect('/dte/admin/dte_folios'); } catch (\sowerphp\core\Exception_Model_Datasource_Database $e) { \sowerphp\core\Model_Datasource_Session::message('El CAF se guardó, pero no fue posible actualizar el mantenedor de folios, deberá actualizar manualmente. ' . $e->getMessage(), 'error'); return; } } }