Example #1
0
 /**
  * Método que consume un servicio web de LibreDTE a través de cierto método
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2016-01-26
  */
 private function consume($url, $hash, $data, $method)
 {
     if (!class_exists('\\sowerphp\\core\\Network_Http_Rest')) {
         require_once 'Rest.php';
         require_once 'Socket.php';
     }
     $rest = new \sowerphp\core\Network_Http_Rest();
     $rest->setAuth($hash);
     return $rest->{$method}($url, $data);
 }
 /**
  * Recurso de la API que permite obtener los datos de un item a partir de su
  * código
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-21
  */
 public function _api_info_GET($codigo, $empresa)
 {
     // crear contribuyente y verificar que exista y tenga api configurada
     $Empresa = new Model_Contribuyente($empresa);
     if (!$Empresa->exists()) {
         $this->Api->send('Empresa solicitada no existe', 404);
     }
     if (!$Empresa->api_items) {
         $this->Api->send('Empresa no tiene configurada API para consultar items', 500);
     }
     // consultar item
     $rest = new \sowerphp\core\Network_Http_Rest();
     if ($Empresa->api_token) {
         $rest->setAuth($Empresa->api_token);
     }
     $response = $rest->get($Empresa->api_items . $codigo);
     $this->Api->send($response['body'], $response['status']['code']);
 }
 /**
  * Método que genera la previsualización del PDF del DTE
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2015-09-24
  */
 public function pdf($receptor, $dte, $codigo)
 {
     $Emisor = $this->getContribuyente();
     // obtener datos JSON del DTE
     $DteTmp = new Model_DteTmp($Emisor->rut, $receptor, $dte, $codigo);
     if (!$DteTmp->exists()) {
         \sowerphp\core\Model_Datasource_Session::message('No existe el DTE temporal solicitado', 'error');
         $this->redirect('/dte/dte_tmps');
     }
     // armar xml a partir de datos del dte temporal
     $xml = $DteTmp->getEnvioDte()->generar();
     if (!$xml) {
         \sowerphp\core\Model_Datasource_Session::message('No fue posible crear el PDF para previsualización:<br/>' . implode('<br/>', \sasco\LibreDTE\Log::readAll()), 'error');
         $this->redirect('/dte/dte_tmps');
     }
     // armar datos con archivo XML y flag para indicar si es cedible o no
     $data = ['xml' => base64_encode($xml), 'cedible' => false, 'compress' => false];
     // si hay un logo para la empresa se usa
     $logo = \sowerphp\core\Configure::read('dte.logos.dir') . '/' . $Emisor->rut . '.png';
     if (is_readable($logo)) {
         $data['logo'] = base64_encode(file_get_contents($logo));
     }
     // realizar consulta a la API
     $rest = new \sowerphp\core\Network_Http_Rest();
     $rest->setAuth($this->Auth->User ? $this->Auth->User->hash : $this->token);
     $response = $rest->post($this->request->url . '/api/dte/documentos/generar_pdf', $data);
     if ($response['status']['code'] != 200) {
         \sowerphp\core\Model_Datasource_Session::message($response['body'], 'error');
         return;
     }
     // si dió código 200 se entrega la respuesta del servicio web
     foreach (['Content-Disposition', 'Content-Length', 'Content-Type'] as $header) {
         if (isset($response['header'][$header])) {
             header($header . ': ' . $response['header'][$header]);
         }
     }
     echo $response['body'];
     exit;
 }
 /**
  * Acción que permite la generación del PDF con los DTEs contenidos en un
  * XML de EnvioDTE
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-12
  */
 public function generar_pdf()
 {
     if (isset($_POST['submit'])) {
         // si hubo problemas al subir el archivo error
         if (!isset($_FILES['xml']) or $_FILES['xml']['error']) {
             \sowerphp\core\Model_Datasource_Session::message('Hubo algún problema al recibir el archivo XML con el EnvioDTE', 'error');
             return;
         }
         // armar datos con archivo XML y flag para indicar si es cedible o no
         $data = ['xml' => base64_encode(file_get_contents($_FILES['xml']['tmp_name'])), 'cedible' => isset($_POST['cedible']), 'papelContinuo' => $_POST['papelContinuo'], 'webVerificacion' => $_POST['webVerificacion']];
         // si se pasó un logo se agrega el archivo a los datos que se enviarán
         if (isset($_FILES['logo']) and !$_FILES['logo']['error']) {
             $data['logo'] = base64_encode(file_get_contents($_FILES['logo']['tmp_name']));
         }
         // realizar consulta a la API
         $rest = new \sowerphp\core\Network_Http_Rest();
         $rest->setAuth($this->Auth->User ? $this->Auth->User->hash : \sowerphp\core\Configure::read('api.default.token'));
         $response = $rest->post($this->request->url . '/api/dte/documentos/generar_pdf', $data);
         if ($response['status']['code'] != 200) {
             \sowerphp\core\Model_Datasource_Session::message($response['body'], 'error');
             return;
         }
         // si dió código 200 se entrega la respuesta del servicio web
         foreach (['Content-Disposition', 'Content-Length', 'Content-Type'] as $header) {
             if (isset($response['header'][$header])) {
                 header($header . ': ' . $response['header'][$header]);
             }
         }
         echo $response['body'];
         exit;
     }
 }
 /**
  * Acción que envía por email el PDF y el XML del DTE
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-12-12
  */
 public function enviar_email($dte, $folio)
 {
     $Emisor = $this->getContribuyente();
     // obtener DTE emitido
     $DteEmitido = new Model_DteEmitido($Emisor->rut, $dte, $folio, (int) $Emisor->certificacion);
     if (!$DteEmitido->exists()) {
         \sowerphp\core\Model_Datasource_Session::message('No existe el DTE solicitado', 'error');
         $this->redirect('/dte/dte_emitidos/listar');
     }
     // se verifican datos mínimos
     foreach (['emails', 'asunto', 'mensaje'] as $attr) {
         if (empty($_POST[$attr])) {
             \sowerphp\core\Model_Datasource_Session::message('Debe especificar el campo: ' . $attr, 'error');
             $this->redirect(str_replace('enviar_email', 'ver', $this->request->request) . '#email');
         }
     }
     // crear email
     $email = $Emisor->getEmailSmtp();
     $email->to($_POST['emails']);
     $email->subject($_POST['asunto']);
     // adjuntar PDF
     $data = ['xml' => $DteEmitido->xml, 'cedible' => isset($_POST['cedible']), 'compress' => false];
     $logo = \sowerphp\core\Configure::read('dte.logos.dir') . '/' . $Emisor->rut . '.png';
     if (is_readable($logo)) {
         $data['logo'] = base64_encode(file_get_contents($logo));
     }
     $rest = new \sowerphp\core\Network_Http_Rest();
     $rest->setAuth($this->Auth->User->hash);
     $response = $rest->post($this->request->url . '/api/dte/documentos/generar_pdf', $data);
     if ($response['status']['code'] != 200) {
         \sowerphp\core\Model_Datasource_Session::message($response['body'], 'error');
         $this->redirect(str_replace('enviar_email', 'ver', $this->request->request) . '#email');
     }
     $email->attach(['data' => $response['body'], 'name' => 'dte_' . $Emisor->rut . '-' . $Emisor->dv . '_T' . $DteEmitido->dte . 'F' . $DteEmitido->folio . '.pdf', 'type' => 'application/pdf']);
     // adjuntar XML
     $email->attach(['data' => base64_decode($DteEmitido->xml), 'name' => 'dte_' . $Emisor->rut . '-' . $Emisor->dv . '_T' . $DteEmitido->dte . 'F' . $DteEmitido->folio . '.xml', 'type' => 'application/xml']);
     // enviar email
     $status = $email->send($_POST['mensaje']);
     if ($status === true) {
         \sowerphp\core\Model_Datasource_Session::message('Se envió el DTE a: ' . implode(', ', $_POST['emails']), 'ok');
         $this->redirect(str_replace('enviar_email', 'ver', $this->request->request));
     } else {
         \sowerphp\core\Model_Datasource_Session::message('No fue posible enviar el email, por favor intente nuevamente.<br /><em>' . $status['message'] . '</em>', 'error');
         $this->redirect(str_replace('enviar_email', 'ver', $this->request->request) . '#email');
     }
 }
