/**
  * 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;
         }
     }
 }
Exemplo n.º 2
0
 /**
  * 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;
         }
     }
 }
Exemplo n.º 3
0
<?php 
echo $f->input(['name' => 'sii_smtp', 'label' => 'Servidor SMTP', 'value' => $Contribuyente->sii_smtp, 'help' => 'Ejemplo: ssl://smtp.gmail.com:465', 'attr' => 'maxlength="50"', 'check' => 'notempty']);
echo $f->input(['name' => 'sii_imap', 'label' => 'Mailbox IMAP', 'value' => $Contribuyente->sii_imap, 'help' => 'Ejemplo: {imap.gmail.com:993/imap/ssl}INBOX', 'attr' => 'maxlength="100"', 'check' => 'notempty']);
echo $f->input(['name' => 'sii_user', 'label' => 'Email', 'check' => 'email', 'value' => $Contribuyente->sii_user, 'attr' => 'maxlength="50"', 'check' => 'notempty email']);
echo $f->input(['type' => 'password', 'name' => 'sii_pass', 'label' => 'Contraseña']);
?>
<h2>Email intercambio</h2>
<?php 
echo $f->input(['name' => 'intercambio_smtp', 'label' => 'Servidor SMTP', 'value' => $Contribuyente->intercambio_smtp, 'help' => 'Ejemplo: ssl://smtp.gmail.com:465', 'attr' => 'maxlength="50"', 'check' => 'notempty']);
echo $f->input(['name' => 'intercambio_imap', 'label' => 'Mailbox IMAP', 'value' => $Contribuyente->intercambio_imap, 'help' => 'Ejemplo: {imap.gmail.com:993/imap/ssl}INBOX', 'attr' => 'maxlength="100"', 'check' => 'notempty']);
echo $f->input(['name' => 'intercambio_user', 'label' => 'Email', 'check' => 'email', 'value' => $Contribuyente->intercambio_user, 'attr' => 'maxlength="50"', 'check' => 'notempty email']);
echo $f->input(['type' => 'password', 'name' => 'intercambio_pass', 'label' => 'Contraseña']);
?>
</div>
<!-- FIN EMAILS -->

<!-- INICIO API -->
<div role="tabpanel" class="tab-pane" id="api">
<p>LibreDTE puede comunicarse con la aplicación web de su empresa a través de servicios web. A continuación puede ingresar las URL para diferentes consultas que LibreDTE debería poder hacer a su aplicación. Puede revisar la <a href="http://wiki.libredte.cl/doku.php/sowerphp/integracion">documentación de la integración</a> para obtener detalles de las salidas esperadas para cada consulta.</p>
<?php 
echo $f->input(['name' => 'api_token', 'label' => 'Token', 'value' => \website\Dte\Utility_Data::decrypt($Contribuyente->api_token), 'help' => 'Token opcional para autenticación a través de <em>HTTP Basic Auth</em>. Se enviará al servicio el token como usuario y una X como contraseña.']);
echo $f->input(['name' => 'api_items', 'label' => 'Items', 'value' => $Contribuyente->api_items, 'help' => 'URL para consultar por GET los items a través de su código. Ejemplos: https://example.com/api/items/ o https://example.com/api/items?codigo=']);
?>
</div>
<!-- FIN API -->

    </div>
</div>

<?php 
echo $f->end('Modificar empresa');