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