/** * Copyright: Asociación XBRL España (info@xbrl.es) * Este código fuente ha sido desarrollado bajo licencia CC BY (Creative Commons Attribution 4.0 International License) * Más información sobre esta licencia en: http://creativecommons.org/licenses/by/4.0/ */ package com.registradores; //Importación de librerías Java import java.io.*; import java.util.*; import java.util.zip.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.FileUtils; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import org.w3c.dom.Node; import org.w3c.dom.Element; import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.naming.NamingException; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class UploadServlet extends HttpServlet { // Listado de variables private static final long serialVersionUID = 1L; private boolean isMultipart; private String filePath; private File ficheroZIP; private String fileOutput, filePublic, fileInput, urlProject; private String cnae, cnaeRSE, sectorAgregado; private String bd_usuario, bd_contrasena, bd_url, bd_driver; private int maxFileSize = 10000 * 1024; // El fichero ZIP tendrá un tamaño // máximo de 10Mb. private int maxMemSize = 4 * 1024; private File ficheroXBRL; final int BUFFER = 2048; List fileList; private String[] cargaDatos = new String[50]; private String e7, e8, e9, e10; private Double t1, r5, r10, r12, r21, r20, r24, r22, r6; private Double e13, e14, e15, e16, e17, e18, e19, e20, e24, e25, e26, e27, e28, e29, e30, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e48, e49, e50, e51, e52, e53, e54; String t1q1, t1q2, t1q3, r5q1, r5q2, r5q3, r10q1, r10q2, r10q3, r12q1, r12q2, r12q3, r21q1, r21q2, r21q3, r20q1, r20q2, r20q3, r24q1, r24q2, r24q3, r22q1, r22q2, r22q3, r6q1, r6q2, r6q3; public void init() { // Obtenemos la dirección de la carpeta temporal donde se descomprimirá // el fichero ZIP filePath = getServletContext().getInitParameter("file-upload"); // Obtenemos la dirección del proyecto urlProject = getServletContext().getInitParameter("url-project"); // Obtenemos la dirección de la carpeta donde se guardará el fichero // Excel fileOutput = getServletContext().getInitParameter("file-upload"); // Obtenemos la dirección de la carpeta donde se guardará el fichero // Excel para descarga filePublic = getServletContext().getInitParameter("file-public"); // Obtenemos la dirección de la carpeta donde se leerá la plantilla del // fichero Excel fileInput = getServletContext().getInitParameter("excel-template"); // Obtenemos el usuario de la base de datos bd_usuario = getServletContext().getInitParameter("bd-usuario"); // Obtenemos la contraseña de la base de datos bd_contrasena = getServletContext().getInitParameter("bd-contrasena"); // Obtenemos la URL de la base de datos bd_url = getServletContext().getInitParameter("bd-url"); // Obtenemos el driver de la base de datos bd_driver = getServletContext().getInitParameter("bd-driver"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Servicio Web para plantilla de riesgo crediticio"); out.println(""); out.println(""); out.println("

1. Subir ZIP a directorio temporal

"); /* * --------------------------------------------------------------------- * ------------------------------------ 1. Subir ZIP a directorio * temporal * --------------------------------------------------------------------- * ------------------------------------ Copia el fichero ZIP que hemos * subido a la carpeta temporal definida en la ruta "filePath". Antes de * realizar la copia y para evitar duplicados, se borran todos los * archivos de la carpeta temporal. Se admiten ficeros ZIP hasta de un * tamaño máximo de "maxFileSize". Sólo se aceptan ficheros ZIP con * extensión ".zip" o ".ZIP". * */ subirZIPdirectorioTemporal(request, response); out.println("

2. Descomprimir fichero ZIP

"); /* * --------------------------------------------------------------------- * ----------------------------------- 2. Descomprimir fichero ZIP * --------------------------------------------------------------------- * ----------------------------------- Descomprime el fichero ZIP que se * encuentra en la ruta "filePath", extrayendo solamente el fichero * XBRL. Solo puede haber un fichero XBRL dentro del fichero ZIP. El * archivo XBRL solo puede tener extensión ".xbrl" o ".XBRL". * * @return Fichero XBRL. */ File ficheroXBRL = descomprimirZIP(response); out.println("

3. Leer XBRL

"); /* * --------------------------------------------------------------------- * --------------------------------------- 3. Leer XBRL * --------------------------------------------------------------------- * --------------------------------------- Leemos las partidas del * informe XBRL necesarias para rellenar la hoja "Carga de datos" de la * plantilla Excel. * * @return Array con los valores de las partidas */ try { cargaDatos = leerXBRL(ficheroXBRL, response); } catch (ParserConfigurationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (SAXException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } out.println("