Example #6
0
 /**
  * Comando que procesa el envío del timbre como fotografía
  * @param photo ID de la fotografía que envió el usuario
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]delaf.cl)
  * @version 2015-10-13
  */
 protected function _bot_photo($file_id)
 {
     $this->Bot->sendChatAction();
     $n_sizes = count($this->Bot->getMessage()->photo);
     $file_id = $this->Bot->getMessage()->photo[$n_sizes - 1]->file_id;
     $file = $this->Bot->downloadFile($file_id);
     if (!$file) {
         $this->Bot->send('No fue posible recuperar el archivo que envíaste');
         return;
     }
     $rest = new \sowerphp\core\Network_Http_Rest();
     $rest->setAuth(\sowerphp\core\Configure::read('api.default.token'));
     $response = $rest->post($this->request->url . '/api/dte/documentos/get_ted', base64_encode($file['data']));
     if ($response['status']['code'] != 200) {
         $this->Bot->send($response['body']);
         return;
     }
     $this->_bot_timbre(base64_decode($response['body']));
 }
 /**
  * Acción para mostrar el PDF de un EnvioDTE de un intercambio de DTE
  * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
  * @version 2015-09-27
  */
 public function pdf($codigo, $cedible = false)
 {
     $Emisor = $this->getContribuyente();
     // obtener DTE intercambiado
     $DteIntercambio = new Model_DteIntercambio($Emisor->rut, $codigo, (int) $Emisor->certificacion);
     if (!$DteIntercambio->exists()) {
         \sowerphp\core\Model_Datasource_Session::message('No existe el intercambio solicitado', 'error');
         $this->redirect('/dte/dte_intercambios');
     }
     // armar datos con archivo XML y flag para indicar si es cedible o no
     $data = ['xml' => $DteIntercambio->archivo_xml, 'cedible' => $cedible, 'compress' => $DteIntercambio->documentos == 1 ? false : true];
     // si hay un logo para la empresa se usa
     $logo = \sowerphp\core\Configure::read('dte.logos.dir') . '/' . $DteIntercambio->emisor . '.png';
     if (is_readable($logo)) {
         $data['logo'] = base64_encode(file_get_contents($logo));
     }
     // realizar consulta a la API
     $rest = new \sowerphp\core\Network_Http_Rest();
     $rest->setAuth($this->Auth->User ? $this->Auth->User->hash : $this->token);
     $response = $rest->post($this->request->url . '/api/dte/documentos/generar_pdf', $data);
     if ($response['status']['code'] != 200) {
         \sowerphp\core\Model_Datasource_Session::message($response['body'], 'error');
         return;
     }
     // si dió código 200 se entrega la respuesta del servicio web
     foreach (['Content-Disposition', 'Content-Length', 'Content-Type'] as $header) {
         if (isset($response['header'][$header])) {
             header($header . ': ' . $response['header'][$header]);
         }
     }
     echo $response['body'];
     exit;
 }