4. Calcular ratios

"); /* * --------------------------------------------------------------------- * 4. Calcular ratios * --------------------------------------------------------------------- * Calculamos los ratios: * * T1. Tasa de variación de la cifra neta de negocios R05. Resultado * económico neto / Cifra neta de negocios R10. Resultado económico neto * / Total activo R12. Resultado después de impuestos / Fondos propios * R21. Activos financieros a corto plazo y dispon. / Total activo R20. * Capital circulante / Cifra neta de negocios R24. Deudas con entidades * de crédito / Total patrimonio neto y pasivo R22. Fondos propios / * Total patrimonio neto y pasivo R06. Gastos financieros / Resultado * económico bruto * */ calcularRatios(response); out.println("

5. Leer RSE

"); /* * --------------------------------------------------------------------- * -------------------- 5. Leer RSE * --------------------------------------------------------------------- * -------------------- Leemos la información de los cuartiles, así como * otros datos, para la CNAE de la entidad. * */ try { leerRSE(response); } catch (NamingException e) { e.printStackTrace(); } out.println("

6. Guardar datos XBRL en Excel

"); /* * --------------------------------------------------------------------- * ------------------------------------------------------ 6. Guardar * datos XBRL en Excel * --------------------------------------------------------------------- * ------------------------------------------------------ Guardamos los * datos de identificación de la entidad así como los ratios y la * información RSE en la hoja "Informe" del Excel. * */ guardarDatosExcel(response); out.println("

7. FIN

"); out.println(""); out.println(""); } /** * Descomprimir ZIP * * @return */ public File descomprimirZIP(HttpServletResponse response) { byte[] buffer = new byte[1024]; try { java.io.PrintWriter out = response.getWriter(); File ficheroXBRL = new File(""); // Si la carpeta de destino no existe, la creamos File folder = new File(filePath); if (!folder.exists()) { folder.mkdir(); } // Obtenemos el contenido del fichero ZIP ZipInputStream zis = new ZipInputStream(new FileInputStream(ficheroZIP)); // Obtenemos el listado de ficheros dentro del ZIP ZipEntry ze = zis.getNextEntry(); int numXBRL = 0; while (ze != null) { String fileName = ze.getName(); if ((fileName.endsWith(".xbrl")) || (fileName.endsWith(".XBRL"))) { File newFile = new File(filePath + File.separator + fileName); // create all non exists folders // else you will hit FileNotFoundException for compressed // folder new File(newFile.getParent()).mkdirs(); FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); numXBRL = numXBRL + 1; if (numXBRL == 1) { ficheroXBRL = newFile.getAbsoluteFile(); } else { out.println( "

ERROR: Más de un informe XBRL dentro del fichero ZIP

"); out.println(""); out.println(""); zis.closeEntry(); zis.close(); return null; } } ze = zis.getNextEntry(); } zis.closeEntry(); zis.close(); out.println("2.1 Fichero ZIP descomprimido en: " + ficheroXBRL.getAbsolutePath()); return ficheroXBRL; } catch (IOException ex) { ex.printStackTrace(); } return ficheroXBRL; } /** * Leer XBRL */ public String[] leerXBRL(File xbrlFile, HttpServletResponse response) throws IOException, ParserConfigurationException, SAXException { File fXmlFile = xbrlFile; DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); // Se crea un listado con todos los contextos del informe XBRL NodeList contextos = doc.getElementsByTagName("context"); if (contextos.getLength() == 0) { contextos = doc.getElementsByTagName("xbrli:context"); } // Contexto INSTANT String contextoInstantActual = ""; int anyoInstantActual = 0; int anyoInstantAnterior = 10000; // Contexto DURATION String contextoDurationActual = ""; String contextoDurationAnterior = ""; int anyoDurationActual = 0; int anyoDurationAnterior = 10000; // Obtenemos los contextos INSTANT ACTUAL e INSTANT ANTERIOR for (int temp = 0; temp < contextos.getLength(); temp++) { Node nNode = contextos.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element contexto = (Element) nNode; NodeList hijosContexto = contexto.getChildNodes(); for (int hc = 0; hc < hijosContexto.getLength(); hc++) { Node nNodeContext = hijosContexto.item(hc); if (nNodeContext.getNodeType() == Node.ELEMENT_NODE) { Element hijoContexto = (Element) nNodeContext; NodeList fechas = hijoContexto.getElementsByTagName("xbrli:instant"); if (fechas.getLength() == 0) { fechas = hijoContexto.getElementsByTagName("instant"); } if (fechas.getLength() == 1) { Node nodoFecha = fechas.item(0); if (nodoFecha.getNodeType() == Node.ELEMENT_NODE) { Element fecha = (Element) nodoFecha; if (fecha.getTextContent().length() >= 4) { int anyo = Integer.parseInt(fecha.getTextContent().substring(0, 4)); if (anyo > anyoInstantActual) { anyoInstantActual = anyo; contextoInstantActual = contexto.getAttribute("id"); } if (anyo < anyoInstantAnterior) { anyoInstantAnterior = anyo; } } } } } } } } // Obtenemos los contextos DURATION ACTUAL y DURATION ANTERIOR for (int temp = 0; temp < contextos.getLength(); temp++) { Node nNode = contextos.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element contexto = (Element) nNode; NodeList hijosContexto = contexto.getChildNodes(); for (int hc = 0; hc < hijosContexto.getLength(); hc++) { Node nNodeContext = hijosContexto.item(hc); if (nNodeContext.getNodeType() == Node.ELEMENT_NODE) { Element hijoContexto = (Element) nNodeContext; NodeList fechas = hijoContexto.getElementsByTagName("xbrli:startDate"); if (fechas.getLength() == 0) { fechas = hijoContexto.getElementsByTagName("startDate"); } if (fechas.getLength() == 1) { Node nodoFecha = fechas.item(0); if (nodoFecha.getNodeType() == Node.ELEMENT_NODE) { Element fecha = (Element) nodoFecha; if (fecha.getTextContent().length() >= 4) { int anyo = Integer.parseInt(fecha.getTextContent().substring(0, 4)); if (anyo > anyoDurationActual) { anyoDurationActual = anyo; contextoDurationActual = contexto.getAttribute("id"); } if (anyo < anyoDurationAnterior) { anyoDurationAnterior = anyo; contextoDurationAnterior = contexto.getAttribute("id"); } } } } } } } } // Obtenemos el valor de cada partida cargaDatos[0] = buscarItem("dgi-est-gen:LegalNameValue", doc, contextoDurationActual); if (cargaDatos[0] == "") { cargaDatos[0] = "0"; } e7 = cargaDatos[0]; cargaDatos[1] = buscarItem("dgi-est-gen:IdentifierValue", doc, contextoDurationActual); if (cargaDatos[1] == "") { cargaDatos[1] = "0"; } e8 = cargaDatos[1]; cargaDatos[2] = buscarItemCNAE("dgi-eco-bas:ActivityCodeCNAE2009", doc).trim(); if (cargaDatos[2] == "") { cargaDatos[2] = "0"; } e9 = cargaDatos[2].trim(); cargaDatos[3] = String.valueOf(anyoInstantActual); if (cargaDatos[3] == "") { cargaDatos[3] = "0"; } e10 = cargaDatos[3]; cargaDatos[4] = buscarItem("pgc-07-c-bs:ActivoNoCorrienteDeudasComercialesNoCorriente", doc, contextoInstantActual); if (cargaDatos[4] == "") { cargaDatos[4] = "0"; } e13 = Double.parseDouble(cargaDatos[4]); cargaDatos[5] = buscarItem("pgc-07-c-bs:ActivoCorrienteExistencias", doc, "I.ACTUAL"); if (cargaDatos[5] == "") { cargaDatos[5] = "0"; } e14 = Double.parseDouble(cargaDatos[5]); cargaDatos[6] = buscarItem( "pgc-07-c-bs:ActivoCorrienteDeudoresComercialesOtrasCuentasCobrarClientesVentasPrestacionesServicios", doc, contextoInstantActual); if (cargaDatos[6] == "") { cargaDatos[6] = "0"; } e15 = Double.parseDouble(cargaDatos[6]); cargaDatos[7] = buscarItem( "pgc-07-c-bs:ActivoCorrienteDeudoresComercialesOtrasCuentasCobrarAccionistasDesembolsosExigidos", doc, contextoInstantActual); if (cargaDatos[7] == "") { cargaDatos[7] = "0"; } e16 = Double.parseDouble(cargaDatos[7]); cargaDatos[8] = buscarItem("pgc-07-c-bs:ActivoCorrienteInversionesEmpresasGrupoEmpresasAsociadasCortoPlazo", doc, contextoInstantActual); if (cargaDatos[8] == "") { cargaDatos[8] = "0"; } e17 = Double.parseDouble(cargaDatos[8]); cargaDatos[9] = buscarItem("pgc-07-c-bs:ActivoCorrienteInversionesFinancierasCortoPlazo", doc, contextoInstantActual); if (cargaDatos[9] == "") { cargaDatos[9] = "0"; } e18 = Double.parseDouble(cargaDatos[9]); cargaDatos[10] = buscarItem("pgc-07-c-bs:ActivoCorrienteEfectivoOtrosActivosLiquidosEquivalentes", doc, contextoInstantActual); if (cargaDatos[10] == "") { cargaDatos[10] = "0"; } e19 = Double.parseDouble(cargaDatos[10]); cargaDatos[11] = buscarItem("pgc-07-c-bs:TotalActivo", doc, contextoInstantActual); if (cargaDatos[11] == "") { cargaDatos[11] = "0"; } e20 = Double.parseDouble(cargaDatos[11]); cargaDatos[12] = buscarItem("pgc-07-c-bs:PatrimonioNetoFondosPropios", doc, contextoInstantActual); if (cargaDatos[12] == "") { cargaDatos[12] = "0"; } e24 = Double.parseDouble(cargaDatos[12]); cargaDatos[13] = buscarItem("pgc-07-c-bs:PasivoNoCorrienteDeudasLargoPlazoDeudasEntidadesCredito", doc, contextoInstantActual); if (cargaDatos[13] == "") { cargaDatos[13] = "0"; } e25 = Double.parseDouble(cargaDatos[13]); cargaDatos[14] = buscarItem("pgc-07-c-bs:PasivoNoCorrienteDeudasLargoPlazoAcreedoresArrendamientoFinanciero", doc, contextoInstantActual); if (cargaDatos[14] == "") { cargaDatos[14] = "0"; } e26 = Double.parseDouble(cargaDatos[14]); cargaDatos[15] = buscarItem("pgc-07-c-bs:PasivoNoCorrienteAcreedoresComercialesNoCorrientes", doc, contextoInstantActual); if (cargaDatos[15] == "") { cargaDatos[15] = "0"; } e27 = Double.parseDouble(cargaDatos[15]); cargaDatos[16] = buscarItem("pgc-07-c-bs:PasivoCorrienteDeudasCortoPlazoDeudasEntidadesCredito", doc, contextoInstantActual); if (cargaDatos[16] == "") { cargaDatos[16] = "0"; } e28 = Double.parseDouble(cargaDatos[16]); cargaDatos[17] = buscarItem("pgc-07-c-bs:PasivoCorrienteDeudasCortoPlazoAcreedoresArrendamientoFinanciero", doc, contextoInstantActual); if (cargaDatos[17] == "") { cargaDatos[17] = "0"; } e29 = Double.parseDouble(cargaDatos[17]); cargaDatos[18] = buscarItem("pgc-07-c-bs:PasivoCorrienteAcreedoresComercialesOtrasCuentasPagarProveedores", doc, contextoInstantActual); if (cargaDatos[18] == "") { cargaDatos[18] = "0"; } e30 = Double.parseDouble(cargaDatos[18]); cargaDatos[19] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasImporteNetoCifraNegocios", doc, contextoDurationActual); if (cargaDatos[19] == "") { cargaDatos[19] = "0"; } e34 = Double.parseDouble(cargaDatos[19]); cargaDatos[20] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasImporteNetoCifraNegocios", doc, contextoDurationAnterior); if (cargaDatos[20] == "") { cargaDatos[20] = "0"; } e35 = Double.parseDouble(cargaDatos[20]); cargaDatos[21] = buscarItem( "pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasVariacionExistenciasProductosTerminadosProductosCursoFabricacion", doc, contextoDurationActual); if (cargaDatos[21] == "") { cargaDatos[21] = "0"; } e36 = Double.parseDouble(cargaDatos[21]); cargaDatos[22] = buscarItem( "pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasTrabajosRealizadosEmpresaActivo", doc, contextoDurationActual); if (cargaDatos[22] == "") { cargaDatos[22] = "0"; } e37 = Double.parseDouble(cargaDatos[22]); cargaDatos[23] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasAprovisionamientos", doc, contextoDurationActual); if (cargaDatos[23] == "") { cargaDatos[23] = "0"; } e38 = Double.parseDouble(cargaDatos[23]); cargaDatos[24] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasOtrosIngresosExplotacion", doc, contextoDurationActual); if (cargaDatos[24] == "") { cargaDatos[24] = "0"; } e39 = Double.parseDouble(cargaDatos[24]); cargaDatos[25] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasGestionPersonal", doc, contextoDurationActual); if (cargaDatos[25] == "") { cargaDatos[25] = "0"; } e40 = Double.parseDouble(cargaDatos[25]); cargaDatos[26] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasOtrosGastosExplotacion", doc, contextoDurationActual); if (cargaDatos[26] == "") { cargaDatos[26] = "0"; } e41 = Double.parseDouble(cargaDatos[26]); cargaDatos[27] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasAmortizacionInmovilizado", doc, contextoDurationActual); if (cargaDatos[27] == "") { cargaDatos[27] = "0"; } e42 = Double.parseDouble(cargaDatos[27]); cargaDatos[28] = buscarItem("pgc-07-c-bs:PerdidasGananciasOperacionesContinuadasGastosFinancieros", doc, contextoDurationActual); if (cargaDatos[28] == "") { cargaDatos[28] = "0"; } e43 = Double.parseDouble(cargaDatos[28]); cargaDatos[29] = buscarItem("pgc-07-c-bs:PerdidasGananciasResultadoEjercicio", doc, contextoDurationActual); if (cargaDatos[29] == "") { cargaDatos[29] = "0"; } e44 = Double.parseDouble(cargaDatos[29]); cargaDatos[30] = buscarItem( "pgc-07-c-bs:ActivoCorrienteDeudoresComercialesOtrasCuentasCobrarClientesVentasPrestacionesServicios", doc, contextoDurationActual); if (cargaDatos[30] == "") { cargaDatos[30] = "0"; } e48 = Double.parseDouble(cargaDatos[30]); cargaDatos[31] = buscarItem( "pgc-07-n:ActivoCorrienteDeudoresComercialesOtrasCuentasCobrarClientesEmpresasGrupoAsociadas", doc, contextoInstantActual); if (cargaDatos[31] == "") { cargaDatos[31] = "0"; } e49 = Double.parseDouble(cargaDatos[31]); cargaDatos[32] = buscarItem("pgc-07-c-bs:PasivoCorrienteAcreedoresComercialesOtrasCuentasPagarProveedores", doc, contextoInstantActual); if (cargaDatos[32] == "") { cargaDatos[32] = "0"; } e50 = Double.parseDouble(cargaDatos[32]); if ((e30 > 0) && (e50 > 0)) e50 = Double.parseDouble("0"); cargaDatos[33] = buscarItem( "pgc-07-n:PasivoCorrienteAcreedoresComercialesOtrasCuentasPagarProveedoresEmpresasGrupoAsociadas", doc, contextoInstantActual); if (cargaDatos[33] == "") { cargaDatos[33] = "0"; } e51 = Double.parseDouble(cargaDatos[33]); cargaDatos[34] = buscarItem("pgc-07-n:PasivoCorrienteAcreedoresComercialesOtrasCuentasPagarAnticiposClientes", doc, contextoInstantActual); if (cargaDatos[34] == "") { cargaDatos[34] = "0"; } e52 = Double.parseDouble(cargaDatos[34]); cargaDatos[35] = buscarItem( "pgc-07-n:PerdidasGananciasOperacionesContinuadasOtrosGastosExplotacionPerdidasDeterioroVariacionProvisionesOperacionesComerciales", doc, contextoDurationActual); if (cargaDatos[35] == "") { cargaDatos[35] = "0"; } e53 = Double.parseDouble(cargaDatos[35]); cargaDatos[36] = buscarItem( "pgc-07-n:PerdidasGananciasOperacionesContinuadasAprovisionamientosDeterioroMercaderiasMateriasPrimasOtrosAprovisionamientos", doc, contextoDurationActual); if (cargaDatos[36] == "") { cargaDatos[36] = "0"; } e54 = Double.parseDouble(cargaDatos[36]); cnae = cargaDatos[2]; java.io.PrintWriter out = response.getWriter(); out.println("3.1 CNAE: " + cnae); return cargaDatos; } /* * Leer RSE */ public void leerRSE(HttpServletResponse response) throws NamingException, IOException { java.io.PrintWriter out = response.getWriter(); Connection conn = null; Statement stmt = null; try { // Registrar el driver JDBC Class.forName(bd_driver); try { // Abrir la conexión remota conn = DriverManager.getConnection(bd_url, bd_usuario, bd_contrasena); } catch (SQLException se) { // Abrir la conexión local conn = DriverManager.getConnection(bd_url, bd_usuario, ""); } // Ejecutar la consulta stmt = conn.createStatement(); String CNAE3D = cnae.substring(0, 3); String sqlCNAE = "SELECT * FROM cnae where CNAE3D = '" + CNAE3D + "'"; ResultSet rsCNAE = stmt.executeQuery(sqlCNAE); // Obtener los datos de la consulta while (rsCNAE.next()) { cnaeRSE = rsCNAE.getString("CNAE_RSE"); sectorAgregado = rsCNAE.getString("Literal"); } String sql = "SELECT * FROM rse where COUNTRY = 'ES' AND YEAR = " + "'" + e10 + "'" + " AND SIZE = 0 AND SECTOR = " + "'" + cnaeRSE + "'"; ResultSet rs = stmt.executeQuery(sql); // Obtener los datos de la consulta while (rs.next()) { t1q1 = rs.getString("R55_Q1"); t1q2 = rs.getString("R55_Q2"); t1q3 = rs.getString("R55_Q3"); r5q1 = rs.getString("R34_Q1"); r5q2 = rs.getString("R34_Q2"); r5q3 = rs.getString("R34_Q3"); r10q1 = rs.getString("R39_Q1"); r10q2 = rs.getString("R39_Q2"); r10q3 = rs.getString("R39_Q3"); r12q1 = rs.getString("R38_Q1"); r12q2 = rs.getString("R38_Q2"); r12q3 = rs.getString("R38_Q3"); r21q1 = rs.getString("R14_Q1"); r21q2 = rs.getString("R14_Q2"); r21q3 = rs.getString("R14_Q3"); r20q1 = rs.getString("R54_Q1"); r20q2 = rs.getString("R54_Q2"); r20q3 = rs.getString("R54_Q3"); r24q1 = rs.getString("L2_Q1"); r24q2 = rs.getString("L2_Q2"); r24q3 = rs.getString("L2_Q3"); r22q1 = rs.getString("E_Q1"); r22q2 = rs.getString("E_Q2"); r22q3 = rs.getString("E_Q3"); r6q1 = rs.getString("R25_Q1"); r6q2 = rs.getString("R25_Q2"); r6q3 = rs.getString("R25_Q3"); out.println("La consulta devuelve datos"); } out.println("CONSULTA SQL: " + sql + "
"); out.println("5.1 t1q1: " + t1q1 + ", t1q2:" + t1q2 + ", t1q3: " + t1q3); rs.close(); } catch (SQLException se) { // Handle errors for JDBC se.printStackTrace(); out.println("EXCEPCIÓN SQL: " + se.toString()); } catch (Exception e) { // Handle errors for Class.forName e.printStackTrace(); out.println("EXCEPCIÓN"); } finally { // finally block used to close resources try { if (stmt != null) conn.close(); } catch (SQLException se) { out.println("EXCEPCIÓN SQL 2"); } // do nothing try { if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); out.println("EXCEPCIÓN SQL 3"); } // end finally try } // end try } public String buscarItem(String qname, Document doc, String contextName) { String strValor = ""; NodeList nList = doc.getElementsByTagName(qname); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; String nameContext = ""; if (eElement.getAttributeNode("contextRef").getValue() != null) { nameContext = eElement.getAttributeNode("contextRef").getValue(); if (nameContext.equalsIgnoreCase(contextName)) { strValor = eElement.getTextContent(); return strValor; } } } } return strValor; } /* * */ public void subirZIPdirectorioTemporal(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); // Comprobamos si el fichero es multipart isMultipart = ServletFileUpload.isMultipartContent(request); // Si el fichero no es multipart, no se puede subir if (!isMultipart) { out.println(""); out.println(""); out.println("Servicio Web para plantilla de riesgo crediticio"); out.println(""); out.println(""); out.println( "

[ERROR]: No se ha podido subir el fichero ZIP

"); out.println(""); out.println(""); return; } File file = new File(""); // Borramos todos los ficheros de la carpeta temporal // FileUtils.cleanDirectory(new File(filePath)); // Nueva factoría DiskFileItemFactory factory = new DiskFileItemFactory(); // Máximo tamaño reservado en memoria factory.setSizeThreshold(maxMemSize); // Ruta donde guardar los datos en el caso de que se supere el tamaño // reservado en memoria factory.setRepository(new File(filePath)); // Nuevo objeto para subir el fichero ServletFileUpload upload = new ServletFileUpload(factory); // Tamaño máximo del archivo upload.setSizeMax(maxFileSize); try { // Obtenemos los ficheros recibidos en la invocación List fileItems = upload.parseRequest(request); // Procesamos los ficheros Iterator i = fileItems.iterator(); out.println(""); out.println(""); out.println("Servicio Web para plantilla de riesgo crediticio"); out.println(""); out.println(""); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); if (!fi.isFormField()) { String fileName = fi.getName(); // Si no es un fichero ZIP if (!fileName.endsWith(".zip") && !fileName.endsWith(".ZIP")) { out.println( "

[ERROR]: Sólo se aceptan ficheros con extensión .zip o .ZIP

"); out.println(""); out.println(""); return; } else { if (fileName.lastIndexOf("\\") >= 0) { file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\"))); } else { file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\") + 1)); } // Escribimos el fichero en su ruta correspondiente fi.write(file); ficheroZIP = file.getAbsoluteFile(); out.println("1.1 Fichero escrito en: " + ficheroZIP.getAbsolutePath()); } } } } catch (Exception ex) { System.out.println(ex); } } public String buscarItemCNAE(String qname, Document doc) { String strValor = ""; NodeList nList = doc.getElementsByTagName(qname); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; strValor = eElement.getTextContent(); } } return strValor; } public void calcularRatios(HttpServletResponse response) throws IOException { // SI( // O( // 'Carga de datos'!E35=0; // Y('Carga de datos'!E34<0;'Carga de datos'!E35>0); // Y('Carga de datos'!E35<0;'Carga de datos'!E34>0) // ); // "Ratio no evaluable" if ((e35 == 0) || ((e34 < 0) && (e35 > 0)) || ((e35 < 0) && (e34 > 0))) { t1 = null; } else { // (ABS('Carga de datos'!E34)-ABS('Carga de datos'!E35))/'Carga de // datos'!E35*100 t1 = roundUp((Math.abs(e34) - Math.abs(e35)) / e35 * 100); } // SI('Carga de datos'!E34<=0;"Ratio no evaluable"; if (e34 <= 0) { r5 = null; } else { // ('Carga de datos'!E34+'Carga de datos'!E36+'Carga de // datos'!E37+'Carga de datos'!E38+'Carga de datos'!E39+'Carga de // datos'!E40+'Carga de datos'!E41+'Carga de datos'!E42)*100/'Carga // de datos'!E34) r5 = roundUp((e34 + e36 + e37 + e38 + e39 + e40 + e41 + e42) * 100 / e34); } // SI(('Carga de datos'!E20-'Carga de datos'!E16)<=0;"Ratio no // evaluable"; if (e20 - e16 <= 0) { r10 = null; } else { // ('Carga de datos'!E34+'Carga de datos'!E36+'Carga de // datos'!E37+'Carga de datos'!E38+'Carga de datos'!E39+'Carga de // datos'!E40+'Carga de datos'!E41+'Carga de datos'!E42)*100/('Carga // de datos'!E20-'Carga de datos'!E16)) r10 = roundUp((e34 + e36 + e37 + e38 + e39 + e40 + e41 + e42) * 100 / (e20 - e16)); } // SI(('Carga de datos'!E24-'Carga de datos'!E16)<=0;"Ratio no // evaluable"; if (e24 - e16 <= 0) { r12 = null; } else { // 'Carga de datos'!E44*100/('Carga de datos'!E24-'Carga de // datos'!E16) r12 = roundUp(e44 * 100 / (e24 - e16)); } // SI(('Carga de datos'!E20-'Carga de datos'!E16)<=0;"Ratio no // evaluable"; if (e20 - e16 <= 0) { r21 = null; } else { // ('Carga de datos'!E19+'Carga de datos'!E18+'Carga de // datos'!E17)*100/('Carga de datos'!E20-'Carga de datos'!E16) r21 = roundUp((e19 + e18 + e17) * 100 / (e20 - e16)); } // SI('Carga de datos'!E34<=0;"Ratio no evaluable"; if (e34 <= 0) { r20 = null; } else { // ('Carga de datos'!E14+'Carga de datos'!E13+'Carga de // datos'!E15-('Carga de datos'!E27+'Carga de // datos'!E30))*100/'Carga de datos'!E34) r20 = roundUp((e14 + e13 + e15 + e48 + e49 - (e27 + e30 + e50 + e51) + e52) * 100 / (e34)); } // SI(('Carga de datos'!E20-'Carga de datos'!E16)<=0;"Ratio no // evaluable"; if (e20 - e16 <= 0) { r24 = null; } else { // ('Carga de datos'!E25+'Carga de datos'!E26+'Carga de // datos'!E28+'Carga de datos'!E29)*100/('Carga de datos'!E20-'Carga // de datos'!E16)) r24 = roundUp((e25 + e26 + e28 + e29) * 100 / (e20 - e16)); } // SI(('Carga de datos'!E20-'Carga de datos'!E16)<=0;"Ratio no // evaluable"; if (e20 - e16 <= 0) { r22 = null; } else { // ('Carga de datos'!E24-'Carga de datos'!E16)*100/('Carga de // datos'!E20-'Carga de datos'!E16)) r22 = roundUp((e24 - e16) * 100 / (e20 - e16)); } // =SI(('Carga de datos'!E34+'Carga de datos'!E36+'Carga de // datos'!E37+'Carga de datos'!E38+'Carga de datos'!E39+'Carga de // datos'!E40+'Carga de datos'!E41-'Carga de datos'!E53-'Carga de // datos'!E54)<=0;"Ratio no evaluable"; if (e34 + e36 + e37 + e38 + e39 + e40 + e41 - e53 - e54 <= 0) { r6 = null; } else { // (-'Carga de datos'!E43)*100/('Carga de datos'!E34+'Carga de // datos'!E36+'Carga de datos'!E37+'Carga de datos'!E38+'Carga de // datos'!E39+'Carga de datos'!E40+'Carga de datos'!E41-'Carga de // datos'!E53-'Carga de datos'!E54)) r6 = roundUp(-e43 * 100 / (e34 + e36 + e37 + e38 + e39 + e40 + e41 - e53 - e54)); } response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("4.1 t1: " + t1 + ", r5: " + r5 + ", r10: " + r10 + ", r12: " + r12 + ", r21: " + r21 + ", r20: " + r20 + ", r24: " + r24 + ", r22: " + r22 + ", r6: " + r6); } public void guardarDatosExcel(HttpServletResponse response) throws IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); FileOutputStream fileOut = new FileOutputStream(fileOutput + e8 + ".xlsx"); FileOutputStream fileOutPublic = new FileOutputStream(filePublic + e8 + ".xlsx"); FileInputStream file = new FileInputStream(fileInput); // Crear el objeto que tendra el libro de Excel XSSFWorkbook workbook = new XSSFWorkbook(file); XSSFSheet sheet = workbook.getSheetAt(0); CellReference cellReference = new CellReference("D4"); Row row = sheet.getRow(cellReference.getRow()); Cell cell = row.getCell(cellReference.getCol()); cell.setCellValue(e7); cellReference = new CellReference("R4"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(e8); cellReference = new CellReference("AB4"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(e9); cellReference = new CellReference("AB6"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(cnaeRSE); cellReference = new CellReference("D6"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(sectorAgregado); cellReference = new CellReference("F9"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue("Año: " + e10); cellReference = new CellReference("H9"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue("Año: " + e10); cellReference = new CellReference("F10"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (t1 != null) cell.setCellValue(t1); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F13"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r5 != null) cell.setCellValue(r5); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F16"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r10 != null) cell.setCellValue(r10); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F19"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r12 != null) cell.setCellValue(r12); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F22"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r21 != null) cell.setCellValue(r21); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F25"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r20 != null) cell.setCellValue(r20); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F28"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r24 != null) cell.setCellValue(r24); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F31"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r22 != null) cell.setCellValue(r22); else cell.setCellValue("Ratio no evaluable"); cellReference = new CellReference("F34"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); if (r6 != null) cell.setCellValue(r6); else cell.setCellValue("Ratio no evaluable"); // Cuartiles cellReference = new CellReference("O11"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(t1q1); cellReference = new CellReference("Y11"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(t1q2); cellReference = new CellReference("AI11"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(t1q3); cellReference = new CellReference("O14"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r5q1); cellReference = new CellReference("Y14"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r5q2); cellReference = new CellReference("AI14"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r5q3); cellReference = new CellReference("O17"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r10q1); cellReference = new CellReference("Y17"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r10q2); cellReference = new CellReference("AI17"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r10q3); cellReference = new CellReference("O20"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r12q1); cellReference = new CellReference("Y20"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r12q2); cellReference = new CellReference("AI20"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r12q3); cellReference = new CellReference("O23"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r21q1); cellReference = new CellReference("Y23"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r21q2); cellReference = new CellReference("AI23"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r21q3); cellReference = new CellReference("O26"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r20q1); cellReference = new CellReference("Y26"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r20q2); cellReference = new CellReference("AI26"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r20q3); cellReference = new CellReference("O29"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r24q3); cellReference = new CellReference("Y29"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r24q2); cellReference = new CellReference("AI29"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r24q1); cellReference = new CellReference("O32"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r22q1); cellReference = new CellReference("Y32"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r22q2); cellReference = new CellReference("AI32"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r22q3); cellReference = new CellReference("O35"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r6q3); cellReference = new CellReference("Y35"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r6q2); cellReference = new CellReference("AI35"); row = sheet.getRow(cellReference.getRow()); cell = row.getCell(cellReference.getCol()); cell.setCellValue(r6q1); HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook); workbook.write(fileOut); fileOut.flush(); fileOut.close(); workbook.write(fileOutPublic); fileOutPublic.flush(); fileOutPublic.close(); // Cerramos el libro excel workbook.close(); // Enviamos el excel al usuario String excelURL = urlProject + e8 + ".xlsx"; out.println(excelURL); response.sendRedirect(excelURL); } public Double roundUp(double value) { return Math.round(value * 100.0) / 100.0; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { throw new ServletException("GET method used with " + getClass().getName() + ": POST method required."); } }